import { FC, useState } from 'react' import Input from '../../components/Input' import SwitchComponent from '../../components/Switch' import Textarea from '../../components/Textarea' import Button from '../../components/Button' import { SupportPlanFeatureKey } from './enum/SupportEnum' import { useTranslation } from 'react-i18next' import PlanItem from './components/PlanItem' import { useFormik } from 'formik' import { CreatePlanType } from './types/SupportTypes' import * as Yup from 'yup' import Select from '../../components/Select' import { useCreateSupport } from './hooks/useSupportData' import { toast } from 'react-toastify' import { ErrorType } from '../../helpers/types' import { useNavigate } from 'react-router-dom' import { Pages } from '../../config/Pages' interface PlanFeature { featureKey: string; featureValue: string | boolean; featureType: 'boolean' | 'text'; isEnabled: boolean; } const CreatePlan: FC = () => { const navigate = useNavigate() const { t } = useTranslation('global') const createSupport = useCreateSupport() const [features, setFeatures] = useState( Object.values(SupportPlanFeatureKey).map(key => ({ featureKey: key, featureValue: true, featureType: 'boolean', isEnabled: true })) ) const handleFeatureChange = (id: string, value: string | boolean, isEnabled: boolean) => { setFeatures(prevFeatures => prevFeatures.map(feature => feature.featureKey === id ? { ...feature, featureValue: value, isEnabled } : feature ) ) } const handleFeatureTypeChange = (id: string, type: 'boolean' | 'text') => { setFeatures(prevFeatures => prevFeatures.map(feature => feature.featureKey === id ? { ...feature, featureType: type, featureValue: type === 'boolean' ? true : '', isEnabled: type === 'boolean' ? true : false } : feature ) ) } const prepareFeaturesForSubmission = (features: PlanFeature[]) => { return features.map(feature => { if (feature.featureType === 'boolean') { return { featureKey: feature.featureKey, featureValue: feature.isEnabled, featureType: 'boolean', } } else { return { featureKey: feature.featureKey, featureValue: feature.featureValue as string, featureType: 'text', } } }) } const formik = useFormik({ initialValues: { name: '', description: '', price: 0, duration: 0, isActive: true, features: [], }, validationSchema: Yup.object({ name: Yup.string().required('نام پلن الزامی است'), description: Yup.string().required('توضیحات پلن الزامی است'), price: Yup.number().required('قیمت پلن الزامی است'), duration: Yup.number().required('مدت پلن الزامی است'), }), onSubmit: (values) => { values.price = Number(values.price) values.duration = Number(values.duration) const preparedFeatures = prepareFeaturesForSubmission(features) const planData: CreatePlanType = { ...values, features: preparedFeatures.map(feature => ({ featureKey: feature.featureKey, featureValue: String(feature.featureValue), featureType: feature.featureType as "text" | "boolean" })) } createSupport.mutate(planData, { onSuccess: () => { toast.success('پلن با موفقیت ساخته شد') navigate(Pages.support.list) }, onError: (error: ErrorType) => { toast.error(error.response?.data?.error.message[0]) } }) }, }) return (
ساخت پلن
اطلاعات اصلی پلن