diff --git a/src/Layouts/DefaultLayout.tsx b/src/Layouts/DefaultLayout.tsx index ba48a21..e1217ad 100644 --- a/src/Layouts/DefaultLayout.tsx +++ b/src/Layouts/DefaultLayout.tsx @@ -1,6 +1,6 @@ import { HStack, Image, Text, VStack } from "@chakra-ui/react"; import React, { FC, useContext } from "react"; -import { RiNotificationLine } from "react-icons/ri"; +// import { RiNotificationLine } from "react-icons/ri"; import { NavLink, useLocation, useNavigate } from "react-router-dom"; import { nav } from "../Routes/Nav"; import logo from '../assets/logo.svg'; @@ -74,7 +74,7 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { - + {/* */} navigate('/profile')} > diff --git a/src/Pages/ManageCMS/AboutUs/AboutUsAddModel.tsx b/src/Pages/ManageCMS/AboutUs/AboutUsAddModel.tsx index 7424d1e..02fcd4c 100644 --- a/src/Pages/ManageCMS/AboutUs/AboutUsAddModel.tsx +++ b/src/Pages/ManageCMS/AboutUs/AboutUsAddModel.tsx @@ -16,6 +16,7 @@ import "react-quill/dist/quill.snow.css"; // Import the styles import { useState } from "react"; import { useUpdateAboutUsMutation } from "../../../Redux/Service/manage.aboutus.service"; import { useForm, Controller } from "react-hook-form"; // Import React Hook Form +import { toaster, Toaster } from "../../../components/ui/toaster"; function AboutUsAddModel({ aboutUsData }: { aboutUsData: any }) { const [isOpen, setIsOpen] = useState(false); @@ -55,87 +56,95 @@ function AboutUsAddModel({ aboutUsData }: { aboutUsData: any }) { }).unwrap(); setIsOpen(false); // Close dialog on success reset(); // Reset the form - } catch (error) { + } catch (error: any) { console.error("Update failed:", error); + toaster.create({ + title: "Error", + description: `${error.data.message || "Failed to update"}`, + type: "error", + }); } }; return ( - - - - - - - - - Edit About Us - - - - - - - - About Us Content - - {/* Use Controller to integrate ReactQuill with React Hook Form */} - ( - - )} - /> - - - - - + <> + + - + - setIsOpen(false)} /> - - + + + + Edit About Us + + + + + + + + About Us Content + + {/* Use Controller to integrate ReactQuill with React Hook Form */} + ( + + )} + /> + + + + + + + + + setIsOpen(false)} /> + + + + ); } diff --git a/src/Pages/ManageUsers/RegisterUsers/AddRegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/AddRegisterUsers.tsx index c421c1b..861650c 100644 --- a/src/Pages/ManageUsers/RegisterUsers/AddRegisterUsers.tsx +++ b/src/Pages/ManageUsers/RegisterUsers/AddRegisterUsers.tsx @@ -1,4 +1,4 @@ -import { Field, Input, Stack } from "@chakra-ui/react"; +import { Box, Field, Input, Stack } from "@chakra-ui/react"; import { DialogActionTrigger, DialogBody, @@ -12,20 +12,31 @@ import { } from "../../../components/ui/dialog"; import { Button } from "../../../components/ui/button"; import { IoMdAdd } from "react-icons/io"; +import { useState } from "react"; // import { useCreateUserMutation } from "../../../Redux/Service/manage.user"; // import { useState } from "react"; function AddRegisterUsers() { // const [createUser] = useCreateUserMutation(); + const [userType, setUserType] = useState(""); - // const [user, setUser] = useState({ - // first_name: '', - // last_name: '', - // date_of_birth: '', - // gender: '', - // date_of_birth: '', - // principle_language_linkss: [], - // }); + const [user, setUser] = useState<{ + principal_type_xid: number; + principal_source_xid: number | ""; + first_name: string; + last_name: string; + gender: string; + date_of_birth: string; + language_name: string[]; + }>({ + principal_type_xid: 1, + principal_source_xid: userType, + first_name: '', + last_name: '', + gender: '', + date_of_birth: '', + language_name: [], + }); return ( @@ -36,13 +47,13 @@ function AddRegisterUsers() { @@ -57,42 +68,110 @@ function AddRegisterUsers() { First Name setUser({ ...user, first_name: e.target.value })} /> Last Name setUser({ ...user, last_name: e.target.value })} /> Gender setUser({ ...user, gender: e.target.value })} /> DOB setUser({ ...user, date_of_birth: e.target.value })} /> - + + Select User Type + + + + + + {/* OTP Verified + /> */} Language + setUser({ + ...user, + language_name: e.target.value + .split(",") + .map(lang => lang.trim()) + .filter(Boolean), // remove empty strings + }) + } + /> diff --git a/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx index 11d011b..e7ffd23 100644 --- a/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx +++ b/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx @@ -1,5 +1,6 @@ import { Box, HStack, + Image, // Image, Text, } from "@chakra-ui/react"; @@ -10,10 +11,13 @@ import DataTable from "../../../components/DataTable"; import { Switch } from "../../../components/ui/switch"; import ViewRegisterUsers from "./ViewRegisterUsers"; import EditRegisterUsers from "./EditRegisterUsers"; -import AddRegisterUsers from "./AddRegisterUsers"; +// import AddRegisterUsers from "./AddRegisterUsers"; import { useEffect, useState } from "react"; -import { useGetManageUserQuery, UserData, useUserToggleMutation } from "../../../Redux/Service/manage.user"; +import { useDeleteUserMutation, useGetManageUserQuery, UserData, useUserToggleMutation } from "../../../Redux/Service/manage.user"; import SearchComponent from "../../../components/SearchComponent"; +import AlertDailog from "../../../components/AlertDailog"; +import { toaster } from "../../../components/ui/toaster"; +import Delete from "../../../components/ActionIcons/Delete"; // import Delete from "../../../components/ActionIcons/Delete"; const tableHeadRow = [ @@ -67,6 +71,10 @@ const RegisterUsers = () => { const [localData, setLocalData] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const [userToggle] = useUserToggleMutation() + const [deleteFaqPost] = useDeleteUserMutation() + const [deleteModal, setDeleteModal] = useState(false) + const [selectedFaqId, setSelectedFaqId] = useState(null); + console.log("Register Users Data", data?.data.data); useEffect(() => { @@ -108,6 +116,29 @@ const RegisterUsers = () => { } } + const handleDeleteFaq = async (faqId: number) => { + try { + const response = await deleteFaqPost({ id: faqId }).unwrap(); + if (response?.status === "success") { + toaster.create({ + title: "Success", + description: "User deleted successfully", + type: "success", + }); + refetch() + console.log("User deleted successfully:", response); + } + // Optionally, refetch data or update state after deletion + } catch (error) { + console.error("Error deleting User:", error); + toaster.create({ + title: "Error", + description: "Something went wrong", + type: "error", + }); + } + }; + const managepost = filteredData?.flatMap((agency: UserData, index: number) => ({ "Sr. No": (currentPage - 1) * (data?.data.per_page ?? 0) + index + 1, "First Name": agency.first_name, @@ -134,6 +165,24 @@ const RegisterUsers = () => { onChange={() => handleToggle(agency.id, agency.is_active ? '1' : '0')} /> + { + setSelectedFaqId(agency.id); + setDeleteModal(true) + }} />} + alertText="Do you want to delete user?" + alertIcon={} + alertCaption="are you sure you want to delete ?" + onClose={() => setDeleteModal(false)} + onConfirm={() => { + // console.log("Deleting FAQ with ID:", selectedFaqId); // Correct ID + if (selectedFaqId) { + setDeleteModal(false); + handleDeleteFaq(selectedFaqId); + } + }} + /> ), })) @@ -161,7 +210,7 @@ const RegisterUsers = () => { refetch() }} /> - + {/* */} [...prevImages, file]); + // setImages((prevImages) => [...prevImages, file]); + if (file) { + setImages([file]) + } } }; @@ -126,11 +129,11 @@ function EditTemplateModel({ id, localData, refetch }: { id: number, localData: } setIsOpen(false); refetch() - } catch (error) { + } catch (error: any) { console.error("Error updating template:", error); toaster.create({ title: "Error", - description: "Failed to update template. Please try again.", + description: `${error.response?.data?.message || "Please try again later."}`, type: "error", }); } diff --git a/src/Pages/MasterModule/TemplateMaster/TemplateAddModel.tsx b/src/Pages/MasterModule/TemplateMaster/TemplateAddModel.tsx index 40e0492..d176dd3 100644 --- a/src/Pages/MasterModule/TemplateMaster/TemplateAddModel.tsx +++ b/src/Pages/MasterModule/TemplateMaster/TemplateAddModel.tsx @@ -50,7 +50,10 @@ function TemplateAddModel({ refetch }: { refetch: VoidFunction }) { return; } - setImages((prevImages) => [...prevImages, file]); + // setImages((prevImages) => [...prevImages, file]); + if(file){ + setImages([file]) + } } }; @@ -116,9 +119,14 @@ function TemplateAddModel({ refetch }: { refetch: VoidFunction }) { setUserType(""); setImages([]); setIsOpen(false) - } catch (error) { + } catch (error: any) { console.error("Error creating template:", error); // alert("Failed to create template"); + toaster.create({ + title: "Error", + description: `${error.response?.data?.message || "Please try again later."}`, + type: "error", + }); } }; diff --git a/src/Pages/SubAdmin/AddModel.tsx b/src/Pages/SubAdmin/AddModel.tsx index 50a7447..1dbc025 100644 --- a/src/Pages/SubAdmin/AddModel.tsx +++ b/src/Pages/SubAdmin/AddModel.tsx @@ -16,7 +16,7 @@ import { PermissionResponse, useCreateSubAdminPostMutation } from "../../Redux/S import { toaster, Toaster } from "../../components/ui/toaster"; import { useEffect, useState } from "react"; -function AddModel({ refetch, allPermissions }: { refetch: VoidFunction, allPermissions: PermissionResponse }) { +function AddModel({ refetch, allPermissions }: { refetch: VoidFunction, allPermissions?: PermissionResponse }) { const [createSubAdminPost] = useCreateSubAdminPostMutation(); // State fields @@ -281,15 +281,20 @@ useEffect(() => { - {allPermissions?.data.permission.map((permission: any) => ( - handleCheckboxToggle(permission.id)}> - {permission.app_resource_title} - - ))} + {Array.isArray(allPermissions?.data?.permission) + ? allPermissions.data.permission.map((permission: any) => ( + handleCheckboxToggle(permission.id)} + > + {permission.app_resource_title} + + )) + : Loading permissions... + } diff --git a/src/Pages/SubAdmin/EditSubAdmin.tsx b/src/Pages/SubAdmin/EditSubAdmin.tsx index 7a3d259..329d11b 100644 --- a/src/Pages/SubAdmin/EditSubAdmin.tsx +++ b/src/Pages/SubAdmin/EditSubAdmin.tsx @@ -19,17 +19,15 @@ import { Toaster, toaster } from "../../components/ui/toaster"; const resourceIdToLabel: { [key: number]: string } = { 1: 'Dashboard', - 2: 'Manage contact us', - 3: 'Manage User', - 4: 'Manage CMS', - 5: 'Manage Post', - 6: 'Manage Reports', - 7: 'Manage Sub-Admin', - 8: 'My profile', - 9: 'Manage Jobs', - 10: 'Manage feedbacks', - 11: 'Manage community', - 12: 'Notification', + 2: 'Manage User', + 3: 'Manage Post', + 4: 'Manage Subadmin', + 5: 'Manage Jobs', + 6: 'Manage Groups', + 7: 'Manage Contact Us', + 8: 'Manage CMS', + 9: 'My Profile', + 10: 'Master Module', }; @@ -43,7 +41,7 @@ interface ResourceActionLink { } } -function EditSubAdmin({ id, refetch, allPermissions }: { id: number, refetch: VoidFunction, allPermissions: PermissionResponse }) { +function EditSubAdmin({ id, refetch, allPermissions }: { id: number, refetch: VoidFunction, allPermissions?: PermissionResponse }) { const [trigger, { data }] = useLazyViewSubAdminQuery(); const [updateSubAdmin] = useUpdateSubAdminMutation() const [isOpen, setIsOpen] = useState(false); @@ -269,44 +267,6 @@ function EditSubAdmin({ id, refetch, allPermissions }: { id: number, refetch: Vo Permissions - {/* - - Dashboard - - - Manage contact us - - - manage User - - - Manage CMS - - - Manage Post - - - Manage Reports - - - manage Sub-Admin - - - My profile - - - Manage Jobs{" "} - - - manage feedbacks - - - Manage community{" "} - - - Notification - - */} {editData.permission.map((permission) => { const label = resourceIdToLabel[permission.app_resource_xid]; diff --git a/src/Pages/SubAdmin/SubAdmin.tsx b/src/Pages/SubAdmin/SubAdmin.tsx index e9bf485..0aa0358 100644 --- a/src/Pages/SubAdmin/SubAdmin.tsx +++ b/src/Pages/SubAdmin/SubAdmin.tsx @@ -11,7 +11,7 @@ import ViewSubAdmin from "./ViewSubAdmin" import Delete from "../../components/ActionIcons/Delete" import { PermissionResponse, useDeleteSubAdminPostMutation, useGetPermissionQuery, useGetSubAdminQuery } from "../../Redux/Service/manage.subadmin.service" import { useEffect, useState } from "react" -import { toaster } from "../../components/ui/toaster" +import { Toaster, toaster } from "../../components/ui/toaster" import { useDebounce } from "../../components/Hooks/useDebounce" import SearchComponent from "../../components/SearchComponent" @@ -140,7 +140,7 @@ const SubAdmin = () => { {/* */} - {allPermissions && } + { onChange={handleSearchChange} /> {/* */} - {allPermissions && } + { isError={isError} /> + ) } diff --git a/src/Redux/Service/manage.user.ts b/src/Redux/Service/manage.user.ts index 45051e1..68bba4b 100644 --- a/src/Redux/Service/manage.user.ts +++ b/src/Redux/Service/manage.user.ts @@ -10,11 +10,11 @@ export interface UserData { gender: string; date_of_birth: string; is_active: boolean; - principal_type:{ + principal_type: { id: number; principal_type_title: string; }, - principle_language_linkss:{ + principle_language_linkss: { id: number; language_xid: number; iam_principal_xid: number; @@ -103,13 +103,13 @@ export const registerUser = createApi({ }), }), - // deleteFaqPost: builder.mutation<{ status: string; message: string }, { id: number }>({ - // query: ({ id }) => ({ - // url: `/faq-delete`, - // method: "POST", - // body: { id }, - // }), - // }), + deleteUser: builder.mutation({ + query: ({ id }) => ({ + url: `/manage-user-delete`, + method: "POST", + body: { id }, + }), + }), }), }); @@ -121,5 +121,5 @@ export const { useUserToggleMutation, useGetDeactivateUserQuery, useUserDeactivateToggleMutation, - // useDeleteFaqPostMutation + useDeleteUserMutation } = registerUser; \ No newline at end of file diff --git a/src/components/DataTable.tsx b/src/components/DataTable.tsx index e39d786..ba3951c 100644 --- a/src/components/DataTable.tsx +++ b/src/components/DataTable.tsx @@ -122,6 +122,14 @@ const DataTable: React.FC = ({ ) : ( + {data.length === 0 && ( + + No data + + No records found — they’ll appear here if available. + + + )} {data.map((item: any, index) => (