diff --git a/dev-dist/sw.js b/dev-dist/sw.js
index af56fbe..2b1ee05 100644
--- a/dev-dist/sw.js
+++ b/dev-dist/sw.js
@@ -82,7 +82,11 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict';
"revision": "3ca0b8505b4bec776b69afdba2768812"
}, {
"url": "index.html",
+<<<<<<< HEAD
"revision": "0.iv1sobg60j"
+=======
+ "revision": "0.3bv9k3911i8"
+>>>>>>> 688f6740627f6cdb421849d1fb012420be1d9d10
}], {});
workbox.cleanupOutdatedCaches();
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
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..ac7cd29 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";
@@ -7,43 +7,72 @@ 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";
+import ProgressBar from "../components/ProgressBar/ProgressBar";
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;
+ const [ logOutAdmin ] = useLogOutMutation()
+ // Logout function
+ 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 (
-
-
-
-
+
+
+
+
+
+
-
+
{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})}
)}
-
- {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
-
-
-
+
+
+
navigate('/profile')} >
@@ -56,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/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 512f1fe..585aada 100644
--- a/src/Pages/Login.tsx
+++ b/src/Pages/Login.tsx
@@ -1,45 +1,54 @@
-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 {
+ Box,
+ Center,
+ HStack,
+ Image,
+ Input,
+ Text,
+ Theme,
+ 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, 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
- 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`,
@@ -52,89 +61,135 @@ const Login = () => {
Authorization: `Basic ${basicAuth}`,
"Content-Type": "application/json",
},
-
}
);
+ console.log("============",res);
+
if (res.data) {
- setIsAuthenticate(true)
- console.log('====================================');
+ 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("====================================");
console.log(res);
console.log("====================================");
-
}
-
} catch (error) {
+ console.log('error', 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 (
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+ LOGIN
+
-
-
-
-
-
- LOGIN
-
-
-
-
- {/* Forget password */}
+
+
+
+ {/* Forget password */}
-
-
- {/* Forget password */}
+
+
+ {/* Forget password */}
-
-
- Forgot password
-
-
+
+
+
-
+
- )
-}
+ );
+};
-export default Login
\ No newline at end of file
+export default Login;
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/ManageCMS/FAQ/FAQ.tsx b/src/Pages/ManageCMS/FAQ/FAQ.tsx
index 4b833de..bcb9a6d 100644
--- a/src/Pages/ManageCMS/FAQ/FAQ.tsx
+++ b/src/Pages/ManageCMS/FAQ/FAQ.tsx
@@ -74,7 +74,7 @@ const FAQ = () => {
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/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 (
-
-
- {/* */}
-
+
+
+
{
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/ViewManageGroup.tsx b/src/Pages/ManageGroups/ViewManageGroup.tsx
index 720e799..4622904 100644
--- a/src/Pages/ManageGroups/ViewManageGroup.tsx
+++ b/src/Pages/ManageGroups/ViewManageGroup.tsx
@@ -1,19 +1,27 @@
import { Button } from "../../components/ui/button"
import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../components/ui/dialog"
-import { Avatar, Box, Field, Grid, Heading, Input, Stack, Text } from "@chakra-ui/react"
+import { Avatar, Box, Field, Grid, Heading, Icon, Input, Stack, Text } from "@chakra-ui/react"
import { Checkbox } from "../../components/ui/checkbox"
import { MdOutlineRemoveRedEye } from "react-icons/md";
import { Switch } from "../../components/ui/switch";
import { AvatarGroup } from "../../components/ui/avatar";
+import { TbEdit } from "react-icons/tb";
function ViewManageGroup() {
return (
-
-
- {/* */}
+
+
+
diff --git a/src/Pages/ManageJobs/ManageJobs.tsx b/src/Pages/ManageJobs/ManageJobs.tsx
index 0e2beaa..3d408ab 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";
@@ -87,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/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": (
@@ -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/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 (
-
-
-
+
+
+
-
+
),
})),
@@ -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/EditRegisterUsers.tsx b/src/Pages/ManageUsers/RegisterUsers/EditRegisterUsers.tsx
index 30b934f..56462c9 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,14 @@ import {
} from "../../../components/ui/dialog";
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 (
-
+
-
+
),
"Action": (
@@ -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/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 (
-
+
+
+
{
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/EditAgencyMaster.tsx b/src/Pages/MasterModule/AgencyMaster/EditAgencyMaster.tsx
index c075e91..e524e50 100644
--- a/src/Pages/MasterModule/AgencyMaster/EditAgencyMaster.tsx
+++ b/src/Pages/MasterModule/AgencyMaster/EditAgencyMaster.tsx
@@ -1,7 +1,8 @@
import { FaRegEdit } from "react-icons/fa"
import { Button } from "../../../components/ui/button"
import { DialogBody, DialogCloseTrigger, DialogContent, DialogFooter, DialogHeader, DialogRoot, DialogTitle, DialogTrigger } from "../../../components/ui/dialog"
-import { Field, Input, Stack, } from "@chakra-ui/react"
+import { Field, Icon, Input, Stack, } from "@chakra-ui/react"
+import { TbEdit } from "react-icons/tb"
function EditAgencyMaster() {
@@ -10,9 +11,16 @@ function EditAgencyMaster() {
-
-
-
+
+
+
-
-
+
+
+
{
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 de0a4d3..a26c28f 100644
--- a/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx
+++ b/src/Pages/MasterModule/TemplateMaster/TemplateMaster.tsx
@@ -28,8 +28,8 @@ const managepost: any[] = [
"Images": (
//
-
-
+
+
@@ -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/AddModel.tsx b/src/Pages/SubAdmin/AddModel.tsx
index 5fab47e..03472cb 100644
--- a/src/Pages/SubAdmin/AddModel.tsx
+++ b/src/Pages/SubAdmin/AddModel.tsx
@@ -12,7 +12,7 @@ function AddModel() {
{/* */}
-
+
diff --git a/src/Pages/SubAdmin/SubAdmin.tsx b/src/Pages/SubAdmin/SubAdmin.tsx
index 974216f..b48a452 100644
--- a/src/Pages/SubAdmin/SubAdmin.tsx
+++ b/src/Pages/SubAdmin/SubAdmin.tsx
@@ -76,11 +76,11 @@ const SubAdmin = () => {
p={3}
w={300}
bg={"#fff"}
- colorPalette={"blue"}
+ colorPalette={"cyan"}
_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/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/Redux/Service/forget.password.service.ts b/src/Redux/Service/forget.password.service.ts
new file mode 100644
index 0000000..6e88741
--- /dev/null
+++ b/src/Redux/Service/forget.password.service.ts
@@ -0,0 +1,36 @@
+import { createApi } from "@reduxjs/toolkit/query/react";
+import { baseQueryWithReauth } from "./apiSlice";
+
+export const forgetPassword = createApi({
+ reducerPath: "aboutUs",
+ baseQuery: baseQueryWithReauth, // Use enhanced baseQuery with error handling
+ endpoints: (builder) => ({
+
+
+
+ // 🔹 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/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: [
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/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
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..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/password-input.tsx b/src/components/ui/password-input.tsx
index 0c608a9..03b8415 100644
--- a/src/components/ui/password-input.tsx
+++ b/src/components/ui/password-input.tsx
@@ -86,7 +86,7 @@ const VisibilityTrigger = React.forwardRef(
{
return (
-
+
{(toast) => (
-
+
{toast.type === "loading" ? (
) : (
)}
-
- {toast.title && {toast.title}}
+
+ {toast.title && {toast.title}}
{toast.description && (
{toast.description}
)}
diff --git a/src/index.css b/src/index.css
index 521b87f..a7a0c7c 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;
@@ -133,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;
}
@@ -170,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;
}