This commit is contained in:
hamid zarghami
2026-02-22 12:03:32 +03:30
parent e6e1878cb2
commit 11f8f4326b
19 changed files with 64 additions and 62 deletions
+3 -3
View File
@@ -11,10 +11,10 @@ import { extractErrorMessage } from '@/config/func'
const FormBuilderValues: FC = () => { const FormBuilderValues: FC = () => {
const { id } = useParams() const { id } = useParams()
const { data, refetch } = useGetFieldValues(Number(id)) const { data, refetch } = useGetFieldValues(id!)
const { mutate: deleteValue, isPending } = useDeleteFieldValue() const { mutate: deleteValue, isPending } = useDeleteFieldValue()
const handleDelete = (id: number) => { const handleDelete = (id: string) => {
deleteValue(id, { deleteValue(id, {
onSuccess: () => { onSuccess: () => {
refetch() refetch()
@@ -31,7 +31,7 @@ const FormBuilderValues: FC = () => {
<h1 className='text-lg font-light'>مقادیر</h1> <h1 className='text-lg font-light'>مقادیر</h1>
<CreateValue <CreateValue
id={Number(id)} id={id!}
refetch={refetch} refetch={refetch}
/> />
</div> </div>
+1 -1
View File
@@ -33,7 +33,7 @@ const FormBuilderCreate: FC = () => {
name: Yup.string().required('این فیلد اجباری می باشد') name: Yup.string().required('این فیلد اجباری می باشد')
}), }),
onSubmit: (values) => { onSubmit: (values) => {
createField({ id: Number(id), params: values }, { createField({ id: id!, params: values }, {
onSuccess: () => { onSuccess: () => {
toast.success('با موفقیت ذخیره شد') toast.success('با موفقیت ذخیره شد')
navigate(Paths.formBuilder.list + `${id}/${type} `) navigate(Paths.formBuilder.list + `${id}/${type} `)
+2 -2
View File
@@ -13,9 +13,9 @@ const FormBuilderList: FC = () => {
const { id, type } = useParams() const { id, type } = useParams()
const { mutate: deleteField, isPending } = useDeleteField() const { mutate: deleteField, isPending } = useDeleteField()
const { data, refetch } = useGetFields(Number(id)) const { data, refetch } = useGetFields(id ?? '')
const handleDelete = (id: number) => { const handleDelete = (id: string) => {
deleteField(id, { deleteField(id, {
onSuccess: () => { onSuccess: () => {
refetch() refetch()
+2 -2
View File
@@ -17,7 +17,7 @@ const FormBuilderUpdate: FC = () => {
const { id } = useParams() const { id } = useParams()
const navigate = useNavigate() const navigate = useNavigate()
const { data, refetch } = useGetFieldDetail(Number(id)) const { data, refetch } = useGetFieldDetail(id!)
const { mutate: createField, isPending } = useUpdateField() const { mutate: createField, isPending } = useUpdateField()
const formik = useFormik<CreateFieldType>({ const formik = useFormik<CreateFieldType>({
@@ -33,7 +33,7 @@ const FormBuilderUpdate: FC = () => {
name: Yup.string().required('این فیلد اجباری می باشد') name: Yup.string().required('این فیلد اجباری می باشد')
}), }),
onSubmit: (values) => { onSubmit: (values) => {
createField({ id: Number(id), params: values }, { createField({ id: id!, params: values }, {
onSuccess: () => { onSuccess: () => {
toast.success('با موفقیت ذخیره شد') toast.success('با موفقیت ذخیره شد')
refetch() refetch()
@@ -11,7 +11,7 @@ import { extractErrorMessage } from '@/config/func'
import { toast } from 'react-toastify' import { toast } from 'react-toastify'
type Props = { type Props = {
id: number, id: string,
refetch: () => void, refetch: () => void,
} }
@@ -11,7 +11,7 @@ import { extractErrorMessage } from '@/config/func'
import { toast } from 'react-toastify' import { toast } from 'react-toastify'
type Props = { type Props = {
id: number, id: string,
refetch: () => void, refetch: () => void,
} }
@@ -6,7 +6,7 @@ export const useCreateField = () => {
const queryClient = new QueryClient(); const queryClient = new QueryClient();
return useMutation({ return useMutation({
mutationFn: ({ id, params }: { id: number; params: CreateFieldType }) => mutationFn: ({ id, params }: { id: string; params: CreateFieldType }) =>
api.createField(id, params), api.createField(id, params),
onSuccess: (_, params) => { onSuccess: (_, params) => {
queryClient.refetchQueries({ queryClient.refetchQueries({
@@ -16,7 +16,7 @@ export const useCreateField = () => {
}); });
}; };
export const useGetFields = (id: number) => { export const useGetFields = (id: string) => {
return useQuery({ return useQuery({
queryKey: ["product-Fields", id], queryKey: ["product-Fields", id],
queryFn: () => api.getFields(id), queryFn: () => api.getFields(id),
@@ -24,7 +24,7 @@ export const useGetFields = (id: number) => {
}); });
}; };
export const useGetFieldDetail = (id: number) => { export const useGetFieldDetail = (id: string) => {
return useQuery({ return useQuery({
queryKey: ["product-Field", id], queryKey: ["product-Field", id],
queryFn: () => api.getFieldDetail(id), queryFn: () => api.getFieldDetail(id),
@@ -35,7 +35,7 @@ export const useGetFieldDetail = (id: number) => {
export const useUpdateField = () => { export const useUpdateField = () => {
const queryClient = new QueryClient(); const queryClient = new QueryClient();
return useMutation({ return useMutation({
mutationFn: ({ id, params }: { id: number; params: CreateFieldType }) => mutationFn: ({ id, params }: { id: string; params: CreateFieldType }) =>
api.updateField(id, params), api.updateField(id, params),
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
@@ -47,11 +47,11 @@ export const useUpdateField = () => {
export const useDeleteField = () => { export const useDeleteField = () => {
return useMutation({ return useMutation({
mutationFn: (id: number) => api.deleteFields(id), mutationFn: (id: string) => api.deleteFields(id),
}); });
}; };
export const useGetFieldValues = (id: number) => { export const useGetFieldValues = (id: string) => {
return useQuery({ return useQuery({
queryKey: ["attrbute-values", id], queryKey: ["attrbute-values", id],
queryFn: () => api.getFieldValues(id), queryFn: () => api.getFieldValues(id),
@@ -65,7 +65,7 @@ export const useCreateFieldValue = () => {
id, id,
params, params,
}: { }: {
id: number; id: string;
params: CreateFieldValueType; params: CreateFieldValueType;
}) => api.createFieldValues(id, params), }) => api.createFieldValues(id, params),
}); });
@@ -77,13 +77,13 @@ export const useUpdateFieldValue = () => {
id, id,
params, params,
}: { }: {
id: number; id: string;
params: CreateFieldValueType; params: CreateFieldValueType;
}) => api.updateFieldValues(id, params), }) => api.updateFieldValues(id, params),
}); });
}; };
export const useGetFieldValueDetail = (id: number, enabled: boolean) => { export const useGetFieldValueDetail = (id: string, enabled: boolean) => {
return useQuery({ return useQuery({
queryKey: ["attrbute-values-detail", id], queryKey: ["attrbute-values-detail", id],
queryFn: () => api.getFieldValueDetail(id), queryFn: () => api.getFieldValueDetail(id),
@@ -93,11 +93,11 @@ export const useGetFieldValueDetail = (id: number, enabled: boolean) => {
export const useDeleteFieldValue = () => { export const useDeleteFieldValue = () => {
return useMutation({ return useMutation({
mutationFn: (id: number) => api.deleteFieldValue(id), mutationFn: (id: string) => api.deleteFieldValue(id),
}); });
}; };
export const useGetEntityField = (entityId: number) => { export const useGetEntityField = (entityId: string) => {
return useQuery({ return useQuery({
queryKey: ["entity-field", entityId], queryKey: ["entity-field", entityId],
queryFn: () => api.getEntityField(entityId), queryFn: () => api.getEntityField(entityId),
@@ -9,76 +9,76 @@ import type {
GetEnitityFieldResponseType, GetEnitityFieldResponseType,
} from "../types/Types"; } from "../types/Types";
export const createField = async (id: number, params: CreateFieldType) => { export const createField = async (id: string, params: CreateFieldType) => {
const { data } = await axios.post(`/admin/entity/${id}/field`, params); const { data } = await axios.post(`/admin/entity/${id}/field`, params);
return data; return data;
}; };
export const getFields = async (id: number) => { export const getFields = async (id: string) => {
const { data } = await axios.get<FieldResponseType>( const { data } = await axios.get<FieldResponseType>(
`/admin/entity/${id}/field` `/admin/entity/${id}/field`,
); );
return data; return data;
}; };
export const getFieldDetail = async (id: number) => { export const getFieldDetail = async (id: string) => {
const { data } = await axios.get<FieldDetailResponseType>( const { data } = await axios.get<FieldDetailResponseType>(
`/admin/entity/field/${id}` `/admin/entity/field/${id}`,
); );
return data; return data;
}; };
export const updateField = async (id: number, params: CreateFieldType) => { export const updateField = async (id: string, params: CreateFieldType) => {
const { data } = await axios.patch(`/admin/entity/field/${id}`, params); const { data } = await axios.patch(`/admin/entity/field/${id}`, params);
return data; return data;
}; };
export const deleteFields = async (id: number) => { export const deleteFields = async (id: string) => {
const { data } = await axios.delete(`/admin/entity/field/${id}`); const { data } = await axios.delete(`/admin/entity/field/${id}`);
return data; return data;
}; };
export const getFieldValues = async (id: number) => { export const getFieldValues = async (id: string) => {
const { data } = await axios.get<FieldValuesResponseType>( const { data } = await axios.get<FieldValuesResponseType>(
`/admin/entity/field/${id}/option` `/admin/entity/field/${id}/option`,
); );
return data; return data;
}; };
export const createFieldValues = async ( export const createFieldValues = async (
id: number, id: string,
params: CreateFieldValueType params: CreateFieldValueType,
) => { ) => {
const { data } = await axios.post(`/admin/entity/field/${id}/option`, params); const { data } = await axios.post(`/admin/entity/field/${id}/option`, params);
return data; return data;
}; };
export const updateFieldValues = async ( export const updateFieldValues = async (
id: number, id: string,
params: CreateFieldValueType params: CreateFieldValueType,
) => { ) => {
const { data } = await axios.patch( const { data } = await axios.patch(
`/admin/entity/field/option/${id}`, `/admin/entity/field/option/${id}`,
params params,
); );
return data; return data;
}; };
export const getFieldValueDetail = async (id: number) => { export const getFieldValueDetail = async (id: string) => {
const { data } = await axios.get<FieldValueDetailResponseType>( const { data } = await axios.get<FieldValueDetailResponseType>(
`/admin/entity/field/option/${id}` `/admin/entity/field/option/${id}`,
); );
return data; return data;
}; };
export const deleteFieldValue = async (id: number) => { export const deleteFieldValue = async (id: string) => {
const { data } = await axios.delete(`/admin/entity/field/option/${id}`); const { data } = await axios.delete(`/admin/entity/field/option/${id}`);
return data; return data;
}; };
export const getEntityField = async (entityId: number) => { export const getEntityField = async (entityId: string) => {
const { data } = await axios.get<GetEnitityFieldResponseType>( const { data } = await axios.get<GetEnitityFieldResponseType>(
`/admin/entity/${entityId}/field` `/admin/entity/${entityId}/field`,
); );
return data; return data;
}; };
+3 -3
View File
@@ -13,11 +13,11 @@ export type CreateFieldType = {
export interface FieldType extends RowDataType { export interface FieldType extends RowDataType {
createdAt: string, createdAt: string,
id: number, id: string,
isRequired: boolean, isRequired: boolean,
name: string, name: string,
order: number, order: number,
product: number, product: string,
type: FieldTypeEnum, type: FieldTypeEnum,
multiple: boolean, multiple: boolean,
entityType:string, // 'product' | 'print' entityType:string, // 'product' | 'print'
@@ -33,7 +33,7 @@ export type CreateFieldValueType = {
export type FieldValueType = { export type FieldValueType = {
createdAt: string, createdAt: string,
id: number, id: string,
order: number, order: number,
value: string, value: string,
} }
+2 -2
View File
@@ -13,7 +13,7 @@ type Props = {
const OrderItem: FC<Props> = ({ item, estimatedDays }) => { const OrderItem: FC<Props> = ({ item, estimatedDays }) => {
const { id } = useParams() const { id } = useParams()
const { data: fields } = useGetEntityField(item.product?.id) const { data: fields } = useGetEntityField(String(item.product?.id ?? ''))
return ( return (
@@ -67,7 +67,7 @@ const OrderItem: FC<Props> = ({ item, estimatedDays }) => {
</div> </div>
{ {
fields?.data?.map((field) => { fields?.data?.map((field) => {
const value = item.attributes?.find((o => Number(o.attributeId) === Number(field.id))) const value = item.attributes?.find((o) => String(o.attributeId) === String(field.id))
return ( return (
+1 -1
View File
@@ -90,7 +90,7 @@ export const useGetAttributes = (id?: number) => {
}); });
}; };
export const useGetOrderItem = (id?: number) => { export const useGetOrderItem = (id?: string) => {
return useQuery({ return useQuery({
queryKey: ["order-item", id], queryKey: ["order-item", id],
queryFn: () => api.getOrderItem(id), queryFn: () => api.getOrderItem(id),
+4 -2
View File
@@ -26,7 +26,9 @@ export const getOrdersInvoiced = async (page: number = 1) => {
}; };
export const getRequests = async () => { export const getRequests = async () => {
const { data } = await axios.get<OrderListResponseType>(`/admin/orders/request`); const { data } = await axios.get<OrderListResponseType>(
`/admin/orders/request`,
);
return data; return data;
}; };
@@ -77,7 +79,7 @@ export const getAttributes = async (productId?: number) => {
return data; return data;
}; };
export const getOrderItem = async (itemId?: number) => { export const getOrderItem = async (itemId?: string) => {
const { data } = await axios.get<OrderItemResponseType>( const { data } = await axios.get<OrderItemResponseType>(
`/admin/orders/item/${itemId}`, `/admin/orders/item/${itemId}`,
); );
+2 -2
View File
@@ -42,7 +42,7 @@ export interface OrderItem {
printAttachments: null; printAttachments: null;
printAttributes?: { printAttributes?: {
value: string; value: string;
fieldId: number; fieldId: string;
}[]; }[];
confirmedAt: string | null; confirmedAt: string | null;
createdAt: string; createdAt: string;
@@ -166,7 +166,7 @@ export type OrderItemType = {
discount: number; discount: number;
printAttributes?: { printAttributes?: {
value: string; value: string;
fieldId: number; fieldId: string;
}[]; }[];
}; };
export type TicketsResponseType = BaseResponse<TicketType[]>; export type TicketsResponseType = BaseResponse<TicketType[]>;
+2 -2
View File
@@ -14,7 +14,7 @@ const PrintForm: FC = () => {
const navigate = useNavigate() const navigate = useNavigate()
const { itemId, orderId } = useParams() const { itemId, orderId } = useParams()
const { data: item } = useGetOrderItem(+itemId!) const { data: item } = useGetOrderItem(itemId!)
const { isPending, mutate } = useCreatePrintForm() const { isPending, mutate } = useCreatePrintForm()
const { data } = useGetSections() const { data } = useGetSections()
@@ -24,7 +24,7 @@ const PrintForm: FC = () => {
printAttributes: [] printAttributes: []
}, },
onSubmit: (values) => { onSubmit: (values) => {
mutate({ itemId: +itemId!, orderId: orderId!, params: values }, { mutate({ itemId: itemId!, orderId: orderId!, params: values }, {
onSuccess: () => { onSuccess: () => {
toast('با موفقیت ذخیره شد', 'success') toast('با موفقیت ذخیره شد', 'success')
navigate(-1) navigate(-1)
+2 -2
View File
@@ -20,7 +20,7 @@ const ManageForms: FC<Props> = (props) => {
const { attributes, formik } = props const { attributes, formik } = props
const handleChange = (attributeId: number, value: string) => { const handleChange = (attributeId: string, value: string) => {
const attribute = formik.values.printAttributes const attribute = formik.values.printAttributes
const index: number = attribute.findIndex(o => o.fieldId === attributeId) const index: number = attribute.findIndex(o => o.fieldId === attributeId)
if (index > -1) { if (index > -1) {
@@ -28,7 +28,7 @@ const ManageForms: FC<Props> = (props) => {
} else { } else {
attribute.push({ fieldId: attributeId, value: value }) attribute.push({ fieldId: attributeId, value: value })
} }
formik.setFieldValue('attributes', attribute) formik.setFieldValue('printAttributes', attribute)
} }
+1 -1
View File
@@ -64,7 +64,7 @@ export const useCreatePrintForm = () => {
params, params,
}: { }: {
orderId: string; orderId: string;
itemId: number; itemId: string;
params: CreatePrintFormType; params: CreatePrintFormType;
}) => api.createPrintForm(orderId, itemId, params), }) => api.createPrintForm(orderId, itemId, params),
// onSuccess: (_, params) => { // onSuccess: (_, params) => {
+4 -4
View File
@@ -23,7 +23,7 @@ export const updateSection = async (id: number, params: CreateSectionType) => {
export const getSectionDetail = async (id: number) => { export const getSectionDetail = async (id: number) => {
const { data } = await axios.get<SectionDetailResponseType>( const { data } = await axios.get<SectionDetailResponseType>(
`/admin/section/${id}` `/admin/section/${id}`,
); );
return data; return data;
}; };
@@ -35,12 +35,12 @@ export const deleteSection = async (id: number) => {
export const createPrintForm = async ( export const createPrintForm = async (
orderId: string, orderId: string,
itemId: number, itemId: string,
params: CreatePrintFormType params: CreatePrintFormType,
) => { ) => {
const { data } = await axios.patch( const { data } = await axios.patch(
`/admin/orders/${orderId}/item/${itemId}/print`, `/admin/orders/${orderId}/item/${itemId}/print`,
params params,
); );
return data; return data;
}; };
+1 -1
View File
@@ -18,7 +18,7 @@ export type SectionsResponseType = BaseResponse<SectionItemType[]>;
export type SectionDetailResponseType = BaseResponse<SectionItemType>; export type SectionDetailResponseType = BaseResponse<SectionItemType>;
export type PrintAttributesType = { export type PrintAttributesType = {
fieldId: number; fieldId: string;
value: string; value: string;
}; };
@@ -8,7 +8,7 @@ type Props = {
} }
const RequestItem: FC<Props> = ({ item }) => { const RequestItem: FC<Props> = ({ item }) => {
const { data: fields } = useGetEntityField(Number(item.product?.id)) const { data: fields } = useGetEntityField(String(item.product?.id ?? ''))
const handleOpenAttachment = (url: string) => { const handleOpenAttachment = (url: string) => {
window.open(url, '_blank') window.open(url, '_blank')
@@ -58,7 +58,7 @@ const RequestItem: FC<Props> = ({ item }) => {
<div className='font-bold mb-5 mt-7'>ویژگی ها</div> <div className='font-bold mb-5 mt-7'>ویژگی ها</div>
{ {
fields.data.map((field) => { fields.data.map((field) => {
const value = item.attributes?.find((o) => Number(o.attributeId) === Number(field.id)) const value = item.attributes?.find((o) => String(o.attributeId) === String(field.id))
return ( return (
<div className='flex gap-3 items-center mt-3' key={field.id}> <div className='flex gap-3 items-center mt-3' key={field.id}>
<div className='text-sm text-gray-500'>{field.name}:</div> <div className='text-sm text-gray-500'>{field.name}:</div>