import { Button, Card, Col, Divider, Form, Input, Row, Select } from '@/shared/antd-imports'; import React, { useEffect, useState, useMemo, useCallback } from 'react'; import { RootState } from '../../../app/store'; import { useAppSelector } from '@/hooks/useAppSelector'; import { IBillingConfigurationCountry } from '@/types/admin-center/country.types'; import { adminCenterApiService } from '@/api/admin-center/admin-center.api.service'; import { IBillingConfiguration } from '@/types/admin-center/admin-center.types'; import logger from '@/utils/errorLogger'; const Configuration: React.FC = React.memo(() => { const themeMode = useAppSelector((state: RootState) => state.themeReducer.mode); const [countries, setCountries] = useState([]); const [configuration, setConfiguration] = useState(); const [loading, setLoading] = useState(false); const [form] = Form.useForm(); const fetchCountries = useCallback(async () => { try { const res = await adminCenterApiService.getCountries(); if (res.done) { setCountries(res.body); } } catch (error) { logger.error('Error fetching countries:', error); } }, []); const fetchConfiguration = useCallback(async () => { const res = await adminCenterApiService.getBillingConfiguration(); if (res.done) { setConfiguration(res.body); form.setFieldsValue(res.body); } }, [form]); useEffect(() => { fetchCountries(); fetchConfiguration(); }, [fetchCountries, fetchConfiguration]); const handleSave = useCallback( async (values: any) => { try { setLoading(true); const res = await adminCenterApiService.updateBillingConfiguration(values); if (res.done) { fetchConfiguration(); } } catch (error) { logger.error('Error updating configuration:', error); } finally { setLoading(false); } }, [fetchConfiguration] ); const countryOptions = useMemo( () => countries.map(country => ({ label: country.name, value: country.id, })), [countries] ); const titleStyle = useMemo( () => ({ color: `${themeMode === 'dark' ? '#ffffffd9' : '#000000d9'}`, fontWeight: 500, fontSize: '16px', display: 'flex', gap: '4px', }), [themeMode] ); const dividerTitleStyle = useMemo( () => ({ color: `${themeMode === 'dark' ? '#ffffffd9' : '#000000d9'}`, fontWeight: 600, fontSize: '16px', display: 'flex', gap: '4px', }), [themeMode] ); const cardStyle = useMemo(() => ({ marginTop: '16px' }), []); const colStyle = useMemo(() => ({ padding: '0 12px', height: '86px' }), []); const dividerStyle = useMemo(() => ({ margin: '16px 0' }), []); const buttonColStyle = useMemo(() => ({ paddingLeft: '12px' }), []); const handlePhoneInput = useCallback((e: React.FormEvent) => { const input = e.target as HTMLInputElement; input.value = input.value.replace(/[^0-9]/g, ''); }, []); return (
Billing Details} style={cardStyle}>
Company Details
); }); Configuration.displayName = 'Configuration'; export default Configuration;