Merge pull request 'Optim Final Fun' (#163) from OptimUpdate into main

Reviewed-on: Pozomind/pozo-retail-app#163
This commit is contained in:
mohan 2026-02-23 15:07:01 +05:30
commit eba144301a
19 changed files with 625 additions and 1043 deletions

412
package-lock.json generated
View File

@ -2968,381 +2968,6 @@
} }
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.58.0.tgz",
"integrity": "sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"peer": true
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.58.0.tgz",
"integrity": "sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"android"
],
"peer": true
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.58.0.tgz",
"integrity": "sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"peer": true
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.58.0.tgz",
"integrity": "sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"peer": true
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.58.0.tgz",
"integrity": "sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"peer": true
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.58.0.tgz",
"integrity": "sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.58.0.tgz",
"integrity": "sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.58.0.tgz",
"integrity": "sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==",
"cpu": [
"arm"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.58.0.tgz",
"integrity": "sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.58.0.tgz",
"integrity": "sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.58.0.tgz",
"integrity": "sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==",
"cpu": [
"loong64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-loong64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.58.0.tgz",
"integrity": "sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==",
"cpu": [
"loong64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.58.0.tgz",
"integrity": "sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-ppc64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.58.0.tgz",
"integrity": "sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==",
"cpu": [
"ppc64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.58.0.tgz",
"integrity": "sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.58.0.tgz",
"integrity": "sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==",
"cpu": [
"riscv64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.58.0.tgz",
"integrity": "sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==",
"cpu": [
"s390x"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.58.0.tgz",
"integrity": "sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.58.0.tgz",
"integrity": "sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"peer": true
},
"node_modules/@rollup/rollup-openbsd-x64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.58.0.tgz",
"integrity": "sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"peer": true
},
"node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.58.0.tgz",
"integrity": "sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
],
"peer": true
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.58.0.tgz",
"integrity": "sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"peer": true
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.58.0.tgz",
"integrity": "sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==",
"cpu": [
"ia32"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"peer": true
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.58.0.tgz",
"integrity": "sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"peer": true
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.58.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.58.0.tgz",
"integrity": "sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"peer": true
},
"node_modules/@sindresorhus/is": { "node_modules/@sindresorhus/is": {
"version": "4.6.0", "version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
@ -11600,48 +11225,19 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.58.0", "version": "2.80.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.58.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz",
"integrity": "sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==", "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
"engines": { "engines": {
"node": ">=18.0.0", "node": ">=10.0.0"
"npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.58.0",
"@rollup/rollup-android-arm64": "4.58.0",
"@rollup/rollup-darwin-arm64": "4.58.0",
"@rollup/rollup-darwin-x64": "4.58.0",
"@rollup/rollup-freebsd-arm64": "4.58.0",
"@rollup/rollup-freebsd-x64": "4.58.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.58.0",
"@rollup/rollup-linux-arm-musleabihf": "4.58.0",
"@rollup/rollup-linux-arm64-gnu": "4.58.0",
"@rollup/rollup-linux-arm64-musl": "4.58.0",
"@rollup/rollup-linux-loong64-gnu": "4.58.0",
"@rollup/rollup-linux-loong64-musl": "4.58.0",
"@rollup/rollup-linux-ppc64-gnu": "4.58.0",
"@rollup/rollup-linux-ppc64-musl": "4.58.0",
"@rollup/rollup-linux-riscv64-gnu": "4.58.0",
"@rollup/rollup-linux-riscv64-musl": "4.58.0",
"@rollup/rollup-linux-s390x-gnu": "4.58.0",
"@rollup/rollup-linux-x64-gnu": "4.58.0",
"@rollup/rollup-linux-x64-musl": "4.58.0",
"@rollup/rollup-openbsd-x64": "4.58.0",
"@rollup/rollup-openharmony-arm64": "4.58.0",
"@rollup/rollup-win32-arm64-msvc": "4.58.0",
"@rollup/rollup-win32-ia32-msvc": "4.58.0",
"@rollup/rollup-win32-x64-gnu": "4.58.0",
"@rollup/rollup-win32-x64-msvc": "4.58.0",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },

View File

@ -196,6 +196,7 @@ export const getTableFonts = createAsyncThunk(
export const getTemplate = createAsyncThunk( export const getTemplate = createAsyncThunk(
'theme/getTemplate', 'theme/getTemplate',
async ({ CompId, BranchId, AppId }) => { async ({ CompId, BranchId, AppId }) => {
if ( if (
CompId != null && CompId != null &&

View File

@ -62,6 +62,7 @@ const BookingPage = () => {
const templateLoadedRef = useRef( const templateLoadedRef = useRef(
Object.keys(templateData)?.length > 0 ? true : false Object.keys(templateData)?.length > 0 ? true : false
); );
console.log(templateData, 'templateDatatemplateData');
const PricingAppPricingName = useSelector( const PricingAppPricingName = useSelector(
GlobalPricingAppPricingName, GlobalPricingAppPricingName,
shallowEqual shallowEqual
@ -402,7 +403,7 @@ const BookingPage = () => {
!templateResponse?.data?.data || !templateResponse?.data?.data ||
templateResponse.data.data.length === 0 templateResponse.data.data.length === 0
) { ) {
//Professional(Plan); Professional(Plan);
} }
} }
// Check if template data is empty or not // Check if template data is empty or not

View File

@ -1,4 +1,4 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect, lazy, Suspense } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { Popconfirm, Tooltip } from 'antd'; import { Popconfirm, Tooltip } from 'antd';
import { AiOutlineClose, AiFillDelete } from 'react-icons/ai'; import { AiOutlineClose, AiFillDelete } from 'react-icons/ai';
@ -281,22 +281,6 @@ const BSBillingTable1 = () => {
handleEditQuantity(item); handleEditQuantity(item);
setshortKeyMethod(method); setshortKeyMethod(method);
}; };
// const handleKeyDown = (event) => {
// if (!event.ctrlKey) return;
// const key = event.key.toLowerCase();
// if (key === 'q') {
// event.preventDefault();
// handleShortcut('qty');
// }
// if (key === 'e') {
// event.preventDefault();
// handleShortcut('price');
// }
// };
const handleKeyDown = (event) => { const handleKeyDown = (event) => {
const key = event.key.toLowerCase(); const key = event.key.toLowerCase();
// 👉 ALT + P Open Edit Total Amount // 👉 ALT + P Open Edit Total Amount

View File

@ -1,4 +1,4 @@
import React, { Suspense, useEffect, useState } from 'react'; import React, { Suspense, useEffect, useState,lazy } from 'react';
import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';
import { Popconfirm, Tooltip } from 'antd'; import { Popconfirm, Tooltip } from 'antd';
import '../../../../../Styles/BookingScreen/Components/BSBillingTables/BSBillingTable6/BSBillingTable6.scss'; import '../../../../../Styles/BookingScreen/Components/BSBillingTables/BSBillingTable6/BSBillingTable6.scss';

View File

@ -1,4 +1,4 @@
import React, { useEffect, useState, useRef, lazy } from 'react'; import React, { useEffect, useState, useRef, lazy ,Suspense } from 'react';
import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import moment from 'moment'; import moment from 'moment';
@ -171,7 +171,7 @@ import { getCustomerDisplayWindow } from '../../../../../Features/customerDispla
import { getEmpAccess } from '../../../../../Features/AppPage/CenterPage.js'; import { getEmpAccess } from '../../../../../Features/AppPage/CenterPage.js';
import PozoSplitPaymentIcon from '../../UtillComponents/Pozo retail icons/PozoSplitPaymentIcon.jsx'; import PozoSplitPaymentIcon from '../../UtillComponents/Pozo retail icons/PozoSplitPaymentIcon.jsx';
import PozoCartIcon from '../../../../../Pages/BookingScreen/Components/UtillComponents/PozoCartIcon.jsx'; import PozoCartIcon from '../../../../../Pages/BookingScreen/Components/UtillComponents/PozoCartIcon.jsx';
import { Global_OverallOfferAmount } from '../../../../../Features/Offer/Offer.js'; import { Global_OrderOfferDetail, Global_OverallOfferAmount } from '../../../../../Features/Offer/Offer.js';
import { useApplyOfferto_CardDetail } from '../../UtillComponents/BSNavBarOffer/BSNavBarOffer_CustomHooks.jsx'; import { useApplyOfferto_CardDetail } from '../../UtillComponents/BSNavBarOffer/BSNavBarOffer_CustomHooks.jsx';
import TooltipWrapper from '../../../../../Components/Tooltip/Tooltip'; import TooltipWrapper from '../../../../../Components/Tooltip/Tooltip';
import { useAuth } from '../../../../../AuthContext.jsx'; import { useAuth } from '../../../../../AuthContext.jsx';
@ -301,9 +301,6 @@ const BST6Payment = () => {
const prodCat = useSelector(GlobalProductCategorie); const prodCat = useSelector(GlobalProductCategorie);
const ProdSubCat = useSelector(GlobalProductSubCategorie); const ProdSubCat = useSelector(GlobalProductSubCategorie);
const templateData = useSelector(getTemplateData); const templateData = useSelector(getTemplateData);
const holdCheckedSalesSetup = tableOptions?.some(
(item) => item?.OptionName === 'Hold'
);
const tableOptions = templateData?.BookingBilling?.[1]; const tableOptions = templateData?.BookingBilling?.[1];
const OfferCheckedInSetup = templateData?.BookingNavbar?.[1].some( const OfferCheckedInSetup = templateData?.BookingNavbar?.[1].some(
(item) => item?.OptionName == 'Offer' (item) => item?.OptionName == 'Offer'
@ -471,6 +468,10 @@ const BST6Payment = () => {
// for customised invoice number // for customised invoice number
const { invoiceDate, clearInvoiceDate } = useDateStore(); const { invoiceDate, clearInvoiceDate } = useDateStore();
const CurrentOrderId = useSelector(GlobalCurrentOrderId); const CurrentOrderId = useSelector(GlobalCurrentOrderId);
const holdCheckedSalesSetup = tableOptions?.some(
(item) => item?.OptionName === 'Hold'
);
useEffect(() => { useEffect(() => {
if ( if (
OrderCardDetail?.length === 1 && OrderCardDetail?.length === 1 &&

View File

@ -268,9 +268,6 @@ const BSBilling7Payment = () => {
const templateData = useSelector(getTemplateData); const templateData = useSelector(getTemplateData);
const appPreferences = useSelector(ApplicationPreferences); const appPreferences = useSelector(ApplicationPreferences);
const Combodata = useSelector(GlobalCombocarddata, shallowEqual); const Combodata = useSelector(GlobalCombocarddata, shallowEqual);
const holdCheckedSalesSetup = tableOptions?.some(
(item) => item?.OptionName === 'Hold'
);
const bookingTypePreference = appPreferences?.find( const bookingTypePreference = appPreferences?.find(
(preference) => preference?.PreferredCatName === 'Booking Type' (preference) => preference?.PreferredCatName === 'Booking Type'
)?.PreferenceCatDetails; )?.PreferenceCatDetails;
@ -474,6 +471,10 @@ const BSBilling7Payment = () => {
// for customised invoice number // for customised invoice number
const { invoiceDate, clearInvoiceDate } = useDateStore(); const { invoiceDate, clearInvoiceDate } = useDateStore();
const CurrentOrderId = useSelector(GlobalCurrentOrderId); const CurrentOrderId = useSelector(GlobalCurrentOrderId);
const holdCheckedSalesSetup = tableOptions?.some(
(item) => item?.OptionName === 'Hold'
);
const filteredSettingNames = SettingDataSelector?.[0]?.['SettingDtlDetails'] const filteredSettingNames = SettingDataSelector?.[0]?.['SettingDtlDetails']
?.filter( ?.filter(
(item) => (item) =>

View File

@ -97,7 +97,6 @@ import { useUtilsComponent } from '../../../../../Services/utils.js';
const StandardTable = () => { const StandardTable = () => {
const { removeExtraCharge } = useUtilsComponent(); const { removeExtraCharge } = useUtilsComponent();
const dispatch = useDispatch(); const dispatch = useDispatch();
const applyOffer = useApplyOfferto_CardDetail();
const preferenceDatas = useSelector(PreferenceData); const preferenceDatas = useSelector(PreferenceData);
const preferenceDetails = preferenceDatas?.[0]?.SettingDtlDetails; const preferenceDetails = preferenceDatas?.[0]?.SettingDtlDetails;
const preferenceOffer = const preferenceOffer =
@ -405,11 +404,9 @@ const StandardTable = () => {
const Clearall = async () => { const Clearall = async () => {
if (OrderType === 'Hold') { if (OrderType === 'Hold') {
AvailableDate && UnblockSlotsAll(OrderCardDetail); AvailableDate && UnblockSlotsAll(OrderCardDetail);
if (OfferCheckedInSetup && preferenceOffer) {
await applyOffer([]); dispatch(changeOrderCardDetails([]));
} else {
dispatch(changeOrderCardDetails([]));
}
if (salesBillEdit) { if (salesBillEdit) {
getstockbadge(); getstockbadge();
dispatch(changeBillEditingMode(false)); dispatch(changeBillEditingMode(false));
@ -445,19 +442,12 @@ const StandardTable = () => {
); );
AvailableDate && UnblockSlotsAll(UnOrderData); AvailableDate && UnblockSlotsAll(UnOrderData);
if (OfferCheckedInSetup && preferenceOffer) { dispatch(changeOrderCardDetails(UpdatedData));
await applyOffer(UpdatedData);
} else {
dispatch(changeOrderCardDetails(UpdatedData));
}
await dispatch(changeBookingType('Dine In')); await dispatch(changeBookingType('Dine In'));
} else { } else {
AvailableDate && UnblockSlotsAll(OrderCardDetail); AvailableDate && UnblockSlotsAll(OrderCardDetail);
if (OfferCheckedInSetup && preferenceOffer) { dispatch(changeOrderCardDetails([]));
await applyOffer([]);
} else {
dispatch(changeOrderCardDetails([]));
}
await dispatch(ChangeTotalAmount([])); await dispatch(ChangeTotalAmount([]));
await dispatch(changeUnpaidData(false)); await dispatch(changeUnpaidData(false));
await dispatch(changeReorderHoldDetails({})); await dispatch(changeReorderHoldDetails({}));

View File

@ -1,4 +1,12 @@
import React, { lazy, Suspense, useEffect, useRef, useState } from 'react'; import React, {
lazy,
Suspense,
useCallback,
useEffect,
useRef,
useState,
useMemo,
} from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { TiLocation } from 'react-icons/ti'; import { TiLocation } from 'react-icons/ti';
@ -17,10 +25,13 @@ import {
getBranchDetail, getBranchDetail,
getCompBranchData, getCompBranchData,
} from '../../../../Features/BrachLogin/BranchLogin.js'; } from '../../../../Features/BrachLogin/BranchLogin.js';
import { clearSession, sessionStore } from '../../../../Services/Others'; import {
clearSession,
getSession,
sessionStore,
} from '../../../../Services/Others';
import PozoHomeIcon from '../UtillComponents/Pozo retail icons/PozoHomeIcon.jsx'; import PozoHomeIcon from '../UtillComponents/Pozo retail icons/PozoHomeIcon.jsx';
import { GlobalCompBranchData } from '../../../../Features/BrachLogin/BranchLogin.js'; import { GlobalCompBranchData } from '../../../../Features/BrachLogin/BranchLogin.js';
import BSPrinterSetting from '../UtillComponents/BSPrinterSetting.jsx';
import { isMobile } from 'react-device-detect'; import { isMobile } from 'react-device-detect';
import { FaDisplay } from 'react-icons/fa6'; import { FaDisplay } from 'react-icons/fa6';
import { import {
@ -48,94 +59,109 @@ const BSPrinterSetting = lazy(
); );
const subDirectory = import.meta.env.ENV_BASE_URL; const subDirectory = import.meta.env.ENV_BASE_URL;
const commonUrl = import.meta.env.ENV_COMMON_BASE_URL; const commonUrl = import.meta.env.ENV_COMMON_BASE_URL;
const BSC1NavBar = (props) => { const MemoTiLocation = React.memo(() => (
<TiLocation className="BSC1NavBar-location-icon" />
));
const BSC1NavBar = () => {
const divRef = useRef(null); const divRef = useRef(null);
const navigate = useNavigate(); const navigate = useNavigate();
const dispatch = useDispatch(); const dispatch = useDispatch();
const AppId = props?.SessionData?.AppId; const AppId = getSession('AppId');
const CompId = props?.SessionData?.CompId; const CompId = getSession('CompId');
const BranchId = props?.SessionData?.BranchId; const BranchId = getSession('BranchId');
const UserId = props?.SessionData?.UserId; const UserId = getSession('UserId');
const UserType = props?.SessionData?.UserType; const UserType = getSession('UserType');
const [formattedDate, setFormattedDate] = useState('');
const [isAccOpen, setAccIsOpen] = useState(false); const [isAccOpen, setAccIsOpen] = useState(false);
const [menu, setMenu] = useState(false); const [menu, setMenu] = useState(false);
const [branchName, setBranchName] = useState('Guest'); const [branchData, setBranchData] = useState({
const [BranchCity, setBranchCity] = useState(); branchName: 'Guest',
const CompBranchData = useSelector(GlobalCompBranchData); city: '',
});
const FeatureAddonData = useSelector(GlobalFeatAddOnData); const FeatureAddonData = useSelector(GlobalFeatAddOnData);
const preferenceDatas = useSelector(PreferenceData); const preferenceDatas = useSelector(PreferenceData);
const [isFullscreen, setIsFullscreen] = useState(false); const [isFullscreen, setIsFullscreen] = useState(false);
// const [FeatureAddonData, setFeatureAddonData] = useState([]); // const [FeatureAddonData, setFeatureAddonData] = useState([]);
const userProfileData = useSelector(userDataByUserId); const userProfileData = useSelector(userDataByUserId);
console.log('userProfileData', userProfileData);
const handleHome = () => {
navigate(`${subDirectory}app-page/home`);
};
const ScanLayoutScreen = preferenceDatas?.[0]?.SettingDtlDetails?.find( const handleHome = useCallback(() => {
(item) => item.SettingIdName === 'ScanLayout' navigate(`${subDirectory}app-page/home`);
}, []);
const ScanLayoutScreen = useMemo(
() =>
preferenceDatas?.[0]?.SettingDtlDetails?.find(
(item) => item.SettingIdName === 'ScanLayout'
),
[preferenceDatas]
); );
useEffect(() => { useEffect(() => {
const d = new Date(); console.log(
const options = { weekday: 'short', day: '2-digit', month: 'long' }; 'ScanLayoutScreen?.SettingValue:',
const formatted = d.toLocaleDateString('en-GB', options); ScanLayoutScreen?.SettingValue
setFormattedDate(formatted); );
}, [ScanLayoutScreen?.SettingValue]);
useEffect(() => {
fetchBranchDetailData(); fetchBranchDetailData();
fetchBranchData(); fetchBranchData();
// if (UserType !== 'Super Admin' && UserType !== 'Super Admin User') { }, [BranchId, UserType]);
// getFeatureAddonData(); const fetchBranchDetailData = useCallback(async () => {
// } try {
}, []); const response = await dispatch(
const fetchBranchDetailData = async () => { getBranchDetail({ BrId: BranchId })
const response = await dispatch(
getBranchDetail({ BrId: BranchId })
).unwrap();
if (response?.data?.statusCode === 1) {
setBranchName(response?.data?.data?.[0]?.BrName);
setBranchCity(response?.data?.data?.[0]?.City);
}
};
const fetchBranchData = async () => {
if (UserType === 'Super Admin' || UserType === 'Super Admin User') {
await dispatch(
getCompBranchData({ CompId: CompId, AppId: AppId })
).unwrap();
} else if (UserType === 'Admin' || UserType === 'Admin User') {
await dispatch(
getCompBranchData({ AppId: AppId, UserId: UserId, CompId: CompId })
).unwrap(); ).unwrap();
if (response?.data?.statusCode === 1) {
setBranchData({
branchName: response?.data?.data?.[0]?.BrName,
city: response?.data?.data?.[0]?.City,
});
}
} catch (error) {
console.error('Failed to fetch branch details:', error);
} }
}; }, [BranchId]);
const UserAcc = () => { const fetchBranchData = useCallback(async () => {
try {
if (UserType === 'Super Admin' || UserType === 'Super Admin User') {
await dispatch(
getCompBranchData({ CompId: CompId, AppId: AppId })
).unwrap();
} else if (UserType === 'Admin' || UserType === 'Admin User') {
await dispatch(
getCompBranchData({ AppId: AppId, UserId: UserId, CompId: CompId })
).unwrap();
}
} catch (error) {
console.error('Failed to fetch branch data:', error);
}
}, [UserType, CompId, AppId, UserId]);
const UserAcc = useCallback(() => {
setAccIsOpen(!isAccOpen); setAccIsOpen(!isAccOpen);
}; }, [isAccOpen]);
const BacktoLogin = () => {
const BacktoLogin = useCallback(() => {
clearSession('BranchId'); clearSession('BranchId');
navigate(`${subDirectory}app-page/branch-login`); navigate(`${subDirectory}app-page/branch-login`);
}; }, []);
// const Logout = () =>{ const Logout = useCallback(async () => {
// closeCustomerDisplayWindow() const status = 'N';
// clearSession()
// window.location.replace(commonUrl);
// }
//mohan
const Logout = async () => {
const status = 'N'; // replace with your actual status
const res = await dispatch(GenerateLogout({ UserId, status })).unwrap(); const res = await dispatch(GenerateLogout({ UserId, status })).unwrap();
if (res?.data?.statusCode === 1) { if (res?.data?.statusCode === 1) {
clearSession(); clearSession();
await sessionStore('Mode', 'Logout'); await sessionStore('Mode', 'Logout');
window.location.replace(commonUrl); window.location.replace(commonUrl);
} }
}; }, [UserId, dispatch]);
const openNewTab = async () => {
const openNewTab = useCallback(async () => {
const initialData = { Paymentgateway: false }; const initialData = { Paymentgateway: false };
let screenDetails; let screenDetails;
@ -147,7 +173,6 @@ const BSC1NavBar = (props) => {
} }
} }
// Select second monitor if available, otherwise use primary screen
const secondScreen = screenDetails?.screens.find( const secondScreen = screenDetails?.screens.find(
(screen) => screen !== screenDetails.currentScreen (screen) => screen !== screenDetails.currentScreen
); );
@ -161,10 +186,8 @@ const BSC1NavBar = (props) => {
if (customerDisplayWindow && !customerDisplayWindow.closed) { if (customerDisplayWindow && !customerDisplayWindow.closed) {
setCustomerDisplayWindow(customerDisplayWindow); setCustomerDisplayWindow(customerDisplayWindow);
customerDisplayWindow.onload = () => { customerDisplayWindow.onload = () => {
setTimeout(() => { setTimeout(() => {
// Ensure it moves & resizes correctly
customerDisplayWindow.moveTo( customerDisplayWindow.moveTo(
targetScreen.left || 0, targetScreen.left || 0,
targetScreen.top || 0 targetScreen.top || 0
@ -173,26 +196,24 @@ const BSC1NavBar = (props) => {
targetScreen.width, targetScreen.width,
targetScreen.height targetScreen.height
); );
// Try fullscreen (Needs user interaction)
try { try {
customerDisplayWindow.document.documentElement.requestFullscreen(); customerDisplayWindow.document.documentElement.requestFullscreen();
} catch (err) { } catch (err) {
console.warn('Fullscreen request failed:', err); console.warn('Fullscreen request failed:', err);
} }
// Send initial data
customerDisplayWindow.postMessage(initialData, '*'); customerDisplayWindow.postMessage(initialData, '*');
}, 500); }, 500);
}; };
} else { } else {
console.error('Customer display window failed to open.'); console.error('Customer display window failed to open.');
} }
}; }, [subDirectory]);
const handleEditProfile = async () => {
const handleEditProfile = useCallback(async () => {
navigate(`${subDirectory}app-page/redirect-userprofile`); navigate(`${subDirectory}app-page/redirect-userprofile`);
}; }, [subDirectory]);
const handleFullscreen = async () => {
const handleFullscreen = useCallback(async () => {
if (!isFullscreen) { if (!isFullscreen) {
try { try {
await document.documentElement.requestFullscreen(); await document.documentElement.requestFullscreen();
@ -210,8 +231,7 @@ const BSC1NavBar = (props) => {
console.error('Exit fullscreen error:', error); console.error('Exit fullscreen error:', error);
} }
} }
}; }, [isFullscreen]);
return ( return (
<Suspense fallback={<div>Loading...</div>}> <Suspense fallback={<div>Loading...</div>}>
<> <>
@ -279,17 +299,17 @@ const BSC1NavBar = (props) => {
<div className="BSC1NavBar-name"> <div className="BSC1NavBar-name">
{/* <PiStorefrontFill className="BSC1NavBar-name-icon" /> */} {/* <PiStorefrontFill className="BSC1NavBar-name-icon" /> */}
<TooltipWrapper placement="bottom" title={branchName}> <TooltipWrapper placement="bottom" title={branchData.branchName}>
<span className="BSC1NavBar-ellipsisname"> <span className="BSC1NavBar-ellipsisname">
{branchName} {branchData.branchName}
</span>{' '} </span>{' '}
</TooltipWrapper> </TooltipWrapper>
{BranchCity && ( {branchData.city && (
<span className="BSC1NavBar-location"> <span className="BSC1NavBar-location">
{' '} {' '}
<TiLocation className="BSC1NavBar-location-icon" /> <MemoTiLocation />
<span className="BSC1NavBar-name-ellipsis"> <span className="BSC1NavBar-name-ellipsis">
{BranchCity} {branchData.city}
</span>{' '} </span>{' '}
</span> </span>
)} )}
@ -362,7 +382,6 @@ const BSC1NavBar = (props) => {
<BSNavBarUserInfo <BSNavBarUserInfo
isOpen={isAccOpen} isOpen={isAccOpen}
divRef={divRef} divRef={divRef}
CompBranchData={CompBranchData}
BacktoLogin={BacktoLogin} BacktoLogin={BacktoLogin}
userProfileData={userProfileData} userProfileData={userProfileData}
handleEditProfile={handleEditProfile} handleEditProfile={handleEditProfile}

View File

@ -65,13 +65,11 @@ const FeaturesFunctionalities = lazy(
() => import('../BookingFunctionality/FeaturesFunctionalities') () => import('../BookingFunctionality/FeaturesFunctionalities')
); );
import { isMobile } from 'react-device-detect'; import { isMobile } from 'react-device-detect';
import BarcodeScanner from '../UtillComponents/BarcodeScanner.jsx';
import { import {
getTemplateData, getTemplateData,
StoredSessionData, StoredSessionData,
} from '../../../../Features/ThemeChange/ThemeChange.js'; } from '../../../../Features/ThemeChange/ThemeChange.js';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import BSNavBarWeightScale from '../UtillComponents/BSNavBarWeightScale.jsx';
import { import {
changeFreeProductForLoyalty, changeFreeProductForLoyalty,
ChangeFreeProductList, ChangeFreeProductList,
@ -4859,25 +4857,6 @@ export default function BSC1Search(props) {
</div> </div>
</div> </div>
</DefaultModal> </DefaultModal>
{/* {isMobile && screenWidth <= 768 && (
<DefaultModal
title="Barcode Reader"
width={800}
open={openScanner}
footer={false}
handleCancel={handleQrData} // Close modal on cancel
>
{openScanner && (
<BarcodeScanner
ref={scannerRef}
openScanner={openScanner}
setOpenScanner={setOpenScanner}
handleQrData={handleQrData}
type="Search"
/>
)}
</DefaultModal>
)} */}
</> </>
</Suspense> </Suspense>
); );

View File

@ -11,7 +11,7 @@ import { useSelector } from 'react-redux';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
const UserRelieveManager = lazy(() => import('../../Template/RealivingUser')); const UserRelieveManager = lazy(() => import('../../Template/RealivingUser'));
// Scss // Scss
import "../../../../Styles/BookingScreen/Components/BSNavbar/BSNavbar1.scss" import '../../../../Styles/BookingScreen/Components/BSNavbar/BSNavbar1.scss';
const subDirectory = import.meta.env.ENV_BASE_URL; const subDirectory = import.meta.env.ENV_BASE_URL;
const BSNavBarUserInfo = ({ const BSNavBarUserInfo = ({

View File

@ -1,92 +1,83 @@
import { BsUpcScan } from "react-icons/bs"; import { BsUpcScan } from 'react-icons/bs';
import { FiLayout } from "react-icons/fi"; import { FiLayout } from 'react-icons/fi';
import { import {
changeScanTemplate, changetemplateData, getTemplate, changeScanTemplate,
changetemplateData,
getTemplate,
getTemplateData, getTemplateData,
GlobalCustThemeData, GlobalCustThemeData,
GlobalPricingAppPricingName, GlobalPricingAppPricingName,
GlobalScanTemplate, GlobalScanTemplate,
StoredSessionData StoredSessionData,
} from "../../../../Features/ThemeChange/ThemeChange"; } from '../../../../Features/ThemeChange/ThemeChange';
import { useSelector, useDispatch } from "react-redux"; import { useSelector, useDispatch } from 'react-redux';
import { GlobalFeatAddOnData } from "../../../../Features/BookingScreen/BookingData/BookingData"; import { GlobalFeatAddOnData } from '../../../../Features/BookingScreen/BookingData/BookingData';
import { useEffect, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from 'react';
import { Switch } from "antd"; import { Switch } from 'antd';
const BSScanTemplate = () => { const BSScanTemplate = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const Scantemplatedata = useSelector(GlobalScanTemplate) const Scantemplatedata = useSelector(GlobalScanTemplate);
const PricingAppPricingName = useSelector(GlobalPricingAppPricingName); const PricingAppPricingName = useSelector(GlobalPricingAppPricingName);
const FeatureAddonData = useSelector(GlobalFeatAddOnData); const FeatureAddonData = useSelector(GlobalFeatAddOnData);
const selectedtemplateData = useSelector(getTemplateData); const selectedtemplateData = useSelector(getTemplateData);
console.log(Scantemplatedata, "Scantemplatedata") console.log(Scantemplatedata, 'Scantemplatedata');
const SessionData = useSelector(StoredSessionData); const SessionData = useSelector(StoredSessionData);
const custselectedtemplate = useSelector(GlobalCustThemeData) const custselectedtemplate = useSelector(GlobalCustThemeData);
console.log(custselectedtemplate, "custselectedtemplate") console.log(custselectedtemplate, 'custselectedtemplate');
const AppId = SessionData?.AppId; const AppId = SessionData?.AppId;
const CompId = SessionData?.CompId; const CompId = SessionData?.CompId;
const BranchId = SessionData?.BranchId; const BranchId = SessionData?.BranchId;
const UserId = SessionData?.UserId; const UserId = SessionData?.UserId;
const initialChecked = (selectedtemplateData?.BookingLayout?.[0] !== 'Combo1' &&
selectedtemplateData?.BookingLayout?.[0] !== 'Combo2')
? !!Scantemplatedata?.Scantemplate
: false;
const ChangeScanLayoutfun = async () => { const ChangeScanLayoutfun = async () => {
let templatedata = { let templatedata = {
BookingLayout: [ BookingLayout: [
'Combo1', 'Combo1',
[ [
{ {
"TemplateOptionsId": 98930, TemplateOptionsId: 98930,
"OptionId": 70, OptionId: 70,
"OptionName": "Navbar" OptionName: 'Navbar',
}, },
{ {
"TemplateOptionsId": 98931, TemplateOptionsId: 98931,
"OptionId": 71, OptionId: 71,
"OptionName": "Billing" OptionName: 'Billing',
} },
], ],
], ],
BookingCombo1: [ BookingCombo1: [
'Combo1Navbar1', 'Combo1Navbar1',
[ [
{ {
"TemplateOptionsId": 98932, TemplateOptionsId: 98932,
"OptionId": 145, OptionId: 145,
"OptionName": "RePrint" OptionName: 'RePrint',
}, },
{ {
"TemplateOptionsId": 98933, TemplateOptionsId: 98933,
"OptionId": 148, OptionId: 148,
"OptionName": "TakeAway" OptionName: 'TakeAway',
}, },
{ {
"TemplateOptionsId": 98934, TemplateOptionsId: 98934,
"OptionId": 150, OptionId: 150,
"OptionName": "ExtraCharge" OptionName: 'ExtraCharge',
}, },
{ {
"TemplateOptionsId": 98935, TemplateOptionsId: 98935,
"OptionId": 146, OptionId: 146,
"OptionName": "QuickAdd" OptionName: 'QuickAdd',
}, },
{ {
"TemplateOptionsId": 98936, TemplateOptionsId: 98936,
"OptionId": 149, OptionId: 149,
"OptionName": "Offer" OptionName: 'Offer',
} },
], ],
], ],
BookingBilling: [ BookingBilling: [
'Billing3', 'Billing3',
[ [
@ -140,28 +131,38 @@ const BSScanTemplate = () => {
], ],
}; };
if (Scantemplatedata?.Scantemplate) { if (Scantemplatedata?.Scantemplate) {
await dispatch(changeScanTemplate({ Scantemplate: false, changetemp: 'Layout', Template: {} })) await dispatch(
changeScanTemplate({
Scantemplate: false,
changetemp: 'Layout',
Template: {},
})
);
} else { } else {
await dispatch(changeScanTemplate({ Scantemplate: true, changetemp: 'Combo', Template: templatedata })) await dispatch(
changeScanTemplate({
Scantemplate: true,
changetemp: 'Combo',
Template: templatedata,
})
);
} }
};
}
const fetchData = async (Plan) => { const fetchData = async (Plan) => {
const templateResponse = await dispatch(getTemplate({ CompId, BranchId, AppId })).unwrap(); const templateResponse = await dispatch(
getTemplate({ CompId, BranchId, AppId })
).unwrap();
if ( if (
!templateResponse?.data?.data || !templateResponse?.data?.data ||
templateResponse.data.data.length === 0 templateResponse.data.data.length === 0
) { ) {
// If no template data, call Professional('Advance') // If no template data, call Professional('Advance')
Professional(Plan); Professional(Plan);
} } else {
else {
} }
// Check if template data is empty or not // Check if template data is empty or not
}; };
const ChangeCardLayoutfun = async () => { const ChangeCardLayoutfun = async () => {
@ -339,10 +340,23 @@ const BSScanTemplate = () => {
], ],
}; };
if (custselectedtemplate == "Combo1" || custselectedtemplate == "Combo1") { if (custselectedtemplate == 'Combo1' || custselectedtemplate == 'Combo1') {
await dispatch(changeScanTemplate({ Scantemplate: false, changetemp: 'Layout', Template: tempdata, OldTemp: custselectedtemplate })) await dispatch(
changeScanTemplate({
Scantemplate: false,
changetemp: 'Layout',
Template: tempdata,
OldTemp: custselectedtemplate,
})
);
} else { } else {
await dispatch(changeScanTemplate({ Scantemplate: false, changetemp: 'Layout', Template: {} })) await dispatch(
changeScanTemplate({
Scantemplate: false,
changetemp: 'Layout',
Template: {},
})
);
const Advance = PricingAppPricingName?.some( const Advance = PricingAppPricingName?.some(
(item) => item.PricingName === 'Premium' (item) => item.PricingName === 'Premium'
); );
@ -350,7 +364,8 @@ const BSScanTemplate = () => {
(item) => item.PricingName === 'Pro' (item) => item.PricingName === 'Pro'
); );
const hasCustomizedTemplate = FeatureAddonData?.FeatureDtls?.some( const hasCustomizedTemplate = FeatureAddonData?.FeatureDtls?.some(
(item) => item?.FeatureAddonName?.toLowerCase() === 'customized template' (item) =>
item?.FeatureAddonName?.toLowerCase() === 'customized template'
); );
if (PricingAppPricingName?.length > 0) { if (PricingAppPricingName?.length > 0) {
if (Advance) { if (Advance) {
@ -361,7 +376,7 @@ const BSScanTemplate = () => {
fetchData(); fetchData();
} else { } else {
Professional('Pro'); Professional('Pro');
setIsmounted(false) setIsmounted(false);
} }
} else { } else {
if (hasCustomizedTemplate) { if (hasCustomizedTemplate) {
@ -373,8 +388,7 @@ const BSScanTemplate = () => {
} }
} }
} }
};
}
const Professional = async (data) => { const Professional = async (data) => {
const tempData = { const tempData = {
SelectedApplication: AppId, SelectedApplication: AppId,
@ -384,57 +398,22 @@ const BSScanTemplate = () => {
dispatch(changetemplateData(tempData)); dispatch(changetemplateData(tempData));
}; };
const handleToggle = useCallback(() => {
const handleToggle = (checked) => {
// Call the appropriate function // Call the appropriate function
if (selectedtemplateData?.BookingLayout?.[0] === 'Combo1' || if (
selectedtemplateData?.BookingLayout?.[0] === 'Combo2') { selectedtemplateData?.BookingLayout?.[0] === 'Combo1' ||
selectedtemplateData?.BookingLayout?.[0] === 'Combo2'
) {
ChangeCardLayoutfun(); ChangeCardLayoutfun();
} else { } else {
ChangeScanLayoutfun(); ChangeScanLayoutfun();
} }
}; }, [selectedtemplateData]);
const toggleLabe = Scantemplatedata?.Scantemplate ? "Scan" : "Card"; const toggleLabe = useMemo(() => {
return Scantemplatedata?.Scantemplate ? 'Scan' : 'Card';
}, [Scantemplatedata]);
console.log(Scantemplatedata?.Scantemplate, 'Scantemplatedata', toggleLabe);
return ( return (
// <>
// {(selectedtemplateData?.BookingLayout?.[0] == 'Combo1' ||
// selectedtemplateData?.BookingLayout?.[0] == 'Combo2') ?
// <div className="BSBilling7-icon-flex" onClick={() => ChangeCardLayoutfun()}>
// <FiLayout
// style={{ height: "25px", width: "25px", color: !Scantemplatedata?.Scantemplate ? "#52c41a" : "#1292ee" }}
// // className={
// // !Scantemplatedata?.Scantemplate
// // ? 'BSBillingNav-icon-table pulse-element'
// // : 'BSBillingNav-icon'
// // }
// />
// </div>
// :
// <div className="BSBilling7-icon-flex" onClick={() => ChangeScanLayoutfun()}>
// <BsUpcScan
// style={{ height: "25px", width: "25px", color: Scantemplatedata?.Scantemplate ? "#52c41a" : "#1292ee" }}
// // className={
// // Scantemplatedata?.Scantemplate
// // ? 'BSBillingNav-icon-table pulse-element'
// // : 'BSBillingNav-icon'
// // }
// />
// </div>
// }
// {/* <Switch
// size="small"
// checkedChildren="Scan"
// unCheckedChildren="Card"
// /> */}
// </>
<> <>
<div className="BSBilling7-icon-flex swicthCardScanToggle"> <div className="BSBilling7-icon-flex swicthCardScanToggle">
<Switch <Switch
@ -446,7 +425,6 @@ const BSScanTemplate = () => {
/> />
</div> </div>
</> </>
) );
};
} export default BSScanTemplate;
export default BSScanTemplate

View File

@ -160,6 +160,7 @@ const BSLayout3 = () => {
const BookingCard = BSLayout3Data?.BookingCard; const BookingCard = BSLayout3Data?.BookingCard;
const BookingBilling = BSLayout3Data?.BookingBilling?.[0]; const BookingBilling = BSLayout3Data?.BookingBilling?.[0];
const animations = ['example1', 'example2', 'example3']; const animations = ['example1', 'example2', 'example3'];
const [count, setcount] = useState(0);
let ss = animations[count]; let ss = animations[count];
const DineInAccess = useMemo(() => { const DineInAccess = useMemo(() => {
return SettingDataSelector?.[0]?.SettingDtlDetails.filter( return SettingDataSelector?.[0]?.SettingDtlDetails.filter(

View File

@ -124,6 +124,7 @@ const BSLayout5 = () => {
const OrderStatus = useSelector(GlobalOrderStatus); const OrderStatus = useSelector(GlobalOrderStatus);
const SessionData = useSelector(StoredSessionData); const SessionData = useSelector(StoredSessionData);
const badgeCount = useSelector(globalKioskSalesCount); const badgeCount = useSelector(globalKioskSalesCount);
const [count, setcount] = useState(0);
const BookingStatus = useSelector(GlobalBookingStatus); const BookingStatus = useSelector(GlobalBookingStatus);
const tableData = useSelector(GlobalOrderCardDetails); const tableData = useSelector(GlobalOrderCardDetails);
const CheckBookingStatus = const CheckBookingStatus =

View File

@ -1,4 +1,11 @@
import React, { useEffect, useState, useCallback, lazy, Suspense } from 'react'; import React, {
useEffect,
useState,
useCallback,
lazy,
Suspense,
useMemo,
} from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import moment from 'moment'; import moment from 'moment';
import { Tooltip, Badge, Popconfirm } from 'antd'; import { Tooltip, Badge, Popconfirm } from 'antd';
@ -120,6 +127,7 @@ import PlanExpireNotification from '../PlanExpireNotification.jsx';
const subDirectory = import.meta.env.BASE_URL; const subDirectory = import.meta.env.BASE_URL;
const commonDirectory = import.meta.env.COMMON_BASE_URL; const commonDirectory = import.meta.env.COMMON_BASE_URL;
const MemoGiBasket = React.memo(GiBasket);
export default function BSCombo1() { export default function BSCombo1() {
const dispatch = useDispatch(); const dispatch = useDispatch();
@ -140,6 +148,7 @@ export default function BSCombo1() {
const AppExpDate = useSelector(GlobalAppExpDateData); const AppExpDate = useSelector(GlobalAppExpDateData);
const PricingAppPricingName = useSelector(GlobalPricingAppPricingName); const PricingAppPricingName = useSelector(GlobalPricingAppPricingName);
const appPreferences = useSelector(ApplicationPreferences); const appPreferences = useSelector(ApplicationPreferences);
const [isAltPressed, setIsAltPressed] = useState(false);
const commonModulePreference = appPreferences?.find( const commonModulePreference = appPreferences?.find(
(preference) => preference?.PreferredCatName === 'Common Module' (preference) => preference?.PreferredCatName === 'Common Module'
)?.PreferenceCatDetails; )?.PreferenceCatDetails;
@ -159,6 +168,7 @@ export default function BSCombo1() {
// const [AppExpDate, setAppExpDate] = useState(0); // const [AppExpDate, setAppExpDate] = useState(0);
const [Kioskopen, setKioskopen] = useState(false); const [Kioskopen, setKioskopen] = useState(false);
const [count, setcount] = useState(0);
const [messageType, setMessageType] = useState(null); const [messageType, setMessageType] = useState(null);
const [messageData, setMessageData] = useState(null); const [messageData, setMessageData] = useState(null);
const [multiple, setMultiple] = useState(false); const [multiple, setMultiple] = useState(false);
@ -332,6 +342,24 @@ export default function BSCombo1() {
await dispatch(changeCombosearch(false)); await dispatch(changeCombosearch(false));
} }
}; };
const fill = useMemo(
() => (Comboglobal ? '#52C41A' : '#1292EE'),
[Comboglobal]
);
const enableBackground = useMemo(
() => (Comboglobal ? '#1292EE' : '#52C41A'),
[Comboglobal]
);
const basketStyle = useMemo(
() => ({
pointerEvents: OrderType === 'Failed' ? 'none' : 'auto',
cursor: 'pointer',
}),
[OrderType]
);
const handleClickMemo = useCallback(() => {
handleClick();
}, []);
return ( return (
<Suspense fallback={<div>Loading...</div>}> <Suspense fallback={<div>Loading...</div>}>
<> <>
@ -351,7 +379,7 @@ export default function BSCombo1() {
{/* Combo Container */} {/* Combo Container */}
<div className="overall-bscombo-container"> <div className="overall-bscombo-container">
<div className="SearchSubnavbar-combo"> <div className="SearchSubnavbar-combo">
<BSC1NavBar data={BSComboData} SessionData={SessionData} /> <BSC1NavBar />
<div className="comboNavbarSubMain"> <div className="comboNavbarSubMain">
{/* Multiple search */} {/* Multiple search */}
<Tooltip title={'Multiple Search'}> <Tooltip title={'Multiple Search'}>
@ -538,17 +566,11 @@ export default function BSCombo1() {
title="Combo Product" title="Combo Product"
isMobile={isMobile} isMobile={isMobile}
> >
<GiBasket <MemoGiBasket
fill={Comboglobal === true ? '#52C41A' : '#1292EE'} fill={fill}
enableBackground={ enableBackground={enableBackground}
Comboglobal === true ? '#1292EE' : '#52C41A' onClick={handleClickMemo}
} style={basketStyle}
onClick={handleClick}
style={{
pointerEvents:
OrderType === 'Failed' ? 'none' : 'auto',
cursor: 'pointer',
}}
/> />
</TooltipWrapper> </TooltipWrapper>
</div> </div>

View File

@ -105,6 +105,8 @@ const BranchName = ({ IconStatus }) => {
textOverflow: 'ellipsis', textOverflow: 'ellipsis',
whiteSpace: 'nowrap', whiteSpace: 'nowrap',
maxWidth: '100%', maxWidth: '100%',
fontFamily: 'Poppins',
fontWeight: '500',
}} }}
> >
{branchName} {branchName}

View File

@ -24,6 +24,12 @@ const commonUrl = import.meta.env.ENV_COMMON_BASE_URL;
const subDirectory = import.meta.env.BASE_URL; const subDirectory = import.meta.env.BASE_URL;
const ProtectedRoutes = ({ routesConfig }) => { const ProtectedRoutes = ({ routesConfig }) => {
useTemplate(
getSession('CompId'),
getSession('BranchId'),
getSession('AppId')
);
const navigate = useNavigate(); const navigate = useNavigate();
const dispatch = useDispatch(); const dispatch = useDispatch();
const UserType = getSession('UserType'); const UserType = getSession('UserType');

View File

@ -3,6 +3,7 @@ import { useDispatch } from 'react-redux';
import { getTemplate } from '../Features/ThemeChange/ThemeChange.js'; import { getTemplate } from '../Features/ThemeChange/ThemeChange.js';
export const useTemplate = (CompId, BranchId, AppId) => { export const useTemplate = (CompId, BranchId, AppId) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
useEffect(() => { useEffect(() => {
@ -14,5 +15,5 @@ export const useTemplate = (CompId, BranchId, AppId) => {
} }
}; };
fetchTemplate(); fetchTemplate();
}, [dispatch, CompId, BranchId, AppId]); }, [ CompId, BranchId, AppId]);
}; };