Android_Retail/src/Pages/BookingScreen/BookingPage.jsx

509 lines
14 KiB
React
Raw Normal View History

2026-02-12 18:15:06 +05:30
import { useEffect, useState, lazy, Suspense } from 'react';
2026-01-27 18:27:29 +05:30
import { useSelector, useDispatch } from 'react-redux';
2026-02-12 18:15:06 +05:30
const BSLayout1 = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout1/BSLayout1.jsx')
);
const BSLayout2 = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout2/BSLayout2.jsx')
);
const BSLayout3 = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout3/BSLayout3.jsx')
);
const BSLayout4 = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout4/BSLayout4.jsx')
);
const BSLayout5 = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout5/BSLayout5.jsx')
);
const BSLayout6 = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout6/BSLayout6.jsx')
);
const BSCombo = lazy(
() => import('../../Pages/BookingScreen/Template/BSLayout7/BSCombo1.jsx')
);
2026-01-27 18:27:29 +05:30
import {
getPrintSelectionComponentData,
getTemplate,
getTemplateData,
GlobalPricingAppPricingName,
changetemplateData,
PricingAppPricingNameData,
changeSessionData,
GlobalScanTemplate,
changeScanTemplate,
} from '../../Features/ThemeChange/ThemeChange';
import {
changeProductSubCategorie,
ChangeScreenSize,
getConfigType,
getLayoutCategories,
getLayoutSubCategories,
getUnpaidData,
GlobalFeatAddOnData,
GlobalProductCategorie,
} from '../../Features/BookingScreen/BookingData/BookingData.js';
import { getSession } from '../../Services/Others';
import { usePaymentOptions } from '../../Pages/BookingScreen/Template/PaymentOptions.js';
import { getCustomerDisplayWindow } from '../../Features/customerDisplayWindow/customerDisplayWindow.js';
import { ChangeRedirectStatus } from '../../Features/AppPage/CenterPage.js';
import {
changeholddata,
gettinghold,
} from '../../Features/BookingScreen/HoldOption/HoldOption.js';
import Loader from '../../Components/Loader/Loader.jsx';
const BookingPage = () => {
const dispatch = useDispatch();
const templateData = useSelector(getTemplateData);
const ProdCat = useSelector(GlobalProductCategorie);
2026-02-12 11:52:39 +05:30
console.log(templateData, 'templateData');
2026-01-27 18:27:29 +05:30
const BookingLayout = templateData?.BookingLayout?.[0];
2026-02-12 11:52:39 +05:30
const [ismounted, setIsmounted] = useState(false);
2026-01-27 18:27:29 +05:30
const [templateLoaded, setTemplateLoaded] = useState(false);
const PricingAppPricingName = useSelector(GlobalPricingAppPricingName);
2026-02-12 18:15:06 +05:30
2026-01-27 18:27:29 +05:30
const CompId = getSession('CompId');
const BranchId = getSession('BranchId');
const AppId = getSession('AppId');
const UserId = getSession('UserId');
const AppName = getSession('AppName');
const UserType = getSession('UserType');
2026-02-12 11:52:39 +05:30
const AuthToken = sessionStorage.getItem('auth');
const SessionMobileNo = getSession('MobileNo');
const FeatureAddonData = useSelector(GlobalFeatAddOnData);
const Scantemplatedata = useSelector(GlobalScanTemplate);
2026-01-27 18:27:29 +05:30
useEffect(() => {
if (BranchId) {
unpaidandHoldFun();
}
}, [BranchId]);
const updateScreenSize = () => {
dispatch(ChangeScreenSize(window.innerWidth));
};
useEffect(() => {
// Set initial screen size
updateScreenSize();
// Add event listener to track changes in screen size
window.addEventListener('resize', updateScreenSize);
// Clean up the event listener on component unmount
return () => {
window.removeEventListener('resize', updateScreenSize);
};
}, []);
const unpaidandHoldFun = async () => {
let data = {
CompId: CompId,
BranchId: BranchId,
AppId: AppId,
};
try {
await dispatch(getUnpaidData(data)).unwrap();
let response = await dispatch(gettinghold(data)).unwrap();
if (response?.data?.statusCode === 1) {
// handleHold();
dispatch(changeholddata(response?.data?.data));
} else {
dispatch(changeholddata([]));
}
} catch {
(err) => {
console.log(err);
};
}
};
useEffect(() => {
const SessionData = {
CompId,
BranchId,
AppId,
UserId,
AppName,
UserType,
AuthToken,
SessionMobileNo,
FeatureAddonData,
};
dispatch(changeSessionData(SessionData));
}, [BranchId, FeatureAddonData]);
usePaymentOptions({
CompId: CompId,
BranchId: BranchId,
AppId: AppId,
UserId: UserId,
});
useEffect(() => {
ProdCat &&
dispatch(
getLayoutSubCategories({
CompId: CompId,
BranchId: BranchId,
AppId: AppId,
ProdCat: ProdCat,
})
).unwrap();
}, [ProdCat]);
useEffect(() => {
dispatch(getConfigType({ TypeName: 'Booking Type' })).unwrap();
dispatch(ChangeRedirectStatus(true));
dispatch(changeProductSubCategorie('NaN'));
dispatch(
getLayoutCategories({ CompId: CompId, BranchId: BranchId, AppId: AppId })
).unwrap();
let data;
if (UserType === 'Super Admin' || UserType === 'Super Admin User') {
data = {
appId: AppId,
compId: CompId,
branchId: BranchId,
};
} else {
data = {
appId: AppId,
userId: UserId,
};
}
2026-02-12 11:52:39 +05:30
2026-01-27 18:27:29 +05:30
dispatch(PricingAppPricingNameData(data)).unwrap();
}, []);
useEffect(() => {
const fetchData = async (Plan) => {
2026-02-12 11:52:39 +05:30
if (templateLoaded) return; // STOP duplicate calls
2026-01-27 18:27:29 +05:30
const Data = { AppId, CompId, BranchId };
2026-02-12 11:52:39 +05:30
if (
Scantemplatedata?.Scantemplate &&
Scantemplatedata?.changetemp == 'Combo'
) {
console.log('dont want any changes');
} else if (
Scantemplatedata?.changetemp == 'Layout' &&
(Scantemplatedata?.OldTemp == 'Combo1' ||
Scantemplatedata?.OldTemp == 'Combo2')
) {
2026-01-27 18:27:29 +05:30
let tempdata = {
BookingLayout: [
'Layout2',
[
{
TemplateOptionsId: 71805,
OptionId: 45,
OptionName: 'Category',
},
{
TemplateOptionsId: 71807,
OptionId: 47,
OptionName: 'Card',
},
{
TemplateOptionsId: 71808,
OptionId: 48,
OptionName: 'Billing',
},
{
TemplateOptionsId: 71809,
OptionId: 166,
OptionName: 'Navbar',
},
],
],
BookingNavbar: [
'Navbar3',
[
{
TemplateOptionsId: 71811,
OptionId: 74,
OptionName: 'Search',
},
{
TemplateOptionsId: 71812,
OptionId: 75,
OptionName: 'RePrint',
},
{
TemplateOptionsId: 71813,
OptionId: 77,
OptionName: 'QuickAdd',
},
{
TemplateOptionsId: 71814,
OptionId: 76,
OptionName: 'DineIn',
},
{
TemplateOptionsId: 71815,
OptionId: 79,
OptionName: 'TakeAway',
},
{
TemplateOptionsId: 71816,
OptionId: 80,
OptionName: 'Offer',
},
{
TemplateOptionsId: 71817,
OptionId: 82,
OptionName: 'ExtraCharge',
},
{
TemplateOptionsId: 71825,
OptionId: 130,
OptionName: 'Hold',
},
{
TemplateOptionsId: 71826,
OptionId: 172,
OptionName: 'AddCustomer',
},
],
],
BookingCategory: [
'Category5',
[
{
TemplateOptionsId: 71818,
OptionId: 95,
OptionName: 'Image',
},
{
TemplateOptionsId: 71819,
OptionId: 96,
OptionName: 'Background',
},
],
],
BookingCard: [
'Card4',
[
{
TemplateOptionsId: 71821,
OptionId: 117,
OptionName: 'Background',
},
{
TemplateOptionsId: 71822,
OptionId: 119,
OptionName: 'Price',
},
{
TemplateOptionsId: 71823,
OptionId: 120,
OptionName: 'SmallImage',
},
{
TemplateOptionsId: 71824,
OptionId: 121,
OptionName: 'ImageLeft',
},
],
],
BookingBilling: [
'StandardBilling',
[
{
TemplateOptionsId: 71825,
OptionId: 130,
OptionName: 'Hold',
},
{
TemplateOptionsId: 71825,
OptionId: 130,
OptionName: 'DineIn',
},
{
TemplateOptionsId: 71826,
OptionId: 171,
OptionName: 'Background',
},
{
TemplateOptionsId: 71826,
OptionId: 172,
OptionName: 'AddCustomer',
},
{
TemplateOptionsId: 71828,
OptionId: 210,
OptionName: 'Sl.No',
},
{
TemplateOptionsId: 71829,
OptionId: 211,
OptionName: 'Item',
},
{
TemplateOptionsId: 71830,
OptionId: 214,
OptionName: 'Quantity',
},
{
TemplateOptionsId: 71831,
OptionId: 216,
OptionName: 'Amount',
},
{
TemplateOptionsId: 71832,
OptionId: 217,
OptionName: 'Edit',
},
{
TemplateOptionsId: 71833,
OptionId: 218,
OptionName: 'Delete',
},
],
],
};
2026-02-12 11:52:39 +05:30
await dispatch(
changeScanTemplate({
Scantemplate: false,
changetemp: Scantemplatedata?.changetemp,
Template: tempdata,
OldTemp: Scantemplatedata?.OldTemp,
})
);
2026-01-27 18:27:29 +05:30
// setIsmounted(false)
2026-02-12 11:52:39 +05:30
} else {
const templateResponse = await dispatch(
getTemplate({ CompId, BranchId, AppId })
).unwrap();
2026-01-27 18:27:29 +05:30
dispatch(getPrintSelectionComponentData(Data)).unwrap();
2026-02-12 11:52:39 +05:30
setTemplateLoaded(true);
2026-01-27 18:27:29 +05:30
if (
!templateResponse?.data?.data ||
templateResponse.data.data.length === 0
) {
Professional(Plan);
}
}
// Check if template data is empty or not
};
const Advance = PricingAppPricingName?.some(
(item) => item.PricingName === 'Premium'
);
const Pro = PricingAppPricingName?.some(
(item) => item.PricingName === 'Pro'
);
const hasCustomizedTemplate = FeatureAddonData?.FeatureDtls?.some(
(item) => item?.FeatureAddonName?.toLowerCase() === 'customized template'
);
2026-02-12 11:52:39 +05:30
if (PricingAppPricingName?.length === 0) return;
console.log(
PricingAppPricingName,
FeatureAddonData,
'FeatureAddonDataFeatureAddonData'
);
2026-01-27 18:27:29 +05:30
if (PricingAppPricingName?.length > 0) {
if (Advance) {
fetchData('Advance');
// Professional('Advance');
} else if (Pro) {
if (hasCustomizedTemplate) {
fetchData();
} else {
Professional('Pro');
// setIsmounted(false)
}
} else {
2026-02-12 11:52:39 +05:30
fetchData('Standard');
2026-01-27 18:27:29 +05:30
}
}
}, [PricingAppPricingName]);
useEffect(() => {
const handleUnload = () => {
const customerDisplayWindow = getCustomerDisplayWindow(); // Retrieve from your state/redux
if (customerDisplayWindow && !customerDisplayWindow.closed) {
customerDisplayWindow.postMessage({ type: 'refresh' }, '*');
}
};
// Add beforeunload listener when the component mounts
window.addEventListener('beforeunload', handleUnload);
// Clean up the event listener when the component unmounts
return () => {
window.removeEventListener('beforeunload', handleUnload);
};
}, []);
const Professional = async (data) => {
const tempData = {
SelectedApplication: AppId,
AppName: AppName,
Type: data,
};
dispatch(changetemplateData(tempData));
};
if (ismounted)
return (
2026-02-12 11:52:39 +05:30
<div
style={{
position: 'fixed',
top: '0',
left: '0',
right: '0',
bottom: '0',
height: '100vh',
width: '100vw',
backgroundColor: '#fff',
}}
>
2026-01-27 18:27:29 +05:30
<Loader />
</div>
2026-02-12 11:52:39 +05:30
);
2026-01-27 18:27:29 +05:30
return (
<div style={{ backgroundColor: '#fff !important' }}>
{Object.keys(templateData)?.length > 0 ? (
<>
2026-02-12 18:15:06 +05:30
<Suspense
fallback={
<div
style={{
fontSize: '14px',
fontFamily: 'Poppins',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
gap: '0',
height: '99vh',
overflow: 'hidden',
flexDirection: 'column',
fontWeight: '500',
}}
>
Loading Layout...
<span style={{ fontSize: '16px', fontWeight: '500' }}>
PozoApp
</span>
</div>
}
>
{BookingLayout === 'Layout1' && <BSLayout1 />}
{BookingLayout === 'Layout2' && <BSLayout2 />}
{BookingLayout === 'Layout3' && <BSLayout3 />}
{BookingLayout === 'Layout4' && <BSLayout4 />}
{BookingLayout === 'Layout5' && <BSLayout5 />}
{BookingLayout === 'Layout6' && <BSLayout6 />}
{BookingLayout?.includes('Combo') && <BSCombo />}
</Suspense>
2026-01-27 18:27:29 +05:30
</>
) : (
<>{/* {Advance ? <div>Loading...</div> : null} */}</>
)}
</div>
);
};
export default BookingPage;