# POZO Retail Web to Andriod by using capcitor package A short description of what the project does. --- ## 📦 Prerequisites Make sure you have the following installed: - Node.js (v20+ recommended) - npm or yarn --- ## 🔧 Required Changes Before Running the App Before running the application, make the following updates: ### 1️⃣ Update Vite Config Open the file: // this is ProtecedRoute.jsx make sure need to cmd or add some thng like this before changing react to capcitor import { useEffect, useState } from 'react'; import { Routes, Route, useNavigate } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { getEmpAccesData, GenerateLogout, getSAdminUserAccesData, PricingAppPricingName, checkSession, getCompBranchData, getCommonAppPreference, changeWarehouse, } from './Features/BrachLogin/BranchLogin.js'; import { clearSession, getSession, sessionStore } from './Services/Others'; import { FeatureAddon, GlobalFeatAddOnData, } from './Features/BookingScreen/BookingData/BookingData.js'; import { Suspense } from 'react'; import { gettableData } from './Features/PreferenceMaster/PreferenceMaster.js'; import { useSelector } from 'react-redux'; import { useTemplate } from './utils/useTemplate.js'; const commonUrl = import.meta.env.ENV_COMMON_BASE_URL; const subDirectory = import.meta.env.BASE_URL; const ProtectedRoutes = ({ routesConfig }) => { // useTemplate( // getSession('CompId'), // getSession('BranchId'), // getSession('AppId') // ); sessionStore('AppId', 2); sessionStore('BranchId', 791); sessionStore('AppName', 'Bakery'); sessionStore('CompId', 657); sessionStore('MobileNo', '8888888888'); sessionStore('UserType', 'Admin'); sessionStore('UserId', 286); sessionStore('userName', 'Karthiga'); sessionStore( 'auth','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiODg4ODg4ODg4OCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLXJldGFpbC1hcGkiLCJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLWNvbW1vbi1hcGkiLCJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLXNtcy1lbWFpbC10ZW1wbGF0ZS1hcGkiLCJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLWNvbW1vbi1hcGkiXSwiZXhwIjoxNzc0NjM3OTA5LCJpc3MiOiJodHRwczovL2FwaS5wb3pvLmRldi9Kd3RUb2tlbiJ9.TWDS0cuHGIDW_16EH2RS4z2B-wnuuPmMNd_lre505qY' ); const navigate = useNavigate(); const dispatch = useDispatch(); const UserType = getSession('UserType'); const [hasRedirected, setHasRedirected] = useState(false); const AppId = getSession('AppId'); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const UserId = getSession('UserId'); const sessionId = getSession('SessionId'); const Warehouse = getSession('Warehouse'); const [accessCheckComplete, setAccessCheckComplete] = useState(false); const FeatureAddonData = useSelector(GlobalFeatAddOnData); useTemplate(657, 791, 2); useEffect(() => { getApplicationPreference(); }, []); //sri // useEffect(() => { // if (Warehouse) { // dispatch(changeWarehouse(true)); // } // }, [Warehouse]); const getApplicationPreference = async () => { await dispatch(getCommonAppPreference(AppId)).unwrap(); }; const getEmpAccess = async () => { let data = { UserId: UserId, AppId: AppId, CompId: CompId, BranchId: BranchId, }; const response = await dispatch(getEmpAccesData(data)).unwrap(); if (response?.data?.statusCode === 1) { return response?.data?.data?.[0]?.EmpAccessDetails; } return null; }; const getSadminUserAccess = async () => { let data = { UserId: UserId, AppId: AppId, }; const response = await dispatch(getSAdminUserAccesData(data)).unwrap(); if (response?.data?.statusCode === 1) { return response?.data?.data?.[0]?.AppMenuAccessDetails; } return null; }; const Dinein = async () => { if (AppId && CompId && BranchId) { let DineinData = { AppId: AppId, CompId: CompId, BranchId: BranchId, UserId: UserId, }; const response = await dispatch(gettableData(DineinData)).unwrap(); if (response?.data?.statusCode === 1) { const SettingValueData = response?.data?.data ?.find((e) => e.AppId === AppId) ?.SettingDtlDetails?.some( (e) => e.SettingIdName === 'DineIn' && e.SettingValue === 'Y' ); const EstimateValueData = response?.data?.data ?.find((e) => e.AppId === AppId) ?.SettingDtlDetails?.some( (e) => e.SettingIdName === 'Estimation' && e.SettingValue === 'Y' ); return (SettingValueData, EstimateValueData); } } }; const checkAccess = async (empAccess) => { if (!empAccess) return false; let DineinData, EstimateData = await Dinein(); switch (empAccess) { case 'Dine In': case 'KOT': return !!DineinData; case 'Estimate': return !!EstimateData; default: return false; // Restrict access if no valid match found } }; const getPricingName = async () => { if (!AppId || !UserId) return; const data = { appId: AppId, userId: UserId, }; try { const response = await dispatch(PricingAppPricingName(data)).unwrap(); const responseData = response?.data; const pricingData = responseData?.data; const hasAdvance = pricingData?.some( (item) => item.PricingName === 'Premium' ); const hasProOrAdvance = hasAdvance || pricingData.some((item) => item.PricingName === 'Customized'); return (hasAdvance, hasProOrAdvance); } catch (error) { console.error('Error fetching pricing name:', error); } }; const checkPlanAccess = async (empAccess, featureAddonData) => { if (!empAccess) return false; let Advance, ProORAdvance = await getPricingName(); switch (empAccess) { case 'Product Catalogue': return ( ProORAdvance || featureAddonData?.some( (item) => item?.FeatureAddonName?.toLowerCase() === 'catalog' ) ); case 'Sales Setup': case 'Print Setup': return ( Advance || featureAddonData?.some( (item) => item?.FeatureAddonName?.toLowerCase() === 'customized template' ) ); case 'Kiosk Setup': case 'Kiosk Sales': return featureAddonData?.some( (item) => item?.FeatureAddonName?.toLowerCase() === 'kiosk sales' ); default: return false; // Restrict access if no valid match found } }; const checkEmpAccess = async (empAccess, currentPath) => { if (!empAccess) return false; const Access = await getEmpAccess(); let accessType; if (currentPath.endsWith('/new')) { accessType = 'AddAccess'; } else if (currentPath.endsWith('/update')) { accessType = 'UpdateAccess'; } else { accessType = 'ReadAccess'; } // const config = Access?.find(config => // config.ConfigName === empAccess && config[accessType] === 'Y' // ); const config = Access?.find( (config) => (config.ConfigName === empAccess && config[accessType] === 'Y') || (currentPath.includes('supplier-master') && (config.ConfigName === 'Supplier' || config.ConfigName === 'Seller') && config[accessType] === 'Y') ); return !!config; }; const checkSuperAdminUserAccess = async (empAccess, currentPath) => { console.log('empAccessData1', empAccess, currentPath); if (!empAccess) return false; const Access = await getSadminUserAccess(); let accessType; if (currentPath.endsWith('/new')) { accessType = 'AddAccess'; } else if (currentPath.endsWith('/update')) { accessType = 'UpdateAccess'; } else { accessType = 'ReadAccess'; } console.log('empAccessData2', Access, accessType); // const config = Access?.find(config => // config.MenuName === empAccess && config[accessType] === 'Y' // ); const config = Access?.find( (config) => (config.MenuName === empAccess && config[accessType] === 'Y') || (currentPath.includes('supplier-master') && (config.MenuName === 'Supplier' || config.MenuName === 'Seller') && config[accessType] === 'Y') ); console.log('empAccessData3', config); return !!config; }; const getEmpAccessFromChildren = (route, currentPath) => { if (route.path === currentPath) { return route.empAccess || null; } if (route.children) { for (const child of route.children) { const childPath = `${route.path}/${child.path}`; if (childPath === currentPath) { return child.empAccess || null; } } } return null; }; const getEmpAccessDataFromChildren = (route, currentPath) => { if (route.path === currentPath) { return route.access || null; } if (route.children) { for (const child of route.children) { const childPath = `${route.path}/${child.path}`; if (childPath === currentPath) { return child.access || null; } } } return null; }; const fetchBranchData = async () => { const response = await dispatch( getCompBranchData({ CompId: CompId, AppId: AppId }) ).unwrap(); if (response?.data?.statusCode === 1) { if (response?.data?.data?.length == 1) { navigate(`${subDirectory}`); } else { navigate(`${subDirectory}app-page/branch-login`); } } }; const Logout = async () => { const status = 'N'; // replace with your actual status const res = await dispatch(GenerateLogout({ UserId, status })).unwrap(); if (res?.data?.statusCode === 1) { sessionStorage.clear(); window.location.replace(`${commonUrl}`); } }; const renderRoutes = (routes) => { return routes.map(({ path, component: Component, children }) => { const fullPath = `${path}`; if (!Component) { console.error(`Component not found for path: ${fullPath}`); return null; } if (children) { return ( }> {children.map(({ path: childPath, component: ChildComponent }) => { if (!ChildComponent) { console.error( `Child component not found for path: ${childPath}` ); return null; } return ( } /> ); })} ); } return } />; }); }; return ( }> {renderRoutes(routesConfig)} ); }; export default ProtectedRoutes; /// Routes config import React from 'react'; import { lazy } from 'react'; const CommonMaster = lazy( () => import('./Pages/CommonMaster/CommonMaster.jsx') ); const ConfigType = lazy(() => import('./Pages/ConfigType/ConfigTypeForm.jsx')); const AdminTax = lazy(() => import('./Pages/AdminTax/AdminTaxForm.jsx')); const ProductForm = lazy(() => import('./Pages/Product/ProductForm.jsx')); const Sport_ProductForm = lazy( () => import('./Pages/Product/SportsMaster.jsx') ); const ShiftMasterList = lazy( () => import('./Pages/ShiftMaster/ShiftMasterList.jsx') ); const ShiftMasterForm = lazy( () => import('./Pages/ShiftMaster/ShiftMasterForm.jsx') ); const EmployeeMasterList = lazy( () => import('./Pages/EmpMaster/EmpMasterList.jsx') ); const EmployeeMasterForm = lazy( () => import('./Pages/EmpMaster/EmpMasterForm.jsx') ); const SupplierMasterList = lazy( () => import('./Pages/SupplierMaster/SupplierMasterList.jsx') ); const SupplierMasterForm = lazy( () => import('./Pages/SupplierMaster/SupplierMasterForm.jsx') ); const ComponentMasterForm = lazy( () => import('./Pages/UiComponentPage/ComponentForm.jsx') ); const ComponentMasterList = lazy( () => import('./Pages/UiComponentPage/ComponentList.jsx') ); const CustomerForm = lazy( () => import('./Pages/CustomerMaster/CustMasterForm.jsx') ); const CustomerMasterList = lazy( () => import('./Pages/CustomerMaster/CustMasterList.jsx') ); const DateWiseReport = lazy( () => import('./Pages/Reports/DateWiseReport/DateWiseReport.jsx') ); const ItemWiseReport = lazy( () => import('./Pages/Reports/ItemWiseReport/ItemWiseReport.jsx') ); const Reprint = lazy( () => import('./Pages/BookingScreen/Components/OtherConponents/Reprint/BSReprint.jsx') ); const BookingSelectionPage = lazy( () => import('./Pages/BookingScreen/Components/MainPage/MainPage.jsx') ); const PrintSelectionPage = lazy( () => import('./Pages/BookingScreen/Components/PrintMainPage/MainPage.jsx') ); const KioskMainPage = lazy( () => 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 axios from 'axios'; const KitchenFinishlist = lazy( () => import('./Pages/StoreKitchen/StoreKitchenFinish/KitchenFinishlist.jsx') ); const KitechenFinishform = lazy( () => import('./Pages/StoreKitchen/StoreKitchenFinish/KitechenFinishform.jsx') ); const FreeProductList = lazy( () => import('./Pages/FreeProducts/FreeProduct/FreeProductList.jsx') ); const FreePurchaseEnteryForm = lazy( () => import('./Pages/FreeProducts/FreePurchase/FreePurchaseEntery/FreePurchaseEnteryForm.jsx') ); const FreePurchaseEnteryList = lazy( () => import('./Pages/FreeProducts/FreePurchase/FreePurchaseEntery/FreePurchaseEnteryList.jsx') ); const FreePurchaseOrderList = lazy( () => import('./Pages/FreeProducts/FreePurchase/FreePurchaseOrder/FreePurchaseOrderList.jsx') ); const FreePurchaseOrderForm = lazy( () => import('./Pages/FreeProducts/FreePurchase/FreePurchaseOrder/FreePurchaseOrderForm.jsx') ); const FreePurchaseReturnList = lazy( () => import('./Pages/FreeProducts/FreePurchase/FreePurchaseReturn/FreePurchaseReturnList.jsx') ); const FreePurchaseReturnForm = lazy( () => import('./Pages/FreeProducts/FreePurchase/FreePurchaseReturn/FreePurchaseReturnForm.jsx') ); const CommonForm = lazy( () => import('./Pages/Offer/LoyaltyPoints/CommonForm.jsx') ); const ReprintReasonReportList = lazy( () => import('./Pages/Reports/ReprintReasonReport/ReprintReasonReportList.jsx') ); const RevenueItemWiseReport = lazy( () => import('./Pages/Reports/Revenue/RevenueItemWiseReport.jsx') ); const LinkUrlCreate = lazy( () => import('./Pages/paymentpdfPage/LinkUrlCreate.jsx') ); const SupplierProductMapping = lazy( () => import('./Pages/SupplierProductMapping/SupplierProductMapping.jsx') ); const RedirectUserProfile = lazy( () => import('./Pages/RedirectUserProfile.jsx') ); const RelieveRequestForm = lazy( () => import('./Pages/EmpMaster/EmpRelieve.jsx') ); const PurchaseQuotationList = lazy( () => import('./Pages/PurchaseQuotation/PurchaseQuotationList.jsx') ); const ExchangeAndReplacementList = lazy( () => import('./Pages/ExchangeAndReplacement/ExchangeAndReplacementList.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 Settlement = lazy( () => import('./Pages/Reports/TipAmountSettlement/Settlement.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 apiCommonUrl = import.meta.env.ENV_API_URL_COMMON; const initSession = () => { sessionStore('AppId', 2); sessionStore('BranchId', 791); sessionStore('AppName', 'Bakery'); sessionStore('CompId', 657); sessionStore('MobileNo', '8888888888'); sessionStore('UserType', 'Admin'); sessionStore('UserId', 286); sessionStore('userName', 'Karthiga'); sessionStore( 'auth','eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiODg4ODg4ODg4OCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLXJldGFpbC1hcGkiLCJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLWNvbW1vbi1hcGkiLCJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLXNtcy1lbWFpbC10ZW1wbGF0ZS1hcGkiLCJodHRwczovL2FwaS5wb3pvLmRldi9wb3pvLWNvbW1vbi1hcGkiXSwiZXhwIjoxNzc0NjM3OTA5LCJpc3MiOiJodHRwczovL2FwaS5wb3pvLmRldi9Kd3RUb2tlbiJ9.TWDS0cuHGIDW_16EH2RS4z2B-wnuuPmMNd_lre505qY' ); }; const getAppType = async () => { // 🔥 If already stored, don't call API again const storedType = getSession('AppType'); if (storedType) { return storedType === 'Wholesale'; } const AppId = getSession('AppId'); if (!AppId) return null; const response = await axios.get( `${apiCommonUrl}/application?AppId=${AppId}` ); const subCategoryName = response?.data?.data?.[0]?.SubCategoryName?.toLowerCase(); const isWholesale = subCategoryName === 'wholesale'; sessionStore('AppType', isWholesale ? 'Wholesale' : 'Sale'); return isWholesale; }; const fetchComponent = async () => { try { initSession(); const isWholesale = await getAppType(); if (isWholesale === null) return null; return isWholesale ? import('./Pages/AppPage/WholesaleAppPage.jsx') : import('./Pages/AppPage/AppPage.jsx'); } catch (err) { console.error('API call failed:', err); return null; } }; const fetchHomeComponent = async () => { try { initSession(); const isWholesale = await getAppType(); if (isWholesale === null) return null; return isWholesale ? import('./Pages/DashBoard/WholesaleDashboard.jsx') : import('./Pages/DashBoard/RetailDashboard.jsx'); } catch (err) { console.error('API call failed:', err); return null; } }; export const routesConfig = [ { path: `${subDirectory}customer-display`, component: CustomerDisplay }, { path: `${subDirectory}PricingPage`, component: PricingPage }, { path: `${subDirectory}android-app`, component: AndroidApp, empAccess: 'Android App', }, { path: `${subDirectory}purchaseordermail`, component: PurchaseOrderMail }, { path: `${subDirectory}viewbill`, component: LinkUrlCreate, empAccess: 'View Bill', }, // writed b=y sree // { // path: `${subDirectory}MenuQRCode`, // component: CustomerMenuPage, // }, { path: `${subDirectory}purchaseconfirm`, component: CustomerPurchaseConfirm, }, { path: `${subDirectory}viewpurchaseorder`, component: PurchaseLink, }, { path: `${subDirectory}combolayout3`, component: ComboLayout3, }, { path: `${subDirectory}`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [ { path: '/', component: React.lazy(() => fetchHomeComponent().then((module) => ({ default: module.default })) ), }, { path: `relieve-request`, component: RelieveRequestForm }, { path: 'branch-login', component: BranchLogin }, { path: 'branch-all', component: BackToBranchLogin }, { path: 'back-to-login', component: BacktoLogin }, { path: 'logout', component: Logout }, { path: 'redirect-apps', component: RedirectApps }, { path: 'redirect-userprofile', component: RedirectUserProfile }, // { path: 'transaction', component: WSTransaction } ], }, { path: `${subDirectory}qrprint`, component: CreditCustomerPrint, empAccess: 'Public', }, { path: `${subDirectory}sales`, component: BookingPage, empAccess: 'Sales' }, { path: `${subDirectory}wholesales`, component: WholesaleBookingPage, empAccess: 'Whole Sales', }, { path: `${subDirectory}kiosksales`, component: KioskBookingPage, empAccess: 'Kiosk Sales', }, { path: `${subDirectory}kiosk-receipt`, component: KioskBookingReceipt, empAccess: 'Public', }, { path: `${subDirectory}payment-page`, component: PaymentDetailsPage, empAccess: 'Public', }, { path: `${subDirectory}reprint`, component: Reprint }, { path: `${subDirectory}transaction`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [ { path: 'sales', component: WSTransaction, empAccess: 'Sales' }, { path: 'payment-received', component: PaymentReceived }, { path: 'seller-payment', component: SellerMasterTran }, ], }, { path: `${subDirectory}kitchen`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [ { path: 'kot', component: KOT, empAccess: 'KOT' }, { path: 'kot-display', component: CustomerKOTDisplay, empAccess: 'KOT Display', }, ], }, { path: `${subDirectory}report`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [ { path: 'PublicQrCode', component: PublicQrCode, empAccess: 'SelfBooking QR Code', }, { path: 'MenuQRCode', component: MenuQRCode, empAccess: 'MenuQRCode', }, // { // path: 'tipamountsettlementlist', // component: TipAmountSettlementList, // empAccess: 'Tips', // }, // { // path: 'EmployeeSettlement', // component: EmployeeSettlement, // empAccess: 'Incentive', // }, { path: 'Settlement', component: Settlement, empAccess: 'Settlement', }, { path: 'datewisereport', component: DateWiseReport, empAccess: 'Daily Sales', }, { path: 'itemwisereport', component: ItemWiseReport, empAccess: 'By Item', }, { path: 'top-selling-products', component: TopSellingProducts, empAccess: 'Top Selling Products', }, { path: 'estimateitemwisereport', component: EstimateItemWiseReport, empAccess: 'By Item', }, { path: 'estimatedatewisereport', component: EstimateDateWiseReport, empAccess: 'Daily Sales', }, { path: 'ledgerreport', component: LedgerReport, empAccess: 'Ledger' }, { path: 'ledger', component: LegderList, empAccess: 'Ledger' }, { path: 'stock-in-hand', component: StockinHand, empAccess: 'Stock Inhand', }, { path: 'abstract', component: WholeSaleAbstract, empAccess: 'Abstract For Sales', }, { path: 'sellerabstract', component: WholeSaleSellerAbstract, empAccess: 'Abstract For Purchase', }, { path: 'salesreport', component: WholeSaleSalesReport, empAccess: 'Daily Sales', }, { path: 'purchasereport', component: WholeSalePurchaseReport, empAccess: 'Purchase', }, { path: 'paymentpurchasereport', component: WholeSalePaymentPurchaseReport, empAccess: 'Purchase Payment', }, { path: 'paymentsalesreport', component: WholeSalePaymentSalesReport, empAccess: 'Sales Payment', }, { path: 'reprintreasonreport', component: ReprintReasonReportList, empAccess: 'Reprint Details', }, { path: 'membership', component: MembershipReport, empAccess: 'Membership Report', }, { path: 'revenueitemWisereport', component: RevenueItemWiseReport, empAccess: 'Gross Margin', }, { path: 'PurchaseOrderReport', component: PurchaseOrderReport, empAccess: 'Purchase', }, ], }, { path: `${subDirectory}setting`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [ { path: 'common-master', component: CommonMaster, empAccess: 'Common Master', }, { path: 'other-services', component: OtherServicesList, empAccess: 'OtherServices', }, { path: 'other-services/new', component: (props) => , empAccess: 'OtherServices', }, { path: 'other-services/update', component: (props) => , empAccess: 'OtherServices', }, { path: 'config-type', component: ConfigType, access: 'Super Admin', empAccess: 'Config Type', }, { path: 'languages', component: SpeechLanguagesList, access: 'Super Admin', empAccess: 'Languages', }, { path: 'preference', component: PreferenceList, empAccess: 'Preference', }, { path: 'price-change', component: StockPriceUpdate, empAccess: 'Price Change', }, { path: 'extra-charges', component: ExtraChargesList, empAccess: 'Extra Charges', }, { path: 'Exchange-Return-policy', component: ExchangeAndReplacementList, empAccess: 'Exchange / Return', }, { path: 'Exchange-Return-policy/new', component: (props) => ( ), empAccess: 'Exchange / Return', }, { path: 'exchange-return-mapping', component: ExchangeReturnMapList, empAccess: 'Rules Mapping', }, { path: 'exchange-return-mapping/new', component: (props) => ( ), empAccess: 'Rules Mapping', }, { path: 'product-catalogue-list', component: ProductCatalogueList, empAccess: 'Product Catalogue', }, { path: 'product-catalogue', component: Productcatlogue, empAccess: 'Product Catalogue', }, { path: 'admin-tax', component: AdminTax, empAccess: 'Tax' }, { path: 'create-ticket', component: TicketForm, empAccess: 'Create Ticket', }, { path: 'payment-options', component: PaymentOptions, empAccess: 'Payment Options', }, { path: 'payment-received-retail', component: PaymentReceivedRetail, empAccess: 'Payment Updates', }, { path: 'payment-device-access', component: PaymentDeviceForm, empAccess: 'Payment Device Access', }, { path: 'counter-category-mapping', component: CounterCategoryMappingForm, empAccess: 'Counter Mapping', }, { path: 'wholesale-product-master', component: WholeSaleProductList, empAccess: 'Product', }, { path: 'product-entry', component: ProductEntryList, empAccess: 'Product Entry', }, { path: 'product', component: ProductMaster, empAccess: 'Product Entry', }, { path: 'product-entry/new', component: (props) => , empAccess: 'Product Entry', }, { path: 'wholesale-extracharges/new', component: ItemEntry, empAccess: 'Extra Charges', }, { path: 'wholesale-extracharges', component: ExtraChrgesList, empAccess: 'Extra Charges', }, { path: 'membership-master/list', component: MembershipList, empAccess: 'Membership', }, { path: 'membership-master/new', component: (props) => , empAccess: 'Membership', }, { path: 'membership-master/update', component: (props) => , empAccess: 'Membership', }, { path: 'opening-stock/new', component: OpeningStock, empAccess: 'Opening Stock', }, { path: 'opening-stock', component: OpeningStockList, empAccess: 'Opening Stock', }, { path: 'stock-adjustment', component: StockAdjustment, empAccess: 'Stock Adjustment', }, { path: 'stock-adjustment-list', component: StockAdjustmentList, empAccess: 'Stock Adjustment', }, { path: 'product-master', component: ProductMaster, empAccess: 'Add Product', }, { path: 'product-master/combo', component: ProductMaster, component: (props) => , empAccess: 'Add Product', }, { path: 'product-master/new', component: (props) => , empAccess: 'Add Product', }, { path: 'products-master/new', component: (props) => , empAccess: 'Add Product', }, { path: 'products-master/update', component: (props) => , empAccess: 'Add Product', }, { path: 'product-master/update', component: (props) => , empAccess: 'Add Product', }, { path: 'product-master/turbo-add', component: (props) => , empAccess: 'Add Product', }, { path: 'image-bulk-upload', component: ImageBulkUpload, empAccess: 'Image Upload', }, { path: 'rack-master', component: RackList, empAccess: 'Add Rack', }, { path: 'rack-master/new', component: (props) => , empAccess: 'Add Rack', }, { path: 'rack-master/update', component: (props) => , empAccess: 'Add Rack', }, { path: 'slot-management', component: (props) => , empAccess: 'Slot Management', }, { path: 'slot-management-list', component: (props) => , empAccess: 'Slot Management', }, { path: 'productBased-offer', component: OfferList, empAccess: 'Product Based', }, { path: 'productBased-offer/new', component: (props) => , empAccess: 'Product Based', }, { path: 'productBased-offer/update', component: (props) => , empAccess: 'Product Based', }, { path: 'code-base', component: CodeBaseList, empAccess: 'Code Based', }, { path: 'code-base/new', component: (props) => , empAccess: 'Code Based', }, { path: 'code-base/new', component: (props) => , empAccess: 'Code Based', }, { path: 'item-wise', component: ItemWise, empAccess: 'Item Wise Offer' }, { path: 'quantity-wise', component: QuantityWise, empAccess: 'Quantity Wise Offer', }, { path: 'buyone-getone', component: BuyOneGetOneForm, empAccess: 'Buy X and Get X or Y', }, { path: 'sales-wise', component: SalesWiseList, empAccess: 'Sales Wise Offer', }, { path: 'sales-wise/new', component: (props) => , empAccess: 'Sales Wise Offer', }, { path: 'sales-wise/update', component: (props) => , empAccess: 'Sales Wise Offer', }, { path: 'loyalty-point', component: LoyaltyPointsList, empAccess: 'Loyalty Cards', }, { path: 'loyalty-based', // component: LoyaltyBased, component: LoyaltyBasedList, empAccess: 'Loyalty Points', }, { path: 'loyalty-based/new', component: (props) => , empAccess: 'Loyalty Points', }, { path: 'loyalty-based/update', component: (props) => , empAccess: 'Loyalty Points', }, { path: 'loyalty-point/new', component: (props) => ( ), empAccess: 'Loyalty Cards', }, { path: 'loyalty-point/update', component: (props) => ( ), empAccess: 'Loyalty Cards', }, // { path: 'loyalty-point/new', component: (props) => , empAccess: "Loyalty Cards" }, // { path: 'loyalty-point/update', component: (props) => , empAccess: "Loyalty Cards" }, { path: 'bundle-offer', component: BundleOfferList, empAccess: 'Bundle Offer', }, { path: 'bundle-offer/new', component: (props) => , empAccess: 'Bundle Offer', }, { path: 'bundle-offer/update', component: (props) => , empAccess: 'Bundle Offer', }, { path: 'coupon', component: CouponWiseOfferlist, empAccess: 'Coupon Wise Offer', }, { path: 'coupon/new', component: (props) => ( ), empAccess: 'Coupon Wise Offer', }, { path: 'coupon/update', component: (props) => ( ), empAccess: 'Coupon Wise Offer', }, // { path: 'coupon/new', component: (props) => , empAccess: "Coupon Wise Offer" }, // { path: 'coupon/update', component: (props) => , empAccess: "Coupon Wise Offer" }, { path: 'promo-code', component: PromocodeList, empAccess: 'Promo Code' }, { path: 'promo-code/new', component: (props) => ( ), empAccess: 'Promo Code', }, { path: 'promo-code/update', component: (props) => ( ), empAccess: 'Promo Code', }, // { path: 'promo-code/new', component: (props) => , empAccess: "Promo Code" }, // { path: 'promo-code/update', component: (props) => , empAccess: "Promo Code" }, { path: 'offer-code', component: OfferCodeList, empAccess: 'Offer Code' }, { path: 'offer-code/new', component: (props) => ( ), empAccess: 'Offer Code', }, { path: 'offer-code/update', component: (props) => ( ), empAccess: 'Offer Code', }, // { path: 'offer-code/new', component: (props) => , empAccess: "Offer Code" }, // { path: 'offer-code/update', component: (props) => , empAccess: "Offer Code" }, { path: 'customer-master', component: CustomerMasterList, empAccess: 'Customer', }, { path: 'customer-master/new', component: (props) => , empAccess: 'Customer', }, { path: 'customer-master/update', component: (props) => , empAccess: 'Customer', }, { path: 'automated-reorder', component: AutomatedReorderList, empAccess: 'Automated Reorder', }, { path: 'automated-reorder/new', component: (props) => , empAccess: 'Automated Reorder', }, { path: 'automated-reorder/update', component: (props) => , empAccess: 'Automated Reorder', }, { path: 'purchase-entry', component: StockList, empAccess: 'Product Receipt', }, { path: 'purchase-entry/new', component: (props) => , empAccess: 'Product Receipt', }, { path: 'purchase-entry/update', component: (props) => , empAccess: 'Product Receipt', }, { path: 'receive-stocks', component: StockReceivedList, empAccess: 'Purchase Order', }, { path: 'gst-invoice-setup/new', component: (props) => , empAccess: 'Gst Invoice Setup', }, { path: 'gst-invoice-setup/update', component: (props) => ( ), empAccess: 'Gst Invoice Setup', }, { path: 'gst-invoice-setup', component: gstInvoiceSetUpList, empAccess: 'Gst Invoice Setup', }, { path: 'purchase-order', component: PurchaseOrderList, empAccess: 'Purchase Order', }, { path: 'purchase-order/new', component: (props) => , empAccess: 'Purchase Order', }, { path: 'purchase-return/list', component: PurchaseReturnget, empAccess: 'Product Return', }, { path: 'purchaseconfirm', component: CustomerPurchaseConfirm, // empAccess: 'View Bill', }, { path: 'purchase-return', component: PurchaseReturn, empAccess: 'Product Return', }, //free Products { path: 'free-product-master', component: FreeProductList, empAccess: 'Add Product', }, { path: 'free-purchase-entry', component: FreePurchaseEnteryList, empAccess: 'Purchase Entry', }, { path: 'free-purchase-entry/new', component: (props) => ( ), empAccess: 'Purchase Entry', }, { path: 'free-purchase-entry/update', component: (props) => ( ), empAccess: 'Purchase Entry', }, { path: 'free-purchase-order', component: FreePurchaseOrderList, empAccess: 'Purchase Order', }, { path: 'free-purchase-order/new', component: (props) => ( ), empAccess: 'Purchase Order', }, { path: 'free-purchase-return', component: FreePurchaseReturnList, empAccess: 'Purchase Return', }, { path: 'free-purchase-return/new', component: FreePurchaseReturnForm, empAccess: 'Purchase Return', }, //free Products { path: 'sales-quotation', component: PurchaseQuotationForm, empAccess: 'Sales Quotation', }, { path: 'sales-quotation/list', component: PurchaseQuotationList, empAccess: 'Sales Quotation', }, { path: 'sales-order', component: SalesOrder, empAccess: 'Sales Order', }, // { path: 'delivery-challan', // component: DeliveryChallanList, // empAccess: 'Delivery Challan' // }, { path: 'delivery-challan/list', component: DeliveryChallanList, empAccess: 'Delivery Challan', }, { path: 'delivery-challan', component: DeliveryChallanForm, empAccess: 'Delivery Challan', }, { path: 'delivery-challan-to-invoice/list', component: DeliveryChallanToInvoiceList, empAccess: 'DC to Invoice', }, { path: 'delivery-challan-to-invoice', component: DeliveryChallanToInvoiceForm, empAccess: 'DC to Invoice', }, { path: 'shift-master', component: ShiftMasterList, empAccess: 'Shift' }, { path: 'shift-master/new', component: (props) => , empAccess: 'Shift', }, { path: 'shift-master/update', component: (props) => , empAccess: 'Shift', }, { path: 'employee-master', component: EmployeeMasterList, empAccess: 'Add Employee', }, { path: 'employee-master/new', component: (props) => , empAccess: 'Add Employee', }, { path: 'employee-master/update', component: (props) => , empAccess: 'Add Employee', }, { path: 'commission-or-incentive-master', component: EmpCommisionOrIncentiveList, empAccess: 'Incentive', }, { path: 'commission-or-incentive-master/new', component: (props) => ( ), empAccess: 'Incentive', }, { path: 'commission-or-incentive-master/update', component: (props) => ( ), empAccess: 'Incentive', }, { path: 'supplier-master', component: SupplierMasterList, empAccess: 'Add Supplier', }, { path: 'supplier-master/new', component: (props) => , empAccess: 'Add Supplier', }, { path: 'supplier-master/update', component: (props) => , empAccess: 'Add Supplier', }, { path: 'stock-transfer', component: CreateTransfer, empAccess: 'Create Transfer', }, { path: 'stock-dispatch', component: Dispatch, empAccess: 'Dispatch', }, { path: 'stock-transferlist', component: StockTransferList, empAccess: 'Create Transfer', }, { path: 'supplierproductmapping-master', component: SupplierProductMapping, empAccess: 'Product Mapping', }, // { path: 'supplier-master/new', component: (props) => , empAccess: "Supplier" }, // { path: 'supplier-master/update', component: (props) => , empAccess: "Supplier" }, { path: 'dinein-master', component: DiningMasterList, empAccess: 'Dine In', }, { path: 'dinein-master/new', component: (props) => , empAccess: 'Dine In', }, { path: 'dinein-master/edit', component: (props) => , empAccess: 'Dine In', }, { path: 'combo-master', component: ComboList, empAccess: 'Add Product', }, { path: 'combo-master/new', component: (props) => , empAccess: 'Add Product', }, { path: 'combo-master/update', component: (props) => , empAccess: 'Add Product', }, { path: 'combo-offer-master', component: ComboOfferMaster, empAccess: 'Combo Price', }, { path: 'payment-details', component: PaymentDetailsList, empAccess: 'Payment Details', }, { path: 'payment-details/new', component: (props) => , empAccess: 'Payment Details', }, { path: 'payment-details/update', component: (props) => , empAccess: 'Payment Details', }, { path: 'payment-failed-details', component: PaymentFailedDetailsList, empAccess: 'Payment Failed Details', }, { path: 'TableMapping/update', component: (props) => , empAccess: 'Table Mapping', }, { path: 'TableMapping', component: TableMAppingList, empAccess: 'Table Mapping', }, { path: 'employee-access', component: EmpAccessList, empAccess: 'Employee Access', }, { path: 'employee-access/new', component: (props) => , empAccess: 'Employee Access', }, { path: 'employee-access/update', component: (props) => , empAccess: 'Employee Access', }, { path: 'employee-screenrights', component: EmpScreenAccessList, empAccess: 'Employee Screen Rights', }, { path: 'employee-screenrights/new', component: (props) => ( ), empAccess: 'Employee Screen Rights', }, { path: 'employee-screenrights/update', component: (props) => ( ), empAccess: 'Employee Screen Rights', }, { path: 'cancel-reschedule-rules', component: CancellationList, empAccess: 'Cancel / Reschedule', }, { path: 'cancel-reschedule-rules/new', component: (props) => , empAccess: 'Cancel / Reschedule', }, { path: 'cancel-reschedule-rules/update', component: (props) => , empAccess: 'Cancel / Reschedule', }, { path: 'cancel-applicable-product', component: CancelApplicableProd, empAccess: 'Cancel Applicable Products', }, { path: 'cancel-paymentchange', component: ChangePaymentmode, empAccess: 'Payment Mode Change', }, { path: 'cancel-pendingpayment', component: CancellationListPending, empAccess: 'Cancel Unpaid Order', }, { path: 'sales-bill-cancel', component: SalesBillCancel, empAccess: 'Sales Entry Cancel', }, { path: 'sales-bill-product-return/list', component: SalesBillProductsReturnList, empAccess: 'Sales Product Return', }, { path: 'sales-bill-product-return', component: SalesBillProductsReturn, empAccess: 'Sales Product Return', }, { path: 'booking-reschedule', component: BookingReScedule, empAccess: 'Booking Reschedule', }, { path: 'booking-reschedule/list', component: BookingReSceduleList, empAccess: 'Booking Reschedule', }, { path: 'wholesale-preorder', component: WsPreorder, empAccess: 'Preorder', }, { path: 'wholesale-preorder/new', component: (props) => , empAccess: 'Preorder', }, { path: 'wholesale-preorder/update', component: (props) => , empAccess: 'Preorder', }, { path: 'custom-product', component: StoreRecipelist, empAccess: 'Bill Of Material', }, { path: 'custom-product/new', component: (props) => , empAccess: 'Bill Of Material', }, { path: 'custom-product/update', component: (props) => , empAccess: 'Bill Of Material', }, { path: 'store-to-production', component: Storekitchenlist, empAccess: 'Material Issue', }, { path: 'store-to-production/new', component: (props) => , empAccess: 'Material Issue', }, { path: 'store-to-production/update', component: (props) => , empAccess: 'Material Issue', }, { path: 'ready-for-sale', component: KitchenFinishlist, empAccess: 'Finished Goods', }, { path: 'ready-for-sale/new', component: (props) => , empAccess: 'Finished Goods', }, { path: 'ready-for-sale/update', component: (props) => , empAccess: 'Finished Goods', }, { path: 'gateway-master-configuration/new', component: (props) => ( ), empAccess: 'Gateway Master Configuration', }, { path: 'gateway-master-configuration/update', component: (props) => ( ), empAccess: 'Gateway Master Configuration', }, { path: 'gateway-master-configuration/list', component: GatewayMasterConfigurationList, empAccess: 'Gateway Master Configuration', }, ], }, { path: `${subDirectory}sales`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [{ path: 'dine-in', component: TableBooking }], empAccess: 'Sales Entry', }, { path: `${subDirectory}saleslayouts`, component: React.lazy(() => fetchComponent().then((module) => ({ default: module.default })) ), children: [ { path: 'sales-selection', component: BookingSelectionPage, empAccess: 'Sales Screen', }, { path: 'print-selection', component: PrintSelectionPage, empAccess: 'Print Forms', }, { path: 'kiosk-selection', component: KioskMainPage, empAccess: 'Kiosk Screen', }, { path: `barcode-qr-selection`, component: BarcodeTemplateSetup, empAccess: 'Barcode / QR', }, { path: 'kiosk-component', component: KioskComponentList, access: 'Super Admin', empAccess: 'Kiosk Component', }, { path: 'component-master', component: ComponentMasterList, access: 'Super Admin', empAccess: 'Component Master', }, { path: 'barcode-master', component: BarcodeComponentList, access: 'Super Admin', empAccess: 'Barcode Component', }, { path: 'component-master/new', component: (props) => , access: 'Super Admin', empAccess: 'Component Master', }, { path: 'component-master/update', component: (props) => ( ), access: 'Super Admin', empAccess: 'Component Master', }, { path: 'theme-creation', component: ThemeCreation, access: 'Super Admin', empAccess: 'Theme Creation', }, { path: 'themeselection/new', component: (props) => , access: 'Super Admin', empAccess: 'Theme Creation', }, { path: 'themeselection/update', component: (props) => , access: 'Super Admin', empAccess: 'Theme Creation', }, ], }, ]; // this is vite file import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; export default defineConfig(({ mode }) => { const isProd = mode === "production"; return { plugins: [react()], base: isProd ? "/apps/retail/" : "/", //for capcitor base: isProd ? "/" : "/", envDir: "src", envPrefix: "ENV_", server: { host: true, // 🔥 auto detect your IP port: process.env.PORT || 3015, }, build: { minify: "esbuild", esbuild: { drop: isProd ? ["console", "debugger"] : [], }, }, }; }); /// android xml file ; //pathfile android\app\src\main\res\xml\file_paths.xml ///package.json { "name": "retail-application", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "node --max-old-space-size=4096 node_modules/vite/bin/vite.js build", "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "format": "prettier --write ." }, "dependencies": { "@ant-design/plots": "^2.6.8", "@capacitor-community/file-opener": "^8.0.0", "@capacitor-community/speech-recognition": "^7.0.1", "@capacitor-mlkit/barcode-scanning": "^8.0.1", "@capacitor/android": "^8.3.0", "@capacitor/app": "^8.0.1", "@capacitor/cli": "^8.3.0", "@capacitor/core": "^8.3.0", "@capacitor/filesystem": "^8.1.2", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "@mui/material": "^5.15.18", "@react-google-maps/api": "^2.20.8", "@reduxjs/toolkit": "^1.9.5", "@tanstack/react-query": "^5.90.11", "@tanstack/react-query-devtools": "^5.91.1", "@tanstack/react-virtual": "^3.13.18", "@types/node": "^25.5.0", "@vitejs/plugin-legacy": "^8.0.1", "@zxing/library": "^0.21.3", "antd": "^5.17.4", "antd-img-crop": "^4.22.0", "aos": "^2.3.4", "apexcharts": "^5.10.4", "axios": "^1.13.6", "browser-image-compression": "^2.0.2", "classnames": "^2.5.1", "cropperjs": "^1.6.2", "crypto-js": "^4.1.1", "date-fns": "^4.1.0", "devtools-detect": "^4.0.2", "exceljs": "^4.4.0", "file-saver": "^2.0.5", "history": "^5.3.0", "html2canvas": "^1.4.1", "html2pdf": "^0.0.11", "html5-qrcode": "^2.3.8", "jquery": "^3.7.1", "js-cookie": "^3.0.5", "jsbarcode": "^3.11.6", "jspdf": "^4.2.1", "lucide": "^0.577.0", "lucide-react": "^0.536.0", "moment": "^2.30.1", "number-to-words": "^1.2.4", "pdf-lib": "^1.17.1", "qr-scanner": "^1.4.2", "qrcode": "^1.5.3", "qrcode.react": "^4.2.0", "react": "^18.3.1", "react-apexcharts": "^2.1.0", "react-beautiful-dnd": "^13.1.1", "react-color": "^2.19.3", "react-countup": "^6.5.3", "react-device-detect": "^2.2.3", "react-dom": "^18.3.1", "react-icons": "^4.12.0", "react-image-crop": "^11.0.10", "react-qr-code": "^2.0.13", "react-redux": "^8.1.2", "react-router-dom": "^6.23.1", "react-select": "^5.8.0", "react-signature-canvas": "^1.0.7", "react-speech-recognition": "^3.10.0", "react-timer-hook": "^3.0.7", "react-transition-group": "^4.4.5", "recharts": "^3.5.0", "string-similarity": "^4.0.4", "tesseract.js": "^6.0.0", "universal-cookie": "^8.0.1", "webfontloader": "^1.6.28", "zustand": "^5.0.8" }, "devDependencies": { "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^6.0.1", "esbuild": "^0.27.4", "eslint": "^8.57.0", "eslint-plugin-react": "^7.34.2", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.5.3", "rollup-plugin-obfuscator": "^1.1.0", "sass": "^1.98.0", "terser": "^5.31.3", "vite": "^8.0.0", "vite-plugin-obfuscator": "^1.0.5", "vite-plugin-remove-console": "^2.2.0" } }