Merge pull request 'main page optimization' (#124) from Mohan into main
Reviewed-on: Pozomind/pozo-retail-app#124
This commit is contained in:
commit
29eaa25a32
275
src/App.jsx
275
src/App.jsx
|
|
@ -1,46 +1,34 @@
|
||||||
// AppRoutes.jsx
|
import { useEffect, lazy, Suspense } from 'react';
|
||||||
import React, { useEffect, useState, useRef, } from 'react';
|
|
||||||
import { Routes, Route } from 'react-router-dom';
|
import { Routes, Route } from 'react-router-dom';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useSelector } from 'react-redux';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
|
||||||
import ProtectedRoutes from './ProtectedRoutes';
|
import ProtectedRoutes from './ProtectedRoutes';
|
||||||
import SelfBooking from './Pages/SelfBooking/SelfBooking.jsx'
|
import SelfBooking from './Pages/SelfBooking/SelfBooking.jsx';
|
||||||
import { isMobile, isIOS } from "react-device-detect";
|
import { isMobile, isIOS } from 'react-device-detect';
|
||||||
// const { routesConfig }=lazy(()=>import('./routesConfig'));
|
|
||||||
import { routesConfig } from './routesConfig';
|
import { routesConfig } from './routesConfig';
|
||||||
import {
|
import { GlobalItemCard } from './Features/BookingScreen/BookingData/BookingData.js';
|
||||||
ChangeAppExpDateData,
|
import { clearSession, getSession } from './Services/Others.js';
|
||||||
changeHeightforExpDate,
|
|
||||||
getAppSubscriptionDate,
|
|
||||||
GlobalItemCard,
|
|
||||||
} from './Features/BookingScreen/BookingData/BookingData.js';
|
|
||||||
import {
|
|
||||||
checkSession,
|
|
||||||
GenerateLogout,
|
|
||||||
} from './Features/BrachLogin/BranchLogin.js';
|
|
||||||
import {
|
|
||||||
clearSession,
|
|
||||||
getSession,
|
|
||||||
TokendecryptedValuesFun,
|
|
||||||
} from './Services/Others.js';
|
|
||||||
import devtools from 'devtools-detect';
|
import devtools from 'devtools-detect';
|
||||||
import KisokSelBooking from './Pages/SelfBooking/KisokSelBooking.jsx';
|
const KisokSelBooking = lazy(
|
||||||
import IndividualBooking from './Pages/SelfBooking/IndividualBooking.jsx';
|
() => import('./Pages/SelfBooking/KisokSelBooking')
|
||||||
|
);
|
||||||
|
|
||||||
|
const IndividualBooking = lazy(
|
||||||
|
() => import('./Pages/SelfBooking/IndividualBooking')
|
||||||
|
);
|
||||||
const commonSubDir = import.meta.env.ENV_COMMON_BASE_URL;
|
const commonSubDir = import.meta.env.ENV_COMMON_BASE_URL;
|
||||||
const subDirectory = import.meta.env.ENV_BASE_URL;
|
const subDirectory = import.meta.env.ENV_BASE_URL;
|
||||||
import "../ownLib/my-ui-lib.css"
|
import '../ownLib/my-ui-lib.css';
|
||||||
import CustomerMenuPage from './Pages/Reports/MenuQRCode/CustomerMenuPage.jsx';
|
import CustomerMenuPage from './Pages/Reports/MenuQRCode/CustomerMenuPage.jsx';
|
||||||
import WeightScaleApp from './Pages/BookingScreen/WeightscaleApp.jsx';
|
import WeightScaleApp from './Pages/BookingScreen/WeightscaleApp.jsx';
|
||||||
|
import useSubscriptionManager from './useSubscriptionManager.js';
|
||||||
|
import useSessionManager from './useSessionManager.js';
|
||||||
const AppRoutes = () => {
|
const AppRoutes = () => {
|
||||||
const navigate = useNavigate();
|
|
||||||
const dispatch = useDispatch();
|
|
||||||
const ItemCard = useSelector(GlobalItemCard);
|
const ItemCard = useSelector(GlobalItemCard);
|
||||||
const [remainingDays, setRemainingDays] = useState(null);
|
// const { sessionData, logout } = useSessionManager(ItemCard);
|
||||||
const prevRemainingDays = useRef(null);
|
// useSubscriptionManager(sessionData, logout);
|
||||||
const [sessionData, setSessionData] = useState(null);
|
|
||||||
const [devToolsOpen, setDevToolsOpen] = useState(false);
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handlePopState = (e) => {
|
const handlePopState = () => {
|
||||||
const SessionId = getSession('SessionId');
|
const SessionId = getSession('SessionId');
|
||||||
if (!SessionId) {
|
if (!SessionId) {
|
||||||
alert(
|
alert(
|
||||||
|
|
@ -62,203 +50,48 @@ const AppRoutes = () => {
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
//cmd it start
|
|
||||||
// useEffect(() => {
|
|
||||||
// sessionCheckFun()
|
|
||||||
// }, [navigate, ItemCard]);
|
|
||||||
|
|
||||||
//cmd it End
|
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const loadSessionData = () => {
|
if (isMobile || isIOS) return;
|
||||||
const CompId = getSession('CompId');
|
const timer = setInterval(() => {
|
||||||
const AppId = getSession('AppId');
|
if (devtools.isOpen) {
|
||||||
const BranchId = getSession('BranchId');
|
document.body.innerHTML =
|
||||||
const UserType = getSession('UserType');
|
"<h1 style='color:red;text-align:center'>Close Inspect to continue</h1>";
|
||||||
console.log('loadSessionData:', CompId, AppId, BranchId, UserType);
|
|
||||||
|
|
||||||
if (CompId && AppId && BranchId) {
|
|
||||||
setSessionData({ CompId, AppId, BranchId, UserType });
|
|
||||||
return true; // Indicate that session data is available
|
|
||||||
}
|
}
|
||||||
return false; // Indicate that session data is not yet available
|
}, 1000);
|
||||||
};
|
|
||||||
|
|
||||||
if (!loadSessionData()) {
|
return () => clearInterval(timer);
|
||||||
const interval = setInterval(() => {
|
|
||||||
if (loadSessionData()) {
|
|
||||||
clearInterval(interval); // Stop checking once data is available
|
|
||||||
}
|
|
||||||
}, 1000);
|
|
||||||
|
|
||||||
return () => clearInterval(interval); // Cleanup interval on unmount
|
|
||||||
}
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const fetchExpDate = async () => {
|
|
||||||
if (!sessionData) {
|
|
||||||
console.log('Session data not available, skipping API call...');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const { CompId, AppId, BranchId, UserType } = sessionData;
|
|
||||||
const data = { CompId, BranchId, AppId };
|
|
||||||
|
|
||||||
let res = await dispatch(getAppSubscriptionDate(data)).unwrap();
|
|
||||||
|
|
||||||
if (res?.data?.statusCode === 1 && res?.data?.data?.length > 0) {
|
|
||||||
const expData = res?.data?.data?.[0];
|
|
||||||
|
|
||||||
if (prevRemainingDays.current !== expData.RemainingDays) {
|
|
||||||
prevRemainingDays.current = expData.RemainingDays;
|
|
||||||
setRemainingDays(expData.RemainingDays);
|
|
||||||
dispatch(ChangeAppExpDateData(expData));
|
|
||||||
dispatch(changeHeightforExpDate(expData.RemainingDays));
|
|
||||||
|
|
||||||
if (
|
|
||||||
expData.RemainingDays < 1 &&
|
|
||||||
expData.RemainingHours < 1 &&
|
|
||||||
expData.RemainingMinutes < 1 &&
|
|
||||||
expData.RemainingSeconds < 1
|
|
||||||
) {
|
|
||||||
if (
|
|
||||||
UserType !== 'Super Admin' ||
|
|
||||||
UserType !== 'Super Admin User'
|
|
||||||
) {
|
|
||||||
console.log('Subscription expired, logging out...');
|
|
||||||
alert(
|
|
||||||
'Subscription expired, logging out. Redirecting to login...'
|
|
||||||
);
|
|
||||||
Logout();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log('No subscription data found, logging out...');
|
|
||||||
alert(
|
|
||||||
'No subscription data found, logging out. Redirecting to login...'
|
|
||||||
);
|
|
||||||
Logout();
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error fetching subscription data:', error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (remainingDays === null) {
|
|
||||||
fetchExpDate();
|
|
||||||
}
|
|
||||||
|
|
||||||
const interval = setInterval(fetchExpDate, 60 * 60 * 1000);
|
|
||||||
|
|
||||||
return () => clearInterval(interval);
|
|
||||||
}, [sessionData, remainingDays]);
|
|
||||||
|
|
||||||
const Logout = async () => {
|
|
||||||
const UserId = getSession('UserId');
|
|
||||||
const status = 'N';
|
|
||||||
try {
|
|
||||||
const res = await dispatch(GenerateLogout({ UserId, status })).unwrap();
|
|
||||||
if (res?.data?.statusCode === 1) {
|
|
||||||
sessionStorage.clear();
|
|
||||||
window.location.replace(`${commonSubDir}`);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Logout failed:', error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// mohan
|
|
||||||
// useEffect(() => {
|
|
||||||
// if (isMobile || isIOS) {
|
|
||||||
// console.log("📱 Mobile/iOS device → skipping DevTools detection");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// const checkDevTools = setInterval(() => {
|
|
||||||
// if (devtools.isOpen && !devToolsOpen) {
|
|
||||||
// setDevToolsOpen(true);
|
|
||||||
// document.body.innerHTML =
|
|
||||||
// "<h1 style='color: red; text-align: center;'>Close Inspect to continue using the application.</h1>";
|
|
||||||
// }
|
|
||||||
// else if (!devtools.isOpen && devToolsOpen) {
|
|
||||||
// setDevToolsOpen(false);
|
|
||||||
|
|
||||||
// setTimeout(() => {
|
|
||||||
// window.location.reload();
|
|
||||||
// }, 100);
|
|
||||||
|
|
||||||
// clearInterval(checkDevTools);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (!devtools.isOpen) {
|
|
||||||
// let before = performance.now();
|
|
||||||
|
|
||||||
// let after = performance.now();
|
|
||||||
|
|
||||||
// let executionDelay = after - before;
|
|
||||||
|
|
||||||
// if (executionDelay > 100) {
|
|
||||||
// setDevToolsOpen(true);
|
|
||||||
// document.body.innerHTML =
|
|
||||||
// "<h1 style='color: red; text-align: center;'>Close Inspect to continue using the application.</h1>";
|
|
||||||
// } else {
|
|
||||||
// setDevToolsOpen(false);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }, 1000);
|
|
||||||
|
|
||||||
// return () => clearInterval(checkDevTools);
|
|
||||||
// }, [devToolsOpen]);
|
|
||||||
|
|
||||||
const sessionCheckFun = async () => {
|
|
||||||
const UserId = getSession('UserId');
|
|
||||||
const sessionId = getSession('SessionId');
|
|
||||||
const IsLogout = getSession('Mode');
|
|
||||||
let encryptedLoginType = TokendecryptedValuesFun(
|
|
||||||
sessionStorage.getItem('LoginType')
|
|
||||||
);
|
|
||||||
if (encryptedLoginType != 'Kiosk') {
|
|
||||||
const res = await dispatch(checkSession({ UserId, sessionId })).unwrap();
|
|
||||||
if (res?.data?.statusCode === 1) {
|
|
||||||
if (res?.data?.response === 'False') {
|
|
||||||
if (IsLogout !== 'Logout') {
|
|
||||||
alert('Session invalid. Redirecting to login...');
|
|
||||||
}
|
|
||||||
clearSession();
|
|
||||||
window.location.replace(commonSubDir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Routes>
|
<Suspense fallback={<div>Loading…</div>}>
|
||||||
<Route
|
<Routes>
|
||||||
path={`${subDirectory}selfBooking/:SelfBookingId`}
|
|
||||||
element={<SelfBooking />}
|
|
||||||
/>
|
|
||||||
<Route
|
|
||||||
path={`${subDirectory}MenuQRCode`}
|
|
||||||
element={<CustomerMenuPage />}
|
|
||||||
/>
|
|
||||||
<Route
|
<Route
|
||||||
path={`${subDirectory}weightscaleapp`}
|
path={`${subDirectory}selfBooking/:SelfBookingId`}
|
||||||
element={<WeightScaleApp />}
|
element={<SelfBooking />}
|
||||||
/>
|
/>
|
||||||
<Route path={`${subDirectory}kioskSelfBooking`} element={<KisokSelBooking />} />
|
<Route
|
||||||
|
path={`${subDirectory}MenuQRCode`}
|
||||||
<Route
|
element={<CustomerMenuPage />}
|
||||||
path= {`${subDirectory}kiosk-individual-self-booking`}
|
/>
|
||||||
element={<IndividualBooking />}
|
<Route
|
||||||
/>
|
path={`${subDirectory}weightscaleapp`}
|
||||||
<Route
|
element={<WeightScaleApp />}
|
||||||
path="/*"
|
/>
|
||||||
element={<ProtectedRoutes routesConfig={routesConfig} />}
|
<Route
|
||||||
/>
|
path={`${subDirectory}kioskSelfBooking`}
|
||||||
</Routes>
|
element={<KisokSelBooking />}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Route
|
||||||
|
path={`${subDirectory}kiosk-individual-self-booking`}
|
||||||
|
element={<IndividualBooking />}
|
||||||
|
/>
|
||||||
|
<Route
|
||||||
|
path="/*"
|
||||||
|
element={<ProtectedRoutes routesConfig={routesConfig} />}
|
||||||
|
/>
|
||||||
|
</Routes>
|
||||||
|
</Suspense>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// AuthContext.jsx
|
// AuthContext.jsx
|
||||||
import React, { createContext, useContext, useState, useEffect } from 'react';
|
import { createContext, useContext, useState, useEffect } from 'react';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
import { getSession } from './Services/Others';
|
import { getSession } from './Services/Others';
|
||||||
import {
|
import {
|
||||||
|
|
@ -64,7 +64,8 @@ export const AuthProvider = ({ children }) => {
|
||||||
);
|
);
|
||||||
setAdvance(hasAdvance);
|
setAdvance(hasAdvance);
|
||||||
const hasProOrAdvance =
|
const hasProOrAdvance =
|
||||||
hasAdvance || pricingData.some((item) => item.PricingName === 'Customized');
|
hasAdvance ||
|
||||||
|
pricingData.some((item) => item.PricingName === 'Customized');
|
||||||
setProORAdvance(hasProOrAdvance);
|
setProORAdvance(hasProOrAdvance);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching pricing name:', error);
|
console.error('Error fetching pricing name:', error);
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import { Menu } from 'antd';
|
||||||
import {
|
import {
|
||||||
changePreviewComponents,
|
changePreviewComponents,
|
||||||
changeSelectedPrintdummyData,
|
changeSelectedPrintdummyData,
|
||||||
getTemplate,
|
|
||||||
} from '../../Features/ThemeChange/ThemeChange';
|
} from '../../Features/ThemeChange/ThemeChange';
|
||||||
import {
|
import {
|
||||||
changeBookingType,
|
changeBookingType,
|
||||||
|
|
@ -69,9 +68,6 @@ const SideMenu = ({ mode, theme, items }) => {
|
||||||
const [clickedKeys, setClickedKeys] = useState([]);
|
const [clickedKeys, setClickedKeys] = useState([]);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const CompId = getSession('CompId');
|
|
||||||
const BranchId = getSession('BranchId');
|
|
||||||
const AppId = getSession('AppId');
|
|
||||||
const DineinDefault = useSelector(GlobalDineinDefault);
|
const DineinDefault = useSelector(GlobalDineinDefault);
|
||||||
|
|
||||||
const handleMouseEnter = (e) => {
|
const handleMouseEnter = (e) => {
|
||||||
|
|
@ -187,28 +183,7 @@ const SideMenu = ({ mode, theme, items }) => {
|
||||||
if (e == `${subDirectory}saleslayouts/print-selection`) {
|
if (e == `${subDirectory}saleslayouts/print-selection`) {
|
||||||
dispatch(changeSelectedPrintdummyData(true));
|
dispatch(changeSelectedPrintdummyData(true));
|
||||||
}
|
}
|
||||||
// if(e==`${subDirectory}kiosksales`){
|
|
||||||
// const elem = document.documentElement;
|
|
||||||
// if (elem.requestFullscreen) {
|
|
||||||
// elem.requestFullscreen();
|
|
||||||
// } else if (elem.mozRequestFullScreen) { // Firefox
|
|
||||||
// elem.mozRequestFullScreen();
|
|
||||||
// } else if (elem.webkitRequestFullscreen) { // Chrome, Safari and Opera
|
|
||||||
// elem.webkitRequestFullscreen();
|
|
||||||
// } else if (elem.msRequestFullscreen) { // IE/Edge
|
|
||||||
// elem.msRequestFullscreen();
|
|
||||||
// }
|
|
||||||
// }else{
|
|
||||||
// if (document.exitFullscreen) {
|
|
||||||
// document.exitFullscreen();
|
|
||||||
// } else if (document.mozCancelFullScreen) { // Firefox
|
|
||||||
// document.mozCancelFullScreen();
|
|
||||||
// } else if (document.webkitExitFullscreen) { // Chrome, Safari and Opera
|
|
||||||
// document.webkitExitFullscreen();
|
|
||||||
// } else if (document.msExitFullscreen) { // IE/Edge
|
|
||||||
// document.msExitFullscreen();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
navigate(e);
|
navigate(e);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,15 @@
|
||||||
import React, { useState, useEffect, useRef } from 'react';
|
import { useState, useEffect, useRef } from 'react';
|
||||||
import { useNavigate, useLocation } from 'react-router-dom';
|
import { useNavigate, useLocation } from 'react-router-dom';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import {
|
|
||||||
FaBars,
|
|
||||||
FaThLarge,
|
|
||||||
FaHome,
|
|
||||||
FaCog,
|
|
||||||
FaChartBar,
|
|
||||||
FaFileAlt,
|
|
||||||
FaMobileAlt,
|
|
||||||
FaSignOutAlt,
|
|
||||||
FaSignInAlt,
|
|
||||||
FaArrowRight,
|
|
||||||
FaCaretRight,
|
|
||||||
} from 'react-icons/fa';
|
|
||||||
import {
|
|
||||||
MdSettings,
|
|
||||||
MdOutlineReport,
|
|
||||||
MdOutlineHome,
|
|
||||||
MdOutlineKeyboardArrowDown,
|
|
||||||
MdOutlineKeyboardArrowRight,
|
|
||||||
} from 'react-icons/md';
|
|
||||||
import { BiLogOut, BiLogIn } from 'react-icons/bi';
|
|
||||||
import {
|
|
||||||
AiOutlineAppstore,
|
|
||||||
AiOutlineSetting,
|
|
||||||
AiOutlineBarChart,
|
|
||||||
AiOutlineFileText,
|
|
||||||
} from 'react-icons/ai';
|
|
||||||
import { GiHamburgerMenu } from 'react-icons/gi';
|
|
||||||
import './SideMenuPozo.scss';
|
import './SideMenuPozo.scss';
|
||||||
import { FaCaretDown } from 'react-icons/fa';
|
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
import { useContext } from 'react';
|
import { useContext } from 'react';
|
||||||
import { AuthContext } from '../../AuthContext';
|
import { AuthContext } from '../../AuthContext';
|
||||||
import PozoMenu from './PozoMenu';
|
import PozoMenu from './PozoMenu';
|
||||||
import { getSession } from '../../Services/Others';
|
|
||||||
import {
|
import {
|
||||||
changePreviewComponents,
|
changePreviewComponents,
|
||||||
changeSelectedPrintdummyData,
|
changeSelectedPrintdummyData
|
||||||
getTemplate,
|
|
||||||
} from '../../Features/ThemeChange/ThemeChange';
|
} from '../../Features/ThemeChange/ThemeChange';
|
||||||
import {
|
import {
|
||||||
changeBookingType,
|
changeBookingType,
|
||||||
|
|
@ -67,7 +37,7 @@ import {
|
||||||
import { ChangeTotalAmount } from '../../Features/ExteraCharges/ExtraCharges';
|
import { ChangeTotalAmount } from '../../Features/ExteraCharges/ExtraCharges';
|
||||||
import * as Offer from '../../Features/Offer/Offer';
|
import * as Offer from '../../Features/Offer/Offer';
|
||||||
import { FiMenu } from 'react-icons/fi';
|
import { FiMenu } from 'react-icons/fi';
|
||||||
import POZOMIND from '../../Images/PozomindWLogo.png';
|
|
||||||
import {
|
import {
|
||||||
ChangeFullFreeProductList,
|
ChangeFullFreeProductList,
|
||||||
changeFullOfferAppliedProducts,
|
changeFullOfferAppliedProducts,
|
||||||
|
|
@ -165,9 +135,7 @@ const SideMenuPozo = ({ items = [] }) => {
|
||||||
const [collapsed, setCollapsed] = useState(window.innerWidth < 768);
|
const [collapsed, setCollapsed] = useState(window.innerWidth < 768);
|
||||||
const [dropdownPosition, setDropdownPosition] = useState({});
|
const [dropdownPosition, setDropdownPosition] = useState({});
|
||||||
const menuRef = useRef();
|
const menuRef = useRef();
|
||||||
const CompId = getSession('CompId');
|
|
||||||
const BranchId = getSession('BranchId');
|
|
||||||
const AppId = getSession('AppId');
|
|
||||||
const DineinDefault = useSelector(GlobalDineinDefault);
|
const DineinDefault = useSelector(GlobalDineinDefault);
|
||||||
const [collapse, setCollapse] = useState(false);
|
const [collapse, setCollapse] = useState(false);
|
||||||
|
|
||||||
|
|
@ -381,57 +349,7 @@ const SideMenuPozo = ({ items = [] }) => {
|
||||||
(item) => !bottomKeys.includes(item.label)
|
(item) => !bottomKeys.includes(item.label)
|
||||||
);
|
);
|
||||||
// Recursive render for menu and submenus
|
// Recursive render for menu and submenus
|
||||||
const renderMenuItems = (items, parentKeys = [], level = 0) => (
|
|
||||||
<div className={`side-menu-list${level > 0 ? ' nested-list' : ''}`}>
|
|
||||||
{(items || []).filter(Boolean).map((item) => (
|
|
||||||
<div key={item.key}>
|
|
||||||
<div
|
|
||||||
className={`${level > 0 ? 'dropdown-submenu-item' : 'menu-item'}${isSelected(item.key) || (level === 0 && hasSelectedChild(item)) ? ' selecteded' : ''}${isOpen(item.key) ? ' open' : ''}${item.children ? ' has-children' : ''}`}
|
|
||||||
onClick={(e) => {
|
|
||||||
e.stopPropagation();
|
|
||||||
handleMenuClick(item, parentKeys, e, level);
|
|
||||||
}}
|
|
||||||
// style={{ paddingLeft: `${level * 10 + 1}px` }}
|
|
||||||
>
|
|
||||||
{item.icon && level === 0 && (
|
|
||||||
<span
|
|
||||||
className="menu-icon"
|
|
||||||
style={{
|
|
||||||
fontSize: collapse ? '1.5rem' : '',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{item.icon}
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
{!collapse && <span className="menu-label">{item.label}</span>}
|
|
||||||
{!collapse && (
|
|
||||||
<span className="menu-labelDot">
|
|
||||||
{isDropdownItemSelected(item) ? '●' : ''}
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
{item.children && !collapse && (
|
|
||||||
<span className="menu-arrow">
|
|
||||||
{level === 0 ? (
|
|
||||||
<FaCaretRight size={14} />
|
|
||||||
) : (
|
|
||||||
<MdOutlineKeyboardArrowRight />
|
|
||||||
)}
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
{item.children && isOpen(item.key) && !collapse && (
|
|
||||||
<div className={`dropdown-submenu${level > 0 ? ' nested' : ''}`}>
|
|
||||||
{renderMenuItems(
|
|
||||||
item.children,
|
|
||||||
[...parentKeys, item.key],
|
|
||||||
level + 1
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
|
|
||||||
// Custom onClick handler for PozoMenu
|
// Custom onClick handler for PozoMenu
|
||||||
const handlePozoMenuClick = (e) => {
|
const handlePozoMenuClick = (e) => {
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
|
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
|
||||||
import moment from 'moment';
|
import { Badge, DatePicker, Modal, Tooltip, message } from 'antd';
|
||||||
import { App, Badge, DatePicker, Modal, Tooltip, Form, message } from 'antd';
|
|
||||||
import { GoTriangleRight } from 'react-icons/go';
|
|
||||||
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';
|
import { ExclamationCircleOutlined, PlusOutlined } from '@ant-design/icons';
|
||||||
import defaultimage from '../../../../Images/defaultItemImg.png';
|
import defaultimage from '../../../../Images/defaultItemImg.png';
|
||||||
import FormHeader from '../../../PageComponents/FormHeader';
|
import FormHeader from '../../../PageComponents/FormHeader';
|
||||||
import {
|
import {
|
||||||
GlobalPricingAppPricingName,
|
|
||||||
SelectedGlobalCardColorDetail,
|
SelectedGlobalCardColorDetail,
|
||||||
SelectedGlobalCardFont,
|
SelectedGlobalCardFont,
|
||||||
StoredSessionData,
|
StoredSessionData,
|
||||||
getTemplateData,
|
getTemplateData,
|
||||||
} from '../../../../Features/ThemeChange/ThemeChange';
|
} from '../../../../Features/ThemeChange/ThemeChange';
|
||||||
import { Tables } from '../../../../Components/Tables/Table';
|
|
||||||
import {
|
import {
|
||||||
GlobalProductSubCategorie,
|
GlobalProductSubCategorie,
|
||||||
GlobalItemCard,
|
GlobalItemCard,
|
||||||
|
|
@ -107,26 +103,13 @@ import { v4 as uuidv4 } from 'uuid';
|
||||||
// Dummy SortableCard component
|
// Dummy SortableCard component
|
||||||
import { useSortable } from '@dnd-kit/sortable';
|
import { useSortable } from '@dnd-kit/sortable';
|
||||||
import { CSS } from '@dnd-kit/utilities';
|
import { CSS } from '@dnd-kit/utilities';
|
||||||
import HuggingFaceVoiceForm from '../../../VoiceToText/VoiceToText.jsx';
|
|
||||||
import VoiceToTextItemCard from '../../../VoiceToText/VoiceToTextItemCard.jsx';
|
import VoiceToTextItemCard from '../../../VoiceToText/VoiceToTextItemCard.jsx';
|
||||||
import { ExtractDateFormate } from '../../../../Services/Others.js';
|
import { ExtractDateFormate } from '../../../../Services/Others.js';
|
||||||
import {
|
import {
|
||||||
changeFreeProductForLoyalty,
|
|
||||||
ChangeFreeProductList,
|
|
||||||
ChangeFullFreeProductList,
|
|
||||||
changeFullOfferAppliedProducts,
|
changeFullOfferAppliedProducts,
|
||||||
ChangeOfferAppliedProducts,
|
|
||||||
changeOfferAppliedProductsForLoyalty,
|
|
||||||
changeOfferAppliedProductsForMembership,
|
changeOfferAppliedProductsForMembership,
|
||||||
changeTriggerOfferFree,
|
GlobalOfferAppliedProducts
|
||||||
getOfferinBooking,
|
|
||||||
GlobalFreeProdList,
|
|
||||||
GlobalOfferAppliedProducts,
|
|
||||||
GlobalOverAllOfferAmt,
|
|
||||||
GlobalTriggerOfferFree,
|
|
||||||
RemoveOfferAppliedProduct,
|
|
||||||
} from '../../../../Features/Offer/Offernew/BookingOffernew.js';
|
} from '../../../../Features/Offer/Offernew/BookingOffernew.js';
|
||||||
import { validateOffers } from './ValidateOffer.jsx';
|
|
||||||
import { useSaleswiseOfferWatcher } from './SalesWiseOffer.jsx';
|
import { useSaleswiseOfferWatcher } from './SalesWiseOffer.jsx';
|
||||||
import { ApplicationPreferences } from '../../../../Features/BrachLogin/BranchLogin.js';
|
import { ApplicationPreferences } from '../../../../Features/BrachLogin/BranchLogin.js';
|
||||||
import { useDateStore } from '../../../../Features/BookingScreen/BookingData/DateStore.js';
|
import { useDateStore } from '../../../../Features/BookingScreen/BookingData/DateStore.js';
|
||||||
|
|
@ -137,10 +120,7 @@ import dayjs from 'dayjs';
|
||||||
import BSCustomerSelect from '../UtillComponents/BSSelectCustomer.jsx';
|
import BSCustomerSelect from '../UtillComponents/BSSelectCustomer.jsx';
|
||||||
import BSNavBarAddUser from '../UtillComponents/BSNavBarAddUser.jsx';
|
import BSNavBarAddUser from '../UtillComponents/BSNavBarAddUser.jsx';
|
||||||
import { FaAngleLeft, FaAngleRight } from 'react-icons/fa';
|
import { FaAngleLeft, FaAngleRight } from 'react-icons/fa';
|
||||||
|
|
||||||
import useRemoveFromCart from './RemoveFromCartFunction.jsx';
|
import useRemoveFromCart from './RemoveFromCartFunction.jsx';
|
||||||
|
|
||||||
import { IoIosAdd } from 'react-icons/io';
|
|
||||||
import { LuMinus } from 'react-icons/lu';
|
import { LuMinus } from 'react-icons/lu';
|
||||||
import BranchName from '../../Template/BranchName.jsx';
|
import BranchName from '../../Template/BranchName.jsx';
|
||||||
import { FiPlus } from 'react-icons/fi';
|
import { FiPlus } from 'react-icons/fi';
|
||||||
|
|
@ -179,7 +159,7 @@ export function SortableCard({ id, children, item }) {
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const { RangePicker } = DatePicker;
|
|
||||||
const BsBookingitemCard = (props) => {
|
const BsBookingitemCard = (props) => {
|
||||||
const voiceTriggerRef = useRef(null);
|
const voiceTriggerRef = useRef(null);
|
||||||
const unsubscribeRef = useRef(null);
|
const unsubscribeRef = useRef(null);
|
||||||
|
|
@ -191,14 +171,10 @@ const BsBookingitemCard = (props) => {
|
||||||
const handleDecline = async (item) => {
|
const handleDecline = async (item) => {
|
||||||
await decline(item, setPreviousdataLength);
|
await decline(item, setPreviousdataLength);
|
||||||
};
|
};
|
||||||
const handleClearAll = async () => {
|
|
||||||
await clearAllItems();
|
|
||||||
};
|
|
||||||
|
|
||||||
const Clearall = async () => {
|
|
||||||
await handleClearAll();
|
|
||||||
};
|
|
||||||
const [form] = Form.useForm();
|
|
||||||
const cardFunction = props?.cardFunctionality;
|
const cardFunction = props?.cardFunctionality;
|
||||||
// const applyOffer = useApplyOfferto_CardDetail();
|
// const applyOffer = useApplyOfferto_CardDetail();
|
||||||
const preferenceDatas = useSelector(PreferenceData, shallowEqual);
|
const preferenceDatas = useSelector(PreferenceData, shallowEqual);
|
||||||
|
|
|
||||||
|
|
@ -1,120 +1,47 @@
|
||||||
import React from "react";
|
|
||||||
import { useDispatch, useSelector } from "react-redux";
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import {
|
import {
|
||||||
dateFormatChange1,
|
dateFormatChange1
|
||||||
extractLastNumber,
|
|
||||||
extractLastNumberOrderId,
|
|
||||||
} from "../../../../Services/Others";
|
} from "../../../../Services/Others";
|
||||||
import {
|
import {
|
||||||
GlobalprintSlNo,
|
|
||||||
GlobalprintItem,
|
|
||||||
GlobalprintMRP,
|
|
||||||
GlobalprintDiscount,
|
|
||||||
GlobalprintQuantity,
|
|
||||||
GlobalprintRate,
|
|
||||||
GlobalprintAmount,
|
|
||||||
GlobalprintHsnCode,
|
|
||||||
GlobalprintQrcodet,
|
|
||||||
GlobalPritdummyData,
|
GlobalPritdummyData,
|
||||||
changeReprintDataFound,
|
changeReprintDataFound,
|
||||||
GloabalFieldDetails,
|
|
||||||
GlobalprintSignature,
|
|
||||||
GlobalprinttermsAndConditions,
|
|
||||||
GlobalSignatureImage,
|
|
||||||
Globalnotes,
|
|
||||||
GlobalthemeFormat,
|
|
||||||
GlobalBillName,
|
|
||||||
} from "../../../../Features/ThemeChange/ThemeChange";
|
} from "../../../../Features/ThemeChange/ThemeChange";
|
||||||
import "../../../../Styles/BookingScreen/PrintTemplates/ThermalPrinter/PrintStyle1.scss";
|
import "../../../../Styles/BookingScreen/PrintTemplates/ThermalPrinter/PrintStyle1.scss";
|
||||||
import QRCode from "react-qr-code";
|
import QRCode from "react-qr-code";
|
||||||
import { GlobalUpiIDprint } from "../../../../Features/BookingScreen/BookingData/BookingData";
|
|
||||||
import signature from "../../../../Images/signatureimage.jpg"
|
|
||||||
import { ApplicationPreferences } from "../../../../Features/BrachLogin/BranchLogin";
|
import { ApplicationPreferences } from "../../../../Features/BrachLogin/BranchLogin";
|
||||||
|
|
||||||
const OtherServicePrintStyle1 = ({
|
const OtherServicePrintStyle1 = ({
|
||||||
index,
|
|
||||||
totalQuantityFilter,
|
|
||||||
Date1,
|
|
||||||
CashierName,
|
|
||||||
totalQuantity,
|
|
||||||
OrderDetailGST,
|
|
||||||
OrderDetailIGST,
|
|
||||||
OrderDetailVAT,
|
|
||||||
table2Data,
|
table2Data,
|
||||||
UpiId,
|
|
||||||
PaymentStatus,
|
PaymentStatus,
|
||||||
PrintLogo,
|
|
||||||
PrintGreeting,
|
|
||||||
printDatas,
|
printDatas,
|
||||||
}) => {
|
}) => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const GlobalUpiID = useSelector(GlobalUpiIDprint);
|
|
||||||
const FieldDetails = useSelector(GloabalFieldDetails);
|
|
||||||
const SLNO = FieldDetails?.["Sl.No"];
|
|
||||||
const Item = FieldDetails?.["Item"];
|
|
||||||
const MRP = FieldDetails?.["MRP"];
|
|
||||||
const Discount = FieldDetails?.["Discount"];
|
|
||||||
const Quantity = FieldDetails?.["Quantity"];
|
|
||||||
const Rate = FieldDetails?.["Rate"];
|
|
||||||
const Amount = FieldDetails?.["Amount"];
|
|
||||||
const HsnCode = FieldDetails?.["HsnCode"];
|
|
||||||
const Qrcodet = FieldDetails?.["Qrcode"];
|
|
||||||
const GlobalSlNo = useSelector(GlobalprintSlNo);
|
|
||||||
const GlobalItem = useSelector(GlobalprintItem);
|
|
||||||
const GlobalMRP = useSelector(GlobalprintMRP);
|
|
||||||
const GlobalDiscount = useSelector(GlobalprintDiscount);
|
|
||||||
const GlobalQuantity = useSelector(GlobalprintQuantity);
|
|
||||||
const GlobalRate = useSelector(GlobalprintRate);
|
|
||||||
const GlobalAmount = useSelector(GlobalprintAmount);
|
|
||||||
const GlobalHsnCode = useSelector(GlobalprintHsnCode);
|
|
||||||
const GlobalQrcodet = useSelector(GlobalprintQrcodet);
|
|
||||||
const GlobaldummyData = useSelector(GlobalPritdummyData);
|
const GlobaldummyData = useSelector(GlobalPritdummyData);
|
||||||
const GlobalSignature = useSelector(GlobalprintSignature);
|
|
||||||
const GlobaltermsAndConditions = useSelector(GlobalprinttermsAndConditions);
|
|
||||||
const GlobalSignatureImages = useSelector(GlobalSignatureImage);
|
|
||||||
const GlobalIsnotes = useSelector(Globalnotes);
|
|
||||||
const GlobalthemeFormatr = useSelector(GlobalthemeFormat)
|
|
||||||
const GlobalBilltext = useSelector(GlobalBillName)
|
|
||||||
const appPreferences = useSelector(ApplicationPreferences);
|
const appPreferences = useSelector(ApplicationPreferences);
|
||||||
const bookingTypePreference = appPreferences?.find((preference) => preference?.PreferredCatName === 'Booking Type')?.PreferenceCatDetails
|
const bookingTypePreference = appPreferences?.find((preference) => preference?.PreferredCatName === 'Booking Type')?.PreferenceCatDetails
|
||||||
const dinePreference = bookingTypePreference?.find((type) => type?.PreferredSubCatName?.toLowerCase() === "dine in" && type?.PreferredStatus === 'Y')
|
|
||||||
const takeAwayPreference = bookingTypePreference?.find((type) => type?.PreferredSubCatName?.toLowerCase() === "take away" && type?.PreferredStatus === 'Y')
|
const takeAwayPreference = bookingTypePreference?.find((type) => type?.PreferredSubCatName?.toLowerCase() === "take away" && type?.PreferredStatus === 'Y')
|
||||||
const keysLength = Object.keys(table2Data ?? {}).length;
|
const keysLength = Object.keys(table2Data ?? {}).length;
|
||||||
let TermsAndConditions = printDatas?.TermsandConditions
|
|
||||||
let SignatureImg = printDatas?.Signature
|
|
||||||
let Notestext = printDatas?.Notes
|
|
||||||
let BillName = printDatas?.PrintHdrName
|
|
||||||
let FormatTheme = printDatas?.PrintType == "S" ? true : false
|
let FormatTheme = printDatas?.PrintType == "S" ? true : false
|
||||||
let PageSize = printDatas?.PageSize
|
let PageSize = printDatas?.PageSize
|
||||||
const Signature = FieldDetails?.["signature"];
|
|
||||||
const TermsnAdCondition = FieldDetails?.["terms&conditions"];
|
|
||||||
|
|
||||||
console.log("table2Datatable2Datatable2Datatable2Data", table2Data,table2Data?.[0]?.BranchName );
|
console.log("table2Datatable2Datatable2Datatable2Data", table2Data,table2Data?.[0]?.BranchName );
|
||||||
|
|
||||||
if (keysLength > 0) {
|
if (keysLength > 0) {
|
||||||
dispatch(changeReprintDataFound(true));
|
dispatch(changeReprintDataFound(true));
|
||||||
}
|
}
|
||||||
const currentDate = new Date();
|
|
||||||
const day = currentDate.getDate().toString().padStart(2, "0");
|
|
||||||
const monthNames = [
|
|
||||||
"Jan",
|
|
||||||
"Feb",
|
|
||||||
"Mar",
|
|
||||||
"Apr",
|
|
||||||
"May",
|
|
||||||
"Jun",
|
|
||||||
"Jul",
|
|
||||||
"Aug",
|
|
||||||
"Sep",
|
|
||||||
"Oct",
|
|
||||||
"Nov",
|
|
||||||
"Dec",
|
|
||||||
];
|
|
||||||
const monthIndex = currentDate.getMonth();
|
|
||||||
const year = currentDate.getFullYear().toString().slice(-2);
|
|
||||||
|
|
||||||
const formattedDate =dateFormatChange1(table2Data?.[0]?.CreatedDate);
|
const formattedDate =dateFormatChange1(table2Data?.[0]?.CreatedDate);
|
||||||
// `${day}-${monthNames[monthIndex]}-${year}`;
|
// `${day}-${monthNames[monthIndex]}-${year}`;
|
||||||
|
|
@ -125,37 +52,13 @@ console.log("table2Datatable2Datatable2Datatable2Data", table2Data,table2Data?.[
|
||||||
const DineInData = table2Data?.productDetails?.filter(
|
const DineInData = table2Data?.productDetails?.filter(
|
||||||
(item) => item.BookingTypeName?.toLowerCase() === "dine in"
|
(item) => item.BookingTypeName?.toLowerCase() === "dine in"
|
||||||
);
|
);
|
||||||
let PaymentStatusSuccess = PaymentStatus?.filter(
|
|
||||||
(ps) => ps.PaymentStatus === "S"
|
|
||||||
);
|
|
||||||
const TakeawayTotal = TakeawayData?.reduce(
|
|
||||||
(accumulator, currentValue) => accumulator + currentValue.TotalAmt,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
const DineInTotal = DineInData?.reduce(
|
|
||||||
(accumulator, currentValue) => accumulator + currentValue.TotalAmt,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
const aggregatedPayments = PaymentStatusSuccess?.reduce(
|
|
||||||
(acc, paymentdata) => {
|
|
||||||
const paymentType = paymentdata?.PaymentTypeName;
|
|
||||||
const amount = Number(paymentdata?.Amount);
|
|
||||||
|
|
||||||
if (acc[paymentType]) {
|
|
||||||
acc[paymentType] += amount;
|
|
||||||
} else {
|
|
||||||
acc[paymentType] = amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
return acc;
|
|
||||||
},
|
|
||||||
{}
|
|
||||||
);
|
|
||||||
|
|
||||||
const productsData = table2Data?.productDetails || [];
|
|
||||||
const offers = table2Data?.OrderOfferDetails || [];
|
const offers = table2Data?.OrderOfferDetails || [];
|
||||||
|
|
||||||
let TotalOfferAmount = 0;
|
|
||||||
|
|
||||||
// Calculate SalesWiseOffers total amount
|
// Calculate SalesWiseOffers total amount
|
||||||
offers.forEach(offer => {
|
offers.forEach(offer => {
|
||||||
|
|
@ -163,19 +66,9 @@ console.log("table2Datatable2Datatable2Datatable2Data", table2Data,table2Data?.[
|
||||||
TotalOfferAmount += offer.OfferAmount;
|
TotalOfferAmount += offer.OfferAmount;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const hasMappedOffer = offers.some(offer =>
|
|
||||||
["ItemWiseOffers", "BundleOffers", "QuantityWiseOffers"].includes(offer.TableName)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (hasMappedOffer) {
|
|
||||||
|
|
||||||
const productTotal = productsData?.reduce((acc, item) => acc + (item?.Type != "C" ? item.OfferAmt : item.OfferValue || 0), 0);
|
|
||||||
TotalOfferAmount += productTotal;
|
|
||||||
} else {
|
|
||||||
const Combothere = productsData?.filter(item => item?.Type == "C")
|
|
||||||
const CombothereTotal = Combothere?.reduce((acc, item) => acc + (item.OfferValue || 0), 0);
|
|
||||||
TotalOfferAmount += CombothereTotal;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const products = [
|
const products = [
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,6 @@ import {
|
||||||
} from '../../../../Features/BookingScreen/BookingData/BookingData';
|
} from '../../../../Features/BookingScreen/BookingData/BookingData';
|
||||||
import signature from '../../../../Images/signatureimage.jpg';
|
import signature from '../../../../Images/signatureimage.jpg';
|
||||||
import { ApplicationPreferences } from '../../../../Features/BrachLogin/BranchLogin';
|
import { ApplicationPreferences } from '../../../../Features/BrachLogin/BranchLogin';
|
||||||
import { settingDataSelector } from '../../../../Features/PreferenceMaster/PreferenceMaster';
|
|
||||||
import Logo from '../../../../Images/Logo.jpg';
|
import Logo from '../../../../Images/Logo.jpg';
|
||||||
const PrintStyle1 = ({
|
const PrintStyle1 = ({
|
||||||
index,
|
index,
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import { Tooltip } from 'antd';
|
import { Tooltip } from 'antd';
|
||||||
import './GraphChart.scss'; // For styling
|
import './GraphChart.scss'; // For styling
|
||||||
import TooltipWrapper from '../../../Components/Tooltip/Tooltip';
|
import TooltipWrapper from '../../../Components/Tooltip/Tooltip';
|
||||||
|
|
@ -206,36 +206,7 @@ const GraphChart = ({ datasets }) => {
|
||||||
.join(' ');
|
.join(' ');
|
||||||
};
|
};
|
||||||
|
|
||||||
// const renderDots = (data, color) => {
|
|
||||||
// const maxValue = Math.max(...data.map(item => item.value));
|
|
||||||
// const svgHeight = 200;
|
|
||||||
// const svgWidth = 400;
|
|
||||||
// const gap = svgWidth / (data.length - 1);
|
|
||||||
|
|
||||||
// return data.map((point, index) => {
|
|
||||||
// const x = index * gap;
|
|
||||||
// const y = svgHeight - (point.value / maxValue) * svgHeight;
|
|
||||||
|
|
||||||
// return (
|
|
||||||
// <g key={index}>
|
|
||||||
// <circle
|
|
||||||
// cx={x}
|
|
||||||
// cy={animate ? y : svgHeight}
|
|
||||||
// r={5}
|
|
||||||
// fill={color}
|
|
||||||
// stroke={color}
|
|
||||||
// strokeWidth="2"
|
|
||||||
// style={{ transition: 'cy 0.5s ease-in-out' }}
|
|
||||||
// onMouseOver={(e) => handleMouseOver(e, point)}
|
|
||||||
// onMouseOut={handleMouseOut}
|
|
||||||
// />
|
|
||||||
// <text x={x} y={y - 10} fill="black" fontSize="12" textAnchor="middle">
|
|
||||||
// {formatValue(point.value)} ({item.date})
|
|
||||||
// </text>
|
|
||||||
// </g>
|
|
||||||
// );
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
|
|
||||||
const renderDots = (data, color) => {
|
const renderDots = (data, color) => {
|
||||||
const reversedData = [...data].reverse();
|
const reversedData = [...data].reverse();
|
||||||
|
|
@ -507,7 +478,7 @@ const GraphChart = ({ datasets }) => {
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<div className="labels">
|
<div className="labels">
|
||||||
{Array.from({ length: 7 }, (_, i) => {
|
{Array.from({ length: 8 }, (_, i) => {
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
date.setDate(date.getDate() - i);
|
date.setDate(date.getDate() - i);
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
width: inherit;
|
width: inherit;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
.labelss {
|
.labelss {
|
||||||
font-size: 11px;
|
font-size: 10px;
|
||||||
font-family: 'Poppins';
|
font-family: 'Poppins';
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
|
|
||||||
|
|
@ -1,93 +1,4 @@
|
||||||
// import React, { useEffect, useRef, useState } from 'react';
|
import { useMemo } from 'react';
|
||||||
// import Highcharts from 'highcharts';
|
|
||||||
// import HighchartsReact from 'highcharts-react-official';
|
|
||||||
// import "./PieChart.scss"
|
|
||||||
// const DynamicPieChart = ({ chartData }) => {
|
|
||||||
// const [overallValue, setOverallValue] = useState(0);
|
|
||||||
// const chartRef = useRef();
|
|
||||||
|
|
||||||
// useEffect(() => {
|
|
||||||
// if (chartRef.current && chartData) {
|
|
||||||
// const chart = chartRef.current.chart;
|
|
||||||
// chart.series[0].setData(chartData);
|
|
||||||
// const sum = chartData.reduce((total, dataPoint) => total + dataPoint.y, 0);
|
|
||||||
// setOverallValue(sum);
|
|
||||||
|
|
||||||
// // Update the chart title to include the overall value
|
|
||||||
// chart.setTitle({ text: `Overall Amount: ${sum}` });
|
|
||||||
// }
|
|
||||||
// }, [chartData]);
|
|
||||||
|
|
||||||
// return (
|
|
||||||
// <div style={{width:"inherit"}}>
|
|
||||||
// <HighchartsReact
|
|
||||||
// highcharts={Highcharts}
|
|
||||||
// options={{
|
|
||||||
// chart: {
|
|
||||||
// type: 'pie'
|
|
||||||
// },
|
|
||||||
// title: {
|
|
||||||
// text: `Overall Amount: ${overallValue}` // Initial title with overall value
|
|
||||||
// },
|
|
||||||
// series: [{
|
|
||||||
// name: 'Amount',
|
|
||||||
// data: chartData
|
|
||||||
// }]
|
|
||||||
// }}
|
|
||||||
// ref={chartRef}
|
|
||||||
// />
|
|
||||||
// </div>
|
|
||||||
// );
|
|
||||||
// };
|
|
||||||
|
|
||||||
// export default DynamicPieChart;
|
|
||||||
|
|
||||||
// import React, { useEffect, useRef, useState } from 'react';
|
|
||||||
// import Highcharts from 'highcharts';
|
|
||||||
// import HighchartsReact from 'highcharts-react-official';
|
|
||||||
// import "./PieChart.scss"
|
|
||||||
// const DynamicPieChart = ({ chartData }) => {
|
|
||||||
// const [overallValue, setOverallValue] = useState(0);
|
|
||||||
// const chartRef = useRef();
|
|
||||||
|
|
||||||
// useEffect(() => {
|
|
||||||
// if (chartRef.current && chartData) {
|
|
||||||
// const chart = chartRef.current.chart;
|
|
||||||
// chart.series[0].setData(chartData);
|
|
||||||
// const sum = chartData.reduce((total, dataPoint) => total + dataPoint.y, 0);
|
|
||||||
// setOverallValue(sum);
|
|
||||||
|
|
||||||
// // Update the chart title to include the overall value
|
|
||||||
// chart.setTitle({ text: `Overall Amount: ${sum}` });
|
|
||||||
// }
|
|
||||||
// }, [chartData]);
|
|
||||||
|
|
||||||
// return (
|
|
||||||
// <div style={{ width: "inherit" }}>
|
|
||||||
// <HighchartsReact
|
|
||||||
// highcharts={Highcharts}
|
|
||||||
// options={{
|
|
||||||
// chart: {
|
|
||||||
// type: 'pie'
|
|
||||||
// },
|
|
||||||
// title: {
|
|
||||||
// text: `Overall Amount: ${overallValue}`
|
|
||||||
// },
|
|
||||||
// series: [{
|
|
||||||
// name: 'Amount',
|
|
||||||
// data: chartData
|
|
||||||
// }]
|
|
||||||
// }}
|
|
||||||
// ref={chartRef}
|
|
||||||
// />
|
|
||||||
// </div>
|
|
||||||
// );
|
|
||||||
// };
|
|
||||||
|
|
||||||
// export default DynamicPieChart;
|
|
||||||
|
|
||||||
// create by sree
|
|
||||||
import React, { useMemo } from 'react';
|
|
||||||
import Highcharts from 'highcharts';
|
import Highcharts from 'highcharts';
|
||||||
import HighchartsReact from 'highcharts-react-official';
|
import HighchartsReact from 'highcharts-react-official';
|
||||||
import './PieChart.scss';
|
import './PieChart.scss';
|
||||||
|
|
@ -105,16 +16,25 @@ const DynamicPieChart = ({ chartData }) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!chartData?.length) {
|
if (!chartData?.length) {
|
||||||
return <div style={{textAlign:"center",display: 'flex',
|
return (
|
||||||
alignItems: 'center',
|
<div
|
||||||
justifyContent: 'center',
|
style={{
|
||||||
height: '250px',
|
textAlign: 'center',
|
||||||
backgroundColor: '#fafafa',
|
display: 'flex',
|
||||||
color: '#999',
|
alignItems: 'center',
|
||||||
fontSize: '16px',
|
justifyContent: 'center',
|
||||||
fontWeight: '500',
|
height: '250px',
|
||||||
border: '1px dashed #d9d9d9',
|
backgroundColor: '#fafafa',
|
||||||
borderRadius: '8px',}}>No Data Found</div>;
|
color: '#999',
|
||||||
|
fontSize: '16px',
|
||||||
|
fontWeight: '500',
|
||||||
|
border: '1px dashed #d9d9d9',
|
||||||
|
borderRadius: '8px',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
No Data Found
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,26 @@
|
||||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
import { useCallback, useEffect, useRef, useState,lazy, Suspense } from 'react';
|
||||||
import '../../Styles/DashBoard/RetailDashBoard.scss';
|
|
||||||
import GraphChart from './Chart/GraphChart';
|
|
||||||
import { DatePicker, Space, Tooltip } from 'antd';
|
|
||||||
import dayjs from 'dayjs';
|
|
||||||
import { IoMdRefresh } from 'react-icons/io';
|
|
||||||
import { CiShop } from 'react-icons/ci';
|
|
||||||
import { FiMenu } from 'react-icons/fi';
|
|
||||||
import PozoMind from '../../Images/pozologowhite.svg';
|
|
||||||
import { useNavigate, useOutletContext } from 'react-router-dom';
|
import { useNavigate, useOutletContext } from 'react-router-dom';
|
||||||
import CalendarDropdown from '../../Components/CalendarDropdown';
|
import { shallowEqual, useDispatch } from 'react-redux';
|
||||||
import { MdKeyboardArrowDown } from 'react-icons/md';
|
import { useSelector } from 'react-redux';
|
||||||
import { IoMdNotificationsOutline } from 'react-icons/io';
|
|
||||||
import {
|
import { DatePicker, Tooltip } from 'antd';
|
||||||
getdashboard,
|
import dayjs from 'dayjs';
|
||||||
getdashboarddate,
|
|
||||||
getpreOrderDashBoard,
|
import '../../Styles/DashBoard/RetailDashBoard.scss';
|
||||||
getSalesHdr,
|
|
||||||
getTopSellingCustomers,
|
const GraphChart = lazy(() => import('./Chart/GraphChart'));
|
||||||
} from '../../Features/RetailDashboard/Dashboard.js';
|
const TopSellingProductsChart = lazy(
|
||||||
import { FaTimesCircle } from 'react-icons/fa';
|
() => import('./TopSellingProductsChart.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
import sandClock from '../../Images/sandClock.png';
|
import sandClock from '../../Images/sandClock.png';
|
||||||
|
import Add from '../../Images/dashboard/Add.png';
|
||||||
|
import AddPurchase from '../../Images/dashboard/AddPurchase.png';
|
||||||
|
import invoice from '../../Images/dashboard/invoice.png';
|
||||||
|
import user from '../../Images/dashboard/user.jpg';
|
||||||
|
import report from '../../Images/dashboard/report.png';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
FeatureAddon,
|
|
||||||
getTemplate,
|
|
||||||
GlobalPricingAppPricingName,
|
GlobalPricingAppPricingName,
|
||||||
StoredSessionData,
|
StoredSessionData,
|
||||||
} from '../../Features/ThemeChange/ThemeChange.js';
|
} from '../../Features/ThemeChange/ThemeChange.js';
|
||||||
|
|
@ -31,15 +29,20 @@ import {
|
||||||
getAppSubscriptionDate,
|
getAppSubscriptionDate,
|
||||||
getPreferenceData,
|
getPreferenceData,
|
||||||
} from '../../Features/BookingScreen/BookingData/BookingData.js';
|
} from '../../Features/BookingScreen/BookingData/BookingData.js';
|
||||||
|
import {
|
||||||
|
getdashboard,
|
||||||
|
getdashboarddate,
|
||||||
|
getpreOrderDashBoard,
|
||||||
|
getSalesHdr,
|
||||||
|
getTopSellingCustomers,
|
||||||
|
} from '../../Features/RetailDashboard/Dashboard.js';
|
||||||
import {
|
import {
|
||||||
clearSession,
|
clearSession,
|
||||||
dateFormatChange,
|
|
||||||
encryptedValuesUrlFun,
|
encryptedValuesUrlFun,
|
||||||
ExtractDateFormate,
|
ExtractDateFormate,
|
||||||
getSession,
|
getSession,
|
||||||
} from '../../Services/Others';
|
} from '../../Services/Others';
|
||||||
import { shallowEqual, useDispatch } from 'react-redux';
|
|
||||||
import { useSelector } from 'react-redux';
|
|
||||||
import {
|
import {
|
||||||
getAllprodIds,
|
getAllprodIds,
|
||||||
getExpireProductsList,
|
getExpireProductsList,
|
||||||
|
|
@ -58,28 +61,36 @@ import {
|
||||||
PUTLoginuser,
|
PUTLoginuser,
|
||||||
} from '../../Features/BrachLogin/BranchLogin.js';
|
} from '../../Features/BrachLogin/BranchLogin.js';
|
||||||
import { getPurchasedAppDetails } from '../../Features/BookingScreen/Pricing/Pricing.js';
|
import { getPurchasedAppDetails } from '../../Features/BookingScreen/Pricing/Pricing.js';
|
||||||
import Add from '../../Images/dashboard/Add.png';
|
|
||||||
import AddPurchase from '../../Images/dashboard/AddPurchase.png';
|
|
||||||
import invoice from '../../Images/dashboard/invoice.png';
|
|
||||||
import user from '../../Images/dashboard/user.jpg';
|
|
||||||
import report from '../../Images/dashboard/report.png';
|
|
||||||
import Calendar from '../../Components/Calendar/Calendar';
|
|
||||||
import { PiSignOut } from 'react-icons/pi';
|
|
||||||
import BSNavBarUserInfo from '../BookingScreen/Components/BSNavbar/BSNavBarUserInfo';
|
|
||||||
import { DefaultModal } from '../../Components/Modal/DefaultModal';
|
|
||||||
|
|
||||||
import { RadioGrpButton } from '../../Components/Forms/RadioGroup.jsx';
|
|
||||||
import { DropDowns } from '../../Components/Forms/DropDown.jsx';
|
const BSNavBarUserInfo = lazy(() =>
|
||||||
|
import('../BookingScreen/Components/BSNavbar/BSNavBarUserInfo')
|
||||||
|
);
|
||||||
|
const DefaultModal = lazy(() =>
|
||||||
|
import('../../Components/Modal/DefaultModal').then((m) => ({
|
||||||
|
default: m.DefaultModal,
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
|
||||||
|
const RadioGrpButton = lazy(() =>
|
||||||
|
import('../../Components/Forms/RadioGroup.jsx').then((m) => ({
|
||||||
|
default: m.RadioGrpButton,
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
|
||||||
|
const DropDowns = lazy(() =>
|
||||||
|
import('../../Components/Forms/DropDown.jsx').then((m) => ({
|
||||||
|
default: m.DropDowns,
|
||||||
|
}))
|
||||||
|
);
|
||||||
import {
|
import {
|
||||||
ChangeRedirectStatus,
|
ChangeRedirectStatus,
|
||||||
getEmpAccess,
|
getEmpAccess,
|
||||||
GlobalRedirectStatus,
|
GlobalRedirectStatus,
|
||||||
} from '../../Features/AppPage/CenterPage.js';
|
} from '../../Features/AppPage/CenterPage.js';
|
||||||
import { UserDataBasedOnBranchId } from '../../Features/Reports/Reports.js';
|
import { UserDataBasedOnBranchId } from '../../Features/Reports/Reports.js';
|
||||||
import { gettableData } from '../../Features/PreferenceMaster/PreferenceMaster.js';
|
|
||||||
import Loader from '../../Components/Loader/Loader.jsx';
|
import Loader from '../../Components/Loader/Loader.jsx';
|
||||||
import { getUserProfile } from '../../Features/UserAccount/userData.js';
|
import { getUserProfile } from '../../Features/UserAccount/userData.js';
|
||||||
import TopSellingProductsChart from './TopSellingProductsChart.jsx';
|
|
||||||
import { Messages } from '../../Components/Notifications/Messages.jsx';
|
import { Messages } from '../../Components/Notifications/Messages.jsx';
|
||||||
|
|
||||||
const commonUrl = import.meta.env.ENV_COMMON_BASE_URL;
|
const commonUrl = import.meta.env.ENV_COMMON_BASE_URL;
|
||||||
|
|
@ -97,7 +108,6 @@ const RetailDashboard = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const { RangePicker } = DatePicker;
|
const { RangePicker } = DatePicker;
|
||||||
const [selectedTab, setSelectedTab] = useState('dashboard');
|
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{ value: 'dashboard', label: 'Dashboard' },
|
{ value: 'dashboard', label: 'Dashboard' },
|
||||||
{ value: 'top-selling-products', label: 'Top Selling Products' },
|
{ value: 'top-selling-products', label: 'Top Selling Products' },
|
||||||
|
|
@ -116,16 +126,7 @@ const RetailDashboard = () => {
|
||||||
]);
|
]);
|
||||||
const [ismounted, setIsmounted] = useState(true);
|
const [ismounted, setIsmounted] = useState(true);
|
||||||
const [customerPendingBalance, setcustomerPendingBalance] = useState([]);
|
const [customerPendingBalance, setcustomerPendingBalance] = useState([]);
|
||||||
console.log(PricingAppPricingName, 'PricingAppPricingName');
|
|
||||||
// const {
|
|
||||||
// AppId: appId,
|
|
||||||
// CompId: compId,
|
|
||||||
// BranchId: branchId,
|
|
||||||
// } = SessionData || {};
|
|
||||||
// console.log(appId, compId, branchId, 'SessionData');
|
|
||||||
const [range1, setRange1] = useState('today');
|
|
||||||
const [range2, setRange2] = useState('today');
|
|
||||||
const [range3, setRange3] = useState('today');
|
|
||||||
const [userprofile, setUserprofile] = useState(false);
|
const [userprofile, setUserprofile] = useState(false);
|
||||||
|
|
||||||
const userProfileRef = useRef(null);
|
const userProfileRef = useRef(null);
|
||||||
|
|
@ -142,7 +143,6 @@ const RetailDashboard = () => {
|
||||||
const [totalPages, setTotalPages] = useState(0);
|
const [totalPages, setTotalPages] = useState(0);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [products, setProducts] = useState([]);
|
const [products, setProducts] = useState([]);
|
||||||
console.log(selection, 'selection');
|
|
||||||
const [CompBranchData, setCompBranchData] = useState();
|
const [CompBranchData, setCompBranchData] = useState();
|
||||||
const [EmpAcces, setEmpAccess] = useState();
|
const [EmpAcces, setEmpAccess] = useState();
|
||||||
const [seletedBranchData, setseletedBranchData] = useState(BranchId);
|
const [seletedBranchData, setseletedBranchData] = useState(BranchId);
|
||||||
|
|
@ -151,7 +151,6 @@ const RetailDashboard = () => {
|
||||||
BrLength == 1 ? null : 'all'
|
BrLength == 1 ? null : 'all'
|
||||||
);
|
);
|
||||||
const [ApiData, setApiData] = useState([]);
|
const [ApiData, setApiData] = useState([]);
|
||||||
console.log(CompBranchData, 'CompBranchData');
|
|
||||||
const [Zero, SetZero] = useState(false);
|
const [Zero, SetZero] = useState(false);
|
||||||
const [ResponseData, setResponseData] = useState();
|
const [ResponseData, setResponseData] = useState();
|
||||||
const [DateApiData, setDateApiData] = useState([]);
|
const [DateApiData, setDateApiData] = useState([]);
|
||||||
|
|
@ -216,18 +215,7 @@ const RetailDashboard = () => {
|
||||||
type?.PreferredStatus === 'Y'
|
type?.PreferredStatus === 'Y'
|
||||||
);
|
);
|
||||||
const timerDuration = 30;
|
const timerDuration = 30;
|
||||||
let EndDate = AppDetails?.[0]?.ValidityEnd;
|
|
||||||
|
|
||||||
const isoDate = EndDate; // <-- July 24
|
|
||||||
const date = new Date(isoDate);
|
|
||||||
|
|
||||||
const options = { year: 'numeric', month: 'long', day: 'numeric' };
|
|
||||||
const formatted = date.toLocaleDateString('en-US', options);
|
|
||||||
|
|
||||||
// "July 24, 2025"
|
|
||||||
|
|
||||||
console.log(expiredList, lowStockList, 'lowStockList');
|
|
||||||
console.log(TopSellingCus, preorderData, 'preorderData');
|
|
||||||
let DineInData =
|
let DineInData =
|
||||||
ApiData?.[0]?.ChartDtl?.map((item) => {
|
ApiData?.[0]?.ChartDtl?.map((item) => {
|
||||||
return {
|
return {
|
||||||
|
|
@ -441,10 +429,6 @@ const RetailDashboard = () => {
|
||||||
|
|
||||||
if (res?.data?.statusCode === 1 && res?.data?.data?.length > 0) {
|
if (res?.data?.statusCode === 1 && res?.data?.data?.length > 0) {
|
||||||
const remaining = res?.data?.data?.[0];
|
const remaining = res?.data?.data?.[0];
|
||||||
// let RemainingDays = expData?.RemainingDays;
|
|
||||||
// let RemainingHours=expData?.RemainingHours;
|
|
||||||
// let RemainingMinutes=expData?.RemainingMinutes;
|
|
||||||
// let RemainingSeconds=expData?.RemainingSeconds
|
|
||||||
|
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
|
||||||
|
|
@ -1075,39 +1059,6 @@ const RetailDashboard = () => {
|
||||||
getSalesHdrFn();
|
getSalesHdrFn();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Function to aggregate data from multiple branches
|
|
||||||
const aggregateBranchData = (branchDataArray) => {
|
|
||||||
const aggregated = {
|
|
||||||
DineInOrderCount: 0,
|
|
||||||
TakeAwayOrderCount: 0,
|
|
||||||
SelfTakeAwayOrderCount: 0,
|
|
||||||
OverAllSalesAmt: 0,
|
|
||||||
OverAllDineInAmount: 0,
|
|
||||||
OverAllTakeAwayAmount: 0,
|
|
||||||
ChartDtl: [],
|
|
||||||
};
|
|
||||||
|
|
||||||
branchDataArray.forEach((branchData) => {
|
|
||||||
if (branchData) {
|
|
||||||
aggregated.DineInOrderCount += branchData.DineInOrderCount || 0;
|
|
||||||
aggregated.TakeAwayOrderCount += branchData.TakeAwayOrderCount || 0;
|
|
||||||
aggregated.SelfTakeAwayOrderCount +=
|
|
||||||
branchData.SelfTakeAwayOrderCount || 0;
|
|
||||||
aggregated.OverAllSalesAmt += branchData.OverAllSalesAmt || 0;
|
|
||||||
aggregated.OverAllDineInAmount += branchData.OverAllDineInAmount || 0;
|
|
||||||
aggregated.OverAllTakeAwayAmount +=
|
|
||||||
branchData.OverAllTakeAwayAmount || 0;
|
|
||||||
|
|
||||||
// Merge chart data (you might want to customize this based on your needs)
|
|
||||||
if (branchData.ChartDtl && branchData.ChartDtl.length > 0) {
|
|
||||||
aggregated.ChartDtl = aggregated.ChartDtl.concat(branchData.ChartDtl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return aggregated;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Helper functions for fetching data from all branches
|
// Helper functions for fetching data from all branches
|
||||||
const getpreOrderDashBoardFnAllBranches = async (FromDate, ToDate) => {
|
const getpreOrderDashBoardFnAllBranches = async (FromDate, ToDate) => {
|
||||||
if (!CompBranchData || CompBranchData.length === 0) return;
|
if (!CompBranchData || CompBranchData.length === 0) return;
|
||||||
|
|
@ -1284,14 +1235,6 @@ const RetailDashboard = () => {
|
||||||
setApiData([]);
|
setApiData([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// const allBranchData = await Promise.all(allBranchPromises);
|
|
||||||
|
|
||||||
// // Aggregate the data from all branches
|
|
||||||
// const aggregatedData = aggregateBranchData(allBranchData);
|
|
||||||
// setDateApiData([aggregatedData]);
|
|
||||||
// setApiData([aggregatedData]);
|
|
||||||
// setPiedat([aggregatedData]);
|
|
||||||
|
|
||||||
// Also refresh other data for all branches with date range
|
// Also refresh other data for all branches with date range
|
||||||
getpreOrderDashBoardFnAllBranches(fromDate, toDate);
|
getpreOrderDashBoardFnAllBranches(fromDate, toDate);
|
||||||
getTopBuyingCustomersAllBranches(fromDate, toDate);
|
getTopBuyingCustomersAllBranches(fromDate, toDate);
|
||||||
|
|
@ -1477,6 +1420,7 @@ const RetailDashboard = () => {
|
||||||
?.toUpperCase()}
|
?.toUpperCase()}
|
||||||
</div>
|
</div>
|
||||||
{userprofile && (
|
{userprofile && (
|
||||||
|
<Suspense fallback={null}>
|
||||||
<BSNavBarUserInfo
|
<BSNavBarUserInfo
|
||||||
isOpen={userprofile}
|
isOpen={userprofile}
|
||||||
divRef={userProfileRef}
|
divRef={userProfileRef}
|
||||||
|
|
@ -1487,6 +1431,7 @@ const RetailDashboard = () => {
|
||||||
}}
|
}}
|
||||||
Logout={Logout}
|
Logout={Logout}
|
||||||
/>
|
/>
|
||||||
|
</Suspense>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -1511,6 +1456,7 @@ const RetailDashboard = () => {
|
||||||
{/* Branch Filter Dropdown */}
|
{/* Branch Filter Dropdown */}
|
||||||
{CompBranchData?.length > 1 && selection !== 'top-selling-products' && (
|
{CompBranchData?.length > 1 && selection !== 'top-selling-products' && (
|
||||||
<div className="branch-filter-dropdown">
|
<div className="branch-filter-dropdown">
|
||||||
|
<Suspense fallback={<div>Loading...</div>}>
|
||||||
<DropDowns
|
<DropDowns
|
||||||
options={[
|
options={[
|
||||||
{ value: 'all', label: 'All Branches' },
|
{ value: 'all', label: 'All Branches' },
|
||||||
|
|
@ -1525,6 +1471,7 @@ const RetailDashboard = () => {
|
||||||
defaultValue="all"
|
defaultValue="all"
|
||||||
placeholder="All Branches"
|
placeholder="All Branches"
|
||||||
/>
|
/>
|
||||||
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|
@ -1537,14 +1484,6 @@ const RetailDashboard = () => {
|
||||||
className="datepickerDashboardrange"
|
className="datepickerDashboardrange"
|
||||||
inputReadOnly={true}
|
inputReadOnly={true}
|
||||||
/>
|
/>
|
||||||
{/* <div className="refershdashboard">
|
|
||||||
<div>
|
|
||||||
{' '}
|
|
||||||
<IoMdRefresh />
|
|
||||||
Refresh
|
|
||||||
</div>
|
|
||||||
<span>10sec auto refresh</span>
|
|
||||||
</div> */}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{selection === 'dashboard' ? (
|
{selection === 'dashboard' ? (
|
||||||
|
|
@ -1553,7 +1492,9 @@ const RetailDashboard = () => {
|
||||||
<div className="TotalRevenue">
|
<div className="TotalRevenue">
|
||||||
<div className="tlxHeader"></div>
|
<div className="tlxHeader"></div>
|
||||||
<div className="TotalRevenue-Graph">
|
<div className="TotalRevenue-Graph">
|
||||||
<GraphChart datasets={datasets} />
|
<Suspense fallback={<Loader />}>
|
||||||
|
<GraphChart datasets={datasets} />
|
||||||
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -2418,28 +2359,6 @@ const RetailDashboard = () => {
|
||||||
No Low Stock Product
|
No Low Stock Product
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* <div className="stockAlertsRow">
|
|
||||||
<div className="stockAlertsCol slno">2</div>
|
|
||||||
<div className="stockAlertsCol product">
|
|
||||||
<div className="stockAlertsProductLink">
|
|
||||||
Cotton Blend Mandarin Collar Self One Design Kurta
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="stockAlertsCol count">4</div>
|
|
||||||
</div>
|
|
||||||
<div className="stockAlertsRow">
|
|
||||||
<div className="stockAlertsCol slno">3</div>
|
|
||||||
<div className="stockAlertsCol product">
|
|
||||||
<div className="stockAlertsProductLink">
|
|
||||||
Cotton Blend Mandarin Collar Self One Design Kurta
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="stockAlertsCol count">1</div>
|
|
||||||
</div> */}
|
|
||||||
{/* <div className="stockAlertsViewAll">
|
|
||||||
<a href="#">View All</a>
|
|
||||||
</div> */}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -2448,106 +2367,110 @@ const RetailDashboard = () => {
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<TopSellingProductsChart
|
<Suspense fallback={<Loader />}>
|
||||||
dates={dates}
|
<TopSellingProductsChart
|
||||||
products={products}
|
dates={dates}
|
||||||
loading={loading}
|
products={products}
|
||||||
totalPages={totalPages}
|
loading={loading}
|
||||||
page={page}
|
totalPages={totalPages}
|
||||||
setPage={setPage}
|
page={page}
|
||||||
fetchProducts={fetchProducts}
|
setPage={setPage}
|
||||||
initialDate={initialDate}
|
fetchProducts={fetchProducts}
|
||||||
/>
|
initialDate={initialDate}
|
||||||
|
/>
|
||||||
|
</Suspense>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
<Suspense fallback={null}>
|
||||||
<DefaultModal
|
<DefaultModal
|
||||||
open={modal}
|
open={modal}
|
||||||
title="Authentication"
|
title="Authentication"
|
||||||
width={500}
|
width={500}
|
||||||
footer={false}
|
footer={false}
|
||||||
handleCancel={handlePageChange}
|
handleCancel={handlePageChange}
|
||||||
children={
|
>
|
||||||
<>
|
<>
|
||||||
<div className="modalContentsadminuser">
|
<div className="modalContentsadminuser">
|
||||||
<DropDowns
|
<DropDowns
|
||||||
options={userDropDown?.map((option) => ({
|
options={userDropDown?.map((option) => ({
|
||||||
value: option?.UserId,
|
value: option?.UserId,
|
||||||
label: option?.UserName,
|
label: option?.UserName,
|
||||||
}))}
|
}))}
|
||||||
label={<label class="required">User Name</label>}
|
label={<label className="required">User Name</label>}
|
||||||
className="field-DropDown"
|
className="field-DropDown"
|
||||||
onChangeFunction={(e) => UserDropDownChange(e)}
|
onChangeFunction={(e) => UserDropDownChange(e)}
|
||||||
isOnchanges={selectedUserData ? true : false}
|
isOnchanges={selectedUserData ? true : false}
|
||||||
valueData={selectedUserData}
|
valueData={selectedUserData}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
/>
|
/>
|
||||||
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
||||||
<div className="RadioButton">
|
<div className="RadioButton">
|
||||||
<RadioGrpButton
|
<Suspense fallback={<div>Loading...</div>}>
|
||||||
content={[
|
<RadioGrpButton
|
||||||
{ value: 'O', label: 'OTP' },
|
content={[
|
||||||
{ value: 'P', label: 'PIN' },
|
{ value: 'O', label: 'OTP' },
|
||||||
]}
|
{ value: 'P', label: 'PIN' },
|
||||||
fieldState={true}
|
]}
|
||||||
defaultSelect={SelectType}
|
fieldState={true}
|
||||||
onSelectFuntion={(e) => ChangeMethod(e)}
|
defaultSelect={SelectType}
|
||||||
/>
|
onSelectFuntion={(e) => ChangeMethod(e)}
|
||||||
</div>
|
/>
|
||||||
</div>
|
</Suspense>
|
||||||
|
|
||||||
{pinInput && (
|
|
||||||
<div className="otpInputsadminuser">
|
|
||||||
{[0, 1, 2, 3].map((i) => (
|
|
||||||
<input
|
|
||||||
key={i}
|
|
||||||
ref={(el) => (inputRefs.current[i] = el)}
|
|
||||||
className="inputNumber"
|
|
||||||
type="text"
|
|
||||||
inputMode="numeric"
|
|
||||||
pattern="[0-9]"
|
|
||||||
maxLength={1}
|
|
||||||
onChange={(e) => handleChange(i, e)}
|
|
||||||
onKeyDown={(e) => handleKeyDown(i, e)}
|
|
||||||
style={{
|
|
||||||
textAlign: 'center',
|
|
||||||
width: '40px',
|
|
||||||
fontSize: '20px',
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
width: '100%',
|
|
||||||
display: 'flex',
|
|
||||||
justifyContent: 'flex-end',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
className="size-save-button-retail"
|
|
||||||
onClick={handleClick}
|
|
||||||
disabled={disabled}
|
|
||||||
>
|
|
||||||
{SelectTypeName === 'OTP'
|
|
||||||
? !FirstTimeOtp
|
|
||||||
? `send ${SelectTypeName.toLocaleLowerCase()}`
|
|
||||||
: `resend ${SelectTypeName.toLocaleLowerCase()}${
|
|
||||||
seconds > 0 ? ` in ${seconds}s` : ''
|
|
||||||
}`
|
|
||||||
: !FirstTimePin
|
|
||||||
? `send ${SelectTypeName.toLocaleLowerCase()}`
|
|
||||||
: `resend ${SelectTypeName.toLocaleLowerCase()}${
|
|
||||||
seconds > 0 ? ` in ${seconds}s` : ''
|
|
||||||
}`}
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
|
||||||
}
|
{pinInput && (
|
||||||
/>
|
<div className="otpInputsadminuser">
|
||||||
|
{[0, 1, 2, 3].map((i) => (
|
||||||
|
<input
|
||||||
|
key={i}
|
||||||
|
ref={(el) => (inputRefs.current[i] = el)}
|
||||||
|
className="inputNumber"
|
||||||
|
type="text"
|
||||||
|
inputMode="numeric"
|
||||||
|
pattern="[0-9]"
|
||||||
|
maxLength={1}
|
||||||
|
onChange={(e) => handleChange(i, e)}
|
||||||
|
onKeyDown={(e) => handleKeyDown(i, e)}
|
||||||
|
style={{
|
||||||
|
textAlign: 'center',
|
||||||
|
width: '40px',
|
||||||
|
fontSize: '20px',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
width: '100%',
|
||||||
|
display: 'flex',
|
||||||
|
justifyContent: 'flex-end',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
className="size-save-button-retail"
|
||||||
|
onClick={handleClick}
|
||||||
|
disabled={disabled}
|
||||||
|
>
|
||||||
|
{SelectTypeName === 'OTP'
|
||||||
|
? !FirstTimeOtp
|
||||||
|
? `send ${SelectTypeName.toLocaleLowerCase()}`
|
||||||
|
: `resend ${SelectTypeName.toLocaleLowerCase()}${
|
||||||
|
seconds > 0 ? ` in ${seconds}s` : ''
|
||||||
|
}`
|
||||||
|
: !FirstTimePin
|
||||||
|
? `send ${SelectTypeName.toLocaleLowerCase()}`
|
||||||
|
: `resend ${SelectTypeName.toLocaleLowerCase()}${
|
||||||
|
seconds > 0 ? ` in ${seconds}s` : ''
|
||||||
|
}`}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
</DefaultModal>
|
||||||
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { Skeleton } from 'antd';
|
import { Skeleton } from 'antd';
|
||||||
|
|
@ -64,119 +64,7 @@ const KioskBookingPage = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// const fetchData = async () => {
|
|
||||||
|
|
||||||
// const queryParams = await getQueryParams();
|
|
||||||
|
|
||||||
// console.log("queryParams", queryParams)
|
|
||||||
// if (Object.keys(queryParams)?.length !== 0) {
|
|
||||||
|
|
||||||
// console.log("queryParams", queryParams)
|
|
||||||
// if(!sessionStorage.getItem('auth')){
|
|
||||||
// let data = {
|
|
||||||
// username: "1000000001",
|
|
||||||
// password: "1234"
|
|
||||||
// }
|
|
||||||
// const response = await axios.post(`${apiUrlToken}/jwtTokenGenerator`, data, {
|
|
||||||
// headers: {
|
|
||||||
// 'Content-Type': 'application/json',
|
|
||||||
// 'Accept': 'application/json',
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
|
|
||||||
// const { token } = response?.data;
|
|
||||||
// sessionStorage.setItem('auth', token)
|
|
||||||
// sessionStore("LoginType","Kiosk")
|
|
||||||
// }
|
|
||||||
// const MACAddress = queryParams?.MD
|
|
||||||
// if (MACAddress) {
|
|
||||||
// console.log("MACAddress", MACAddress)
|
|
||||||
// setDeviceAddress(MACAddress)
|
|
||||||
// setDevicePresent(true)
|
|
||||||
// let deviceMACResponse = await dispatch(getDeviceAccess({ DeviceAddress: MACAddress })).unwrap();
|
|
||||||
// if (deviceMACResponse?.data?.statusCode == 1 && deviceMACResponse?.data?.data?.length > 0 && deviceMACResponse?.data?.data?.[0]?.KioskStatus === 'Y') {
|
|
||||||
// setDeviceAccess(true)
|
|
||||||
// let responseData = deviceMACResponse?.data?.data?.[0]
|
|
||||||
// responseData?.MobileNo != null && responseData?.MobileNo != undefined && sessionStore("MobileNo", responseData?.MobileNo);
|
|
||||||
// responseData?.UserId != null && responseData?.UserId != undefined && sessionStore("UserId", responseData?.UserId);
|
|
||||||
// responseData?.UserType != null && responseData?.UserType != undefined && sessionStore("UserType", responseData?.UserType);
|
|
||||||
// responseData?.CompId != null && responseData?.CompId != undefined && sessionStore("CompId", responseData?.CompId);
|
|
||||||
// responseData?.CompName != null && responseData?.CompName != undefined && sessionStore("CompName", responseData?.CompName);
|
|
||||||
// responseData?.AppId != null && responseData?.AppId != undefined && sessionStore("AppId", responseData?.AppId);
|
|
||||||
// responseData?.AppName != null && responseData?.AppName != undefined && sessionStore("AppName", responseData?.AppName);
|
|
||||||
// responseData?.BranchId != null && responseData?.BranchId != undefined && sessionStore("BranchId", responseData?.BranchId);
|
|
||||||
// responseData?.userName != null && responseData?.userName != undefined && sessionStore("userName", responseData?.UserName);
|
|
||||||
// responseData?.SessionId != null && responseData?.SessionId != undefined && sessionStore("SessionId", responseData?.SessionId);
|
|
||||||
// sessionStore("hasRefreshed", true);
|
|
||||||
// dispatch(getKioskTemplate({ CompId: responseData?.CompId, BranchId: responseData?.BranchId, AppId: responseData?.AppId })).unwrap();
|
|
||||||
// dispatch(getProductCategories({ CompId: responseData?.CompId, BranchId: responseData?.BranchId, AppId: responseData?.AppId })).unwrap();
|
|
||||||
// } else {
|
|
||||||
// setDeviceAccess(false)
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// const MobileNoValue = decryptedValuesFun(queryParams?.MN);
|
|
||||||
// const UserIdValue = decryptedValuesFun(queryParams?.UD);
|
|
||||||
// const UserTypeValue = decryptedValuesFun(queryParams?.UT);
|
|
||||||
// const CompIdValue = decryptedValuesFun(queryParams?.CD);
|
|
||||||
// const AppIdValue = decryptedValuesFun(queryParams?.AD);
|
|
||||||
// const BranchIdValue = decryptedValuesFun(queryParams?.BD);
|
|
||||||
// const OrderIdValue = decryptedValuesFun(queryParams?.OD);
|
|
||||||
// const AmountValue = decryptedValuesFun(queryParams?.AM);
|
|
||||||
// let CompNameValue = null, AppNameValue = null;
|
|
||||||
// if (CompIdValue) {
|
|
||||||
// let response = await dispatch(getCompanyData({ CompId: CompIdValue })).unwrap();
|
|
||||||
// if (response?.data?.statusCode == 1) {
|
|
||||||
// CompNameValue = response?.data?.data?.[0]?.["CompName"];
|
|
||||||
// } else {
|
|
||||||
// CompNameValue = null;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (AppIdValue) {
|
|
||||||
// let appResponse = await dispatch(getAllApplications({ AppId: AppIdValue })).unwrap();
|
|
||||||
// if (appResponse?.data?.statusCode == 1) {
|
|
||||||
// AppNameValue = appResponse?.data?.data?.[0]?.["AppName"];
|
|
||||||
// } else {
|
|
||||||
// AppNameValue = null;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// let userNameValue = null;
|
|
||||||
// if (queryParams?.UN != null && queryParams?.UN != undefined) {
|
|
||||||
// userNameValue = decryptedValuesFun(queryParams?.UN);
|
|
||||||
// }
|
|
||||||
// console.log("queryParams", MobileNoValue, UserIdValue, UserTypeValue, CompIdValue, AppIdValue, BranchIdValue)
|
|
||||||
// if (MobileNoValue && UserIdValue && UserTypeValue && CompIdValue && AppIdValue && BranchIdValue) {
|
|
||||||
// sessionStore("MobileNo", MobileNoValue);
|
|
||||||
// sessionStore("UserId", UserIdValue);
|
|
||||||
// sessionStore("UserType", UserTypeValue);
|
|
||||||
// sessionStore("CompId", CompIdValue);
|
|
||||||
// sessionStore("CompName", CompNameValue);
|
|
||||||
// sessionStore("AppId", AppIdValue);
|
|
||||||
// sessionStore("AppName", AppNameValue);
|
|
||||||
// sessionStore("BranchId", BranchIdValue);
|
|
||||||
// if (userNameValue != null) {
|
|
||||||
// sessionStore("userName", userNameValue);
|
|
||||||
// }
|
|
||||||
// dispatch(getKioskTemplate({ CompId: CompIdValue, BranchId: BranchIdValue, AppId: AppIdValue })).unwrap();
|
|
||||||
// dispatch(getProductCategories({ CompId: CompIdValue, BranchId: BranchIdValue, AppId: AppIdValue })).unwrap();
|
|
||||||
// dispatch(changeKioskPageName('OrderView'))
|
|
||||||
// dispatch(changePaymentgatewayRedirect(true))
|
|
||||||
// dispatch(changeKioskCustomerMobileNo(MobileNoValue))
|
|
||||||
// dispatch(changePGFailedTransId(OrderIdValue))
|
|
||||||
// dispatch(changePGFailedAmt(AmountValue))
|
|
||||||
// const url = new URL(window.location);
|
|
||||||
// url.search = '';
|
|
||||||
// window.history.replaceState({}, document.title, url.toString());
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// console.error("One or more decrypted values are null.");
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// } else {
|
|
||||||
// dispatch(getKioskTemplate({ CompId: CompId, BranchId: BranchId, AppId: AppId })).unwrap();
|
|
||||||
// dispatch(getProductCategories({ CompId: CompId, BranchId: BranchId, AppId: AppId })).unwrap();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
fetchData();
|
fetchData();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { Routes, Route, useNavigate } from 'react-router-dom';
|
import { Routes, Route, useNavigate } from 'react-router-dom';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
import {
|
import {
|
||||||
|
|
@ -29,20 +29,14 @@ const ProtectedRoutes = ({ routesConfig }) => {
|
||||||
const UserId = getSession('UserId');
|
const UserId = getSession('UserId');
|
||||||
const sessionId = getSession('SessionId');
|
const sessionId = getSession('SessionId');
|
||||||
const [accessCheckComplete, setAccessCheckComplete] = useState(false);
|
const [accessCheckComplete, setAccessCheckComplete] = useState(false);
|
||||||
const[AppPreference,setAppPreference]= useState([]);
|
|
||||||
const kioskPath = `${subDirectory}kiosksales`; // or your actual path
|
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(() => {
|
||||||
getApplicationPreference()
|
getApplicationPreference();
|
||||||
},[])
|
}, []);
|
||||||
|
|
||||||
const getApplicationPreference = async()=>{
|
const getApplicationPreference = async () => {
|
||||||
|
await dispatch(getCommonAppPreference(AppId)).unwrap();
|
||||||
const response = await dispatch(getCommonAppPreference(AppId)).unwrap();
|
};
|
||||||
if (response?.data?.statusCode === 1) {
|
|
||||||
setAppPreference(response?.data?.data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getEmpAccess = async () => {
|
const getEmpAccess = async () => {
|
||||||
let data = {
|
let data = {
|
||||||
|
|
@ -90,7 +84,7 @@ const ProtectedRoutes = ({ routesConfig }) => {
|
||||||
?.SettingDtlDetails?.some(
|
?.SettingDtlDetails?.some(
|
||||||
(e) => e.SettingIdName === 'Estimation' && e.SettingValue === 'Y'
|
(e) => e.SettingIdName === 'Estimation' && e.SettingValue === 'Y'
|
||||||
);
|
);
|
||||||
return SettingValueData, EstimateValueData;
|
return (SettingValueData, EstimateValueData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -123,10 +117,10 @@ const ProtectedRoutes = ({ routesConfig }) => {
|
||||||
const hasAdvance = pricingData?.some(
|
const hasAdvance = pricingData?.some(
|
||||||
(item) => item.PricingName === 'Premium'
|
(item) => item.PricingName === 'Premium'
|
||||||
);
|
);
|
||||||
console.log(pricingData,"pricingDatapricingData")
|
|
||||||
const hasProOrAdvance =
|
const hasProOrAdvance =
|
||||||
hasAdvance || pricingData.some((item) => item.PricingName === 'Customized');
|
hasAdvance ||
|
||||||
return hasAdvance, hasProOrAdvance;
|
pricingData.some((item) => item.PricingName === 'Customized');
|
||||||
|
return (hasAdvance, hasProOrAdvance);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching pricing name:', error);
|
console.error('Error fetching pricing name:', error);
|
||||||
}
|
}
|
||||||
|
|
@ -320,20 +314,20 @@ const ProtectedRoutes = ({ routesConfig }) => {
|
||||||
];
|
];
|
||||||
// Cmd it start
|
// Cmd it start
|
||||||
|
|
||||||
// if (!UserId && empAccessData != 'Public') {
|
// if (!UserId && empAccessData != 'Public') {
|
||||||
// if (!UserId && (empAccessData === "Kiosk Sales" || empAccessData === "View Bill")) {
|
// if (!UserId && (empAccessData === "Kiosk Sales" || empAccessData === "View Bill")) {
|
||||||
// // Allow KioskBookingPage to load and set session values
|
// // Allow KioskBookingPage to load and set session values
|
||||||
// setAccessCheckComplete(true);
|
// setAccessCheckComplete(true);
|
||||||
// return;
|
// return;
|
||||||
// }else{
|
// }else{
|
||||||
// console.log("UserId is undefined, logging out...");
|
// console.log("UserId is undefined, logging out...");
|
||||||
// // alert("User invalid. Redirecting to login...")
|
// // alert("User invalid. Redirecting to login...")
|
||||||
// sessionStorage.clear();
|
// sessionStorage.clear();
|
||||||
// window.location.replace(`${commonUrl}`);
|
// window.location.replace(`${commonUrl}`);
|
||||||
// setHasRedirected(true);
|
// setHasRedirected(true);
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// Cmd it End
|
// Cmd it End
|
||||||
const userAccessChecks = {
|
const userAccessChecks = {
|
||||||
|
|
|
||||||
28
src/main.jsx
28
src/main.jsx
|
|
@ -1,4 +1,3 @@
|
||||||
import React from 'react';
|
|
||||||
import ReactDOM from 'react-dom/client';
|
import ReactDOM from 'react-dom/client';
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import { BrowserRouter } from 'react-router-dom';
|
import { BrowserRouter } from 'react-router-dom';
|
||||||
|
|
@ -7,24 +6,21 @@ import './Fonts/Gilroy/stylesheet.css';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import AppRoutes from './App.jsx';
|
import AppRoutes from './App.jsx';
|
||||||
import { AuthProvider } from './AuthContext';
|
import { AuthProvider } from './AuthContext';
|
||||||
import GlobalErrorHandler from './GlobalErrorHandler';
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
||||||
import {QueryClient, QueryClientProvider,} from '@tanstack/react-query';
|
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
|
||||||
import {ReactQueryDevtools } from '@tanstack/react-query-devtools';
|
|
||||||
const queryClient = new QueryClient();
|
const queryClient = new QueryClient();
|
||||||
|
|
||||||
ReactDOM.createRoot(document.getElementById('root')).render(
|
ReactDOM.createRoot(document.getElementById('root')).render(
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
|
<BrowserRouter>
|
||||||
<BrowserRouter >
|
<AuthProvider>
|
||||||
<AuthProvider>
|
<AppRoutes />
|
||||||
<AppRoutes />
|
</AuthProvider>
|
||||||
|
</BrowserRouter>
|
||||||
</AuthProvider>
|
</Provider>
|
||||||
</BrowserRouter>
|
{process.env.NODE_ENV == 'development' && (
|
||||||
</Provider>
|
<ReactQueryDevtools initialIsOpen={false} />
|
||||||
{process.env.NODE_ENV == "development" && (
|
)}
|
||||||
<ReactQueryDevtools initialIsOpen={false} />
|
|
||||||
)}
|
|
||||||
</QueryClientProvider>
|
</QueryClientProvider>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,209 +1,673 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import AppPage from './Pages/AppPage/AppPage.jsx';
|
import { lazy } from 'react';
|
||||||
import WholesaleAppPage from './Pages/AppPage/WholesaleAppPage.jsx';
|
const CommonMaster = lazy(
|
||||||
import Home from './Pages/DashBoard/RetailDashboard.jsx';
|
() => import('./Pages/CommonMaster/CommonMaster.jsx')
|
||||||
import CommonMaster from './Pages/CommonMaster/CommonMaster.jsx';
|
);
|
||||||
import ConfigType from './Pages/ConfigType/ConfigTypeForm.jsx';
|
const ConfigType = lazy(() => import('./Pages/ConfigType/ConfigTypeForm.jsx'));
|
||||||
import AdminTax from './Pages/AdminTax/AdminTaxForm.jsx';
|
const AdminTax = lazy(() => import('./Pages/AdminTax/AdminTaxForm.jsx'));
|
||||||
import ProductForm from './Pages/Product/ProductForm.jsx';
|
const ProductForm = lazy(() => import('./Pages/Product/ProductForm.jsx'));
|
||||||
import Sport_ProductForm from './Pages/Product/SportsMaster.jsx';
|
const Sport_ProductForm = lazy(
|
||||||
import ProductList from './Pages/Product/ProductList.jsx';
|
() => import('./Pages/Product/SportsMaster.jsx')
|
||||||
import ShiftMasterList from './Pages/ShiftMaster/ShiftMasterList.jsx';
|
);
|
||||||
import ShiftMasterForm from './Pages/ShiftMaster/ShiftMasterForm.jsx';
|
const ShiftMasterList = lazy(
|
||||||
import EmployeeMasterList from './Pages/EmpMaster/EmpMasterList.jsx';
|
() => import('./Pages/ShiftMaster/ShiftMasterList.jsx')
|
||||||
import EmployeeMasterForm from './Pages/EmpMaster/EmpMasterForm.jsx';
|
);
|
||||||
import SupplierMasterList from './Pages/SupplierMaster/SupplierMasterList.jsx';
|
const ShiftMasterForm = lazy(
|
||||||
import SupplierMasterForm from './Pages/SupplierMaster/SupplierMasterForm.jsx';
|
() => import('./Pages/ShiftMaster/ShiftMasterForm.jsx')
|
||||||
import ComponentMasterForm from './Pages/UiComponentPage/ComponentForm.jsx';
|
);
|
||||||
import ComponentMasterList from './Pages/UiComponentPage/ComponentList.jsx';
|
const EmployeeMasterList = lazy(
|
||||||
import CustomerForm from './Pages/CustomerMaster/CustMasterForm.jsx';
|
() => import('./Pages/EmpMaster/EmpMasterList.jsx')
|
||||||
import CustomerMasterList from './Pages/CustomerMaster/CustMasterList.jsx';
|
);
|
||||||
import DateWiseReport from './Pages/Reports/DateWiseReport/DateWiseReport.jsx';
|
const EmployeeMasterForm = lazy(
|
||||||
import ItemWiseReport from './Pages/Reports/ItemWiseReport/ItemWiseReport.jsx';
|
() => import('./Pages/EmpMaster/EmpMasterForm.jsx')
|
||||||
import Reprint from './Pages/BookingScreen/Components/OtherConponents/Reprint/BSReprint.jsx';
|
);
|
||||||
import BookingSelectionPage from './Pages/BookingScreen/Components/MainPage/MainPage.jsx';
|
|
||||||
import PrintSelectionPage from './Pages/BookingScreen/Components/PrintMainPage/MainPage.jsx';
|
|
||||||
import KioskMainPage from './Pages/BookingScreen/Components/Kiosk/KioskMainPage.jsx';
|
|
||||||
import BookingPage from './Pages/BookingScreen/BookingPage.jsx';
|
|
||||||
import StockForm from './Pages/StockMaster/StockForm.jsx';
|
|
||||||
import StockList from './Pages/StockMaster/StockList.jsx';
|
|
||||||
import DiningMasterList from './Pages/Dining/DiningList.jsx';
|
|
||||||
import DiningMasterForm from './Pages/Dining/DiningForm.jsx';
|
|
||||||
import TableBooking from './Pages/Tablebooking/TableBooking.jsx';
|
|
||||||
import ComboMaster from './Pages/ComboPack/ComboMaster.jsx';
|
|
||||||
import ComboList from './Pages/ComboPack/ComboMasterlist.jsx';
|
|
||||||
import EmpAccessForm from './Pages/EmpAccess/EmpAccessForm.jsx';
|
|
||||||
import EmpAccessList from './Pages/EmpAccess/EmpAccessList.jsx';
|
|
||||||
import EmpScreenAccessList from './Pages/EmpScreenAccess/EmpScreenAccessList.jsx';
|
|
||||||
import EmpScreenRightsAccess from './Pages/EmpScreenAccess/EmpScreenRightsAccess.jsx';
|
|
||||||
import PreferenceList from './Pages/Preference/PreferenceList.jsx';
|
|
||||||
import PaymentOptions from './Pages/Payment/PaymentOptions/PaymentOptions.jsx';
|
|
||||||
import PaymentDetails from './Pages/Payment/PaymentDetails/PaymentDetailsForm.jsx';
|
|
||||||
import PaymentDetailsList from './Pages/Payment/PaymentDetails/PaymentDetailsList.jsx';
|
|
||||||
import PaymentReceivedRetail from './Pages/Payment/PaymentReceivedRetail/PaymentReceivedRetail.jsx';
|
|
||||||
import ExtraChargesList from './Pages/ExtraCharges/ExtraChargesList.jsx';
|
|
||||||
import BranchLogin from './Pages/BranchLogin/BranchLogin.jsx';
|
|
||||||
import BackToBranchLogin from './Pages/BranchLogin/BackToBranchLogin.jsx';
|
|
||||||
import Logout from './Pages/Logout.jsx';
|
|
||||||
import BacktoLogin from './Pages/BranchLogin/BacktoLogin.jsx';
|
|
||||||
import StockPriceUpdate from './Pages/StockPriceUpdate/StockPriceUpdate.jsx';
|
|
||||||
import ProductCatalogueList from './Pages/ProductCatlogue/ProductcatlogueList.jsx';
|
|
||||||
import KOT from './Pages/Reports/KOT/kot.jsx';
|
|
||||||
import CustomerKOTDisplay from './Pages/Reports/KOT/CustomerKOTDisplay.jsx';
|
|
||||||
import RedirectApps from './Pages/RedirectApps.jsx';
|
|
||||||
import WSTransaction from './Pages/WholeSaleTransaction/WSSalesTransaction.jsx';
|
|
||||||
import LedgerReport from './Pages/Reports/LedgerReport/LedgerReport.jsx';
|
|
||||||
import PaymentDetailsPage from './Pages/BookingScreen/Components/BookingFunctionality/PaymentDetailsPage.jsx';
|
|
||||||
import CreditCustomerPrint from './Pages/BookingScreen/Components/BookingFunctionality/CreditDownloadpage.jsx';
|
|
||||||
import Cancellation from './Pages/CancelReschedule/Cancellation.jsx';
|
|
||||||
import ChangePaymentmode from './Pages/CancelReschedule/ChangePaymentmode.jsx';
|
|
||||||
import CancellationList from './Pages/CancelReschedule/CancellationList.jsx';
|
|
||||||
import CancelApplicableProd from './Pages/CancelReschedule/CancelApplicableProd.jsx';
|
|
||||||
import CancellationListPending from './Pages/CancelReschedule/CancelPendingPayment.jsx';
|
|
||||||
import AndroidApp from './Pages/AndroidApp/AndroidApp.jsx';
|
|
||||||
import EstimateItemWiseReport from './Pages/Reports/Estimate/EstimateItemWiseReport.jsx';
|
|
||||||
import EstimateDateWiseReport from './Pages/Reports/Estimate/EstimateDateWiseReport.jsx';
|
|
||||||
import OfferForm from './Pages/Offer/Offer/OfferFormNew.jsx';
|
|
||||||
import OfferList from './Pages/Offer/Offer/OfferListNew.jsx';
|
|
||||||
import ItemWise from './Pages/Offer/ItemOffer/ItemWiseForm.jsx';
|
|
||||||
import SalesWiseForm from './Pages/Offer/SalesOffer/SalesWiseForm.jsx';
|
|
||||||
import SalesWiseList from './Pages/Offer/SalesOffer/SalesWiseList.jsx';
|
|
||||||
import QuantityWise from './Pages/Offer/QuantityOffer/QuantityWiseForm.jsx';
|
|
||||||
import BuyOneGetOneForm from './Pages/Offer/BuyOneGetOneOffer/BuyOneGetOneForm.jsx';
|
|
||||||
// import LoyaltyPointsForm from "./Pages/Offer/LoyaltyPoints/LoyaltyPointsForm.jsx";
|
|
||||||
import LoyaltyPointsList from './Pages/Offer/LoyaltyPoints/LoyaltyPointsList.jsx';
|
|
||||||
import BundleOfferForm from './Pages/Offer/BundleOffer/BundleOfferForm.jsx';
|
|
||||||
import BundleOfferList from './Pages/Offer/BundleOffer/BundleOfferList.jsx';
|
|
||||||
// import CouponWiseOffer from "./Pages/Offer/CouponOffer/CouponWiseOfferForm.jsx"
|
|
||||||
import CouponWiseOfferlist from './Pages/Offer/CouponOffer/CouponWiseOfferlist.jsx';
|
|
||||||
import PromocodeList from './Pages/Offer/PromoCode/PromocodeList.jsx';
|
|
||||||
// import PromocodeForm from "./Pages/Offer/PromoCode/PromocodeForm.jsx";
|
|
||||||
import OfferCodeList from './Pages/Offer/OfferCode/OfferCodeList.jsx';
|
|
||||||
// import OfferCodeForm from "./Pages/Offer/OfferCode/OfferCodeForm.jsx";
|
|
||||||
import PricingPage from './Pages/BookingScreen/Components/UtillComponents/PricingPage.jsx';
|
|
||||||
import PurchaseOrder from './Pages/PurchaseOrder/PurchaseOrder.jsx';
|
|
||||||
import PurchaseOrderMail from './Pages/PurchaseOrder/PurchaseOrderMail.jsx';
|
|
||||||
import PurchaseOrderList from './Pages/PurchaseOrder/PurchaseOrderList.jsx';
|
|
||||||
import StockReceivedList from './Pages/StockTransfer/StockReceivedList.jsx';
|
|
||||||
import GstInvoiceSetUpForm from './Pages/GstInvoiceSetup/GstInvoiceSetUpForm.jsx';
|
|
||||||
import gstInvoiceSetUpList from './Pages/GstInvoiceSetup/GstInvoiceSetupList.jsx';
|
|
||||||
import StockinHand from './Pages/StockinHand/StockinHand.jsx';
|
|
||||||
|
|
||||||
import PurchaseReturn from './Pages/PurchaseReturn/purchaseReturn.jsx';
|
const SupplierMasterList = lazy(
|
||||||
import PurchaseReturnget from './Pages/PurchaseReturn/PurchaseReturnGet.jsx';
|
() => import('./Pages/SupplierMaster/SupplierMasterList.jsx')
|
||||||
import KioskBookingPage from './Pages/Kiosk/KioskBookingPage.jsx';
|
);
|
||||||
import KioskBookingReceipt from './Pages/Kiosk/PaymentGateway/PaymentGatewayReceipt.jsx';
|
const SupplierMasterForm = lazy(
|
||||||
import KioskComponentList from './Pages/KioskComponent/KioskComponentList.jsx';
|
() => import('./Pages/SupplierMaster/SupplierMasterForm.jsx')
|
||||||
import CustomerDisplay from './Pages/CustomerDisplay/CustomerDisplay.jsx';
|
);
|
||||||
import PurchaseQuotationForm from './Pages/PurchaseQuotation/PurchaseQuotationForm.jsx';
|
|
||||||
import DeliveryChallanForm from './Pages/DeliveryChallan/Deliverychallan.jsx';
|
const ComponentMasterForm = lazy(
|
||||||
import DeliveryChallanList from './Pages/DeliveryChallan/DeliverychallanList.jsx';
|
() => import('./Pages/UiComponentPage/ComponentForm.jsx')
|
||||||
import ComboOfferMaster from './Pages/Offer/ComboOfferPack/ComboOfferForm.jsx';
|
);
|
||||||
import PaymentDeviceForm from './Pages/Payment/PaymentDevice/PaymentDeviceForm.jsx';
|
const ComponentMasterList = lazy(
|
||||||
import PaymentFailedDetailsList from './Pages/Payment/PaymentFailedDetails/PaymentFailedDetailsList.jsx';
|
() => import('./Pages/UiComponentPage/ComponentList.jsx')
|
||||||
import CounterCategoryMappingForm from './Pages/CounterCategoryMapping/CounterCategoryMappingForm.jsx';
|
);
|
||||||
import ImageBulkUpload from './Pages/ImageBulkUpload/ImageBulkUpload.jsx';
|
|
||||||
import WholesaleBookingPage from './Pages/PurchaseScreen/LayoutScreen8/LayoutScreen8.jsx';
|
const CustomerForm = lazy(
|
||||||
import WholeSaleProductList from './Pages/Wholesale/ProductList.jsx';
|
() => import('./Pages/CustomerMaster/CustMasterForm.jsx')
|
||||||
import ProductEntry from './Pages/Wholesale/ProductEntry.jsx';
|
);
|
||||||
import ProductEntryList from './Pages/Wholesale/ProductEntryList.jsx';
|
const CustomerMasterList = lazy(
|
||||||
import ItemEntry from './Pages/Wholesale/ItemEntry/ItemEntry.jsx';
|
() => import('./Pages/CustomerMaster/CustMasterList.jsx')
|
||||||
import WsPreorder from './Pages/Wholesalespreorder/WholesalePreorderList.jsx';
|
);
|
||||||
import WsPreorderForm from './Pages/Wholesalespreorder/WholesalePreorderForm.jsx';
|
|
||||||
import ExtraChrgesList from './Pages/Wholesale/ItemEntry/ExtraChrgesList.jsx';
|
const DateWiseReport = lazy(
|
||||||
import SalesBillCancel from './Pages/SalesRemoval/SalesBillCancelList.jsx';
|
() => import('./Pages/Reports/DateWiseReport/DateWiseReport.jsx')
|
||||||
import WholeSaleAbstract from './Pages/WholeSaleAbstract/WholeSaleAbstract.jsx';
|
);
|
||||||
import WholeSaleSellerAbstract from './Pages/WholeSaleAbstract/WholeSaleSellerAbstract.jsx';
|
|
||||||
import PaymentReceived from './Pages/WholeSaleTransaction/PaymentReceived.jsx';
|
const ItemWiseReport = lazy(
|
||||||
import WholeSaleSalesReport from './Pages/WholeSaleReport/WholeSalesSalesReport.jsx';
|
() => import('./Pages/Reports/ItemWiseReport/ItemWiseReport.jsx')
|
||||||
import WholeSalePurchaseReport from './Pages/WholeSaleReport/WholeSalePurchaseReport.jsx';
|
);
|
||||||
import WholeSalePaymentPurchaseReport from './Pages/WholesalePaymentReport/WholeSalePaymentPurchaseReport.jsx';
|
|
||||||
import WholeSalePaymentSalesReport from './Pages/WholesalePaymentReport/WholeSalePaymementSaleReport.jsx';
|
const Reprint = lazy(
|
||||||
import SpeechLanguagesList from './Pages/SpeechLanguages/SpeechLanguagesList.jsx';
|
() =>
|
||||||
import LegderList from './Pages/WholeSaleLedger/WholeSaleLedger.jsx';
|
import('./Pages/BookingScreen/Components/OtherConponents/Reprint/BSReprint.jsx')
|
||||||
import SellerMasterTran from './Pages/WholeSaleTransaction/SellerMasterTransaction.jsx';
|
);
|
||||||
import TicketForm from './Pages/Ticket/TicketForm.jsx';
|
|
||||||
import ThemeCreation from './Pages/BookingScreen/Components/ThemeCreation/ThemeList.jsx';
|
const BookingSelectionPage = lazy(
|
||||||
import ThemeSelection from './Pages/BookingScreen/Components/ThemeCreation/ThemePreview.jsx';
|
() => import('./Pages/BookingScreen/Components/MainPage/MainPage.jsx')
|
||||||
import BarcodeTemplateSetup from './Pages/BarcodeSetup/BarcodeTemplateSetup.jsx';
|
);
|
||||||
import BarcodeComponentList from './Pages/BarcodeComponent/BarcodeComponentList.jsx';
|
|
||||||
import StoreRecipelist from './Pages/StoreKitchen/StoreRecipe/StoreRecipelist.jsx';
|
const PrintSelectionPage = lazy(
|
||||||
import StoreRecipeform from './Pages/StoreKitchen/StoreRecipe/StoreRecipeform.jsx';
|
() => import('./Pages/BookingScreen/Components/PrintMainPage/MainPage.jsx')
|
||||||
import Storekitchenlist from './Pages/StoreKitchen/StoretoKitchen/StoretoKitchenlist.jsx';
|
);
|
||||||
import StoreKitchenform from './Pages/StoreKitchen/StoretoKitchen/Storetokitchenform.jsx';
|
const KioskMainPage = lazy(
|
||||||
import { axiosCommonInstanceData } from './Features/AuthenicationToken/AuthenticationToken';
|
() => import('./Pages/BookingScreen/Components/Kiosk/KioskMainPage.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BookingPage = lazy(() => import('./Pages/BookingScreen/BookingPage.jsx'));
|
||||||
|
|
||||||
|
const StockForm = lazy(() => import('./Pages/StockMaster/StockForm.jsx'));
|
||||||
|
|
||||||
|
const StockList = lazy(() => import('./Pages/StockMaster/StockList.jsx'));
|
||||||
|
|
||||||
|
const DiningMasterList = lazy(() => import('./Pages/Dining/DiningList.jsx'));
|
||||||
|
|
||||||
|
const DiningMasterForm = lazy(() => import('./Pages/Dining/DiningForm.jsx'));
|
||||||
|
|
||||||
|
const TableBooking = lazy(
|
||||||
|
() => import('./Pages/Tablebooking/TableBooking.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ComboMaster = lazy(() => import('./Pages/ComboPack/ComboMaster.jsx'));
|
||||||
|
|
||||||
|
const ComboList = lazy(() => import('./Pages/ComboPack/ComboMasterlist.jsx'));
|
||||||
|
const EmpAccessForm = lazy(() => import('./Pages/EmpAccess/EmpAccessForm.jsx'));
|
||||||
|
const EmpAccessList = lazy(() => import('./Pages/EmpAccess/EmpAccessList.jsx'));
|
||||||
|
|
||||||
|
const EmpScreenAccessList = lazy(
|
||||||
|
() => import('./Pages/EmpScreenAccess/EmpScreenAccessList.jsx')
|
||||||
|
);
|
||||||
|
const EmpScreenRightsAccess = lazy(
|
||||||
|
() => import('./Pages/EmpScreenAccess/EmpScreenRightsAccess.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PreferenceList = lazy(
|
||||||
|
() => import('./Pages/Preference/PreferenceList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PaymentOptions = lazy(
|
||||||
|
() => import('./Pages/Payment/PaymentOptions/PaymentOptions.jsx')
|
||||||
|
);
|
||||||
|
const PaymentDetails = lazy(
|
||||||
|
() => import('./Pages/Payment/PaymentDetails/PaymentDetailsForm.jsx')
|
||||||
|
);
|
||||||
|
const PaymentDetailsList = lazy(
|
||||||
|
() => import('./Pages/Payment/PaymentDetails/PaymentDetailsList.jsx')
|
||||||
|
);
|
||||||
|
const PaymentReceivedRetail = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/Payment/PaymentReceivedRetail/PaymentReceivedRetail.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ExtraChargesList = lazy(
|
||||||
|
() => import('./Pages/ExtraCharges/ExtraChargesList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BranchLogin = lazy(() => import('./Pages/BranchLogin/BranchLogin.jsx'));
|
||||||
|
const BackToBranchLogin = lazy(
|
||||||
|
() => import('./Pages/BranchLogin/BackToBranchLogin.jsx')
|
||||||
|
);
|
||||||
|
const Logout = lazy(() => import('./Pages/Logout.jsx'));
|
||||||
|
|
||||||
|
const BacktoLogin = lazy(() => import('./Pages/BranchLogin/BacktoLogin.jsx'));
|
||||||
|
|
||||||
|
const StockPriceUpdate = lazy(
|
||||||
|
() => import('./Pages/StockPriceUpdate/StockPriceUpdate.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ProductCatalogueList = lazy(
|
||||||
|
() => import('./Pages/ProductCatlogue/ProductcatlogueList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const KOT = lazy(() => import('./Pages/Reports/KOT/kot.jsx'));
|
||||||
|
|
||||||
|
const CustomerKOTDisplay = lazy(
|
||||||
|
() => import('./Pages/Reports/KOT/CustomerKOTDisplay.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const RedirectApps = lazy(() => import('./Pages/RedirectApps.jsx'));
|
||||||
|
|
||||||
|
const WSTransaction = lazy(
|
||||||
|
() => import('./Pages/WholeSaleTransaction/WSSalesTransaction.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const LedgerReport = lazy(
|
||||||
|
() => import('./Pages/Reports/LedgerReport/LedgerReport.jsx')
|
||||||
|
);
|
||||||
|
const PaymentDetailsPage = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/BookingScreen/Components/BookingFunctionality/PaymentDetailsPage.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CreditCustomerPrint = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/BookingScreen/Components/BookingFunctionality/CreditDownloadpage.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const Cancellation = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/Cancellation.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ChangePaymentmode = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/ChangePaymentmode.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CancellationList = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/CancellationList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CancelApplicableProd = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/CancelApplicableProd.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CancellationListPending = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/CancelPendingPayment.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const AndroidApp = lazy(() => import('./Pages/AndroidApp/AndroidApp.jsx'));
|
||||||
|
|
||||||
|
const EstimateItemWiseReport = lazy(
|
||||||
|
() => import('./Pages/Reports/Estimate/EstimateItemWiseReport.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const EstimateDateWiseReport = lazy(
|
||||||
|
() => import('./Pages/Reports/Estimate/EstimateDateWiseReport.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const OfferForm = lazy(() => import('./Pages/Offer/Offer/OfferFormNew.jsx'));
|
||||||
|
|
||||||
|
const OfferList = lazy(() => import('./Pages/Offer/Offer/OfferListNew.jsx'));
|
||||||
|
|
||||||
|
const ItemWise = lazy(() => import('./Pages/Offer/ItemOffer/ItemWiseForm.jsx'));
|
||||||
|
const SalesWiseForm = lazy(
|
||||||
|
() => import('./Pages/Offer/SalesOffer/SalesWiseForm.jsx')
|
||||||
|
);
|
||||||
|
const SalesWiseList = lazy(
|
||||||
|
() => import('./Pages/Offer/SalesOffer/SalesWiseList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const QuantityWise = lazy(
|
||||||
|
() => import('./Pages/Offer/QuantityOffer/QuantityWiseForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BuyOneGetOneForm = lazy(
|
||||||
|
() => import('./Pages/Offer/BuyOneGetOneOffer/BuyOneGetOneForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const LoyaltyPointsList = lazy(
|
||||||
|
() => import('./Pages/Offer/LoyaltyPoints/LoyaltyPointsList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BundleOfferForm = lazy(
|
||||||
|
() => import('./Pages/Offer/BundleOffer/BundleOfferForm.jsx')
|
||||||
|
);
|
||||||
|
const BundleOfferList = lazy(
|
||||||
|
() => import('./Pages/Offer/BundleOffer/BundleOfferList.jsx')
|
||||||
|
);
|
||||||
|
const CouponWiseOfferlist = lazy(
|
||||||
|
() => import('./Pages/Offer/CouponOffer/CouponWiseOfferlist.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PromocodeList = lazy(
|
||||||
|
() => import('./Pages/Offer/PromoCode/PromocodeList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const OfferCodeList = lazy(
|
||||||
|
() => import('./Pages/Offer/OfferCode/OfferCodeList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PricingPage = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/BookingScreen/Components/UtillComponents/PricingPage.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseOrder = lazy(
|
||||||
|
() => import('./Pages/PurchaseOrder/PurchaseOrder.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseOrderMail = lazy(
|
||||||
|
() => import('./Pages/PurchaseOrder/PurchaseOrderMail.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseOrderList = lazy(
|
||||||
|
() => import('./Pages/PurchaseOrder/PurchaseOrderList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const StockReceivedList = lazy(
|
||||||
|
() => import('./Pages/StockTransfer/StockReceivedList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const GstInvoiceSetUpForm = lazy(
|
||||||
|
() => import('./Pages/GstInvoiceSetup/GstInvoiceSetUpForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const gstInvoiceSetUpList = lazy(
|
||||||
|
() => import('./Pages/GstInvoiceSetup/GstInvoiceSetupList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const StockinHand = lazy(() => import('./Pages/StockinHand/StockinHand.jsx'));
|
||||||
|
|
||||||
|
const PurchaseReturn = lazy(
|
||||||
|
() => import('./Pages/PurchaseReturn/purchaseReturn.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseReturnget = lazy(
|
||||||
|
() => import('./Pages/PurchaseReturn/PurchaseReturnGet.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const KioskBookingPage = lazy(
|
||||||
|
() => import('./Pages/Kiosk/KioskBookingPage.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const KioskBookingReceipt = lazy(
|
||||||
|
() => import('./Pages/Kiosk/PaymentGateway/PaymentGatewayReceipt.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const KioskComponentList = lazy(
|
||||||
|
() => import('./Pages/KioskComponent/KioskComponentList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CustomerDisplay = lazy(
|
||||||
|
() => import('./Pages/CustomerDisplay/CustomerDisplay.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseQuotationForm = lazy(
|
||||||
|
() => import('./Pages/PurchaseQuotation/PurchaseQuotationForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const DeliveryChallanForm = lazy(
|
||||||
|
() => import('./Pages/DeliveryChallan/Deliverychallan.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const DeliveryChallanList = lazy(
|
||||||
|
() => import('./Pages/DeliveryChallan/DeliverychallanList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ComboOfferMaster = lazy(
|
||||||
|
() => import('./Pages/Offer/ComboOfferPack/ComboOfferForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PaymentDeviceForm = lazy(
|
||||||
|
() => import('./Pages/Payment/PaymentDevice/PaymentDeviceForm.jsx')
|
||||||
|
);
|
||||||
|
const PaymentFailedDetailsList = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/Payment/PaymentFailedDetails/PaymentFailedDetailsList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CounterCategoryMappingForm = lazy(
|
||||||
|
() => import('./Pages/CounterCategoryMapping/CounterCategoryMappingForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ImageBulkUpload = lazy(
|
||||||
|
() => import('./Pages/ImageBulkUpload/ImageBulkUpload.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholesaleBookingPage = lazy(
|
||||||
|
() => import('./Pages/PurchaseScreen/LayoutScreen8/LayoutScreen8.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholeSaleProductList = lazy(
|
||||||
|
() => import('./Pages/Wholesale/ProductList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ProductEntry = lazy(() => import('./Pages/Wholesale/ProductEntry.jsx'));
|
||||||
|
|
||||||
|
const ProductEntryList = lazy(
|
||||||
|
() => import('./Pages/Wholesale/ProductEntryList.jsx')
|
||||||
|
);
|
||||||
|
const ItemEntry = lazy(
|
||||||
|
() => import('./Pages/Wholesale/ItemEntry/ItemEntry.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WsPreorder = lazy(
|
||||||
|
() => import('./Pages/Wholesalespreorder/WholesalePreorderList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WsPreorderForm = lazy(
|
||||||
|
() => import('./Pages/Wholesalespreorder/WholesalePreorderForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ExtraChrgesList = lazy(
|
||||||
|
() => import('./Pages/Wholesale/ItemEntry/ExtraChrgesList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const SalesBillCancel = lazy(
|
||||||
|
() => import('./Pages/SalesRemoval/SalesBillCancelList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholeSaleAbstract = lazy(
|
||||||
|
() => import('./Pages/WholeSaleAbstract/WholeSaleAbstract.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholeSaleSellerAbstract = lazy(
|
||||||
|
() => import('./Pages/WholeSaleAbstract/WholeSaleSellerAbstract.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PaymentReceived = lazy(
|
||||||
|
() => import('./Pages/WholeSaleTransaction/PaymentReceived.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholeSaleSalesReport = lazy(
|
||||||
|
() => import('./Pages/WholeSaleReport/WholeSalesSalesReport.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholeSalePurchaseReport = lazy(
|
||||||
|
() => import('./Pages/WholeSaleReport/WholeSalePurchaseReport.jsx')
|
||||||
|
);
|
||||||
|
const WholeSalePaymentPurchaseReport = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/WholesalePaymentReport/WholeSalePaymentPurchaseReport.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const WholeSalePaymentSalesReport = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/WholesalePaymentReport/WholeSalePaymementSaleReport.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const SpeechLanguagesList = lazy(
|
||||||
|
() => import('./Pages/SpeechLanguages/SpeechLanguagesList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const LegderList = lazy(
|
||||||
|
() => import('./Pages/WholeSaleLedger/WholeSaleLedger.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const SellerMasterTran = lazy(
|
||||||
|
() => import('./Pages/WholeSaleTransaction/SellerMasterTransaction.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const TicketForm = lazy(() => import('./Pages/Ticket/TicketForm.jsx'));
|
||||||
|
|
||||||
|
const ThemeCreation = lazy(
|
||||||
|
() => import('./Pages/BookingScreen/Components/ThemeCreation/ThemeList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ThemeSelection = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/BookingScreen/Components/ThemeCreation/ThemePreview.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BarcodeTemplateSetup = lazy(
|
||||||
|
() => import('./Pages/BarcodeSetup/BarcodeTemplateSetup.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BarcodeComponentList = lazy(
|
||||||
|
() => import('./Pages/BarcodeComponent/BarcodeComponentList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const StoreRecipelist = lazy(
|
||||||
|
() => import('./Pages/StoreKitchen/StoreRecipe/StoreRecipelist.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const StoreRecipeform = lazy(
|
||||||
|
() => import('./Pages/StoreKitchen/StoreRecipe/StoreRecipeform.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const Storekitchenlist = lazy(
|
||||||
|
() => import('./Pages/StoreKitchen/StoretoKitchen/StoretoKitchenlist.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const StoreKitchenform = lazy(
|
||||||
|
() => import('./Pages/StoreKitchen/StoretoKitchen/Storetokitchenform.jsx')
|
||||||
|
);
|
||||||
import { getSession, sessionStore } from './Services/Others';
|
import { getSession, sessionStore } from './Services/Others';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import KitchenFinishlist from './Pages/StoreKitchen/StoreKitchenFinish/KitchenFinishlist.jsx';
|
const KitchenFinishlist = lazy(
|
||||||
import KitechenFinishform from './Pages/StoreKitchen/StoreKitchenFinish/KitechenFinishform.jsx';
|
() => import('./Pages/StoreKitchen/StoreKitchenFinish/KitchenFinishlist.jsx')
|
||||||
|
);
|
||||||
|
const KitechenFinishform = lazy(
|
||||||
|
() => import('./Pages/StoreKitchen/StoreKitchenFinish/KitechenFinishform.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
import FreeProductList from './Pages/FreeProducts/FreeProduct/FreeProductList.jsx';
|
const FreeProductList = lazy(
|
||||||
import FreePurchaseEnteryForm from './Pages/FreeProducts/FreePurchase/FreePurchaseEntery/FreePurchaseEnteryForm.jsx';
|
() => import('./Pages/FreeProducts/FreeProduct/FreeProductList.jsx')
|
||||||
import FreePurchaseEnteryList from './Pages/FreeProducts/FreePurchase/FreePurchaseEntery/FreePurchaseEnteryList.jsx';
|
);
|
||||||
import FreePurchaseOrderList from './Pages/FreeProducts/FreePurchase/FreePurchaseOrder/FreePurchaseOrderList.jsx';
|
|
||||||
import FreePurchaseOrderForm from './Pages/FreeProducts/FreePurchase/FreePurchaseOrder/FreePurchaseOrderForm.jsx';
|
const FreePurchaseEnteryForm = lazy(
|
||||||
import FreePurchaseReturnList from './Pages/FreeProducts/FreePurchase/FreePurchaseReturn/FreePurchaseReturnList.jsx';
|
() =>
|
||||||
import FreePurchaseReturnForm from './Pages/FreeProducts/FreePurchase/FreePurchaseReturn/FreePurchaseReturnForm.jsx';
|
import('./Pages/FreeProducts/FreePurchase/FreePurchaseEntery/FreePurchaseEnteryForm.jsx')
|
||||||
import CommonForm from './Pages/Offer/LoyaltyPoints/CommonForm.jsx';
|
);
|
||||||
import ReprintReasonReportList from './Pages/Reports/ReprintReasonReport/ReprintReasonReportList.jsx';
|
const FreePurchaseEnteryList = lazy(
|
||||||
import RevenueItemWiseReport from './Pages/Reports/Revenue/RevenueItemWiseReport.jsx';
|
() =>
|
||||||
import LinkUrlCreate from './Pages/paymentpdfPage/LinkUrlCreate.jsx';
|
import('./Pages/FreeProducts/FreePurchase/FreePurchaseEntery/FreePurchaseEnteryList.jsx')
|
||||||
import SupplierProductMapping from './Pages/SupplierProductMapping/SupplierProductMapping.jsx';
|
);
|
||||||
import RedirectUserProfile from './Pages/RedirectUserProfile.jsx';
|
|
||||||
import RelieveRequestForm from './Pages/EmpMaster/EmpRelieve.jsx';
|
const FreePurchaseOrderList = lazy(
|
||||||
import PurchaseQuotationList from './Pages/PurchaseQuotation/PurchaseQuotationList.jsx';
|
() =>
|
||||||
import ExchangeAndReplacementList from './Pages/ExchangeAndReplacement/ExchangeAndReplacementList.jsx';
|
import('./Pages/FreeProducts/FreePurchase/FreePurchaseOrder/FreePurchaseOrderList.jsx')
|
||||||
import ExchangeAndReplacementForm from './Pages/ExchangeAndReplacement/ExchangeAndReplacementForm.jsx';
|
);
|
||||||
import ExchangeReturnMapForm from './Pages/ExchangeReturnMap/ExchangeReturnMapForm.jsx';
|
const FreePurchaseOrderForm = lazy(
|
||||||
import ExchangeReturnMapList from './Pages/ExchangeReturnMap/ExchangeReturnMapList.jsx';
|
() =>
|
||||||
import OtherServicesForm from './Pages/OtherServices/OtherServicesForm.jsx';
|
import('./Pages/FreeProducts/FreePurchase/FreePurchaseOrder/FreePurchaseOrderForm.jsx')
|
||||||
import OtherServicesList from './Pages/OtherServices/OtherServicesList.jsx';
|
);
|
||||||
import EmpCommisionOrIncentiveForm from './Pages/EmpCommissionOrIncentive/EmpCommisionOrIncentiveForm.jsx';
|
|
||||||
import EmpCommisionOrIncentiveList from './Pages/EmpCommissionOrIncentive/EmpCommisionOrIncentiveList.jsx';
|
const FreePurchaseReturnList = lazy(
|
||||||
import SalesBillProductsReturnList from './Pages/CancelReschedule/SalesBillProductReturnList.jsx';
|
() =>
|
||||||
import SalesBillProductsReturn from './Pages/CancelReschedule/SalesBillProductsReturn.jsx';
|
import('./Pages/FreeProducts/FreePurchase/FreePurchaseReturn/FreePurchaseReturnList.jsx')
|
||||||
import DeliveryChallanToInvoiceForm from './Pages/DeliveryChallanToInvoice/DeliveryChallanToInvoiceForm.jsx';
|
);
|
||||||
import DeliveryChallanToInvoiceList from './Pages/DeliveryChallanToInvoice/DeliveryChallanToInvoiceList.jsx';
|
const FreePurchaseReturnForm = lazy(
|
||||||
import TipAmountSettlementList from './Pages/Reports/TipAmountSettlement/TipAmountSettlementList.jsx';
|
() =>
|
||||||
import EmployeeSettlement from './Pages/Reports/EmployeeSettlement/EmployeeSettlement.jsx';
|
import('./Pages/FreeProducts/FreePurchase/FreePurchaseReturn/FreePurchaseReturnForm.jsx')
|
||||||
import PublicQrCode from './Pages/Reports/PublicQrCode.jsx';
|
);
|
||||||
import TableMapping from './Pages/TableMapping/TableMapping.jsx';
|
const CommonForm = lazy(
|
||||||
import TableMAppingList from './Pages/TableMapping/TableMAppingList.jsx';
|
() => import('./Pages/Offer/LoyaltyPoints/CommonForm.jsx')
|
||||||
import PurchaseOrderReport from './Pages/Reports/PurchaseReport/PurchaseOrderReport.jsx';
|
);
|
||||||
import SalesOrder from './Pages/SalesOrder/SalesOrder.jsx';
|
|
||||||
import LoyaltyBased from './Pages/Offer/LoyaltyBased/LoyaltyBased.jsx';
|
const ReprintReasonReportList = lazy(
|
||||||
import LoyaltyBasedList from './Pages/Offer/LoyaltyBased/LoyaltyBasedList.jsx';
|
() =>
|
||||||
import CodeBase from './Pages/Offer/CodeBase/CodeBase.jsx';
|
import('./Pages/Reports/ReprintReasonReport/ReprintReasonReportList.jsx')
|
||||||
import CodeBaseList from './Pages/Offer/CodeBase/CodeBaseList.jsx';
|
);
|
||||||
import TurboAddForm from './Pages/Product/TurboAddForm.jsx';
|
|
||||||
import ProductMaster from './Pages/Product/ProductMaster.jsx';
|
const RevenueItemWiseReport = lazy(
|
||||||
import GatewayMasterConfiguration from './Pages/GatewayMasterConfiguration/GatewayMasterConfiguration.jsx';
|
() => import('./Pages/Reports/Revenue/RevenueItemWiseReport.jsx')
|
||||||
import GatewayMasterConfigurationList from './Pages/GatewayMasterConfiguration/GatewayMasterConfigurationList.jsx';
|
);
|
||||||
import MembershipForm from './Pages/Membership/MembershipForm.jsx';
|
|
||||||
import MembershipList from './Pages/Membership/MembershipList.jsx';
|
const LinkUrlCreate = lazy(
|
||||||
import SlotManagementForm from './Pages/SlotManagement/SlotManagement.jsx';
|
() => import('./Pages/paymentpdfPage/LinkUrlCreate.jsx')
|
||||||
import SlotManagementList from './Pages/SlotManagement/SlotManagementList.jsx';
|
);
|
||||||
import BookingReScedule from './Pages/CancelReschedule/BookingReScedule.jsx';
|
|
||||||
import BookingReSceduleList from './Pages/CancelReschedule/BookingReSceduleList.jsx';
|
const SupplierProductMapping = lazy(
|
||||||
import MembershipReport from './Pages/Reports/Membership/MembershipReport.jsx';
|
() => import('./Pages/SupplierProductMapping/SupplierProductMapping.jsx')
|
||||||
import OpeningStock from './Pages/openingStock/openingstockForm.jsx';
|
);
|
||||||
import OpeningStockList from './Pages/openingStock/OpeningStockList.jsx';
|
|
||||||
import StockAdjustment from './Pages/StockAdjustment/StockAdjustment.jsx';
|
const RedirectUserProfile = lazy(
|
||||||
import StockAdjustmentList from './Pages/StockAdjustment/StockAdjustmentList.jsx';
|
() => import('./Pages/RedirectUserProfile.jsx')
|
||||||
import TopSellingProducts from './Pages/DashBoard/TopSellingProductsChart.jsx';
|
);
|
||||||
import AutomatedReorder from './Pages/Automated Reorder/AutomatedReorder.jsx';
|
|
||||||
import AutomatedReorderList from './Pages/Automated Reorder/AutomatedReorderList.jsx';
|
const RelieveRequestForm = lazy(
|
||||||
import CustomerPurchaseConfirm from './Pages/PurchaseOrder/CustomerPurchaseConfirm/CustomerPurchaseConfirm.jsx';
|
() => import('./Pages/EmpMaster/EmpRelieve.jsx')
|
||||||
import MenuQRCode from './Pages/Reports/MenuQRCode/MenuQRCode.jsx';
|
);
|
||||||
import CustomerMenuPage from './Pages/Reports/MenuQRCode/CustomerMenuPage.jsx';
|
|
||||||
import PurchaseLink from './Pages/PurchaseOrder/CustomerPurchaseConfirm/PurchaseLink.jsx';
|
const PurchaseQuotationList = lazy(
|
||||||
import RackForm from './Pages/Rack/RackForm.jsx';
|
() => import('./Pages/PurchaseQuotation/PurchaseQuotationList.jsx')
|
||||||
import RackList from './Pages/Rack/RackList.jsx';
|
);
|
||||||
import CreateTransfer from './Pages/StockTransfer/CreateTransfer.jsx';
|
|
||||||
import Dispatch from './Pages/StockTransfer/Dispatch.jsx';
|
const ExchangeAndReplacementList = lazy(
|
||||||
import ComboLayout3 from './Pages/BookingScreen/Template/ComboLayout3/ComboLayout3.jsx';
|
() => import('./Pages/ExchangeAndReplacement/ExchangeAndReplacementList.jsx')
|
||||||
import StockTransferList from './Pages/StockTransfer/TransferList.jsx';
|
);
|
||||||
import Productcatlogue from './Pages/ProductCatlogue/Productcatalogue.jsx';
|
const ExchangeAndReplacementForm = lazy(
|
||||||
|
() => import('./Pages/ExchangeAndReplacement/ExchangeAndReplacementForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ExchangeReturnMapForm = lazy(
|
||||||
|
() => import('./Pages/ExchangeReturnMap/ExchangeReturnMapForm.jsx')
|
||||||
|
);
|
||||||
|
const ExchangeReturnMapList = lazy(
|
||||||
|
() => import('./Pages/ExchangeReturnMap/ExchangeReturnMapList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const OtherServicesForm = lazy(
|
||||||
|
() => import('./Pages/OtherServices/OtherServicesForm.jsx')
|
||||||
|
);
|
||||||
|
const OtherServicesList = lazy(
|
||||||
|
() => import('./Pages/OtherServices/OtherServicesList.jsx')
|
||||||
|
);
|
||||||
|
const EmpCommisionOrIncentiveForm = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/EmpCommissionOrIncentive/EmpCommisionOrIncentiveForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const EmpCommisionOrIncentiveList = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/EmpCommissionOrIncentive/EmpCommisionOrIncentiveList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const SalesBillProductsReturnList = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/SalesBillProductReturnList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const SalesBillProductsReturn = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/SalesBillProductsReturn.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const DeliveryChallanToInvoiceForm = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/DeliveryChallanToInvoice/DeliveryChallanToInvoiceForm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const DeliveryChallanToInvoiceList = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/DeliveryChallanToInvoice/DeliveryChallanToInvoiceList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const TipAmountSettlementList = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/Reports/TipAmountSettlement/TipAmountSettlementList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const EmployeeSettlement = lazy(
|
||||||
|
() => import('./Pages/Reports/EmployeeSettlement/EmployeeSettlement.jsx')
|
||||||
|
);
|
||||||
|
const PublicQrCode = lazy(() => import('./Pages/Reports/PublicQrCode.jsx'));
|
||||||
|
|
||||||
|
const TableMapping = lazy(
|
||||||
|
() => import('./Pages/TableMapping/TableMapping.jsx')
|
||||||
|
);
|
||||||
|
const TableMAppingList = lazy(
|
||||||
|
() => import('./Pages/TableMapping/TableMAppingList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseOrderReport = lazy(
|
||||||
|
() => import('./Pages/Reports/PurchaseReport/PurchaseOrderReport.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const SalesOrder = lazy(() => import('./Pages/SalesOrder/SalesOrder.jsx'));
|
||||||
|
|
||||||
|
const LoyaltyBased = lazy(
|
||||||
|
() => import('./Pages/Offer/LoyaltyBased/LoyaltyBased.jsx')
|
||||||
|
);
|
||||||
|
const LoyaltyBasedList = lazy(
|
||||||
|
() => import('./Pages/Offer/LoyaltyBased/LoyaltyBasedList.jsx')
|
||||||
|
);
|
||||||
|
const CodeBase = lazy(() => import('./Pages/Offer/CodeBase/CodeBase.jsx'));
|
||||||
|
const CodeBaseList = lazy(
|
||||||
|
() => import('./Pages/Offer/CodeBase/CodeBaseList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const TurboAddForm = lazy(() => import('./Pages/Product/TurboAddForm.jsx'));
|
||||||
|
|
||||||
|
const ProductMaster = lazy(() => import('./Pages/Product/ProductMaster.jsx'));
|
||||||
|
|
||||||
|
const GatewayMasterConfiguration = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/GatewayMasterConfiguration/GatewayMasterConfiguration.jsx')
|
||||||
|
);
|
||||||
|
const GatewayMasterConfigurationList = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/GatewayMasterConfiguration/GatewayMasterConfigurationList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const MembershipForm = lazy(
|
||||||
|
() => import('./Pages/Membership/MembershipForm.jsx')
|
||||||
|
);
|
||||||
|
const MembershipList = lazy(
|
||||||
|
() => import('./Pages/Membership/MembershipList.jsx')
|
||||||
|
);
|
||||||
|
const SlotManagementForm = lazy(
|
||||||
|
() => import('./Pages/SlotManagement/SlotManagement.jsx')
|
||||||
|
);
|
||||||
|
const SlotManagementList = lazy(
|
||||||
|
() => import('./Pages/SlotManagement/SlotManagementList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const BookingReScedule = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/BookingReScedule.jsx')
|
||||||
|
);
|
||||||
|
const BookingReSceduleList = lazy(
|
||||||
|
() => import('./Pages/CancelReschedule/BookingReSceduleList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const MembershipReport = lazy(
|
||||||
|
() => import('./Pages/Reports/Membership/MembershipReport.jsx')
|
||||||
|
);
|
||||||
|
const OpeningStock = lazy(
|
||||||
|
() => import('./Pages/openingStock/openingstockForm.jsx')
|
||||||
|
);
|
||||||
|
const OpeningStockList = lazy(
|
||||||
|
() => import('./Pages/openingStock/OpeningStockList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const StockAdjustment = lazy(
|
||||||
|
() => import('./Pages/StockAdjustment/StockAdjustment.jsx')
|
||||||
|
);
|
||||||
|
const StockAdjustmentList = lazy(
|
||||||
|
() => import('./Pages/StockAdjustment/StockAdjustmentList.jsx')
|
||||||
|
);
|
||||||
|
const TopSellingProducts = lazy(
|
||||||
|
() => import('./Pages/DashBoard/TopSellingProductsChart.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const AutomatedReorder = lazy(
|
||||||
|
() => import('./Pages/Automated Reorder/AutomatedReorder.jsx')
|
||||||
|
);
|
||||||
|
const AutomatedReorderList = lazy(
|
||||||
|
() => import('./Pages/Automated Reorder/AutomatedReorderList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const CustomerPurchaseConfirm = lazy(
|
||||||
|
() =>
|
||||||
|
import('./Pages/PurchaseOrder/CustomerPurchaseConfirm/CustomerPurchaseConfirm.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const MenuQRCode = lazy(
|
||||||
|
() => import('./Pages/Reports/MenuQRCode/MenuQRCode.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const PurchaseLink = lazy(
|
||||||
|
() => import('./Pages/PurchaseOrder/CustomerPurchaseConfirm/PurchaseLink.jsx')
|
||||||
|
);
|
||||||
|
const RackForm = lazy(() => import('./Pages/Rack/RackForm.jsx'));
|
||||||
|
const RackList = lazy(() => import('./Pages/Rack/RackList.jsx'));
|
||||||
|
|
||||||
|
const CreateTransfer = lazy(
|
||||||
|
() => import('./Pages/StockTransfer/CreateTransfer.jsx')
|
||||||
|
);
|
||||||
|
const Dispatch = lazy(() => import('./Pages/StockTransfer/Dispatch.jsx'));
|
||||||
|
const StockTransferList = lazy(
|
||||||
|
() => import('./Pages/StockTransfer/TransferList.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const ComboLayout3 = lazy(
|
||||||
|
() => import('./Pages/BookingScreen/Template/ComboLayout3/ComboLayout3.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
|
const Productcatlogue = lazy(
|
||||||
|
() => import('./Pages/ProductCatlogue/Productcatalogue.jsx')
|
||||||
|
);
|
||||||
|
|
||||||
const subDirectory = import.meta.env.BASE_URL;
|
const subDirectory = import.meta.env.BASE_URL;
|
||||||
const apiCommonUrl = import.meta.env.ENV_API_URL_COMMON;
|
const apiCommonUrl = import.meta.env.ENV_API_URL_COMMON;
|
||||||
|
|
@ -268,7 +732,7 @@ const fetchComponent = async () => {
|
||||||
sessionStore('userName', 'Karthiga');
|
sessionStore('userName', 'Karthiga');
|
||||||
sessionStorage.setItem(
|
sessionStorage.setItem(
|
||||||
'auth',
|
'auth',
|
||||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzcwMjMzMDA3LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.y6ZLDB3qz1nJk68XY13jXxHKd99LVX2GhzhtE5eGXqI'
|
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzcwNzQ5MjkxLCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.aXnhbA3ReRVyt8denDX_LK_ecVBiG5KdeHsurVR7iwQ'
|
||||||
);
|
);
|
||||||
|
|
||||||
const AppId = getSession('AppId');
|
const AppId = getSession('AppId');
|
||||||
|
|
@ -373,7 +837,7 @@ const fetchHomeComponent = async () => {
|
||||||
sessionStore('userName', 'Karthiga');
|
sessionStore('userName', 'Karthiga');
|
||||||
sessionStorage.setItem(
|
sessionStorage.setItem(
|
||||||
'auth',
|
'auth',
|
||||||
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzcwMjMzMDA3LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.y6ZLDB3qz1nJk68XY13jXxHKd99LVX2GhzhtE5eGXqI'
|
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzcwNzQ5MjkxLCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.aXnhbA3ReRVyt8denDX_LK_ecVBiG5KdeHsurVR7iwQ'
|
||||||
);
|
);
|
||||||
|
|
||||||
const AppId = getSession('AppId');
|
const AppId = getSession('AppId');
|
||||||
|
|
@ -1087,8 +1551,6 @@ export const routesConfig = [
|
||||||
empAccess: 'Product Receipt',
|
empAccess: 'Product Receipt',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
path: 'receive-stocks',
|
path: 'receive-stocks',
|
||||||
component: StockReceivedList,
|
component: StockReceivedList,
|
||||||
|
|
@ -1228,7 +1690,6 @@ export const routesConfig = [
|
||||||
empAccess: 'DC to Invoice',
|
empAccess: 'DC to Invoice',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
{ path: 'shift-master', component: ShiftMasterList, empAccess: 'Shift' },
|
{ path: 'shift-master', component: ShiftMasterList, empAccess: 'Shift' },
|
||||||
{
|
{
|
||||||
path: 'shift-master/new',
|
path: 'shift-master/new',
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import { useDispatch } from 'react-redux';
|
||||||
|
import {
|
||||||
|
checkSession,
|
||||||
|
GenerateLogout,
|
||||||
|
} from './Features/BrachLogin/BranchLogin.js';
|
||||||
|
import {
|
||||||
|
clearSession,
|
||||||
|
getSession,
|
||||||
|
TokendecryptedValuesFun,
|
||||||
|
} from './Services/Others.js';
|
||||||
|
const commonSubDir = import.meta.env.ENV_COMMON_BASE_URL;
|
||||||
|
|
||||||
|
const useSessionManager = (dependencyTrigger) => {
|
||||||
|
const dispatch = useDispatch();
|
||||||
|
const [sessionData, setSessionData] = useState(null);
|
||||||
|
|
||||||
|
// 🔹 Load session
|
||||||
|
useEffect(() => {
|
||||||
|
const CompId = getSession('CompId');
|
||||||
|
const AppId = getSession('AppId');
|
||||||
|
const BranchId = getSession('BranchId');
|
||||||
|
const UserType = getSession('UserType');
|
||||||
|
|
||||||
|
if (CompId && AppId && BranchId) {
|
||||||
|
setSessionData({ CompId, AppId, BranchId, UserType });
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// 🔹 Session validity check (same logic, centralized)
|
||||||
|
useEffect(() => {
|
||||||
|
const sessionCheckFun = async () => {
|
||||||
|
const UserId = getSession('UserId');
|
||||||
|
const sessionId = getSession('SessionId');
|
||||||
|
const IsLogout = getSession('Mode');
|
||||||
|
|
||||||
|
let encryptedLoginType = TokendecryptedValuesFun(
|
||||||
|
sessionStorage.getItem('LoginType')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (encryptedLoginType !== 'Kiosk') {
|
||||||
|
const res = await dispatch(
|
||||||
|
checkSession({ UserId, sessionId })
|
||||||
|
).unwrap();
|
||||||
|
if (res?.data?.statusCode === 1 && res?.data?.response === 'False') {
|
||||||
|
if (IsLogout !== 'Logout') {
|
||||||
|
alert('Session invalid. Redirecting to login...');
|
||||||
|
}
|
||||||
|
clearSession();
|
||||||
|
window.location.replace(commonSubDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
sessionCheckFun();
|
||||||
|
}, [dependencyTrigger]);
|
||||||
|
|
||||||
|
// 🔹 Logout (shared everywhere)
|
||||||
|
const logout = async () => {
|
||||||
|
const UserId = getSession('UserId');
|
||||||
|
try {
|
||||||
|
await dispatch(GenerateLogout({ UserId, status: 'N' })).unwrap();
|
||||||
|
} finally {
|
||||||
|
sessionStorage.clear();
|
||||||
|
window.location.replace(commonSubDir);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return { sessionData, logout };
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useSessionManager;
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
import { useEffect, useRef, useState } from 'react';
|
||||||
|
import { useDispatch } from 'react-redux';
|
||||||
|
import {
|
||||||
|
ChangeAppExpDateData,
|
||||||
|
changeHeightforExpDate,
|
||||||
|
getAppSubscriptionDate,
|
||||||
|
} from './Features/BookingScreen/BookingData/BookingData.js';
|
||||||
|
|
||||||
|
const useSubscriptionManager = (sessionData, logout) => {
|
||||||
|
const dispatch = useDispatch();
|
||||||
|
const prevRemainingDays = useRef(null);
|
||||||
|
const [remainingDays, setRemainingDays] = useState(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!sessionData) return;
|
||||||
|
|
||||||
|
const fetchExpDate = async () => {
|
||||||
|
const { CompId, AppId, BranchId, UserType } = sessionData;
|
||||||
|
|
||||||
|
const res = await dispatch(
|
||||||
|
getAppSubscriptionDate({ CompId, BranchId, AppId })
|
||||||
|
).unwrap();
|
||||||
|
|
||||||
|
const expData = res?.data?.data?.[0];
|
||||||
|
if (!expData) return logout();
|
||||||
|
|
||||||
|
if (prevRemainingDays.current !== expData.RemainingDays) {
|
||||||
|
prevRemainingDays.current = expData.RemainingDays;
|
||||||
|
|
||||||
|
setRemainingDays(expData.RemainingDays);
|
||||||
|
dispatch(ChangeAppExpDateData(expData));
|
||||||
|
dispatch(changeHeightforExpDate(expData.RemainingDays));
|
||||||
|
|
||||||
|
if (
|
||||||
|
expData.RemainingDays < 1 &&
|
||||||
|
expData.RemainingHours < 1 &&
|
||||||
|
expData.RemainingMinutes < 1 &&
|
||||||
|
expData.RemainingSeconds < 1 &&
|
||||||
|
UserType !== 'Super Admin'
|
||||||
|
) {
|
||||||
|
alert('Subscription expired');
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fetchExpDate();
|
||||||
|
const interval = setInterval(fetchExpDate, 60 * 60 * 1000);
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}, [sessionData]);
|
||||||
|
|
||||||
|
return remainingDays;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useSubscriptionManager;
|
||||||
Loading…
Reference in New Issue