From a80163d589c7aa1d54a380c577c7c204736c4bdf Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Tue, 11 Feb 2025 14:47:33 +0530 Subject: [PATCH 01/10] 'Login chnges' --- src/Pages/Login.tsx | 179 ++++++++++++++++++++++++++------------------ 1 file changed, 107 insertions(+), 72 deletions(-) diff --git a/src/Pages/Login.tsx b/src/Pages/Login.tsx index 9db1596..4253c8f 100644 --- a/src/Pages/Login.tsx +++ b/src/Pages/Login.tsx @@ -1,45 +1,45 @@ -import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react" -import axios from "axios" -import { useContext, useState } from "react" -import { useForm } from "react-hook-form" -import { useDispatch } from "react-redux" -import GlobalStateContext from "../Contexts/GlobalStateContext" -import { setToken } from "../Redux/Service/authSlice" -import logo from '../assets/logo.svg' -import { Button } from "../components/ui/button" -import { Field } from "../components/ui/field" -import { Toaster } from "../components/ui/toaster" -import { PasswordInput } from "../components/ui/password-input" -import { useNavigate } from "react-router-dom" +import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import axios from "axios"; +import { useContext, useState } from "react"; +import { useForm } from "react-hook-form"; +import { useDispatch } from "react-redux"; +import GlobalStateContext from "../Contexts/GlobalStateContext"; +import { setToken } from "../Redux/Service/authSlice"; +import logo from "../assets/logo.svg"; +import { Button } from "../components/ui/button"; +import { Field } from "../components/ui/field"; +import { Toaster } from "../components/ui/toaster"; +import { PasswordInput } from "../components/ui/password-input"; +import { useNavigate } from "react-router-dom"; interface FormValues { - mobileNumber: number - password: string + mobileNumber: number; + password: string; } const Login = () => { - const navigate = useNavigate() - const dispatch = useDispatch() - const [isLoading, setIsLoading] = useState(false) + const navigate = useNavigate(); + const dispatch = useDispatch(); + const [isLoading, setIsLoading] = useState(false); const context = useContext(GlobalStateContext); if (!context) { - throw new Error('App must be used within a GlobalStateProvider'); + throw new Error("App must be used within a GlobalStateProvider"); } const { setIsAuthenticate } = context; const { register, handleSubmit, formState: { errors }, - } = useForm() + } = useForm(); const onSubmit = handleSubmit(async (data) => { setIsLoading(true); - + // Encode Basic Auth Credentials - const username = import.meta.env.VITE_USER_NAME||''; // Replace with actual username - const password = import.meta.env.VITE_PASSWORD||''; // Replace with actual password + const username = import.meta.env.VITE_USER_NAME || ""; // Replace with actual username + const password = import.meta.env.VITE_PASSWORD || ""; // Replace with actual password const basicAuth = `${username} : ${password}`; // Encode to Base64 - + try { const res = await axios.post( `${import.meta.env.VITE_API_URL}/login`, @@ -56,84 +56,119 @@ const Login = () => { ); if (res.data) { - setIsAuthenticate(true) - console.log('===================================='); + setIsAuthenticate(true); + console.log("===================================="); console.log(res.data?.data); - console.log('===================================='); - navigate('/') + console.log("===================================="); + navigate("/"); dispatch(setToken(String(res.data?.data["access-token"]))); } else { - console.log("===================================="); console.log(res); console.log("===================================="); - } - } catch (error) { if (error) { - console.error("Login failed", error); - setIsLoading(false) - + setIsLoading(false); } } }); - - - return ( - - - - - + + - - - - - - - -
+ +
+
+ + + LOGIN + - - - -
- - LOGIN - - - - - {/* Forget password */} + + + + {/* Forget password */} - - - {/* Forget password */} + + + {/* Forget password */} - + Forgot password - -
- ) -} + ); +}; -export default Login \ No newline at end of file +export default Login; From b9b62bb034689a736edaecf6b0ba5a86d4e7f3c1 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 11 Feb 2025 16:10:48 +0530 Subject: [PATCH 02/10] udpate --- src/App.tsx | 50 ++++++++++++++++++++++++++--------- src/Layouts/DefaultLayout.tsx | 22 ++++++++++++--- src/index.css | 14 ++++++++++ 3 files changed, 70 insertions(+), 16 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index b9302aa..a4eae2f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,21 +1,47 @@ -import { useContext } from 'react'; -import { Route, BrowserRouter as Router, Routes } from "react-router-dom"; -import GlobalStateContext from './Contexts/GlobalStateContext'; -import DefaultLayout from './Layouts/DefaultLayout'; -import Login from './Pages/Login'; -import { RouteLink } from './Routes/Routes'; +import { useContext, useEffect } from "react"; +import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router-dom"; +import GlobalStateContext from "./Contexts/GlobalStateContext"; +import DefaultLayout from "./Layouts/DefaultLayout"; +import Login from "./Pages/Login"; +import { RouteLink } from "./Routes/Routes"; -function App() { +function App() { const context = useContext(GlobalStateContext); - if (!context) throw new Error('App must be used within a GlobalStateProvider'); - const { isAuthenticate } = context; + if (!context) throw new Error("App must be used within a GlobalStateProvider"); + + const { isAuthenticate, setIsAuthenticate } = context; + + useEffect(() => { + const token = localStorage.getItem("token"); + setIsAuthenticate(!!token); // Converts token to boolean + }, [setIsAuthenticate]); + + console.log("Auth Status:", isAuthenticate); return ( - } /> - {RouteLink.map(({ path, Component }, index) => (} />))}) : ()} /> - } /> + {/* Redirect logged-in users away from login */} + : } /> + + {/* Protected Routes */} + + + {RouteLink.map(({ path, Component }, index) => ( + } /> + ))} + + + ) : ( + + )} + /> + + {/* Catch-all route to prevent unauthorized access */} + } /> ); diff --git a/src/Layouts/DefaultLayout.tsx b/src/Layouts/DefaultLayout.tsx index 2e63eae..1cf5b32 100644 --- a/src/Layouts/DefaultLayout.tsx +++ b/src/Layouts/DefaultLayout.tsx @@ -1,5 +1,5 @@ import { HStack, Image, Text, VStack } from "@chakra-ui/react"; -import React, { FC } from "react"; +import React, { FC, useContext } from "react"; import { RiNotificationLine } from "react-icons/ri"; import { NavLink, useLocation, useNavigate } from "react-router-dom"; import { nav } from "../Routes/Nav"; @@ -9,15 +9,29 @@ import { Avatar } from "../components/ui/avatar"; import { LuLogOut } from "react-icons/lu"; import { logout, setToken } from "../Redux/Service/authSlice"; import { useDispatch } from "react-redux"; +import GlobalStateContext from "../Contexts/GlobalStateContext"; const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { + const dispatch = useDispatch() const navigate = useNavigate() const location = useLocation() + const context = useContext(GlobalStateContext); + if (!context) { + throw new Error('App must be used within a GlobalStateProvider'); + } + const { setIsAuthenticate } = context; + // Logout function + const handleLogout = () => { + dispatch(logout()) + localStorage.removeItem("token"); // Clear token + setIsAuthenticate(false); // Update state + }; + return ( @@ -27,8 +41,8 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { {nav?.map(({ title, path, Icon, type, children }, index) => type === 'single' ? - {title} : - + {title} : + navigate(path)} gap={0} style={{ cursor: 'pointer', borderRadius: '8px', padding: '5px', width: '100%', display: 'flex', alignItems: 'center', border: '1px solid #ffffff', backgroundColor:'#fff',color:'#000', fontSize: '14px', }}> {title} {children?.map(({ title, path, Icon }, index) => navigate(path)} style={{ marginTop: 6, cursor: 'pointer', borderRadius: '8px', padding: '6px', width: '100%', display: 'flex', alignItems: 'center', gap: 6, border: '1px solid #ffffff', backgroundColor:'#fff',color:'#919198' }} > {title})} @@ -37,7 +51,7 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { - {dispatch(logout()), navigate('/login')}} className="link" style={{ cursor: 'pointer', borderRadius: '8px', padding: '6px', width: '100%', display: 'flex', alignItems: 'center', gap: 6, border: '1px solid #ffffff', backgroundColor:'#fff', color:'#000', boxShadow:'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px'}} > Logout + Logout diff --git a/src/index.css b/src/index.css index 521b87f..862601a 100644 --- a/src/index.css +++ b/src/index.css @@ -14,12 +14,26 @@ body { margin: 0; padding: 0; font-family: "Roboto", serif; + background-color: #fff; } .Oxygen { font-family: "Oxygen", serif } +/* Change text selection color */ +::selection { + background-color: #02A0A0; /* Yellow */ + color: #fff; /* Black */ +} + +/* For Firefox */ +::-moz-selection { + background-color: #02A0A0; + color: #fff; +} + + .active { background-color: #02A0A0 !important; From e36c343cbfa34a055ec84eb699809e671b7d4eb4 Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:19:32 +0530 Subject: [PATCH 03/10] [ forget modal ] --- src/Layouts/DefaultLayout.tsx | 2 +- src/Pages/ForgetPassword.tsx | 65 ++++++++++++++++++++++++++++ src/Pages/Login.tsx | 17 +++++--- src/components/MainFrame.tsx | 2 +- src/components/ui/password-input.tsx | 2 +- 5 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 src/Pages/ForgetPassword.tsx diff --git a/src/Layouts/DefaultLayout.tsx b/src/Layouts/DefaultLayout.tsx index 2e63eae..3d2e95e 100644 --- a/src/Layouts/DefaultLayout.tsx +++ b/src/Layouts/DefaultLayout.tsx @@ -43,7 +43,7 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { - + navigate('/profile')} > diff --git a/src/Pages/ForgetPassword.tsx b/src/Pages/ForgetPassword.tsx new file mode 100644 index 0000000..e0be6bc --- /dev/null +++ b/src/Pages/ForgetPassword.tsx @@ -0,0 +1,65 @@ +import { Field, Input, Stack, Text } from "@chakra-ui/react"; +import { Button } from "../components/ui/button"; +import { + DialogBody, + DialogContent, + DialogFooter, + DialogHeader, + DialogRoot, + DialogTitle, + DialogTrigger, +} from "../components/ui/dialog"; +function ForgetPassword() { + return ( + + + + Forgot password? + + + + + + + Forgot Password + + + + + + + + Please Enter Email Address + + + + + + + + + + + ); +} + +export default ForgetPassword; diff --git a/src/Pages/Login.tsx b/src/Pages/Login.tsx index 541ec13..0287d06 100644 --- a/src/Pages/Login.tsx +++ b/src/Pages/Login.tsx @@ -1,4 +1,4 @@ -import { Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import { Box, Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; import axios from "axios"; import { useContext, useState } from "react"; import { useForm } from "react-hook-form"; @@ -11,6 +11,7 @@ import { Field } from "../components/ui/field"; import { Toaster } from "../components/ui/toaster"; import { PasswordInput } from "../components/ui/password-input"; import { useNavigate } from "react-router-dom"; +import ForgetPassword from "./ForgetPassword"; interface FormValues { mobileNumber: number; @@ -103,14 +104,14 @@ const Login = () => {
-
- + { LOGIN - + { w={"100%"} invalid={!!errors.password} errorText={errors.password?.message} + mb={2} > { Login - Forgot password - + + -
+
diff --git a/src/components/MainFrame.tsx b/src/components/MainFrame.tsx index 2646c63..285d3b9 100644 --- a/src/components/MainFrame.tsx +++ b/src/components/MainFrame.tsx @@ -13,7 +13,7 @@ interface MainFrameProps { const MainFrame: FC = ({ children }) => { return ( - + ( Date: Tue, 11 Feb 2025 17:20:36 +0530 Subject: [PATCH 04/10] update --- dev-dist/sw.js | 2 +- .../ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx | 13 ++- src/Redux/Service/manage.aboutus.service.ts | 11 --- src/Redux/Service/privacy.policy.service.ts | 83 ++++++++++++++----- 4 files changed, 73 insertions(+), 36 deletions(-) diff --git a/dev-dist/sw.js b/dev-dist/sw.js index 2892c8c..bcb0387 100644 --- a/dev-dist/sw.js +++ b/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.s1fup7lrbig" + "revision": "0.vu9poovgqsg" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx b/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx index d6fa126..6397e9f 100644 --- a/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx +++ b/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx @@ -2,9 +2,17 @@ import { Box, HStack, Text } from "@chakra-ui/react"; import MainFrame from "../../../components/MainFrame" import { p } from "framer-motion/client"; import PrivacyPolicyAddModel from "./PrivacyPolicyAddModel"; - - +import { useGetPrivacyPolicyQuery } from "../../../Redux/Service/privacy.policy.service.ts"; const PrivacyPolicy = () => { + + const { + data + } = useGetPrivacyPolicyQuery() + + console.log('============================'); + console.log(data); + console.log('============================'); + return ( @@ -21,7 +29,6 @@ const PrivacyPolicy = () => { - diff --git a/src/Redux/Service/manage.aboutus.service.ts b/src/Redux/Service/manage.aboutus.service.ts index 300f497..6b82556 100644 --- a/src/Redux/Service/manage.aboutus.service.ts +++ b/src/Redux/Service/manage.aboutus.service.ts @@ -52,17 +52,6 @@ export const aboutUs = createApi({ export const { useGetAboutUsQuery, - - - - - - - - - - - useGetPostByIdQuery, useCreatePostMutation, useUpdatePostMutation, diff --git a/src/Redux/Service/privacy.policy.service.ts b/src/Redux/Service/privacy.policy.service.ts index b7e3126..4eaf5ac 100644 --- a/src/Redux/Service/privacy.policy.service.ts +++ b/src/Redux/Service/privacy.policy.service.ts @@ -1,26 +1,67 @@ -import { createApi } from "@reduxjs/toolkit/query"; +import { createApi } from "@reduxjs/toolkit/query/react"; // Fix import import { baseQueryWithReauth } from "./apiSlice"; + + export const privacyPolicy = createApi({ - reducerPath: "privacyPolicy", - baseQuery: baseQueryWithReauth, // Use enhanced baseQuery with error handling - endpoints: (builder) => ({ - - - - getPosts: builder.query({ query: () => "/posts" }), - - - - - + reducerPath: "privacyPolicy", + baseQuery: baseQueryWithReauth, // Use enhanced baseQuery with error handling + endpoints: (builder) => ({ + // 🔹 GET: Fetch all privacy policies + getPrivacyPolicy: builder.query({ + query: () => "/privacy-policy", }), - }); + + // 🔹 GET: Fetch a single post by ID + // getPostById: builder.query({ + // query: (id) => `/posts/${id}`, + // }), + + // 🔹 POST: Create a new post + // createPost: builder.mutation>({ + // query: (newPost) => ({ + // url: "/posts", + // method: "POST", + // body: newPost, + // }), + // }), + + // 🔹 PUT: Update an existing post + // updatePost: builder.mutation }>({ + // query: ({ id, updatedData }) => ({ + // url: `/posts/${id}`, + // method: "PUT", + // body: updatedData, + // }), + // }), + + // 🔹 DELETE: Remove a post by ID + // deletePost: builder.mutation<{ success: boolean }, number>({ + // query: (id) => ({ + // url: `/posts/${id}`, + // method: "DELETE", + // }), + // }), + }), +}); + +// Export hooks for usage in components +export const { + useGetPrivacyPolicyQuery, // Export the correct hook - export const { } = privacyPolicy; - - export type Post = { - id: number; - title: string; - body: string; - }; \ No newline at end of file +} = privacyPolicy; + + +// Define types at the top for better readability +export type Post = { + id: number; + title: string; + body: string; +}; + +export type PrivacyPolicy = { + id: number; + language_master_xid: number; + content: string; + is_active: boolean; +}; \ No newline at end of file From 90792de1ac739920556ac3cd81807ece273a2878 Mon Sep 17 00:00:00 2001 From: YasinShaikh123 <123150391+YasinShaikh123@users.noreply.github.com> Date: Tue, 11 Feb 2025 19:48:41 +0530 Subject: [PATCH 05/10] [ forget modal ] --- src/Pages/Login.tsx | 35 ++++++++++++------- src/Redux/Service/forget.password.service.ts | 36 ++++++++++++++++++++ src/components/ui/toaster.tsx | 2 +- 3 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 src/Redux/Service/forget.password.service.ts diff --git a/src/Pages/Login.tsx b/src/Pages/Login.tsx index 487ded4..23f08c8 100644 --- a/src/Pages/Login.tsx +++ b/src/Pages/Login.tsx @@ -1,4 +1,12 @@ -import { Box, Center, HStack, Image, Input, Text, VStack } from "@chakra-ui/react"; +import { + Box, + Center, + HStack, + Image, + Input, + Text, + VStack, +} from "@chakra-ui/react"; import axios from "axios"; import { useContext, useState } from "react"; import { useForm } from "react-hook-form"; @@ -8,7 +16,7 @@ import { setToken } from "../Redux/Service/authSlice"; import logo from "../assets/logo.svg"; import { Button } from "../components/ui/button"; import { Field } from "../components/ui/field"; -import { Toaster } from "../components/ui/toaster"; +import { toaster, Toaster } from "../components/ui/toaster"; import { PasswordInput } from "../components/ui/password-input"; import { useNavigate } from "react-router-dom"; import ForgetPassword from "./ForgetPassword"; @@ -35,7 +43,6 @@ const Login = () => { const onSubmit = handleSubmit(async (data) => { setIsLoading(true); - // Encode Basic Auth Credentials const username = import.meta.env.VITE_USER_NAME || ""; // Replace with actual username const password = import.meta.env.VITE_PASSWORD || ""; // Replace with actual password @@ -53,16 +60,17 @@ const Login = () => { Authorization: `Basic ${basicAuth}`, "Content-Type": "application/json", }, - } ); + console.log("============",res); + if (res.data) { setIsAuthenticate(true); console.log("===================================="); console.log(res.data?.data); - console.log('===================================='); - navigate('/dashboard') + console.log("===================================="); + navigate("/dashboard"); dispatch(setToken(String(res.data?.data["access-token"]))); } else { console.log("===================================="); @@ -71,16 +79,17 @@ const Login = () => { } } catch (error) { if (error) { - console.error("Login failed", error); - setIsLoading(false) - + toaster.create({ + // title: error?.response?.data?.message, + title: "Something Went Wrong", + type: "info", + }) + // console.log("Login failed", error?.response?.data?.message); + setIsLoading(false); } } }); - - - return ( { required: "Mobile Number address is required", })} placeholder="Mobile Number Address" - /> + /> {/* Forget password */} ({ + + + + // 🔹 GET: Fetch all posts + getAboutUs: builder.query({ + query: () => "/send-otp", + }), + + }), +}); + +export const { + useGetAboutUsQuery, +} = forgetPassword; + +// Define Post type +export type Post = { + id: number; + title: string; + body: string; +}; + + +export type AboutUs = { + id: number; + language_master_xid: number; + content: string; + is_active: boolean; +}; diff --git a/src/components/ui/toaster.tsx b/src/components/ui/toaster.tsx index 7503ff7..a4251eb 100644 --- a/src/components/ui/toaster.tsx +++ b/src/components/ui/toaster.tsx @@ -27,7 +27,7 @@ export const Toaster = () => { )} - {toast.title && {toast.title}} + {toast.title && {toast.title}} {toast.description && ( {toast.description} )} From 2149144d84c2e56c1887e647b5ad79ef09dc0b58 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 11 Feb 2025 19:52:50 +0530 Subject: [PATCH 06/10] [ update edit delete view icon hover ] --- dev-dist/sw.js | 2 +- src/Layouts/DefaultLayout.tsx | 27 ++++++++++++------- src/Pages/ManageCMS/FAQ/EditDetails.tsx | 16 ++++++++--- src/Pages/ManageGroups/EditDetailGroup.tsx | 17 ++++++++---- src/Pages/ManageGroups/ViewManageGroup.tsx | 16 ++++++++--- src/Pages/ManageJobs/ManageJobs.tsx | 14 ++++------ src/Pages/ManageJobs/ManageJobsAdd.tsx | 23 ++++++++++------ src/Pages/ManageJobs/ViewManageJob.tsx | 18 ++++++++----- src/Pages/ManagePost/ManagePost.tsx | 6 ++--- src/Pages/ManagePost/ViewDailog.tsx | 21 ++++++++++----- .../DeactivatedAccounts.tsx | 2 +- .../RegisterUsers/EditRegisterUsers.tsx | 14 ++++++++-- .../RegisterUsers/RegisterUsers.tsx | 2 +- .../RegisterUsers/ViewRegisterUsers.tsx | 16 +++++++---- .../AgencyMaster/EditAgencyMaster.tsx | 16 ++++++++--- .../AgencyMaster/ViewAgencyMaster.tsx | 14 +++++++--- src/Pages/SubAdmin/AddModel.tsx | 2 +- src/Pages/SubAdmin/SubAdmin.tsx | 4 +-- src/Pages/SubAdmin/ViewSubAdmin.tsx | 17 +++++++++--- src/Redux/Service/apiSlice.tsx | 10 ++++++- src/components/EditSubAdmin.tsx | 21 ++++++++++----- src/components/MainFrame.tsx | 2 +- 22 files changed, 194 insertions(+), 86 deletions(-) diff --git a/dev-dist/sw.js b/dev-dist/sw.js index 24a967b..115230b 100644 --- a/dev-dist/sw.js +++ b/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.f3u8hds6p7" + "revision": "0.3bv9k3911i8" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/src/Layouts/DefaultLayout.tsx b/src/Layouts/DefaultLayout.tsx index 1cf5b32..97af72e 100644 --- a/src/Layouts/DefaultLayout.tsx +++ b/src/Layouts/DefaultLayout.tsx @@ -7,9 +7,10 @@ import logo from '../assets/logo.svg'; import { AccordionItem, AccordionItemContent, AccordionItemTrigger, AccordionRoot } from "../components/ui/accordion"; import { Avatar } from "../components/ui/avatar"; import { LuLogOut } from "react-icons/lu"; -import { logout, setToken } from "../Redux/Service/authSlice"; +import { logout } from "../Redux/Service/authSlice"; import { useDispatch } from "react-redux"; import GlobalStateContext from "../Contexts/GlobalStateContext"; +import { useLogOutMutation } from "../Redux/Service/apiSlice"; const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { @@ -23,18 +24,29 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { throw new Error('App must be used within a GlobalStateProvider'); } const { setIsAuthenticate } = context; + const [ logOutAdmin ] = useLogOutMutation() // Logout function - const handleLogout = () => { - dispatch(logout()) - localStorage.removeItem("token"); // Clear token - setIsAuthenticate(false); // Update state + const handleLogout = async () => { + try { + // ✅ Call mutation and wait for the response + const res = await logOutAdmin().unwrap(); + console.log("Logout Success:", res); + + // ✅ Clear local storage & update authentication state + dispatch(logout()); + localStorage.removeItem("token"); + setIsAuthenticate(false); + // ✅ Redirect to login page + navigate("/login"); + } catch (error) { + console.error("Logout Failed:", error); + } }; return ( - @@ -49,13 +61,10 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { )} - Logout - - diff --git a/src/Pages/ManageCMS/FAQ/EditDetails.tsx b/src/Pages/ManageCMS/FAQ/EditDetails.tsx index 2ea1b8d..ee9a64e 100644 --- a/src/Pages/ManageCMS/FAQ/EditDetails.tsx +++ b/src/Pages/ManageCMS/FAQ/EditDetails.tsx @@ -1,15 +1,23 @@ +import { TbEdit } from "react-icons/tb"; import { Button } from "../../../components/ui/button" import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../../components/ui/dialog" -import { Field, Grid, Input, Stack, Text, Textarea } from "@chakra-ui/react" +import { Field, Grid, Icon, Input, Stack, Text, Textarea } from "@chakra-ui/react" import { FaRegEdit } from "react-icons/fa"; function EditDetails() { return ( - - - + + + {/* */} diff --git a/src/Pages/ManageGroups/EditDetailGroup.tsx b/src/Pages/ManageGroups/EditDetailGroup.tsx index 31ad9ba..b7da10c 100644 --- a/src/Pages/ManageGroups/EditDetailGroup.tsx +++ b/src/Pages/ManageGroups/EditDetailGroup.tsx @@ -1,19 +1,26 @@ import { Button } from "../../components/ui/button" import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog" -import { Avatar, Box, Field, Heading, Input, Stack, Text } from "@chakra-ui/react" +import { Avatar, Box, Field, Heading, Icon, Input, Stack, Text } from "@chakra-ui/react" import { Switch } from "../../components/ui/switch"; import { FaRegEdit } from "react-icons/fa"; import { AvatarGroup } from "../../components/ui/avatar"; +import { TbEdit } from "react-icons/tb"; function EditDetailGroups() { return ( - - - {/* */} - + + + - - - {/* */} + + + diff --git a/src/Pages/ManageJobs/ManageJobs.tsx b/src/Pages/ManageJobs/ManageJobs.tsx index 0e2beaa..06ec2bf 100644 --- a/src/Pages/ManageJobs/ManageJobs.tsx +++ b/src/Pages/ManageJobs/ManageJobs.tsx @@ -1,15 +1,11 @@ -import { Box, createListCollection, HStack, Image, Input, Text } from "@chakra-ui/react"; -import MainFrame from "../../components/MainFrame" -import ViewSubAdmin from "../SubAdmin/ViewSubAdmin"; -import EditSubAdmin from "../../components/EditSubAdmin"; -import AlertDailog from "../../components/AlertDailog"; -import { InputGroup } from "../../components/ui/input-group"; +import { Box, HStack, Image, Input, Text } from "@chakra-ui/react"; import { LuSearch } from "react-icons/lu"; -import AddModel from "../SubAdmin/AddModel"; -import DataTable from "../../components/DataTable"; import { RiDeleteBin5Line } from "react-icons/ri"; +import AlertDailog from "../../components/AlertDailog"; +import DataTable from "../../components/DataTable"; +import MainFrame from "../../components/MainFrame"; +import { InputGroup } from "../../components/ui/input-group"; import ManageJobsAdd from "./ManageJobsAdd"; -import { SelectContent, SelectItem, SelectLabel, SelectRoot, SelectTrigger, SelectValueText } from "../../components/ui/select"; import ViewManageJob from "./ViewManageJob"; diff --git a/src/Pages/ManageJobs/ManageJobsAdd.tsx b/src/Pages/ManageJobs/ManageJobsAdd.tsx index 4d90998..60f300e 100644 --- a/src/Pages/ManageJobs/ManageJobsAdd.tsx +++ b/src/Pages/ManageJobs/ManageJobsAdd.tsx @@ -1,9 +1,9 @@ -import { Button } from "../../components/ui/button" -import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog" -import { createListCollection, Field, Input, SelectValueText, Stack } from "@chakra-ui/react" +import { Field, Icon, Input, SelectValueText, Stack, createListCollection } from "@chakra-ui/react"; +import { Button } from "../../components/ui/button"; +import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog"; -import { FaRegEdit } from "react-icons/fa" -import { SelectContent, SelectItem, SelectLabel, SelectRoot, SelectTrigger } from "../../components/ui/select" +import { TbEdit } from "react-icons/tb"; +import { SelectContent, SelectItem, SelectLabel, SelectRoot, SelectTrigger } from "../../components/ui/select"; const frameworks = createListCollection({ items: [ @@ -19,9 +19,16 @@ function ManageJobsAdd() { - - - + + + - - - + + + - + ), @@ -36,8 +36,8 @@ const managepost: any[] = [ ), "Publish Data": "12/01/2025", "Activate/Deactivate": ( - - + + ), "Action": ( diff --git a/src/Pages/ManagePost/ViewDailog.tsx b/src/Pages/ManagePost/ViewDailog.tsx index dcd0c94..390da84 100644 --- a/src/Pages/ManagePost/ViewDailog.tsx +++ b/src/Pages/ManagePost/ViewDailog.tsx @@ -1,16 +1,23 @@ -import { MdOutlineRemoveRedEye } from "react-icons/md" -import { Button } from "../../components/ui/button" -import { DialogBody, DialogCloseTrigger, DialogContent, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog" -import { Field, Image, Input, Stack } from "@chakra-ui/react" +import { Field, Icon, Image, Input, Stack } from "@chakra-ui/react" +import { TbEdit } from "react-icons/tb" import img from "../../assets/waterfall.jpg" +import { DialogBody, DialogCloseTrigger, DialogContent, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog" + function ViewDailog() { return ( - - - + + + - + ), })), diff --git a/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx index 30b934f..739830f 100644 --- a/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx +++ b/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx @@ -1,5 +1,5 @@ import { MdOutlineRemoveRedEye } from "react-icons/md"; -import { Field, Input, Stack } from "@chakra-ui/react"; +import { Field, Icon, Input, Stack } from "@chakra-ui/react"; import { DialogActionTrigger, DialogBody, @@ -13,12 +13,22 @@ import { } from "../../../components/ui/dialog"; import { BiEdit } from "react-icons/bi"; import { Button } from "../../../components/ui/button"; +import { TbEdit } from "react-icons/tb"; function EditRegisterUsers() { return ( - + + + - + ), "Action": ( diff --git a/src/Pages/ManageUsers/RegisterUsers/ViewRegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/ViewRegisterUsers.tsx index 7826ee4..5f26943 100644 --- a/src/Pages/ManageUsers/RegisterUsers/ViewRegisterUsers.tsx +++ b/src/Pages/ManageUsers/RegisterUsers/ViewRegisterUsers.tsx @@ -1,5 +1,5 @@ import { MdOutlineRemoveRedEye } from "react-icons/md"; -import { Field, Input, Stack } from "@chakra-ui/react"; +import { Field, Icon, Input, Stack } from "@chakra-ui/react"; import { DialogBody, DialogCloseTrigger, @@ -14,10 +14,16 @@ function ViewRegisterUsers() { return ( - + + + - - - + + + - - + + + */} - + diff --git a/src/Pages/SubAdmin/SubAdmin.tsx b/src/Pages/SubAdmin/SubAdmin.tsx index 974216f..51a01b2 100644 --- a/src/Pages/SubAdmin/SubAdmin.tsx +++ b/src/Pages/SubAdmin/SubAdmin.tsx @@ -76,10 +76,10 @@ const SubAdmin = () => { p={3} w={300} bg={"#fff"} - colorPalette={"blue"} + colorPalette={"cyan"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} + size={"xs"} fontSize={"2sm"} placeholder="Search..." bgColor={'#EEEEEE'} diff --git a/src/Pages/SubAdmin/ViewSubAdmin.tsx b/src/Pages/SubAdmin/ViewSubAdmin.tsx index c1d3a56..b566162 100644 --- a/src/Pages/SubAdmin/ViewSubAdmin.tsx +++ b/src/Pages/SubAdmin/ViewSubAdmin.tsx @@ -1,17 +1,28 @@ import { Button } from "../../components/ui/button" import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog" -import { Field, Grid, Heading, Input, Stack, Text } from "@chakra-ui/react" +import { Field, Grid, Heading, Icon, Input, Stack, Text } from "@chakra-ui/react" import { Checkbox } from "../../components/ui/checkbox" import { MdOutlineRemoveRedEye } from "react-icons/md"; +import { FaRegEdit } from "react-icons/fa"; function ViewSubAdmin() { return ( + + + - + {/* */} - {/* */} + {/* */} diff --git a/src/Redux/Service/apiSlice.tsx b/src/Redux/Service/apiSlice.tsx index 13eb4e6..b93eaf0 100644 --- a/src/Redux/Service/apiSlice.tsx +++ b/src/Redux/Service/apiSlice.tsx @@ -51,6 +51,14 @@ export const dashboard = createApi({ getPosts: builder.query({ query: () => "/posts" }), + + // 🔹 POST: Create a new post + logOut: builder.mutation({ + query: () => ({ + url: "/logout", + method: "POST", + }), + }), @@ -58,7 +66,7 @@ export const dashboard = createApi({ }), }); -export const { useGetPostsQuery } = dashboard; +export const { useGetPostsQuery, useLogOutMutation } = dashboard; export type Post = { id: number; diff --git a/src/components/EditSubAdmin.tsx b/src/components/EditSubAdmin.tsx index 9b826a4..4928b75 100644 --- a/src/components/EditSubAdmin.tsx +++ b/src/components/EditSubAdmin.tsx @@ -1,4 +1,7 @@ +import { Field, Grid, Heading, Icon, Input, Stack, Text } from "@chakra-ui/react"; +import { TbEdit } from "react-icons/tb"; import { Button } from "./ui/button"; +import { Checkbox } from "./ui/checkbox"; import { DialogBody, DialogCloseTrigger, @@ -9,16 +12,22 @@ import { DialogTitle, DialogTrigger, } from "./ui/dialog"; -import { Field, Grid, Heading, Input, Stack, Text } from "@chakra-ui/react"; -import { Checkbox } from "./ui/checkbox"; -import { FaRegEdit } from "react-icons/fa"; function EditSubAdmin() { return ( - + {/* */} + + + + {/* */} diff --git a/src/components/MainFrame.tsx b/src/components/MainFrame.tsx index 2646c63..e486ade 100644 --- a/src/components/MainFrame.tsx +++ b/src/components/MainFrame.tsx @@ -13,7 +13,7 @@ interface MainFrameProps { const MainFrame: FC = ({ children }) => { return ( - + Date: Tue, 11 Feb 2025 19:59:38 +0530 Subject: [PATCH 07/10] update --- .../RegisterUsers/EditRegisterUsers.tsx | 12 ++-------- .../AgencyMaster/AgencyMaster.tsx | 2 +- src/components/ActionIcons/Edit.tsx | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 src/components/ActionIcons/Edit.tsx diff --git a/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx index 739830f..56462c9 100644 --- a/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx +++ b/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx @@ -14,21 +14,13 @@ import { import { BiEdit } from "react-icons/bi"; import { Button } from "../../../components/ui/button"; import { TbEdit } from "react-icons/tb"; +import Edit from "../../../components/ActionIcons/Edit"; function EditRegisterUsers() { return ( - - - + { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} + size={"xs"} fontSize={"2sm"} placeholder="Search..." bgColor={'#EEEEEE'} diff --git a/src/components/ActionIcons/Edit.tsx b/src/components/ActionIcons/Edit.tsx new file mode 100644 index 0000000..d6d4b09 --- /dev/null +++ b/src/components/ActionIcons/Edit.tsx @@ -0,0 +1,22 @@ +import { Icon } from '@chakra-ui/react' +import { TbEdit } from 'react-icons/tb' +import { Tooltip } from '../ui/tooltip' + +const Edit = () => { + return ( + + + + + + ) +} + +export default Edit \ No newline at end of file From 795643eead2a4d82159dbea5a90c8926d14edf01 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Tue, 11 Feb 2025 20:14:29 +0530 Subject: [PATCH 08/10] updaate --- src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx | 4 ++-- src/Routes/Nav.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx b/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx index de0a4d3..0fec845 100644 --- a/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx +++ b/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx @@ -28,8 +28,8 @@ const managepost: any[] = [ "Images": ( // - - + + diff --git a/src/Routes/Nav.ts b/src/Routes/Nav.ts index e0c0a56..83956b9 100644 --- a/src/Routes/Nav.ts +++ b/src/Routes/Nav.ts @@ -17,7 +17,7 @@ export const nav = [ }, { title: "Manage Users", - path: "", + path: "/register-users", Icon: BiUserPin, type:'multiple', children: [ @@ -65,7 +65,7 @@ export const nav = [ }, { title: "Manage CMS", - path: "", + path: "/faq", Icon: AiOutlineFileText, type:'multiple', children: [ @@ -104,7 +104,7 @@ export const nav = [ }, { title: "Master Module", - path: "", + path: "/agency-master", Icon: BsBoxes, type:'multiple', children: [ From 688f6740627f6cdb421849d1fb012420be1d9d10 Mon Sep 17 00:00:00 2001 From: "Siddhesh.More" Date: Wed, 12 Feb 2025 11:54:21 +0530 Subject: [PATCH 09/10] update --- src/Layouts/DefaultLayout.tsx | 15 +++++++--- src/Pages/Dashboard/Dashboard.tsx | 2 ++ src/Pages/Login.tsx | 6 +++- src/Pages/ManageCMS/FAQ/FAQ.tsx | 2 +- src/Pages/ManageContact/ManageContact.tsx | 4 +-- src/Pages/ManageGroups/ManageGroups.tsx | 4 +-- src/Pages/ManageJobs/ManageJobs.tsx | 4 +-- src/Pages/ManagePost/ManagePost.tsx | 4 +-- .../DeactivatedAccounts.tsx | 2 +- .../RegisterUsers/RegisterUsers.tsx | 4 +-- .../AgencyMaster/AgencyMaster.tsx | 2 +- src/Pages/MasterModule/Country/Country.tsx | 4 +-- .../MasterModule/JobStatus/JobStatus.tsx | 4 +-- src/Pages/MasterModule/JobType/JobType.tsx | 4 +-- .../TemplateMaster/TemplateMaster.tsx | 4 +-- .../WorkspaceMode/WorkspaceMode.tsx | 4 +-- src/Pages/SubAdmin/SubAdmin.tsx | 2 +- src/Routes/Routes.ts | 3 ++ src/components/MainFrame.tsx | 3 +- src/components/ProgressBar/ProgessBar.css | 20 +++++++++++++ src/components/ProgressBar/ProgressBar.tsx | 12 ++++++++ src/components/Sipnner/Spinner.css | 28 ++++++++++++++++++ src/components/Sipnner/Spinner.tsx | 7 +++++ src/components/ui/toaster.tsx | 6 ++-- src/index.css | 29 +++---------------- 25 files changed, 121 insertions(+), 58 deletions(-) create mode 100644 src/components/ProgressBar/ProgessBar.css create mode 100644 src/components/ProgressBar/ProgressBar.tsx create mode 100644 src/components/Sipnner/Spinner.css create mode 100644 src/components/Sipnner/Spinner.tsx diff --git a/src/Layouts/DefaultLayout.tsx b/src/Layouts/DefaultLayout.tsx index e398ae7..ac7cd29 100644 --- a/src/Layouts/DefaultLayout.tsx +++ b/src/Layouts/DefaultLayout.tsx @@ -11,6 +11,7 @@ import { logout } from "../Redux/Service/authSlice"; import { useDispatch } from "react-redux"; import GlobalStateContext from "../Contexts/GlobalStateContext"; import { useLogOutMutation } from "../Redux/Service/apiSlice"; +import ProgressBar from "../components/ProgressBar/ProgressBar"; const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { @@ -46,12 +47,15 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { }; return ( - - - + + + + + + - + {nav?.map(({ title, path, Icon, type, children }, index) => type === 'single' ? {title} : @@ -66,7 +70,9 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { + + navigate('/profile')} > @@ -79,6 +85,7 @@ const DefaultLayout: FC<{ children: React.ReactNode }> = ({ children }) => { {children} + ); }; diff --git a/src/Pages/Dashboard/Dashboard.tsx b/src/Pages/Dashboard/Dashboard.tsx index 10539a7..a01dcf6 100644 --- a/src/Pages/Dashboard/Dashboard.tsx +++ b/src/Pages/Dashboard/Dashboard.tsx @@ -26,6 +26,7 @@ import { SelectValueText } from "../../components/ui/select"; import AgencyName from "./AgencyName"; +import { Spinner } from "../../components/Sipnner/Spinner"; const Dashboard = () => { const frameworks = createListCollection({ @@ -186,6 +187,7 @@ const Dashboard = () => { + ); }; diff --git a/src/Pages/Login.tsx b/src/Pages/Login.tsx index 23f08c8..585aada 100644 --- a/src/Pages/Login.tsx +++ b/src/Pages/Login.tsx @@ -5,6 +5,7 @@ import { Image, Input, Text, + Theme, VStack, } from "@chakra-ui/react"; import axios from "axios"; @@ -78,6 +79,8 @@ const Login = () => { console.log("===================================="); } } catch (error) { + console.log('error', error); + if (error) { toaster.create({ // title: error?.response?.data?.message, @@ -91,7 +94,8 @@ const Login = () => { }); return ( - + + { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} + size={"xs"} fontSize={"2sm"} placeholder="Search..." bgColor={'#EEEEEE'} diff --git a/src/Pages/ManageContact/ManageContact.tsx b/src/Pages/ManageContact/ManageContact.tsx index d4d44ed..9861955 100644 --- a/src/Pages/ManageContact/ManageContact.tsx +++ b/src/Pages/ManageContact/ManageContact.tsx @@ -60,8 +60,8 @@ const ManageContact = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/ManageGroups/ManageGroups.tsx b/src/Pages/ManageGroups/ManageGroups.tsx index 7cb4b8f..5824d73 100644 --- a/src/Pages/ManageGroups/ManageGroups.tsx +++ b/src/Pages/ManageGroups/ManageGroups.tsx @@ -82,8 +82,8 @@ const ManageGroups = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/ManageJobs/ManageJobs.tsx b/src/Pages/ManageJobs/ManageJobs.tsx index 06ec2bf..3d408ab 100644 --- a/src/Pages/ManageJobs/ManageJobs.tsx +++ b/src/Pages/ManageJobs/ManageJobs.tsx @@ -83,8 +83,8 @@ const ManageJobs = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/ManagePost/ManagePost.tsx b/src/Pages/ManagePost/ManagePost.tsx index fe4709e..8f63a58 100644 --- a/src/Pages/ManagePost/ManagePost.tsx +++ b/src/Pages/ManagePost/ManagePost.tsx @@ -90,8 +90,8 @@ const ManagePost = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/ManageUsers/DeactivatedAccounts/DeactivatedAccounts.tsx b/src/Pages/ManageUsers/DeactivatedAccounts/DeactivatedAccounts.tsx index 8daf4f8..93c5727 100644 --- a/src/Pages/ManageUsers/DeactivatedAccounts/DeactivatedAccounts.tsx +++ b/src/Pages/ManageUsers/DeactivatedAccounts/DeactivatedAccounts.tsx @@ -57,7 +57,7 @@ const DeactivatedAccounts = () => { _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} size={"2xs"} - fontSize={"2sm"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx index 95965a9..c552fe3 100644 --- a/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx +++ b/src/Pages/ManageUsers/RegisterUsers/RegisterUsers.tsx @@ -84,8 +84,8 @@ const RegisterUsers = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/MasterModule/AgencyMaster/AgencyMaster.tsx b/src/Pages/MasterModule/AgencyMaster/AgencyMaster.tsx index 2390a39..2bac861 100644 --- a/src/Pages/MasterModule/AgencyMaster/AgencyMaster.tsx +++ b/src/Pages/MasterModule/AgencyMaster/AgencyMaster.tsx @@ -77,7 +77,7 @@ const AgencyMaster = () => { _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} size={"xs"} - fontSize={"2sm"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/MasterModule/Country/Country.tsx b/src/Pages/MasterModule/Country/Country.tsx index 063eb7d..96afe6e 100644 --- a/src/Pages/MasterModule/Country/Country.tsx +++ b/src/Pages/MasterModule/Country/Country.tsx @@ -63,8 +63,8 @@ const Country = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/MasterModule/JobStatus/JobStatus.tsx b/src/Pages/MasterModule/JobStatus/JobStatus.tsx index 409dfc1..403509a 100644 --- a/src/Pages/MasterModule/JobStatus/JobStatus.tsx +++ b/src/Pages/MasterModule/JobStatus/JobStatus.tsx @@ -63,8 +63,8 @@ const JobStatus = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/MasterModule/JobType/JobType.tsx b/src/Pages/MasterModule/JobType/JobType.tsx index 353387f..6c7b3d4 100644 --- a/src/Pages/MasterModule/JobType/JobType.tsx +++ b/src/Pages/MasterModule/JobType/JobType.tsx @@ -63,8 +63,8 @@ const JobType = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx b/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx index 0fec845..a26c28f 100644 --- a/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx +++ b/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx @@ -76,8 +76,8 @@ const TemplateMaster = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/MasterModule/WorkspaceMode/WorkspaceMode.tsx b/src/Pages/MasterModule/WorkspaceMode/WorkspaceMode.tsx index c5a2a21..ffc6939 100644 --- a/src/Pages/MasterModule/WorkspaceMode/WorkspaceMode.tsx +++ b/src/Pages/MasterModule/WorkspaceMode/WorkspaceMode.tsx @@ -63,8 +63,8 @@ const WorkspaceMode = () => { colorPalette={"blue"} _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} - size={"2xs"} - fontSize={"2sm"} + size={"xs"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Pages/SubAdmin/SubAdmin.tsx b/src/Pages/SubAdmin/SubAdmin.tsx index 51a01b2..b48a452 100644 --- a/src/Pages/SubAdmin/SubAdmin.tsx +++ b/src/Pages/SubAdmin/SubAdmin.tsx @@ -80,7 +80,7 @@ const SubAdmin = () => { _focus={{ border: "1px solid #02A0A0" }} rounded={"md"} size={"xs"} - fontSize={"2sm"} + fontSize={"sm"} placeholder="Search..." bgColor={'#EEEEEE'} ps={8} diff --git a/src/Routes/Routes.ts b/src/Routes/Routes.ts index 084cc1b..c014a40 100644 --- a/src/Routes/Routes.ts +++ b/src/Routes/Routes.ts @@ -22,6 +22,7 @@ import Country from "../Pages/MasterModule/Country/Country"; import JobStatus from "../Pages/MasterModule/JobStatus/JobStatus"; import RegisterUsers from "../Pages/ManageUsers/RegisterUsers/RegisterUsers"; import DeactivatedAccounts from "../Pages/ManageUsers/DeactivatedAccounts/DeactivatedAccounts"; +import { Spinner } from "../components/Sipnner/Spinner"; export const RouteLink = [ { path: "/", Component: Dashboard }, @@ -47,4 +48,6 @@ export const RouteLink = [ { path: "/workspace-mode", Component: WorkspaceMode}, { path: "/country", Component: Country}, { path: "/job-status", Component: JobStatus}, + // { path: "/job-status", Component: Spinner}, + ] \ No newline at end of file diff --git a/src/components/MainFrame.tsx b/src/components/MainFrame.tsx index e486ade..d6a3404 100644 --- a/src/components/MainFrame.tsx +++ b/src/components/MainFrame.tsx @@ -13,7 +13,7 @@ interface MainFrameProps { const MainFrame: FC = ({ children }) => { return ( - + = ({ children }) => { rounded="lg" boxShadow={'rgba(99, 99, 99, 0.2) 0px 2px 8px 0px'} pt={3} + > {children} diff --git a/src/components/ProgressBar/ProgessBar.css b/src/components/ProgressBar/ProgessBar.css new file mode 100644 index 0000000..4c270b8 --- /dev/null +++ b/src/components/ProgressBar/ProgessBar.css @@ -0,0 +1,20 @@ +/* HTML:
*/ +.progressbar { + height: 4px; + width: 100%; + --c: no-repeat linear-gradient(#02A0A0 0 0); + background: var(--c), var(--c), #B8F8F8; + background-size: 60% 100%; + animation: l16 3s infinite; +} + +@keyframes l16 { + 0% {background-position: -150% 0, -150% 0} + 66% {background-position: 250% 0, -150% 0} + 100% {background-position: 250% 0, 250% 0} +} + +.progressbarInactive{ + height: 4px; + width: 100%; +} \ No newline at end of file diff --git a/src/components/ProgressBar/ProgressBar.tsx b/src/components/ProgressBar/ProgressBar.tsx new file mode 100644 index 0000000..f5ff9ac --- /dev/null +++ b/src/components/ProgressBar/ProgressBar.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import './ProgessBar.css'; + +interface ProgressBarProps { + isLoading: boolean; +} + +const ProgressBar: React.FC = ({ isLoading }) => { + return ; +}; + +export default ProgressBar; diff --git a/src/components/Sipnner/Spinner.css b/src/components/Sipnner/Spinner.css new file mode 100644 index 0000000..b6df8cd --- /dev/null +++ b/src/components/Sipnner/Spinner.css @@ -0,0 +1,28 @@ +/* HTML:
*/ +.loader { + width: 25px; + aspect-ratio: 1; + display: grid; + border-radius: 50%; + background: + linear-gradient(0deg, rgba(2, 160, 160, 0.5) 30%, transparent 0 70%, rgba(2, 160, 160, 1) 0) 50% / 8% 100%, + linear-gradient(90deg, rgba(2, 160, 160, 0.25) 30%, transparent 0 70%, rgba(2, 160, 160, 0.75) 0) 50% / 100% 8%; + background-repeat: no-repeat; + animation: l23 1s infinite steps(12); + } + .loader::before, + .loader::after { + content: ""; + grid-area: 1/1; + border-radius: 50%; + background: inherit; + opacity: 0.915; + transform: rotate(30deg); + } + .loader::after { + opacity: 0.83; + transform: rotate(60deg); + } + @keyframes l23 { + 100% {transform: rotate(1turn)} + } \ No newline at end of file diff --git a/src/components/Sipnner/Spinner.tsx b/src/components/Sipnner/Spinner.tsx new file mode 100644 index 0000000..12dc49d --- /dev/null +++ b/src/components/Sipnner/Spinner.tsx @@ -0,0 +1,7 @@ +import { Center } from '@chakra-ui/react' +import './Spinner.css' +export const Spinner = () =>
+ + + + diff --git a/src/components/ui/toaster.tsx b/src/components/ui/toaster.tsx index a4251eb..9101dbf 100644 --- a/src/components/ui/toaster.tsx +++ b/src/components/ui/toaster.tsx @@ -17,16 +17,16 @@ export const toaster = createToaster({ export const Toaster = () => { return ( - + {(toast) => ( - + {toast.type === "loading" ? ( ) : ( )} - + {toast.title && {toast.title}} {toast.description && ( {toast.description} diff --git a/src/index.css b/src/index.css index 862601a..a7a0c7c 100644 --- a/src/index.css +++ b/src/index.css @@ -147,32 +147,10 @@ body { } -/* Style the scrollbar */ -::-webkit-scrollbar { - width: 6px; - /* Width of the vertical scrollbar */ - height: 12px; - /* Height of the horizontal scrollbar */ -} - -/* Style the scrollbar track (the background area) */ -::-webkit-scrollbar-track { - background-color: #f1f1f1; - border-radius: 10px; -} - -/* Style the scrollbar thumb (the draggable part) */ -::-webkit-scrollbar-thumb { - background-color: #c8c8c8cf; - /* Gray color for the thumb */ - border-radius: 10px; - border: 1px solid #f1f1f1; - /* Border around the thumb */ -} /* Scrollbar width */ ::-webkit-scrollbar { - width: 8px; + width: 6px; height: 8px; cursor: pointer; } @@ -184,14 +162,15 @@ body { /* Scrollbar thumb (the draggable part) */ ::-webkit-scrollbar-thumb { - background: rgba(0, 0, 0, 0.3); /* Light black (30% opacity) */ + background: rgba(0, 0, 0, 0.2); /* Light black (30% opacity) */ border-radius: 10px; /* Rounded edges */ transition: background 0.3s; } /* On hover, make it darker */ ::-webkit-scrollbar-thumb:hover { - background: rgba(0, 0, 0, 0.5); + background: rgba(0, 0, 0, 0.411); + cursor: pointer; } From dbde49fffa0e812dc256e378f5fc95e93003ad4b Mon Sep 17 00:00:00 2001 From: AnsariTufail <168163201+AnsariTufail@users.noreply.github.com> Date: Wed, 12 Feb 2025 11:58:17 +0530 Subject: [PATCH 10/10] Worked on the manage cms --- dev-dist/sw.js | 6 +- src/Pages/ManageCMS/AboutUs/AboutUs.tsx | 1 + .../ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx | 81 +++++++++++++------ src/Redux/Service/privacy.policy.service.ts | 1 + 4 files changed, 60 insertions(+), 29 deletions(-) diff --git a/dev-dist/sw.js b/dev-dist/sw.js index b030c08..af56fbe 100644 --- a/dev-dist/sw.js +++ b/dev-dist/sw.js @@ -82,11 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", -<<<<<<< HEAD - "revision": "0.vu9poovgqsg" -======= - "revision": "0.f3u8hds6p7" ->>>>>>> bc1d1923d21ac063f1096d709408895b7efc73f9 + "revision": "0.iv1sobg60j" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/src/Pages/ManageCMS/AboutUs/AboutUs.tsx b/src/Pages/ManageCMS/AboutUs/AboutUs.tsx index 0d73b52..cc44cd9 100644 --- a/src/Pages/ManageCMS/AboutUs/AboutUs.tsx +++ b/src/Pages/ManageCMS/AboutUs/AboutUs.tsx @@ -6,6 +6,7 @@ import { useGetAboutUsQuery } from "../../../Redux/Service/manage.aboutus.servic interface AboutUsContent { + id: number; content: string; } diff --git a/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx b/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx index 6397e9f..f33ba9c 100644 --- a/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx +++ b/src/Pages/ManageCMS/PrivacyPolicy/PrivacyPolicy.tsx @@ -1,20 +1,35 @@ -import { Box, HStack, Text } from "@chakra-ui/react"; -import MainFrame from "../../../components/MainFrame" -import { p } from "framer-motion/client"; +import { Box, HStack, Text, Skeleton } from "@chakra-ui/react"; +import MainFrame from "../../../components/MainFrame"; import PrivacyPolicyAddModel from "./PrivacyPolicyAddModel"; -import { useGetPrivacyPolicyQuery } from "../../../Redux/Service/privacy.policy.service.ts"; -const PrivacyPolicy = () => { - - const { - data - } = useGetPrivacyPolicyQuery() +import { useGetPrivacyPolicyQuery } from "../../../Redux/Service/privacy.policy.service"; - console.log('============================'); +// Define interfaces +interface PrivacyPolicyContent { + id: number; + content: string; +} + +interface ApiResponse { + data: {data:PrivacyPolicyContent[]}; + isLoading: boolean +} + +const PrivacyPolicy = () => { + // Fetch data using RTK Query with type annotations + const { data, isLoading } = useGetPrivacyPolicyQuery(); + + console.log(isLoading); + + + // Log the response for debugging + console.log("===================================="); console.log(data); - console.log('============================'); + console.log("===================================="); + + // Extract content array from the response + const content = data?.data?.[0]?.content; return ( - { px={3} > - Privacy Policy + Privacy Policy - + - - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam soluta doloremque quibusdam facilis quas, unde hic eaque doloribus sed perferendis atque, eos dolores eius consectetur iure sint adipisci itaque tempora fugit quidem culpa provident possimus. Ullam, vitae in voluptatum dignissimos, quos blanditiis sequi aut repellat error eaque veritatis unde quam temporibus adipisci consectetur neque vero exercitationem dolor cum numquam maiores alias, totam minima quas. Possimus, ratione harum. Alias laboriosam nesciunt esse fugit deserunt pariatur corporis tempora quia veniam laborum aliquid enim voluptatibus asperiores minima tempore repudiandae vero quo porro, doloribus explicabo sit beatae et hic natus. Non earum nisi reiciendis? - - - Lorem ipsum dolor sit amet, consectetur adipisicing elit. Numquam soluta doloremque quibusdam facilis quas, unde hic eaque doloribus sed perferendis atque, eos dolores eius consectetur iure sint adipisci itaque tempora fugit quidem culpa provident possimus. Ullam, vitae in voluptatum dignissimos, quos blanditiis sequi aut repellat error eaque veritatis unde quam temporibus adipisci consectetur neque vero exercitationem dolor cum numquam maiores alias, totam minima quas. Possimus, ratione harum. Alias laboriosam nesciunt esse fugit deserunt pariatur corporis tempora quia veniam laborum aliquid enim voluptatibus asperiores minima tempore repudiandae vero quo porro, doloribus explicabo sit beatae et hic natus. Non earum nisi reiciendis? - - + + {/* Render multiple skeletons or content based on loading state */} + {isLoading || !content ? ( + + + + + + + + ) : ( + + {content} + + )} + - ) -} -export default PrivacyPolicy \ No newline at end of file + ); +}; + +export default PrivacyPolicy; \ No newline at end of file diff --git a/src/Redux/Service/privacy.policy.service.ts b/src/Redux/Service/privacy.policy.service.ts index 4eaf5ac..b2e0bbb 100644 --- a/src/Redux/Service/privacy.policy.service.ts +++ b/src/Redux/Service/privacy.policy.service.ts @@ -3,6 +3,7 @@ import { baseQueryWithReauth } from "./apiSlice"; + export const privacyPolicy = createApi({ reducerPath: "privacyPolicy", baseQuery: baseQueryWithReauth, // Use enhanced baseQuery with error handling