diff --git a/src/pages/settings/GeneralSettings.tsx b/src/pages/settings/GeneralSettings.tsx index ec50eaa..8766f54 100644 --- a/src/pages/settings/GeneralSettings.tsx +++ b/src/pages/settings/GeneralSettings.tsx @@ -28,9 +28,13 @@ const validationSchema = yup.object({ longitude: yup.number().required("انتخاب موقعیت روی نقشه الزامی است"), description: yup.string().nullable(), establishedYear: yup - .string() + .number() .nullable() - .matches(/^$|^\d{4}$/, "سال تاسیس باید ۴ رقم باشد"), + .transform((value, originalValue) => (originalValue === "" ? null : value)) + .test("four-digits", "سال تاسیس باید ۴ رقم باشد", (value) => { + if (value == null) return true; + return String(value).length === 4; + }), }); const GeneralSettings: FC = () => { @@ -52,11 +56,14 @@ const GeneralSettings: FC = () => { description: "", logo: "", serviceArea: undefined, - establishedYear: "", + establishedYear: undefined, }, validationSchema, onSubmit: (values) => { const submitSettings = (logoUrl?: string) => { + if (values.establishedYear) { + values.establishedYear = Number(values.establishedYear); + } const settingsData: UpdateRestaurantType = { ...values, logo: logoUrl || values.logo || "", @@ -69,7 +76,7 @@ const GeneralSettings: FC = () => { setLogoFile([]); }, onError: (error: unknown) => { - toast.error("خطا در ذخیره تنظیمات"); + toast.error(extractErrorMessage(error)); console.error(error); }, }); @@ -106,7 +113,7 @@ const GeneralSettings: FC = () => { description: restaurantData.description || "", logo: restaurantData.logo || "", serviceArea: restaurantData.serviceArea || undefined, - establishedYear: restaurantData.establishedYear?.toString() || "", + establishedYear: restaurantData.establishedYear ?? undefined, }); } // eslint-disable-next-line react-hooks/exhaustive-deps @@ -178,8 +185,11 @@ const GeneralSettings: FC = () => { label="سال تاسیس" name="establishedYear" type="number" - value={formik.values.establishedYear} - onChange={formik.handleChange} + value={formik.values.establishedYear ?? ""} + onChange={(e) => { + const val = e.target.value; + formik.setFieldValue("establishedYear", val === "" ? undefined : Number(val)); + }} onBlur={formik.handleBlur} error_text={formik.touched.establishedYear && formik.errors.establishedYear ? formik.errors.establishedYear : undefined} placeholder="مثال: 1400" diff --git a/src/pages/settings/types/Types.ts b/src/pages/settings/types/Types.ts index e86b2f9..bf1b71d 100644 --- a/src/pages/settings/types/Types.ts +++ b/src/pages/settings/types/Types.ts @@ -17,7 +17,7 @@ export type UpdateRestaurantType = { latitude?: number; longitude?: number; description?: string; - establishedYear?: string; + establishedYear?: number; serviceArea?: GeoJSONPolygon; score?: { purchaseAmount: string;