diff --git a/src/pages/food/Create.tsx b/src/pages/food/Create.tsx
index 33ee1a8..cf26972 100644
--- a/src/pages/food/Create.tsx
+++ b/src/pages/food/Create.tsx
@@ -9,6 +9,8 @@ import Textarea from '@/components/Textarea'
import Button from '@/components/Button'
import { Checkbox } from '@/components/ui/checkbox'
import CreateFoodSidebar from './components/CreateFoodSidebar'
+import WeekDaysSection from './components/WeekDaysSection'
+import MealTimesSection from './components/MealTimesSection'
import type { CreateFoodType } from './types/Types'
import { useCreateFood, useGetCategories } from './hooks/useFoodData'
import { useMultipleUpload } from '../uploader/hooks/useUploaderData'
@@ -40,22 +42,13 @@ const CreateFood: FC = () => {
price: 0,
discount: 0,
prepareTime: 0,
- stock: 0,
- stockDefault: 0,
- breakfast: false,
- noon: false,
- dinner: false,
- mon: false,
- tue: false,
- wed: false,
- thu: false,
- fri: false,
- sat: false,
- sun: false,
- pickupServe: false,
- inPlaceServe: false,
+ weekDays: [0, 1, 2, 3, 4, 5, 6],
+ mealTypes: ['breakfast', 'lunch', 'dinner'],
+ pickupServe: true,
+ inPlaceServe: true,
isActive: true,
- images: []
+ images: [],
+ isSpecialOffer: false
},
validationSchema: Yup.object().shape({
title: Yup.string().required('نام غذا الزامی است'),
@@ -63,16 +56,17 @@ const CreateFood: FC = () => {
categoryId: Yup.string().required('دستهبندی الزامی است'),
price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'),
prepareTime: Yup.number().required('زمان آمادهسازی الزامی است').min(0, 'زمان آمادهسازی باید مثبت باشد'),
- stock: Yup.number().required('موجودی الزامی است').min(0, 'موجودی باید مثبت باشد'),
- stockDefault: Yup.number().required('موجودی پیشفرض الزامی است').min(0, 'موجودی پیشفرض باید مثبت باشد'),
discount: Yup.number().min(0, 'تخفیف باید مثبت باشد'),
- content: Yup.array().of(Yup.string())
+ content: Yup.array().of(Yup.string()),
+ weekDays: Yup.array().of(Yup.number()),
+ mealTypes: Yup.array().of(Yup.string())
}),
onSubmit: (values) => {
const submitFood = (imageUrls: string[] = []) => {
const foodData: CreateFoodType = {
...values,
isActive,
+ isSpecialOffer: isSpecial,
images: imageUrls,
content: values.content.filter(item => item && item.trim().length > 0)
}
@@ -183,26 +177,6 @@ const CreateFood: FC = () => {
onChange={(e) => formik.setFieldValue('prepareTime', Number(e.target.value))}
error_text={formik.touched.prepareTime && formik.errors.prepareTime ? formik.errors.prepareTime : ''}
/>
-
- formik.setFieldValue('stock', Number(e.target.value))}
- error_text={formik.touched.stock && formik.errors.stock ? formik.errors.stock : ''}
- />
-
- formik.setFieldValue('stockDefault', Number(e.target.value))}
- error_text={formik.touched.stockDefault && formik.errors.stockDefault ? formik.errors.stockDefault : ''}
- />
@@ -254,87 +228,8 @@ const CreateFood: FC = () => {
-
-
وعدههای غذایی
-
-
- formik.setFieldValue('breakfast', checked)}
- />
-
-
-
- formik.setFieldValue('noon', checked)}
- />
-
-
-
- formik.setFieldValue('dinner', checked)}
- />
-
-
-
-
-
-
-
روزهای هفته
-
-
- formik.setFieldValue('sat', checked)}
- />
-
-
-
- formik.setFieldValue('sun', checked)}
- />
-
-
-
- formik.setFieldValue('mon', checked)}
- />
-
-
-
- formik.setFieldValue('tue', checked)}
- />
-
-
-
- formik.setFieldValue('wed', checked)}
- />
-
-
-
- formik.setFieldValue('thu', checked)}
- />
-
-
-
- formik.setFieldValue('fri', checked)}
- />
-
-
-
-
+
+
گزینههای سرویس
diff --git a/src/pages/food/Update.tsx b/src/pages/food/Update.tsx
index fe30fab..6c04567 100644
--- a/src/pages/food/Update.tsx
+++ b/src/pages/food/Update.tsx
@@ -45,22 +45,13 @@ const UpdateFood: FC = () => {
price: 0,
discount: 0,
prepareTime: 0,
- stock: 0,
- stockDefault: 0,
- breakfast: false,
- noon: false,
- dinner: false,
- mon: false,
- tue: false,
- wed: false,
- thu: false,
- fri: false,
- sat: false,
- sun: false,
+ weekDays: [],
+ mealTypes: [],
pickupServe: false,
inPlaceServe: false,
isActive: true,
- images: []
+ images: [],
+ isSpecialOffer: false
},
validationSchema: Yup.object().shape({
title: Yup.string().required('نام غذا الزامی است'),
@@ -68,10 +59,10 @@ const UpdateFood: FC = () => {
categoryId: Yup.string().required('دستهبندی الزامی است'),
price: Yup.number().required('قیمت الزامی است').min(0, 'قیمت باید مثبت باشد'),
prepareTime: Yup.number().required('زمان آمادهسازی الزامی است').min(0, 'زمان آمادهسازی باید مثبت باشد'),
- stock: Yup.number().required('موجودی الزامی است').min(0, 'موجودی باید مثبت باشد'),
- stockDefault: Yup.number().required('موجودی پیشفرض الزامی است').min(0, 'موجودی پیشفرض باید مثبت باشد'),
discount: Yup.number().min(0, 'تخفیف باید مثبت باشد'),
- content: Yup.array().of(Yup.string())
+ content: Yup.array().of(Yup.string()),
+ weekDays: Yup.array().of(Yup.number()),
+ mealTypes: Yup.array().of(Yup.string())
}),
onSubmit: (values) => {
if (!id) {
@@ -84,6 +75,7 @@ const UpdateFood: FC = () => {
const foodData: CreateFoodType = {
...values,
isActive,
+ isSpecialOffer: isSpecial,
images: allImages,
content: values.content.filter(item => item && item.trim().length > 0)
}
@@ -125,24 +117,16 @@ const UpdateFood: FC = () => {
price: food.price || 0,
discount: food.discount || 0,
prepareTime: food.prepareTime || 0,
- stock: food.stock || 0,
- stockDefault: food.stockDefault || 0,
- breakfast: food.breakfast || false,
- noon: food.noon || false,
- dinner: food.dinner || false,
- mon: food.mon || false,
- tue: false,
- wed: false,
- thu: false,
- fri: false,
- sat: food.sat || false,
- sun: food.sun || false,
+ weekDays: food.weekDays || [],
+ mealTypes: food.mealTypes || [],
pickupServe: food.pickupServe || false,
inPlaceServe: food.inPlaceServe || false,
isActive: food.isActive || false,
- images: food.images || []
+ images: food.images || [],
+ isSpecialOffer: food.isSpecialOffer || false
})
setIsActive(food.isActive || false)
+ setIsSpecial(food.isSpecialOffer || false)
setExistingImages(food.images || [])
}
// eslint-disable-next-line react-hooks/exhaustive-deps
diff --git a/src/pages/food/components/BasicInfoSection.tsx b/src/pages/food/components/BasicInfoSection.tsx
index a85a886..a5d38e7 100644
--- a/src/pages/food/components/BasicInfoSection.tsx
+++ b/src/pages/food/components/BasicInfoSection.tsx
@@ -62,7 +62,7 @@ const BasicInfoSection: FC
= ({ formik, categories }) =>
-
+
= ({ formik, categories }) =>
onChange={(e) => formik.setFieldValue('prepareTime', Number(e.target.value))}
error_text={formik.touched.prepareTime && formik.errors.prepareTime ? formik.errors.prepareTime : ''}
/>
-
- formik.setFieldValue('stock', Number(e.target.value))}
- error_text={formik.touched.stock && formik.errors.stock ? formik.errors.stock : ''}
- />
-
- formik.setFieldValue('stockDefault', Number(e.target.value))}
- error_text={formik.touched.stockDefault && formik.errors.stockDefault ? formik.errors.stockDefault : ''}
- />
diff --git a/src/pages/food/components/MealTimesSection.tsx b/src/pages/food/components/MealTimesSection.tsx
index 4e3ab9f..166946b 100644
--- a/src/pages/food/components/MealTimesSection.tsx
+++ b/src/pages/food/components/MealTimesSection.tsx
@@ -8,31 +8,36 @@ type MealTimesSectionProps = {
}
const MealTimesSection: FC
= ({ formik }) => {
+ const mealTypes = [
+ { value: 'breakfast', label: 'صبحانه' },
+ { value: 'lunch', label: 'ناهار' },
+ { value: 'dinner', label: 'شام' }
+ ] as const
+
+ const handleMealTypeChange = (mealType: string, checked: boolean) => {
+ const currentMealTypes = formik.values.mealTypes || []
+ if (checked) {
+ if (!currentMealTypes.includes(mealType)) {
+ formik.setFieldValue('mealTypes', [...currentMealTypes, mealType])
+ }
+ } else {
+ formik.setFieldValue('mealTypes', currentMealTypes.filter(m => m !== mealType))
+ }
+ }
+
return (
وعدههای غذایی
-
- formik.setFieldValue('breakfast', checked)}
- />
-
-
-
- formik.setFieldValue('noon', checked)}
- />
-
-
-
- formik.setFieldValue('dinner', checked)}
- />
-
-
+ {mealTypes.map((mealType) => (
+
+ handleMealTypeChange(mealType.value, checked as boolean)}
+ />
+
+
+ ))}
)
diff --git a/src/pages/food/components/WeekDaysSection.tsx b/src/pages/food/components/WeekDaysSection.tsx
index 0459d40..5eb3b18 100644
--- a/src/pages/food/components/WeekDaysSection.tsx
+++ b/src/pages/food/components/WeekDaysSection.tsx
@@ -9,24 +9,35 @@ type WeekDaysSectionProps = {
const WeekDaysSection: FC = ({ formik }) => {
const weekDays = [
- { key: 'sat', label: 'شنبه' },
- { key: 'sun', label: 'یکشنبه' },
- { key: 'mon', label: 'دوشنبه' },
- { key: 'tue', label: 'سهشنبه' },
- { key: 'wed', label: 'چهارشنبه' },
- { key: 'thu', label: 'پنجشنبه' },
- { key: 'fri', label: 'جمعه' }
+ { value: 0, label: 'شنبه' },
+ { value: 1, label: 'یکشنبه' },
+ { value: 2, label: 'دوشنبه' },
+ { value: 3, label: 'سهشنبه' },
+ { value: 4, label: 'چهارشنبه' },
+ { value: 5, label: 'پنجشنبه' },
+ { value: 6, label: 'جمعه' }
] as const
+ const handleDayChange = (dayValue: number, checked: boolean) => {
+ const currentDays = formik.values.weekDays || []
+ if (checked) {
+ if (!currentDays.includes(dayValue)) {
+ formik.setFieldValue('weekDays', [...currentDays, dayValue])
+ }
+ } else {
+ formik.setFieldValue('weekDays', currentDays.filter(d => d !== dayValue))
+ }
+ }
+
return (
روزهای هفته
{weekDays.map((day) => (
-
+
formik.setFieldValue(day.key, checked)}
+ checked={(formik.values.weekDays || []).includes(day.value)}
+ onCheckedChange={(checked) => handleDayChange(day.value, checked as boolean)}
/>
diff --git a/src/pages/food/types/Types.ts b/src/pages/food/types/Types.ts
index 5cdaa38..1404261 100644
--- a/src/pages/food/types/Types.ts
+++ b/src/pages/food/types/Types.ts
@@ -1,29 +1,20 @@
import type { IResponse } from "@/types/response.types";
export type CreateFoodType = {
- breakfast: boolean;
- tue: boolean;
- wed: boolean;
- thu: boolean;
- fri: boolean;
+ categoryId: string;
title: string;
desc: string;
content: string[];
+ weekDays: number[];
+ mealTypes: string[];
price: number;
prepareTime: number;
- sat: boolean;
- sun: boolean;
- mon: boolean;
- noon: boolean;
- dinner: boolean;
- stock: number;
- stockDefault: number;
isActive: boolean;
images: string[];
inPlaceServe: boolean;
pickupServe: boolean;
discount: number;
- categoryId: string;
+ isSpecialOffer: boolean;
};
export type Category = {
@@ -98,26 +89,22 @@ export type FoodDetails = {
deletedAt: string | null;
restaurant: string;
category: FoodDetailsCategory;
+ inventory: number | null;
title: string;
desc: string | null;
content: string[];
price: number;
order: number | null;
prepareTime: number;
- sat: boolean;
- sun: boolean;
- mon: boolean;
- breakfast: boolean;
- noon: boolean;
- dinner: boolean;
- stock: number;
- stockDefault: number;
+ weekDays: number[];
+ mealTypes: string[];
isActive: boolean;
images: string[];
inPlaceServe: boolean;
pickupServe: boolean;
- rate: number;
+ score: number | null;
discount: number;
+ isSpecialOffer: boolean;
};
export type GetCategoriesResponseType = IResponse
;