'use client' import DropDownList from '@/app/components/DropDownList'; import { useTranslations } from 'next-intl'; import { ChangeEvent, useState, useActionState, useEffect } from 'react'; import BankCardInput from '@/app/ui/inputs/bank-card-inpit'; import { addPayoutMethod, PayoutMethodFormState } from '@/app/actions/referralsActions'; import { bankCardFormSchema } from '@/app/actions/definitions'; export default function SettingReferralProgram() { const [state, formAction, isPending] = useActionState( addPayoutMethod, undefined, ); const [formState, setFormState] = useState(undefined); const [paymentsType, setPaymentsType] = useState('bank-card'); const t = useTranslations('Global'); useEffect(() => { setFormState(state); }, [state]); async function validateField( fieldName: string, value: string, ) { switch (fieldName) { case 'bankCard': const schema = bankCardFormSchema?.shape[fieldName]; if (!schema) { return { success: true, data: value }; } return schema.safeParse(value); default: throw new Error(`Unknown field: ${fieldName}`); } } async function onChangeHandler(e: ChangeEvent): Promise { const fieldName = e.target.name; const validatedField = await validateField(fieldName, e.target.value); if (validatedField.success) { setFormState(prevState => { if (!prevState?.error || !prevState?.error[fieldName]) { return { previousState: prevState?.previousState, error: { server: null } }; } const { [fieldName]: _, ...newError } = prevState.error; return { previousState: prevState?.previousState, error: { ...newError, server: null } }; }); } } return (
{t('referral-program-settings')}
{ formAction(e); }} className="settings-form" >

{t('payout-settings')}

{ switch (paymentsType) { case 'on-account-balance': return t('on-account-balance') case 'bank-card': return t('bank-card') case 'bank-transfer': return t('bank-transfer') } })() } callBack={setPaymentsType} >
  • {t('on-account-balance')}
  • {t('bank-card')}
  • {t('bank-transfer')}
  • {paymentsType === 'bank-card' && (

    {t('bank-card-number')}

    {formState?.error?.bankCard && (

    { formState?.error?.bankCard.split('&').map((e, index) => { return ( {t(e)}
    ) }) }

    )}
    )} {formState?.error?.server && (

    {t(formState?.error?.server)}

    )}

    {t('notifications')}

    ) }