From bcc7aa78f57d670fbd8bb4300e385087ef2ce17e Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 30 Sep 2025 14:43:18 +0330 Subject: [PATCH] privacy page --- src/config/Pages.ts | 1 + src/pages/setting/PrivacyPage.tsx | 107 ++++++++++++++++++++ src/pages/setting/service/SettingService.ts | 4 +- src/router/Main.tsx | 2 + src/shared/SideBar.tsx | 2 +- 5 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 src/pages/setting/PrivacyPage.tsx diff --git a/src/config/Pages.ts b/src/config/Pages.ts index 86546bd..3193ff1 100644 --- a/src/config/Pages.ts +++ b/src/config/Pages.ts @@ -59,6 +59,7 @@ export const Pages = { faqCreate: "/pages/faq/create", faqUpdate: "/pages/faq/update/", shipment: "/pages/shipment", + privacy: "/pages/privacy", }, wallet: "/wallet", profile: "/profile", diff --git a/src/pages/setting/PrivacyPage.tsx b/src/pages/setting/PrivacyPage.tsx new file mode 100644 index 0000000..f87e47b --- /dev/null +++ b/src/pages/setting/PrivacyPage.tsx @@ -0,0 +1,107 @@ +import { type FC, useEffect, useState } from 'react' +import { useGetSiteSetting, useUpdateSiteSetting } from './hooks/useSettingData' +import { SiteSettingPageEnum } from './enum/Enum' +import { useFormik } from 'formik' +import type { UpdateSiteSetting } from './types/Types' +import { toast } from 'react-toastify' +import { Pages } from '@/config/Pages' +import * as Yup from 'yup' +import { useNavigate } from 'react-router-dom' +import Button from '@/components/Button' +import TextEditor from '@/components/TextEditor' +import PageLoading from '@/components/PageLoading' +import Error from '@/components/Error' +import { TickCircle } from 'iconsax-react' + +const PrivacyPage: FC = () => { + const navigate = useNavigate() + const { data: siteSetting, isLoading: siteSettingLoading, error: siteSettingError } = useGetSiteSetting(SiteSettingPageEnum.policyContent) + const updateSiteSettingMutation = useUpdateSiteSetting() + const [formData, setFormData] = useState({ policyContent: '' }) + + const formik = useFormik({ + initialValues: formData, + validationSchema: Yup.object({ + policyContent: Yup.string().required('حریم خصوصی الزامی است'), + }), + onSubmit: (values) => { + updateSiteSettingMutation.mutate(values, { + onSuccess: () => { + toast.success('حریم خصوصی با موفقیت ویرایش شد') + navigate(Pages.pages.privacy) + } + }) + }, + enableReinitialize: true + }) + + useEffect(() => { + if (siteSetting?.results?.siteSetting?.policyContent) { + const newData = { policyContent: siteSetting.results.siteSetting.policyContent } + setFormData(newData) + } + }, [siteSetting]) + + if (siteSettingLoading) { + return ( +
+ +
+ ) + } + + if (siteSettingError) { + return ( +
+ +
+ ) + } + + return ( +
+
+
+

ویرایش حریم خصوصی

+
+
+ +
+
+ +
+
+
+
+
+ متن حریم خصوصی +
+ formik.setFieldValue('policyContent', value)} + placeholder='متن حریم خصوصی را وارد کنید...' + /> + {formik.touched.policyContent && formik.errors.policyContent && ( +
+ {formik.errors.policyContent} +
+ )} +
+
+
+
+
+ ) +} + +export default PrivacyPage \ No newline at end of file diff --git a/src/pages/setting/service/SettingService.ts b/src/pages/setting/service/SettingService.ts index e9811ab..f9291ee 100644 --- a/src/pages/setting/service/SettingService.ts +++ b/src/pages/setting/service/SettingService.ts @@ -5,7 +5,6 @@ import type { CreateFaqType, FaqDetailResponse, FaqResponse, - SiteSettingResponse, UpdateSiteSetting, } from "../types/Types"; import { FaqPageEnum, SiteSettingPageEnum } from "../enum/Enum"; @@ -55,7 +54,8 @@ export const updateFaq = async (id: string, params: CreateFaqType) => { export const getSiteSetting = async ( page: SiteSettingPageEnum -): Promise => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any +): Promise => { const { data } = await axios.get(`/site-setting?name=${page}`); return data; }; diff --git a/src/router/Main.tsx b/src/router/Main.tsx index 83dcaab..52a2358 100644 --- a/src/router/Main.tsx +++ b/src/router/Main.tsx @@ -50,6 +50,7 @@ import FaqList from '@/pages/setting/FaqList' import FaqCreate from '@/pages/setting/FaqCreate' import FaqUpdate from '@/pages/setting/FaqUpdate' import ShipmentPage from '@/pages/setting/ShipmentPage' +import PrivacyPage from '@/pages/setting/PrivacyPage' const MainRouter: FC = () => { @@ -125,6 +126,7 @@ const MainRouter: FC = () => { } /> } /> } /> + } /> diff --git a/src/shared/SideBar.tsx b/src/shared/SideBar.tsx index ec52c48..053bfbb 100644 --- a/src/shared/SideBar.tsx +++ b/src/shared/SideBar.tsx @@ -816,7 +816,7 @@ const PagesSubMenu: FC = () => {