create base product

This commit is contained in:
hamid zarghami
2026-02-09 14:52:05 +03:30
parent 687fc1e6c2
commit ba5beae0f7
6 changed files with 247 additions and 306 deletions
+30 -37
View File
@@ -7,10 +7,6 @@ import { useNavigate, useParams } from 'react-router-dom'
import Button from '@/components/Button'
import CreateProductSidebar from './components/CreateProductSidebar'
import BasicInfoSection from './components/BasicInfoSection'
import ProductContentSection from './components/ProductContentSection'
import MealTimesSection from './components/MealTimesSection'
import WeekDaysSection from './components/WeekDaysSection'
import ServiceOptionsSection from './components/ServiceOptionsSection'
import type { CreateProductType } from './types/Types'
import { useUpdateProduct, useGetProductDetails, useGetCategories } from './hooks/useProductData'
import { useMultipleUpload } from '../uploader/hooks/useUploaderData'
@@ -38,33 +34,31 @@ const UpdateProduct: FC = () => {
const formik = useFormik<CreateProductType>({
initialValues: {
title: '',
desc: '',
content: [],
categoryId: '',
title: '',
attribute: '',
variants: [],
desc: '',
price: 0,
discount: 0,
prepareTime: 0,
weekDays: [],
mealTypes: [],
pickupServe: false,
inPlaceServe: false,
isActive: true,
images: [],
discount: 0,
isSpecialOffer: false,
dailyStock: 0,
order: 0
},
validationSchema: Yup.object().shape({
title: Yup.string().required('نام کالا الزامی است'),
categoryId: Yup.string().required('دسته‌بندی الزامی است'),
price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'),
prepareTime: Yup.number().required('زمان آماده‌سازی الزامی است').min(0, 'زمان آماده‌سازی باید مثبت باشد'),
discount: Yup.number().min(0, 'تخفیف باید مثبت باشد'),
dailyStock: Yup.number().required('موجودی روزانه الزامی است').min(0, 'موجودی روزانه باید مثبت باشد'),
content: Yup.array().of(Yup.string()),
weekDays: Yup.array().of(Yup.number()),
mealTypes: Yup.array().of(Yup.string())
attribute: Yup.string(),
variants: Yup.array().of(
Yup.object().shape({
id: Yup.string(),
value: Yup.string(),
price: Yup.number().min(0)
})
)
}),
onSubmit: (values) => {
if (!id) {
@@ -74,12 +68,16 @@ const UpdateProduct: FC = () => {
const submitProduct = (newImageUrls: string[] = []) => {
const allImages = [...values.images, ...newImageUrls]
const variants =
values.variants.length > 0
? values.variants
: [{ value: '', price: values.price }]
const productData: CreateProductType = {
...values,
variants,
isActive,
isSpecialOffer: isSpecial,
images: allImages,
content: values.content.filter(item => item && item.trim().length > 0)
images: allImages
}
updateProduct({ id, params: productData }, {
@@ -112,22 +110,17 @@ const UpdateProduct: FC = () => {
useEffect(() => {
if (product) {
formik.setValues({
title: product.title || '',
desc: product.desc || '',
content: product.content || [],
categoryId: product.category?.id || '',
title: product.title || '',
attribute: product.attribute || '',
variants: product.variants || [],
desc: product.desc || '',
price: product.price || 0,
discount: product.discount || 0,
prepareTime: product.prepareTime || 0,
weekDays: product.weekDays || [],
mealTypes: product.mealTypes || [],
pickupServe: product.pickupServe || false,
inPlaceServe: product.inPlaceServe || false,
isActive: product.isActive || false,
images: product.images || [],
discount: product.discount || 0,
isSpecialOffer: product.isSpecialOffer || false,
dailyStock: product.inventory?.totalStock || 0,
order: product.order || 0
order: product.order ?? 0
})
setIsActive(product.isActive || false)
setIsSpecial(product.isSpecialOffer || false)
@@ -180,11 +173,11 @@ const UpdateProduct: FC = () => {
<div className='flex flex-col lg:flex-row gap-6 mt-6'>
<div className='flex-1'>
<div className='bg-white py-6 sm:py-8 xl:px-10 px-4 rounded-3xl'>
<BasicInfoSection formik={formik} categories={categories} />
<ProductContentSection formik={formik} />
<MealTimesSection formik={formik} />
<WeekDaysSection formik={formik} />
<ServiceOptionsSection formik={formik} />
<BasicInfoSection
formik={formik}
categories={categories}
initialHasVariants={(product?.variants?.length ?? 0) > 0}
/>
</div>
</div>