From 231b4dc913cba54ba645f34f55416fdf653605b5 Mon Sep 17 00:00:00 2001 From: KarimAldeen Date: Wed, 27 Mar 2024 12:34:51 +0300 Subject: [PATCH] #25 --- src/Pages/SupportMessages/Page.tsx | 45 ++++++++++++++ src/Pages/SupportMessages/View/AddForm.tsx | 50 +++++++++++++++ src/Pages/SupportMessages/View/AddPage.tsx | 56 +++++++++++++++++ src/Pages/SupportMessages/formUtil.ts | 46 ++++++++++++++ src/Pages/SupportMessages/useTableColumns.tsx | 62 +++++++++++++++++++ src/Routes.tsx | 29 ++++++++- src/api/supportmessages.ts | 26 ++++++++ src/translate/text | 8 ++- 8 files changed, 318 insertions(+), 4 deletions(-) create mode 100644 src/Pages/SupportMessages/Page.tsx create mode 100644 src/Pages/SupportMessages/View/AddForm.tsx create mode 100644 src/Pages/SupportMessages/View/AddPage.tsx create mode 100644 src/Pages/SupportMessages/formUtil.ts create mode 100644 src/Pages/SupportMessages/useTableColumns.tsx create mode 100644 src/api/supportmessages.ts diff --git a/src/Pages/SupportMessages/Page.tsx b/src/Pages/SupportMessages/Page.tsx new file mode 100644 index 0000000..bb81267 --- /dev/null +++ b/src/Pages/SupportMessages/Page.tsx @@ -0,0 +1,45 @@ + +import React from 'react' +import DashBody from '../../Layout/Dashboard/DashBody' +import DashHeader from '../../Layout/Dashboard/DashHeader' +import LyTable from '../../Layout/Dashboard/LyTable' +import useTableColumns from './useTableColumns' +import { QueryStatusEnum } from '../../config/QueryStatus' +import { useNavigate } from 'react-router-dom' +import AddButton from '../../Layout/Dashboard/AddButton/AddButton' +import { useGetSupportMessages } from '../../api/supportmessages' +import SearchField from '../../Layout/Dashboard/SearchField' + +function Page() { + + const column =useTableColumns() + const {data ,status } = useGetSupportMessages() + const navigate = useNavigate() + const totalRows = data?.meta?.total; + + return ( + // Pass Status to Layout + + +
+ + + navigate('/support_messages/add')}> +
+
+ + + + +
+ ) +} + +export default Page + diff --git a/src/Pages/SupportMessages/View/AddForm.tsx b/src/Pages/SupportMessages/View/AddForm.tsx new file mode 100644 index 0000000..a1817d7 --- /dev/null +++ b/src/Pages/SupportMessages/View/AddForm.tsx @@ -0,0 +1,50 @@ + +import React, { useEffect } from 'react' +import { Col, Row } from 'reactstrap'; +import ValidationField from '../../../Components/ValidationField/ValidationField'; +import { useGetUsers } from '../../../api/users'; +import { useFormikContext } from 'formik'; + +function Form() { + const useFormatToSelect = (Data : any) => { + const format = (data :any) => { + if (!data) return []; + return data.map((item :any) => ({ + value: item?.id, + label: item?.name, + })); + }; + + return format(Data); + }; + const { data: user } = useGetUsers() + + const SelectData = useFormatToSelect(user?.data) + + + + return ( + + + + + + + + + + + + + + + + + + + ) +} + +export default Form + + diff --git a/src/Pages/SupportMessages/View/AddPage.tsx b/src/Pages/SupportMessages/View/AddPage.tsx new file mode 100644 index 0000000..c463281 --- /dev/null +++ b/src/Pages/SupportMessages/View/AddPage.tsx @@ -0,0 +1,56 @@ +import { getInitialValues, getValidationSchema, getDataToSend } from '../formUtil' +import { Tab, TabList, TabPanel as TabBody, Tabs } from 'react-tabs' +import 'react-tabs/style/react-tabs.css'; +import { MdLanguage } from 'react-icons/md' +import ViewPage from '../../../Layout/Dashboard/ViewPage'; +import { useTranslation } from 'react-i18next'; +import useNavigateOnSuccess from '../../../Hooks/useNavigateOnSuccess'; +import { useAddSupportMessages } from '../../../api/supportmessages'; +import Form from './AddForm'; + +const AddSupportMessagesPage = () => { + + + const {mutate , isLoading:IsloadingButton , isSuccess} = useAddSupportMessages() + const handleSubmit = (values:any)=>{ + console.log(values,"values"); + + mutate(values) + + + } + const {t} = useTranslation(); + + useNavigateOnSuccess(isSuccess , '/SupportMessages' ) + + + + const ViewProps = { getInitialValues, getValidationSchema, getDataToSend, handleSubmit,IsloadingButton }; + + + return ( +
+ + + + +
{t("BasicInfo")}
+ + + +
+ +
+
+ +
+
+ + + +
+ ) + +} + +export default AddSupportMessagesPage \ No newline at end of file diff --git a/src/Pages/SupportMessages/formUtil.ts b/src/Pages/SupportMessages/formUtil.ts new file mode 100644 index 0000000..8eb1c46 --- /dev/null +++ b/src/Pages/SupportMessages/formUtil.ts @@ -0,0 +1,46 @@ + +import * as Yup from "yup"; +import { buildFormData } from "../../api/helper/buildFormData"; + +export const getInitialValues = (objectToEdit: any | null = null): any => { + console.log(objectToEdit,"objectToEdit"); + return { + whatsApp: "", + subject: "", + message: "", + id:null, + }; +}; + + +export const getValidationSchema = (editMode: boolean = false): Yup.Schema => { + // Validate input + return Yup.object().shape({ + whatsApp: Yup.string().required('Required'), + subject: Yup.string().required('Required'), + message: Yup.string().required('Required'), + id: Yup.string().required('Required'), + + }); +}; + + + +export const getDataToSend = (values: any): FormData => { + const data = { ...values }; + + + const formData = new FormData(); + buildFormData(formData, data); + return formData; +}; + +export const ChangeDataToPrint = (data:any)=>{ + + let new_array = data + for(let i =0 ; i { + const [t] = useTranslation(); + const deleteMutation = useDeleteSupportMessages() + const navigate = useNavigate() + + return useMemo( + () => [ + + { + name: t("email"), + center: true, + selector: (row: any) => row.email, // Specify selector function for sorting + }, + + { + name: t("whatsApp"), + center: true, + selector: (row: any) => row.whatsApp, // Specify selector function for sorting + }, + + { + name: t("subject"), + center: true, + selector: (row: any) => row.subject, // Specify selector function for sorting + }, + { + name: t("message"), + center: true, + selector: (row: any) => row.message, // Specify selector function for sorting + }, + { + name: "#", + sortable: false, + center: true, + cell: (row:any) => ( + navigate(`/support_messages/${row.id}`) } + showView={false} + showEdit={false} + onDelete={() => deleteMutation.mutate({ id: row.id })} + /> + ), + }, + + ], + [t] + ); +}; + +export default useTableColumns; + diff --git a/src/Routes.tsx b/src/Routes.tsx index 592bb01..9eef796 100644 --- a/src/Routes.tsx +++ b/src/Routes.tsx @@ -30,14 +30,21 @@ import SliderPage from "./Pages/Slider/Page"; import AddSliderPage from "./Pages/Slider/View/AddPage"; import EditSlider from "./Pages/Slider/View/EditPage"; + + +import SupportMessagesPage from "./Pages/SupportMessages/Page"; +import AddSupportMessagesPage from "./Pages/SupportMessages/View/AddPage"; +// import EditSupportMessages from "./Pages/SupportMessages/View/EditPage"; + import UsersPage from "./Pages/Users/Page"; import EditUsersPage from "./Pages/Users/View/EditPage"; import AddUsersNotifactionPage from "./Pages/Users/SendNotifcation/View/AddPage"; -import NotificationPage from "./Pages/Notifcation/Page"; +// import NotificationPage from "./Pages/Notifcation/Page"; import AddNotificationPage from "./Pages/Notifcation/View/AddPage"; -import { MdEmail } from "react-icons/md"; +// import { MdEmail } from "react-icons/md"; +import { MessageOutlined } from "@ant-design/icons"; @@ -136,6 +143,7 @@ export const RoutesLinks: RoutesLinksType[] = [ element: , hidden:true }, + { name: "Slider", element: , @@ -183,6 +191,21 @@ export const RoutesLinks: RoutesLinksType[] = [ element: , hidden:true }, - + { + name: "SupportMessages", + element: , + icon: , + href: "/support_messages", + }, + // { + // href: "/support_messages/:id", + // element: , + // hidden:true + // }, + { + href: "/support_messages/add", + element: , + hidden:true + }, ] \ No newline at end of file diff --git a/src/api/supportmessages.ts b/src/api/supportmessages.ts new file mode 100644 index 0000000..6489cf7 --- /dev/null +++ b/src/api/supportmessages.ts @@ -0,0 +1,26 @@ + +import useGetQueryPagination from "./helper/ueGetPagination"; +import useAddMutation from "./helper/useAddMutation" +import useDeleteMutation from "./helper/useDeleteMutation" +import useGetOneQuery from "./helper/useGetOneQuery"; +import useGetQuery from "./helper/useGetQuery" +import useUpdateMutation from "./helper/useUpdateMutation"; +import useUpdateMutationById from "./helper/useUpdateMutationById"; + +const API = { + ADD: `SupportMessages`, + GET_ALL: `supportMessages`, + DELETE: `SupportMessages`, + UPDATE: `SupportMessages`, + +}; +const KEY = "SupportMessages" + + +export const useGetSupportMessages = (params?:any) => useGetQueryPagination(KEY, API.GET_ALL,params); +export const useGetOneSupportMessages = () => useGetOneQuery(KEY, API.GET_ALL); + +export const useAddSupportMessages = () => useAddMutation(KEY, API.ADD); +export const useUpdateSupportMessages = () => useUpdateMutationById(KEY, API.UPDATE); + +export const useDeleteSupportMessages = () =>useDeleteMutation(KEY, API.DELETE); diff --git a/src/translate/text b/src/translate/text index ea7af03..e8a7c89 100644 --- a/src/translate/text +++ b/src/translate/text @@ -1,2 +1,8 @@ sorry_only_user_can_change_his_status -create_notification \ No newline at end of file +create_notification +SupportMessages +email +whatsApp +subject +message +SupportMessages \ No newline at end of file