diff --git a/src/config/Paths.tsx b/src/config/Paths.tsx index 05e58ad..1f7e239 100644 --- a/src/config/Paths.tsx +++ b/src/config/Paths.tsx @@ -20,6 +20,11 @@ export const Paths = { list: '/product/attribute-value/' } }, + formBuilder: { + list: '/form-builder/list/', + create: '/form-builder/create/', + update: '/form-builder/update/', + }, order: { list: '/order/list' }, diff --git a/src/pages/formBuilder/Create.tsx b/src/pages/formBuilder/Create.tsx index 82c3328..83d2502 100644 --- a/src/pages/formBuilder/Create.tsx +++ b/src/pages/formBuilder/Create.tsx @@ -1,40 +1,42 @@ import { useFormik } from 'formik' import { type FC } from 'react' -import type { CreateAttributeType } from '../types/Types' -import { FieldTypeEnum } from '../enum/Enum' +import type { CreateFieldType } from './types/Types' +import { FieldTypeEnum } from './enum/Enum' import * as Yup from 'yup' import Button from '@/components/Button' import { AddSquare } from 'iconsax-react' import Input from '@/components/Input' import Select from '@/components/Select' import SwitchComponent from '@/components/Switch' -import { useCreateAttribute } from '../hooks/useProductData' +import { useCreateField } from './hooks/useFormBuilderData' import { useNavigate, useParams } from 'react-router-dom' import { toast } from 'react-toastify' import { extractErrorMessage } from '@/config/func' import { Paths } from '@/config/Paths' -const CreateAttribute: FC = () => { +const FormBuilderCreate: FC = () => { - const { id } = useParams() + const { id, type } = useParams() const navigate = useNavigate() - const { mutate: createAttribute, isPending } = useCreateAttribute() + const { mutate: createField, isPending } = useCreateField() - const formik = useFormik({ + const formik = useFormik({ initialValues: { name: '', isRequired: true, order: 1, type: FieldTypeEnum.text, + entityType: 'product', + multiple: false, }, validationSchema: Yup.object({ name: Yup.string().required('این فیلد اجباری می باشد') }), onSubmit: (values) => { - createAttribute({ id: Number(id), params: values }, { + createField({ id: Number(id), params: values }, { onSuccess: () => { toast.success('با موفقیت ذخیره شد') - navigate(Paths.product.attribute.list + id) + navigate(Paths.formBuilder.list + `${id}/${type} `) }, onError: (error) => { toast.error(extractErrorMessage(error)) @@ -124,4 +126,4 @@ const CreateAttribute: FC = () => { ) } -export default CreateAttribute \ No newline at end of file +export default FormBuilderCreate \ No newline at end of file diff --git a/src/pages/formBuilder/List.tsx b/src/pages/formBuilder/List.tsx index cd2137f..d6195eb 100644 --- a/src/pages/formBuilder/List.tsx +++ b/src/pages/formBuilder/List.tsx @@ -3,20 +3,20 @@ import { Paths } from '@/config/Paths' import { AddSquare, Edit } from 'iconsax-react' import { type FC } from 'react' import { Link, useParams } from 'react-router-dom' -import { useDeleteAttribute, useGetAttributes } from '../hooks/useProductData' +import { useDeleteField, useGetFields } from './hooks/useFormBuilderData' import Table from '@/components/Table' import TrashWithConfrim from '@/components/TrashWithConfrim' import { toast } from 'react-toastify' import { extractErrorMessage } from '@/config/func' -const AttributeList: FC = () => { +const FormBuilderList: FC = () => { const { id } = useParams() - const { mutate: deleteAttribute, isPending } = useDeleteAttribute() - const { data, refetch } = useGetAttributes(Number(id)) + const { mutate: deleteField, isPending } = useDeleteField() + const { data, refetch } = useGetFields(Number(id)) const handleDelete = (id: number) => { - deleteAttribute(id, { + deleteField(id, { onSuccess: () => { refetch() }, @@ -33,7 +33,7 @@ const AttributeList: FC = () => {

ویژگی ها

@@ -85,7 +85,7 @@ const AttributeList: FC = () => { render: (item) => { return (
- + { ) } -export default AttributeList \ No newline at end of file +export default FormBuilderList \ No newline at end of file diff --git a/src/pages/formBuilder/Update.tsx b/src/pages/formBuilder/Update.tsx index 257ff86..b294ba5 100644 --- a/src/pages/formBuilder/Update.tsx +++ b/src/pages/formBuilder/Update.tsx @@ -1,37 +1,39 @@ import { useFormik } from 'formik' import { useEffect, type FC } from 'react' -import type { CreateAttributeType } from '../types/Types' -import { FieldTypeEnum } from '../enum/Enum' +import type { CreateFieldType } from './types/Types' +import { FieldTypeEnum } from './enum/Enum' import * as Yup from 'yup' import Button from '@/components/Button' import { AddSquare } from 'iconsax-react' import Input from '@/components/Input' import Select from '@/components/Select' import SwitchComponent from '@/components/Switch' -import { useGetAttributeDetail, useUpdateAttribute } from '../hooks/useProductData' +import { useGetFieldDetail, useUpdateField } from './hooks/useFormBuilderData' import { useNavigate, useParams } from 'react-router-dom' import { toast } from 'react-toastify' import { extractErrorMessage } from '@/config/func' -const UpdateAttribute: FC = () => { +const FormBuilderUpdate: FC = () => { const { id } = useParams() const navigate = useNavigate() - const { data, refetch } = useGetAttributeDetail(Number(id)) - const { mutate: createAttribute, isPending } = useUpdateAttribute() + const { data, refetch } = useGetFieldDetail(Number(id)) + const { mutate: createField, isPending } = useUpdateField() - const formik = useFormik({ + const formik = useFormik({ initialValues: { name: '', isRequired: true, order: 1, type: FieldTypeEnum.text, + entityType: 'product', + multiple: false }, validationSchema: Yup.object({ name: Yup.string().required('این فیلد اجباری می باشد') }), onSubmit: (values) => { - createAttribute({ id: Number(id), params: values }, { + createField({ id: Number(id), params: values }, { onSuccess: () => { toast.success('با موفقیت ذخیره شد') refetch() @@ -51,7 +53,9 @@ const UpdateAttribute: FC = () => { isRequired: data?.data?.isRequired, name: data?.data?.name, order: data?.data?.order, - type: data?.data?.type + type: data?.data?.type, + entityType: data?.data?.entityType, + multiple: data?.data?.multiple }) } @@ -140,4 +144,4 @@ const UpdateAttribute: FC = () => { ) } -export default UpdateAttribute \ No newline at end of file +export default FormBuilderUpdate \ No newline at end of file diff --git a/src/pages/product/List.tsx b/src/pages/product/List.tsx index e512b96..daf09a0 100644 --- a/src/pages/product/List.tsx +++ b/src/pages/product/List.tsx @@ -75,7 +75,7 @@ const ProductList: FC = () => { title: 'ویژگی ها', render: (item) => { return ( - +
ویژگی ها
diff --git a/src/router/MainRouter.tsx b/src/router/MainRouter.tsx index 6e0246f..deea42b 100644 --- a/src/router/MainRouter.tsx +++ b/src/router/MainRouter.tsx @@ -33,6 +33,9 @@ import CreateAttribute from '@/pages/product/attribute/Create' import AttributeList from '@/pages/product/attribute/List' import UpdateAttribute from '@/pages/product/attribute/Update' import AttributeValues from '@/pages/product/attribute/AttributeValues' +import FormBuilderList from '@/pages/formBuilder/List' +import FormBuilderCreate from '@/pages/formBuilder/Create' +import FormBuilderUpdate from '@/pages/formBuilder/Update' const MainRouter: FC = () => { return ( @@ -61,6 +64,10 @@ const MainRouter: FC = () => { } /> } /> + } /> + } /> + } /> + } /> } /> } />