Files
danak-console/src/pages/service/BuyService.tsx
T
hamid zarghami 551dfa0a56 toast
2025-05-03 11:58:06 +03:30

118 lines
5.3 KiB
TypeScript

import { FC } from 'react'
import { useNavigate, useParams } from 'react-router-dom'
import { useBuyService, useGetDetailService } from './hooks/useServiceData'
import HeaderBuy from './components/HeaderBuy'
import PageLoading from '../../components/PageLoading'
import Button from '../../components/Button'
import { TickCircle } from 'iconsax-react'
import Textarea from '../../components/Textarea'
import Input from '../../components/Input'
import { useTranslation } from 'react-i18next'
import { useFormik } from 'formik'
import * as Yup from 'yup'
import { BuyServiceType } from './types/ServiecTypes'
import { toast } from '../../components/Toast'
import { ErrorType } from '../../helpers/types'
import { Pages } from '../../config/Pages'
const BuyService: FC = () => {
const { t } = useTranslation('global')
const navigate = useNavigate()
const { serviceId, planId } = useParams()
const getDetailService = useGetDetailService(serviceId ? serviceId : '')
const buyService = useBuyService()
const formik = useFormik<BuyServiceType>({
initialValues: {
businessName: '',
businessPhone: '',
description: '',
planId: planId ? planId : '',
serviceId: serviceId ? serviceId : ''
},
validationSchema: Yup.object({
businessName: Yup.string().required(t('errors.required')),
businessPhone: Yup.string().required(t('errors.required')),
description: Yup.string().required(t('errors.required')),
planId: Yup.string().required(t('errors.required'))
}),
onSubmit: (values) => {
buyService.mutate(values, {
onSuccess: (data) => {
toast(t('success'), 'success')
navigate(Pages.receipts.detail + data?.data?.invoice?.id)
},
onError: (error: ErrorType) => {
toast(error.response?.data?.error?.message[0], 'error')
}
})
}
})
return (
<div className='w-full flex gap-6 mt-4'>
{
getDetailService.isPending ?
<PageLoading />
:
<div className='flex-1 max-w-full'>
<HeaderBuy planId={planId} data={getDetailService?.data?.data?.danakService} />
<div className='mt-8 p-6 bg-white rounded-3xl flex xl:gap-20 xl:flex-row flex-col gap-10'>
<div>
<div className='text-sm'>
{t('service.info_business')}
</div>
<div className='text-xs text-description mt-2'>
{t('service.enter_info_business')}
</div>
</div>
<div className='flex-1'>
<div>
<Input
label={t('service.business_name')}
{...formik.getFieldProps('businessName')}
error_text={formik.touched.businessName && formik.errors.businessName ? formik.errors.businessName : ''}
/>
</div>
<div className='mt-8'>
<Input
label={t('service.phone_business')}
{...formik.getFieldProps('businessPhone')}
error_text={formik.touched.businessPhone && formik.errors.businessPhone ? formik.errors.businessPhone : ''}
/>
</div>
<div className='mt-8'>
<Textarea
label={t('service.short_description')}
{...formik.getFieldProps('description')}
error_text={formik.touched.description && formik.errors.description ? formik.errors.description : ''}
/>
</div>
<div className='mt-8 flex justify-end'>
<Button
className='xl:w-fit px-5'
onClick={() => formik.handleSubmit()}
isLoading={buyService.isPending}
>
<div className='flex gap-2 items-center'>
<TickCircle size={20} color='white' />
<div>
{t('service.confrim_and_invoice')}
</div>
</div>
</Button>
</div>
</div>
</div>
</div>
}
</div>
)
}
export default BuyService