diff --git a/.env b/.env
index 90e2eef..b24b765 100644
--- a/.env
+++ b/.env
@@ -1,4 +1,5 @@
-VITE_API_URL=https://ssa.betadelivery.com/apia/v1
+VITE_API_URL='https://ssa.betadelivery.com/apia/v1'
+# VITE_API_URL='http://192.16.50.44/seo-backend/apia/v1'
VITE_USER_NAME="Admin"
VITE_PASSWORD="71%@L%es^bUX94`J9XT*%4&^%tUU^%Q^ffgt"
VITE_APP_NAME=MyViteApp
\ No newline at end of file
diff --git a/dev-dist/sw.js b/dev-dist/sw.js
index 9c5feb8..acea9fc 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.tg13lftuk78"
+ "revision": "0.i87c5gdh6n"
}], {});
workbox.cleanupOutdatedCaches();
workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), {
diff --git a/package-lock.json b/package-lock.json
index 1d95b8a..71d1d89 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
"axios": "^1.7.9",
"chart.js": "^4.4.7",
"framer-motion": "^11.18.0",
+ "js-cookie": "^3.0.5",
"next-themes": "^0.4.4",
"react": "^18.3.1",
"react-chartjs-2": "^5.3.0",
@@ -28,6 +29,7 @@
"devDependencies": {
"@chakra-ui/cli": "^3.2.3",
"@eslint/js": "^9.17.0",
+ "@types/js-cookie": "^3.0.6",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
@@ -3292,6 +3294,13 @@
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"license": "MIT"
},
+ "node_modules/@types/js-cookie": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz",
+ "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -7394,6 +7403,15 @@
"node": ">=10"
}
},
+ "node_modules/js-cookie": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz",
+ "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
diff --git a/package.json b/package.json
index aef7be3..af0444f 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"axios": "^1.7.9",
"chart.js": "^4.4.7",
"framer-motion": "^11.18.0",
+ "js-cookie": "^3.0.5",
"next-themes": "^0.4.4",
"react": "^18.3.1",
"react-chartjs-2": "^5.3.0",
@@ -30,6 +31,7 @@
"devDependencies": {
"@chakra-ui/cli": "^3.2.3",
"@eslint/js": "^9.17.0",
+ "@types/js-cookie": "^3.0.6",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
diff --git a/src/App.tsx b/src/App.tsx
index fa6affb..2b7873a 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,20 +1,20 @@
-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 Cookies from "js-cookie";
function App() {
- const context = useContext(GlobalStateContext);
- if (!context) throw new Error('App must be used within a GlobalStateProvider');
- const { isAuthenticate } = context;
+ // const context = useContext(GlobalStateContext);
+ // if (!context) throw new Error('App must be used within a GlobalStateProvider');
+ // const { isAuthenticate } = context;
+ const token = Cookies.get("token")
return (
} />
- {RouteLink.map(({ path, Component }, index) => (} />))}) : ()} />
+ {RouteLink.map(({ path, Component }, index) => (} />))}) : ()} />
} />
diff --git a/src/Pages/Login.tsx b/src/Pages/Login.tsx
index b8d4a68..a892ba1 100644
--- a/src/Pages/Login.tsx
+++ b/src/Pages/Login.tsx
@@ -9,6 +9,8 @@ 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
@@ -16,6 +18,7 @@ interface FormValues {
}
const Login = () => {
+ const navigate = useNavigate()
const dispatch = useDispatch()
const [isLoading, setIsLoading] = useState(false)
const context = useContext(GlobalStateContext);
@@ -35,13 +38,13 @@ const Login = () => {
// 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 basicAuth = btoa(`${username}:${password}`); // Encode to Base64
+ const basicAuth = `${username} : ${password}`; // Encode to Base64
try {
- const response = await axios.post(
- `${import.meta.env.VITE_API_URL}/v1/login`,
+ const res = await axios.post(
+ `${import.meta.env.VITE_API_URL}/login`,
{
- mobile_number: data.mobileNumber,
+ mobile_number: Number(data.mobileNumber),
password: data.password,
},
{
@@ -51,11 +54,22 @@ const Login = () => {
},
}
);
+
+ if (res.data) {
+ setIsAuthenticate(true)
+ console.log('====================================');
+ console.log(res.data?.data);
+ console.log('====================================');
+ navigate('/')
+ dispatch(setToken(String(res.data?.data["access-token"])));
+ } else {
+
+ console.log("====================================");
+ console.log(res);
+ console.log("====================================");
+
+ }
- console.log("====================================");
- console.log(response);
- console.log("====================================");
- dispatch(setToken(String(response.data["access-token"])));
} catch (error) {
if (error) {
@@ -101,11 +115,11 @@ const Login = () => {
-
+
{/* Forget password */}
-
-
+
+
{/* Forget password */}
diff --git a/src/Redux/Service/authSlice.tsx b/src/Redux/Service/authSlice.tsx
index f94a531..38ad1c4 100644
--- a/src/Redux/Service/authSlice.tsx
+++ b/src/Redux/Service/authSlice.tsx
@@ -1,11 +1,12 @@
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
+import Cookies from "js-cookie";
type AuthState = {
token: string | null;
};
const initialState: AuthState = {
- token: localStorage.getItem("token"), // Load token from localStorage
+ token: Cookies.get("token") || null, // Load token from cookies
};
const authSlice = createSlice({
@@ -14,11 +15,11 @@ const authSlice = createSlice({
reducers: {
setToken: (state, action: PayloadAction) => {
state.token = action.payload;
- localStorage.setItem("token", action.payload);
+ Cookies.set("token", action.payload, { expires: 7, secure: true, sameSite: "Strict" }); // Store in cookies for 7 days
},
logout: (state) => {
state.token = null;
- localStorage.removeItem("token");
+ Cookies.remove("token");
},
},
});
diff --git a/vite.config.ts b/vite.config.ts
index 71b3004..8377a40 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -6,7 +6,7 @@ import { VitePWA } from "vite-plugin-pwa";
export default defineConfig({
server: {
host: "0.0.0.0",
- port: 3001, // You can use any port
+ port: 3000, // You can use any port
},
plugins: [
react(),