Files
HRM-System/resources/js/hooks/usePaymentMethods.ts
2026-04-13 08:16:56 +08:00

65 lines
1.7 KiB
TypeScript
Executable File

import { useState, useEffect } from 'react';
import axios from 'axios';
interface PaymentMethodConfig {
enabled: boolean;
[key: string]: any;
}
interface PaymentMethods {
stripe?: PaymentMethodConfig;
paypal?: PaymentMethodConfig;
razorpay?: PaymentMethodConfig;
mercadopago?: PaymentMethodConfig;
bank?: PaymentMethodConfig;
cashfree?: PaymentMethodConfig;
}
export function usePaymentMethods() {
const [paymentMethods, setPaymentMethods] = useState<PaymentMethods>({});
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const fetchPaymentMethods = async () => {
try {
setLoading(true);
setError(null);
const response = await axios.get(route('payment.enabled-methods'));
setPaymentMethods(response.data);
} catch (err: any) {
setError(err.response?.data?.message || 'Failed to fetch payment methods');
console.error('Error fetching payment methods:', err);
} finally {
setLoading(false);
}
};
useEffect(() => {
fetchPaymentMethods();
}, []);
const getEnabledMethods = () => {
return Object.entries(paymentMethods)
.filter(([_, config]) => config.enabled)
.map(([method, config]) => ({ method, config }));
};
const isMethodEnabled = (method: string) => {
return paymentMethods[method as keyof PaymentMethods]?.enabled || false;
};
const getMethodConfig = (method: string) => {
return paymentMethods[method as keyof PaymentMethods] || null;
};
return {
paymentMethods,
loading,
error,
refetch: fetchPaymentMethods,
getEnabledMethods,
isMethodEnabled,
getMethodConfig
};
}