Android_Retail/src/Pages/BarcodeSetup/BarcodeTemplateSetup.jsx

1828 lines
62 KiB
React
Raw Normal View History

2026-01-27 18:27:29 +05:30
import { useCallback, useEffect, useRef, useState } from 'react';
import { useDispatch } from 'react-redux';
import {
Form,
Checkbox,
Flex,
Radio,
Row,
Space,
Segmented,
Empty,
Button,
Tooltip,
} from 'antd';
import { RiBarcodeFill } from 'react-icons/ri';
import { BsQrCode } from 'react-icons/bs';
import {
ArrowRightOutlined,
DeleteFilled,
EditFilled,
LeftOutlined,
RightOutlined,
} from '@ant-design/icons';
import {
CgAlignTop,
CgAlignRight,
CgAlignLeft,
CgAlignCenter,
CgAlignBottom,
} from 'react-icons/cg';
import { DropDowns } from '../../Components/Forms/DropDown';
import { Messages } from '../../Components/Notifications/Messages';
import { getSession } from '../../Services/Others';
import {
changeBreadCrumb,
getEmpAccess,
} from '../../Features/AppPage/CenterPage';
import { Tables } from '../../Components/Tables/Table';
import { useAuth } from '../../AuthContext';
import Buttons from '../../Components/Forms/Buttons';
import * as globalBarcode from '../../Features/Barcode/Barcode';
import './BarcodeTemplateSetup.scss';
import { FaAngleDown, FaAngleUp } from 'react-icons/fa';
import { MdOutlineQrCodeScanner } from 'react-icons/md';
import { IoBarcodeOutline } from 'react-icons/io5';
import { IoQrCodeOutline } from 'react-icons/io5';
import { GiHorizontalFlip, GiVerticalFlip } from 'react-icons/gi';
const subDirectory = import.meta.env.ENV_BASE_URL;
const barCodeImage =
'https://cdn.pixabay.com/photo/2014/04/02/16/19/barcode-306926_1280.png';
const qrCodeImage =
'https://cdn.pixabay.com/photo/2015/03/21/09/34/qr-683354_640.png';
import QrCode from '../../Images/PreviewQrCode.png';
import BarCode from '../../Images/PreviewBarCode.png';
const previewText = 'Barcode Preview';
const mrpText = 'MRP : 450';
const productNameText = 'Product Name';
const mDateText = 'M-Date : 12-12-2002';
const eDateText = 'Exp-Date : 12-12-2004';
const colorText = 'Color : Red';
const sellingPriceText = 'Selling Price : 400';
const barCodePositionText = 'Barcode Position';
const segmentStyle = {
padding: 4,
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
gap: '0.5rem',
};
const items = [
{
name: 'Home',
link: `${subDirectory}app-page/home`,
},
// {
// name: "BarcodeQrSetup",
// link: `${subDirectory}saleslayouts/barcode&qr-selection`,
// },
];
const positionOption = [
{
value: 'L',
label: (
<Flex gap="small" justify="center" align="center" vertical>
<CgAlignLeft
style={{
fontSize: 18,
}}
/>
Left
</Flex>
),
},
{
value: 'R',
label: (
<Flex gap="small" justify="center" align="center" vertical>
<CgAlignRight
style={{
fontSize: 18,
}}
/>
Right
</Flex>
),
},
{
value: 'T',
label: (
<Flex gap="small" justify="center" align="center" vertical>
<CgAlignTop
style={{
fontSize: 18,
}}
/>
Top
</Flex>
),
},
{
value: 'B',
label: (
<Flex gap="small" justify="center" align="center" vertical>
<CgAlignBottom
style={{
fontSize: 18,
}}
/>
Bottom
</Flex>
),
},
{
value: 'C',
label: (
<Flex gap="small" justify="center" align="center" vertical>
<CgAlignCenter
style={{
fontSize: 18,
}}
/>
Center
</Flex>
),
},
];
const BarcodeTemplateSetup = () => {
const formRef = useRef(null);
const CompId = getSession('CompId');
const BranchId = getSession('BranchId');
const AppId = getSession('AppId');
const UserId = getSession('UserId');
const UserType = getSession('UserType');
const { SadminuserAccess } = useAuth();
const SAAccessCommonMaster = SadminuserAccess?.find(
(e) => e?.MenuName === 'Barcode / Qr Setup'
);
// useDispatch
const dispatch = useDispatch();
// useState
const [dropdownValue, setDropdownValue] = useState();
const [coresdata, setCoresdata] = useState([]);
const [filteredCoreData, setFilteredCoreData] = useState([]);
const [value, setValue] = useState();
const [secondValue, setSecondValue] = useState();
const [sizeCheckList, setSizeCheckList] = useState([]);
const [checkedList, setCheckedList] = useState([]);
const [selectedOption, setSelectedOption] = useState('B');
const checkAll =
sizeCheckList?.filter(
(filter) =>
filter.ComponentName !== (selectedOption === 'B' ? 'Qrcode' : 'Barcode')
)?.length === checkedList?.length;
const [selectedSizeCheckedValues, setSelectedSizeCheckedValues] = useState(
[]
);
const [sizeName, setSizeName] = useState(null);
const [message, setMessage] = useState({ Type: null, Message: null });
const [editMode, setEditMode] = useState(false);
const [putMode, setPutMode] = useState(false);
const [editinitialRun, setEditInitialRun] = useState(false);
const [getSizeData, setGetSizeData] = useState([]);
const [empData, setEmpData] = useState();
const [addnewAccess, setaddnewAccess] = useState(true);
const secondValueStyle = {
flexDirection: secondValue === 'R' ? 'row' : 'row-reverse',
};
const valueStyleRow = {
flexDirection: value === 'R' ? 'row' : 'row-reverse',
};
const valueStyleColumn = {
flexDirection: value === 'T' ? 'column' : 'column-reverse',
};
const [showAll, setShowAll] = useState(false);
const displayedData = showAll
? filteredCoreData
: filteredCoreData.slice(0, 6);
const columns = [
{
title: 'Sl.No',
align: 'center',
key: 'sno',
width: '50px',
render: (text, object, index) => (
<a style={{ color: 'black' }}>{index + 1}</a>
),
},
{
title: 'Size',
dataIndex: 'SessionName',
key: 'SessionName',
width: '50px',
align: 'left',
render: (text) => <a style={{ color: 'black' }}>{text}</a>,
},
{
title: 'Options',
dataIndex: 'OptionDetails',
key: 'OptionDetails',
width: '100px',
align: 'left',
render: (OptionDetails) => (
<a style={{ color: 'black' }}>
{OptionDetails?.map((item) => item.OptionName).join(',')}
</a>
),
ellipsis: true,
},
{
title: 'Action',
dataIndex: 'Action',
width: '50px',
key: 'Action',
render: (_, record, index) =>
getSizeData?.length >= 1 ? (
<Space size="middle">
<a>
<EditFilled
style={{ color: '#1292EE' }}
onClick={() =>
UserType === 'Super Admin' ||
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.UpdateAccess === 'Y') ||
(UserType === 'Employee' && empData?.UpdateAccess === 'Y') ||
UserType === 'Admin'
? actionsFormatter(record, index)
: null
}
/>
</a>
<a
onClick={() => {
if (
!editMode &&
(UserType === 'Super Admin' ||
(UserType === 'Super Admin User' &&
SAAccessCommonMaster?.DeleteAccess === 'Y') ||
(UserType === 'Employee' &&
empData?.DeleteAccess === 'Y') ||
UserType === 'Admin')
) {
const filteredData = getSizeData?.filter(
(_, ind) => ind !== index
);
setGetSizeData(filteredData);
const updatedCoresData = [...coresdata]?.filter(
(filter) =>
!filteredData.some(
(some) => some.SessionId === filter.ConfigId
)
);
setFilteredCoreData(updatedCoresData);
} else {
return '';
}
}}
>
<DeleteFilled
style={{
color: '#FF4D4F',
pointerEvents: editMode ? 'none' : 'auto',
}}
/>
</a>
</Space>
) : null,
},
];
// useCallback
const onComplete = useCallback(() => {
setMessage({ Type: null, Message: null });
}, []);
// useEffect
useEffect(() => {
dispatch(changeBreadCrumb({ items: items }));
getBarcodeSessionData();
}, []);
useEffect(() => {
if (UserType === 'Employee') {
fetchApi();
}
}, [UserType]);
useEffect(() => {
let hasAccess = false;
if (UserType === 'Admin' || UserType === 'Super Admin') {
hasAccess = true;
} else if (UserType === 'Employee') {
hasAccess =
empData?.AddAccess === 'Y' ||
SAAccessCommonMaster?.UpdateAccess === 'Y';
} else if (UserType === 'Super Admin User') {
hasAccess =
SAAccessCommonMaster?.AddAccess === 'Y' ||
SAAccessCommonMaster?.UpdateAccess === 'Y';
}
setaddnewAccess(!hasAccess);
}, [empData, SAAccessCommonMaster, UserType]);
const fetchApi = async () => {
let data = {
CompId: CompId,
BranchId: BranchId,
AppId: AppId,
EmpId: UserId,
};
let response = await dispatch(getEmpAccess(data)).unwrap();
let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter(
(item) => item.ConfigName === 'Barcode / Qr Setup'
);
setEmpData(datas?.[0]);
};
useEffect(() => {
if (dropdownValue !== undefined && dropdownValue !== null) {
const name = coresdata?.find(
(find) => find.ConfigId === dropdownValue
)?.ConfigName;
setSizeName(name);
}
}, [dropdownValue]);
useEffect(() => {
if (editMode && editinitialRun) {
const { radioValue, secondRadioValue, arrayValue, secondArrayValue } =
getPositionOptions(true);
if (
sizeName === '50X30 Single' ||
sizeName === '50X25 Single' ||
(sizeName === '100X150' && editinitialRun)
) {
secondArrayValue !== undefined && secondArrayValue?.length > 0
? setSecondValue(secondRadioValue)
: setSecondValue();
arrayValue !== undefined && arrayValue?.length > 0
? setValue(radioValue)
: setValue();
} else {
arrayValue !== undefined && arrayValue?.length > 0
? (setValue(radioValue), setSecondValue())
: (setValue(), setSecondValue());
}
} else if (!editMode) {
const { radioValue, secondRadioValue, arrayValue, secondArrayValue } =
getPositionOptions(true);
if (
sizeName === '50X30 Single' ||
sizeName === '50X25 Single' ||
sizeName === '100X150'
) {
secondArrayValue !== undefined &&
secondArrayValue?.length > 0 &&
setSecondValue(secondRadioValue);
arrayValue !== undefined && arrayValue?.length > 0
? setValue(radioValue)
: setValue();
} else {
arrayValue !== undefined && arrayValue?.length > 0
? (setValue(radioValue), setSecondValue())
: (setValue(), setSecondValue());
}
} else {
setEditInitialRun(true);
}
}, [sizeName, selectedSizeCheckedValues]);
const onChangeFirst = (e) => {
setValue(e?.target?.value);
};
const onChangeSecondValue = (e) => {
setSecondValue(e?.target?.value);
};
const actionsFormatter = async (record) => {
const { SessionId, OptionDetails, Position, PositionString, CodeType } =
record;
setEditMode(true);
const updatedCoresData = [...coresdata]?.filter(
(filter) => filter.ConfigId === SessionId
);
setFilteredCoreData(updatedCoresData);
setSelectedOption(CodeType);
setEditInitialRun(false);
setDropdownValue(SessionId);
formRef?.current?.setFieldsValue({ Cross: SessionId });
const response = await dispatch(
globalBarcode.getBarcodeComponentsBasedOnSessionId(SessionId)
).unwrap();
if (response?.data?.statusCode === 1) {
setSizeCheckList(response?.data?.data);
const checkedData = OptionDetails?.map((item) => item.OptionId);
setSelectedSizeCheckedValues(checkedData);
setCheckedList(checkedData);
setValue(Position !== '' ? Position : undefined);
setSecondValue(PositionString !== '' ? PositionString : undefined);
} else {
setMessage({ Type: 'error', Message: response?.data?.response });
}
};
const CoresOnChange = async (params) => {
setDropdownValue(params);
formRef.current?.setFieldsValue({ Cross: params });
if (params !== undefined && params !== null) {
const response = await dispatch(
globalBarcode.getBarcodeComponentsBasedOnSessionId(params)
).unwrap();
if (response?.data?.statusCode === 1) {
setSizeCheckList(response?.data?.data);
const allCheckboxes = response?.data?.data
.filter(
(item) =>
item.ComponentName !==
(selectedOption === 'B' ? 'Qrcode' : 'Barcode')
)
.map((item) => item.ComponentId);
setSelectedSizeCheckedValues(allCheckboxes);
setCheckedList(allCheckboxes);
const name = coresdata?.find(
(find) => find.ConfigId === params
)?.ConfigName;
if (name === '22X35 3cross' || name === '25X50 2cross') {
setValue('T'); // Default to Top
setSecondValue(undefined);
} else if (name === '100X13 (55MM Printable)') {
setValue('L'); // Default to Left
setSecondValue(undefined);
} else if (name === '100X15 (70MM Printable)') {
setValue('R'); // Default to Right
setSecondValue(undefined);
}
} else {
setMessage({ Type: 'error', Message: response?.data?.response });
}
}
};
const getBarcodeSessionData = async () => {
let getResponse = await dispatch(
globalBarcode.getBarcodeTemplate({
compId: CompId,
appId: AppId,
branchId: BranchId,
})
).unwrap();
if (getResponse?.data?.statusCode === 1) {
if (getResponse?.data?.data?.length > 0) {
const { TemplateDetails } = getResponse?.data?.data?.[0];
setPutMode(true);
setGetSizeData(TemplateDetails);
} else {
setPutMode(false);
setGetSizeData([]);
}
}
let resp = await dispatch(globalBarcode.getBarcodeSessionsIDs()).unwrap();
if (resp?.data?.statusCode === 1) {
setCoresdata(resp?.data?.data);
if (getResponse?.data?.data?.length === 0) {
setFilteredCoreData(resp?.data?.data);
} else {
if (getResponse?.data?.data?.length > 0) {
const { TemplateDetails } = getResponse?.data?.data?.[0];
const filteredData = await resp?.data?.data?.filter(
(filter) =>
!TemplateDetails.some(
(some) => some.SessionId === filter.ConfigId
)
);
setFilteredCoreData(filteredData);
}
}
} else {
setCoresdata([]);
}
};
const onCheckboxChange = (checkedValues) => {
setCheckedList(checkedValues);
setSelectedSizeCheckedValues(checkedValues);
};
const onCheckAllChange = (e) => {
let Data = sizeCheckList
?.filter(
(filter) =>
filter.ComponentName !==
(selectedOption === 'B' ? 'Qrcode' : 'Barcode')
)
.map((item) => item.ComponentId);
setCheckedList(e.target.checked ? Data : []);
setSelectedSizeCheckedValues(e.target.checked ? Data : []);
};
const getPositionOptions = () => {
let result = {
radioValue: '',
secondRadioValue: '',
arrayValue: [],
secondArrayValue: [],
};
const componentMap = Object.fromEntries(
sizeCheckList?.map((item) => [item.ComponentName, item.ComponentId]) || []
);
const checkComponent = (name) =>
selectedSizeCheckedValues.includes(componentMap[name]);
const mrp = checkComponent('MRP');
const color = checkComponent('Color');
const eDate = checkComponent('E Date');
const mDate = checkComponent('M Date');
const sellingPrice = checkComponent('Selling Price');
const productName = checkComponent('Product Name');
const filterByValues = (values) => {
return positionOption?.filter((item) => values.includes(item.value));
};
const CTB = ['C', 'T', 'B'];
const BT = ['B', 'T'];
const LR = ['L', 'R'];
const CT = ['C', 'T'];
const CB = ['C', 'B'];
const C = ['C'];
const T = ['T'];
const L = ['L'];
const R = ['R'];
switch (sizeName) {
case '15X15 6cross':
case '25X25 4cross':
switch (sizeName) {
case '15X15 6cross':
if (mrp && productName) {
result.arrayValue = filterByValues(CTB);
result.secondArrayValue = [];
result.radioValue = value || 'C';
result.secondRadioValue = '';
} else if (mrp) {
result.arrayValue = filterByValues(CB);
result.secondArrayValue = [];
result.radioValue = (value === 'T' ? 'C' : value) || 'C';
result.secondRadioValue = '';
} else if (productName) {
result.arrayValue = filterByValues(CT);
result.secondArrayValue = [];
result.radioValue = (value == 'B' ? 'T' : value) || 'T';
result.secondRadioValue = '';
} else {
result.arrayValue = filterByValues(C);
result.secondArrayValue = [];
result.radioValue = 'C';
result.secondRadioValue = '';
}
break;
case '25X25 4cross':
if ((mrp || productName) && (eDate || mDate)) {
result.arrayValue = filterByValues(CTB);
result.secondArrayValue = [];
result.radioValue = value || 'C';
result.secondRadioValue = '';
} else if (eDate || mDate) {
result.arrayValue = filterByValues(CB);
result.secondArrayValue = [];
result.radioValue = (value === 'T' ? 'C' : value) || 'C';
result.secondRadioValue = '';
} else if (mrp || productName) {
result.arrayValue = filterByValues(CT);
result.secondArrayValue = [];
result.radioValue = (value == 'B' ? 'C' : value) || 'C';
result.secondRadioValue = '';
} else {
result.arrayValue = filterByValues(C);
result.radioValue = 'C';
result.secondArrayValue = [];
result.secondRadioValue = '';
}
break;
}
return result;
case '22X35 3cross':
case '25X50 2cross':
switch (sizeName) {
case '22X35 3cross':
if (mrp) {
result.arrayValue = filterByValues(BT);
result.secondArrayValue = [];
result.radioValue = value || 'T';
result.secondRadioValue = '';
} else {
result.arrayValue = filterByValues(T);
result.secondArrayValue = [];
result.secondRadioValue = '';
result.radioValue = 'T';
}
break;
case '25X50 2cross':
if (mrp || productName) {
result.arrayValue = filterByValues(BT);
result.secondArrayValue = [];
result.radioValue = value || 'T';
result.secondRadioValue = '';
} else {
result.arrayValue = filterByValues(T);
result.secondArrayValue = [];
result.radioValue = 'T';
result.secondRadioValue = '';
}
break;
}
return result;
case '50X30 Single':
case '50X25 Single':
case '100X150':
switch (sizeName) {
case '50X30 Single':
if (mrp && (eDate || mDate || productName)) {
result.arrayValue = filterByValues(BT);
result.secondArrayValue = filterByValues(LR);
result.radioValue = value || 'T';
result.secondRadioValue = secondValue || 'R';
} else if (mrp) {
result.arrayValue = filterByValues(BT);
result.radioValue = value || 'T';
result.secondArrayValue = [];
result.secondRadioValue = '';
} else if (eDate || mDate || productName) {
result.secondArrayValue = filterByValues(LR);
result.secondRadioValue = secondValue || 'R';
result.arrayValue = [];
result.radioValue = '';
} else {
result.arrayValue = filterByValues(T);
result.secondArrayValue = filterByValues(L);
result.radioValue = 'T';
result.secondRadioValue = 'L';
}
break;
case '50X25 Single':
if (mrp && mDate) {
result.arrayValue = filterByValues(BT);
result.secondArrayValue = filterByValues(LR);
result.radioValue = value || 'T';
result.secondRadioValue = secondValue || 'L';
} else if (mrp) {
result.arrayValue = filterByValues(BT);
result.radioValue = value || 'T';
result.secondArrayValue = [];
result.secondRadioValue = '';
} else if (mDate) {
result.secondArrayValue = filterByValues(LR);
result.secondRadioValue = secondValue || 'L';
result.arrayValue = [];
result.radioValue = '';
} else {
result.arrayValue = filterByValues(T);
result.secondArrayValue = filterByValues(L);
result.radioValue = 'T';
result.secondRadioValue = 'L';
}
break;
case '100X150':
if (
mrp &&
(mDate || color || sellingPrice || eDate || productName)
) {
result.arrayValue = filterByValues(BT);
result.secondArrayValue = filterByValues(LR);
result.radioValue = value || 'T';
result.secondRadioValue = secondValue || 'R';
} else if (mrp) {
result.arrayValue = filterByValues(BT);
result.radioValue = value || 'T';
result.secondArrayValue = [];
result.secondRadioValue = '';
} else if (mDate || color || sellingPrice || eDate || productName) {
result.secondArrayValue = filterByValues(LR);
result.secondRadioValue = secondValue || 'R';
result.arrayValue = [];
result.radioValue = '';
} else {
result.arrayValue = filterByValues(T);
result.secondArrayValue = filterByValues(L);
result.radioValue = 'T';
result.secondRadioValue = 'L';
}
break;
}
return result;
case '100X15 (70MM Printable)':
case '100X13 (55MM Printable)':
switch (sizeName) {
case '100X15 (70MM Printable)':
if (mrp || sellingPrice || productName) {
result.arrayValue = filterByValues(LR);
result.secondArrayValue = [];
result.radioValue = value || 'R';
result.secondRadioValue = '';
} else {
result.arrayValue = filterByValues(R);
result.secondArrayValue = [];
result.radioValue = 'R';
result.secondRadioValue = '';
}
break;
case '100X13 (55MM Printable)':
if (sellingPrice || productName) {
result.arrayValue = filterByValues(LR);
result.secondArrayValue = [];
result.radioValue = value || 'L';
result.secondRadioValue = '';
} else {
result.arrayValue = filterByValues(L);
result.secondArrayValue = [];
result.radioValue = 'L';
result.secondRadioValue = '';
}
break;
}
return result;
default:
return [];
}
};
const renderBarcodePositionOptions = () => {
const positionOptions = getPositionOptions();
const { arrayValue = [], secondArrayValue = [] } = positionOptions || {};
const isBarcodeSelected = selectedSizeCheckedValues?.includes(
sizeCheckList?.find((item) => item.ComponentName === 'Barcode')
?.ComponentId
);
const isQrcodeSelected = selectedSizeCheckedValues?.includes(
sizeCheckList?.find((item) => item.ComponentName === 'Qrcode')
?.ComponentId
);
const isSpecialSize = ['50X30 Single', '50X25 Single', '100X150'].includes(
sizeName
);
const hasOptions = arrayValue.length > 0 || secondArrayValue.length > 0;
if (
selectedSizeCheckedValues?.length > 0 &&
(isBarcodeSelected || isQrcodeSelected)
) {
if (isSpecialSize && hasOptions) {
return (
<div className="BQprintSelectCheckBox1">
<div>{barCodePositionText}</div>
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
{arrayValue.length > 0 && (
<Radio.Group
onChange={onChangeFirst}
value={value}
options={arrayValue}
className="widthDisplayJustifyContent"
/>
)}
{arrayValue.length > 0 && secondArrayValue.length > 0 && (
<div style={{ borderRight: '1px solid #000' }}></div>
)}
{secondArrayValue.length > 0 && (
<Radio.Group
onChange={onChangeSecondValue}
value={secondValue}
options={secondArrayValue}
className="widthDisplayJustifyContent"
/>
)}
</div>
</div>
);
} else if (!isSpecialSize && arrayValue.length > 0) {
return (
<div className="BQprintSelectCheckBox1">
<div>{barCodePositionText}</div>
<Radio.Group
onChange={onChangeFirst}
value={value}
options={arrayValue}
className="widthDisplayJustifyContent"
/>
</div>
);
}
}
return null;
};
const onFinish = async () => {
const data = {
CompId: CompId,
BranchId: BranchId,
AppId: AppId,
TemplateDetails: getSizeData,
CreatedBy: UserId,
};
if (putMode) {
if (data?.TemplateDetails?.length === 0) {
setFilteredCoreData([...coresdata]);
}
const response = await dispatch(
globalBarcode.putBarcodeTemplate(data)
).unwrap();
if (response?.data?.statusCode === 1) {
setMessage({ Type: 'success', Message: response?.data?.response });
setEditInitialRun(false);
setPutMode(false);
getBarcodeSessionData();
} else {
setMessage({ Type: 'error', Message: response?.data?.response });
}
} else {
if (getSizeData?.length > 0) {
const response = await dispatch(
globalBarcode.postBarcodeTemplate(data)
).unwrap();
if (response?.data?.statusCode === 1) {
setMessage({ Type: 'success', Message: response?.data?.response });
setEditInitialRun(false);
setPutMode(false);
getBarcodeSessionData();
} else {
setMessage({ Type: 'error', Message: response?.data?.response });
}
} else {
setMessage({ Type: 'error', Message: 'Please Setup a Barcode' });
}
}
};
const handleCancel = (sizeData) => {
setSelectedOption('B');
setEditMode(false);
setEditInitialRun(false);
setSizeCheckList([]);
setSelectedSizeCheckedValues([]);
setCheckedList([]);
setDropdownValue();
formRef?.current?.resetFields();
const updatedCoresData = [...coresdata]?.filter(
(filter) => !sizeData.some((some) => some.SessionId === filter.ConfigId)
);
setFilteredCoreData(updatedCoresData);
};
const handleSizeAddOrSave = () => {
const optionDetails = selectedSizeCheckedValues.map((item) => {
const { ComponentName } = sizeCheckList?.find(
(find) => find.ComponentId === item
);
return {
OptionName: ComponentName,
OptionId: item,
};
});
let updatedSizeData = [];
if (editMode) {
setGetSizeData((prev) => {
updatedSizeData = prev?.map((item) => {
if (item.SessionId === dropdownValue) {
return {
...item,
Position: value !== undefined ? value : '',
PositionString: secondValue !== undefined ? secondValue : '',
OptionDetails: optionDetails,
CodeType: selectedOption,
};
}
return item;
});
return updatedSizeData;
});
const updatedCoresData = [...coresdata]?.filter(
(filter) => filter.ConfigId === dropdownValue
);
setFilteredCoreData(updatedCoresData);
} else {
const { ConfigName } = coresdata?.find(
(find) => find.ConfigId === dropdownValue
);
setGetSizeData((prev) => {
updatedSizeData = [
...prev,
{
SessionId: dropdownValue,
CodeType: selectedOption,
Position: value !== undefined ? value : '',
PositionString: secondValue !== undefined ? secondValue : '',
OptionDetails: optionDetails,
SessionName: ConfigName,
},
];
return updatedSizeData;
});
const updatedCoresData = [...coresdata]?.filter(
(filter) =>
!updatedSizeData.some((some) => some.SessionId === filter.ConfigId)
);
setFilteredCoreData(updatedCoresData);
}
handleCancel(updatedSizeData);
};
const handleImageTag = (w, h = '40px') => {
return (
<img
src={selectedOption === 'B' ? barCodeImage : qrCodeImage}
alt={previewText}
width={w}
height={h}
/>
);
};
const handleChangeOption = (param) => {
setSelectedOption(param);
// Select all checkboxes for the new code type
if (sizeCheckList?.length > 0) {
const allCheckboxes = sizeCheckList
.filter(
(item) =>
item.ComponentName !== (param === 'B' ? 'Qrcode' : 'Barcode')
)
.map((item) => item.ComponentId);
setCheckedList(allCheckboxes);
setSelectedSizeCheckedValues(allCheckboxes);
}
};
const [rightClickCount, setRightClickCount] = useState(0);
const [clickCount, setClickCount] = useState(0);
const leftOnclick = () => {
if (!dropdownValue || filteredCoreData.length === 0) return;
setClickCount(0);
const currentIndex = filteredCoreData.findIndex(
(item) => item.ConfigId === dropdownValue
);
if (currentIndex > 0) {
CoresOnChange(filteredCoreData[currentIndex - 1].ConfigId);
} else {
CoresOnChange(filteredCoreData[filteredCoreData.length - 1].ConfigId);
}
};
const RightOnclick = () => {
if (!dropdownValue || filteredCoreData.length === 0) return;
const newClickCount = clickCount + 1;
setClickCount(newClickCount);
if (newClickCount >= 6 && filteredCoreData.length > 6) {
setShowAll(true);
setClickCount(0);
}
const currentIndex = filteredCoreData.findIndex(
(item) => item.ConfigId === dropdownValue
);
if (currentIndex < filteredCoreData.length - 1) {
CoresOnChange(filteredCoreData[currentIndex + 1].ConfigId);
} else {
CoresOnChange(filteredCoreData[0].ConfigId);
setClickCount(0);
}
};
useEffect(() => {
setClickCount(0);
}, [showAll]);
useEffect(() => {
if (filteredCoreData?.length > 0 && !dropdownValue && !editMode) {
CoresOnChange(filteredCoreData[0].ConfigId);
}
}, [filteredCoreData]);
useEffect(() => {
if (dropdownValue && !editMode) {
const currentSize = coresdata?.find(
(find) => find.ConfigId === dropdownValue
)?.ConfigName;
if (currentSize === '22X35 3cross' || currentSize === '25X50 2cross') {
setSecondValue(undefined);
} else if (currentSize === '100X13 (55MM Printable)') {
setSecondValue(undefined);
} else if (currentSize === '100X15 (70MM Printable)') {
setSecondValue(undefined);
}
}
}, [dropdownValue, coresdata, editMode]);
return (
<div className="BarcodeTemplateSetup-Master">
<Messages
messageType={message.Type}
messageData={message.Message}
onComplete={onComplete}
/>
<div className="defaluBSPSSetupHeadder">
<h1>
<IoBarcodeOutline color="#2563eb" size={27} /> Barcode /{' '}
<IoQrCodeOutline color="#2563eb" size={20} />
Qr Setup
</h1>
<p>Easily configure barcode and QR code settings for your products</p>
</div>
<div className="defaluBSPSSetup-main">
<div className="defaluBSPSSetup">
<p style={{ lineHeight: '1', fontSize: '14px', fontWeight: '500' }}>
{' '}
Scan Setup
</p>
<Form ref={formRef}>
<div
style={{
display: 'flex',
justifyContent: 'flex-start',
gap: '1rem',
}}
>
<div>
<Segmented
size={'large'}
defaultValue="B"
// disabled
value={selectedOption}
onChange={(value) => handleChangeOption(value)}
// options={[
// {
// label: (
// <div style={segmentStyle}>
// <div>Barcode</div>
// <RiBarcodeFill size={25} />
// </div>
// ),
// value: 'B',
// },
// {
// value: 'Q',
// label: (
// <div style={segmentStyle}>
// <div>Qr code</div>
// <BsQrCode size={25} />
// </div>
// ),
// },
// ]}
options={[
{
label: (
<div style={segmentStyle}>
<div
style={{
color:
selectedOption === 'B' ? '#000' : '#afafaf',
}}
>
Barcode
</div>
<RiBarcodeFill
style={{
color:
selectedOption === 'B' ? '#000' : '#afafaf',
}}
size={25}
/>
</div>
),
value: 'B',
},
{
value: 'Q',
label: (
<div style={segmentStyle}>
<div
style={{
color:
selectedOption === 'Q' ? '#000' : '#afafaf',
}}
>
Qr code
</div>
<BsQrCode
style={{
color:
selectedOption === 'Q' ? '#000' : '#afafaf',
}}
size={25}
/>
</div>
),
},
]}
/>
</div>
</div>
<br />
{/* {(filteredCoreData?.length > 0 || editMode) && <div className="BQprintSelect">
<Form.Item
name="Cross"
>
<DropDowns
options={[
...filteredCoreData.map(option => ({
value: option.ConfigId,
label: option.ConfigName,
})),
]}
placeholder="Please Enter Cross"
label={<label className="required">Size</label>}
className='field-DropDown'
isOnchanges={dropdownValue !== undefined ? true : false}
onChangeFunction={(e) => CoresOnChange(e)}
valueData={dropdownValue}
disabled={editMode}
/>
</Form.Item>
</div>} */}
{(filteredCoreData?.length > 0 || editMode) && (
<div className="BQprintSelect">
<Form.Item name="Cross">
<label className="required">Size</label>
<div className="image-select-grid">
{displayedData.map((item) => {
const isSelected = dropdownValue === item.ConfigId;
const isDisabled = editMode;
return (
<div
key={item.ConfigId}
className={`image-option ${isSelected ? 'selected' : ''} ${isDisabled ? 'disabled' : ''}`}
onClick={() => {
if (!isDisabled) {
CoresOnChange(item.ConfigId);
}
}}
>
{' '}
<img
src={selectedOption === 'B' ? BarCode : QrCode}
alt={item.ConfigName}
/>
<span>{item.ConfigName}</span>
</div>
);
})}
</div>
<div
style={{
display: 'flex',
justifyContent: 'center',
cursor: 'pointer',
marginTop: '10px',
color: 'rgb(24, 144, 255)',
alignItems: 'center',
}}
>
{filteredCoreData.length > 4 && (
<div
className="toggle-button"
onClick={() => setShowAll(!showAll)}
>
{showAll ? (
<>
Show Less <FaAngleUp />
</>
) : (
<>
View All <FaAngleDown />
</>
)}
</div>
)}
</div>
</Form.Item>
</div>
)}
{dropdownValue !== undefined && (
<div className="BQprintSelectCheckBox">
<Checkbox onChange={onCheckAllChange} checked={checkAll}>
Select All
</Checkbox>
<Checkbox.Group
onChange={onCheckboxChange}
value={selectedSizeCheckedValues}
>
<Row>
{sizeCheckList
?.filter(
(filter) =>
filter.ComponentName !==
(selectedOption === 'B' ? 'Qrcode' : 'Barcode')
)
?.map((value) => {
let tooltipText = null;
if (value.ComponentName === 'E Date') {
tooltipText = 'This is the expiry date.';
} else if (value.ComponentName === 'M Date') {
tooltipText = 'This is the manufacturing date.';
}
return (
<Checkbox
style={{ padding: '12px' }}
value={value.ComponentId}
key={value.ComponentId}
>
{tooltipText ? (
<Tooltip title={tooltipText}>
<span>{value.ComponentName}</span>
</Tooltip>
) : (
value.ComponentName
)}
</Checkbox>
);
})}
</Row>
</Checkbox.Group>
</div>
)}
{renderBarcodePositionOptions()}
{selectedSizeCheckedValues?.length > 0 &&
dropdownValue !== undefined && (
<div
style={{
width: '100%',
display: 'flex',
justifyContent: 'flex-start',
gap: '1rem',
margin: '0.5rem 0rem',
}}
>
<div className="sizesavebutton" onClick={handleSizeAddOrSave}>
{editMode ? 'Update ' : 'Add'}
</div>
{editMode && (
<div
className="sizeCancelbutton"
onClick={() => handleCancel(getSizeData)}
>
{' '}
Cancel{' '}
</div>
)}
</div>
)}
</Form>
{getSizeData?.length > 0 && (
<div className="component-table">
<Tables
columns={columns}
data={getSizeData}
dataSource={getSizeData}
/>
</div>
)}
{!editMode && (
<div className="buttonStyle">
<Buttons
icon={<ArrowRightOutlined />}
buttonText={'Submit'}
color="901D77"
handleSubmit={onFinish}
disabled={addnewAccess}
/>
</div>
)}
</div>
{/* sree */}
{/* Preview Section */}
<div className="CustomisedBSPS">
<div className="headerPreview">PREVIEW</div>
<Button
icon={<LeftOutlined />}
onClick={() => leftOnclick()}
style={{
position: 'absolute',
top: '40%',
left: '5px',
zIndex: 2,
width: '40px',
height: '40px',
fontWeight: 'bold',
borderRadius: '50%',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
}}
/>
<Button
icon={<RightOutlined />}
onClick={() => RightOnclick()}
style={{
position: 'absolute',
top: '40%',
right: '5px',
zIndex: 2,
width: '40px',
height: '40px',
fontWeight: 'bold',
borderRadius: '50%',
boxShadow: '0 2px 8px rgba(0, 0, 0, 0.15)',
}}
/>
{(() => {
const componentMap = Object.fromEntries(
sizeCheckList?.map((item) => [
item.ComponentName,
item.ComponentId,
]) || []
);
// Define constants using the lookup map
const checkComponent = (name) =>
selectedSizeCheckedValues.includes(componentMap[name]);
const mrp = checkComponent('MRP');
const qrcode = checkComponent('Qrcode');
const barcode = checkComponent('Barcode');
const color = checkComponent('Color');
const eDate = checkComponent('E Date');
const mDate = checkComponent('M Date');
const sellingPrice = checkComponent('Selling Price');
const productName = checkComponent('Product Name');
const barcodeOrQr = selectedOption === 'B';
switch (sizeName) {
case '15X15 6cross':
return (
//"C", "T", "B"
!(productName || barcode || qrcode || mrp) ? (
<Empty />
) : (
<>
<div className="SixCross15x">
{[...Array(6)].map((_, index) => (
<div className="BarQrprint5">
<div
key={index}
className="BarQrprint1details BarQrprint5Details alignCenterFlexDirectionColumn"
>
{(barcode || qrcode) &&
value === 'T' &&
handleImageTag(barcodeOrQr ? 50 : 20, 20)}
{productName && (
<div className="productNameBQ">
{productNameText}
</div>
)}
{(barcode || qrcode) &&
value === 'C' &&
handleImageTag(barcodeOrQr ? 50 : 20, 20)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
{(barcode || qrcode) &&
value === 'B' &&
handleImageTag(barcodeOrQr ? 50 : 20, 20)}
</div>
</div>
))}
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'15mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'15mm'}
</p>
</div>
</>
)
);
case '22X35 3cross':
return (
//"B","T"
!(barcode || qrcode || mrp) ? (
<Empty />
) : (
<>
<div className="Cross32235">
{[...Array(3)].map((_, index) => (
<div className="BarQrprint4" key={index}>
<div
className="BarQrprint1details"
style={{
alignItems: 'center',
flexDirection:
value === 'T' ? 'column' : 'column-reverse',
}}
>
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 100 : 35, 35)}
{(productName || mrp) && (
<div style={{ textAlign: 'center' }}>
{productName && (
<div className="MRPBQ">
{productNameText}
</div>
)}
{mrp && (
<div className="MRPBQ">{mrpText}</div>
)}
</div>
)}
</div>
</div>
))}
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'22mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'35mm'}
</p>
</div>
</>
)
);
case '25X25 4cross':
return (
//"C", "T", "B"
!(
productName ||
mDate ||
eDate ||
barcode ||
qrcode ||
mrp
) ? (
<Empty />
) : (
// 4 Cross idhu 25 * 25 * 25 * 25 = 1 inch
<>
<div className="Cross4Print">
{[...Array(4)].map((_, index) => (
<div key={index} className="BarQrprint3">
<div className="BarQrprint1details alignCenterFlexDirectionColumn">
{(barcode || qrcode) &&
value === 'T' &&
handleImageTag(barcodeOrQr ? 60 : 35, 35)}
{productName && (
<div className="productNameBQ">
{productNameText}
</div>
)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
{(barcode || qrcode) &&
value === 'C' &&
handleImageTag(barcodeOrQr ? 60 : 35, 35)}
{mDate && <div className="MandateBQ"></div>}
{eDate && (
<div className="ExpdateBQ">DD-MM-YYYY</div>
)}
{(barcode || qrcode) &&
value === 'B' &&
handleImageTag(barcodeOrQr ? 60 : 35, 35)}
</div>
</div>
))}
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'25mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'25mm'}
</p>
</div>
</>
)
);
case '25X50 2cross':
return (
//"B","T"
!(productName || barcode || qrcode || mrp) ? (
<Empty />
) : (
<>
<div className="TwoCrosssmain">
{[...Array(2)].map((_, index) => (
<div className="BarQrprint8">
<div
key={index}
className="Barcodeimage"
style={valueStyleColumn}
>
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 140 : 30, 30)}
{productName && (
<div className="productNameBQ">
{productNameText}
</div>
)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
</div>
</div>
))}
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'25mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'50mm'}
</p>
</div>
</>
)
);
case '50X30 Single':
return !(
productName ||
mDate ||
eDate ||
barcode ||
qrcode ||
mrp
) ? (
<Empty />
) : (
<>
<div className="BarQrprint6" style={secondValueStyle}>
<div className="BarQrprint1details flexDirection">
{productName && (
<div className="productNameBQ">{productNameText}</div>
)}
{mDate && <div className="MandateBQ">{mDateText}</div>}
{eDate && <div className="ExpdateBQ">{eDateText}</div>}
</div>
<div
className="Barcodeimage flexDirection"
style={valueStyleColumn}
>
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 70 : 35, 35)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
</div>
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'30mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'50mm'}
</p>
</div>
</>
);
case '50X25 Single':
return !(productName || mDate || barcode || qrcode || mrp) ? (
<Empty />
) : (
<>
<div className="BarQrprint2" style={secondValueStyle}>
<div className="BarQrprint1details flexDirection">
{productName && (
<div className="productNameBQ">{productNameText}</div>
)}
{mDate && <div className="MandateBQ">{mDateText}</div>}
</div>
<div className="Barcodeimage" style={valueStyleColumn}>
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 70 : 35, 35)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
</div>
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'25mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'50mm'}
</p>
</div>
</>
);
case '100X13 (55MM Printable)':
return (
//"C", "T", "B"
!(productName || sellingPrice || barcode || qrcode) ? (
<Empty />
) : (
<>
<div className="BarQrprint9" style={valueStyleRow}>
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 140 : 35, 35)}
<div className="BarQrprint1details1">
{productName && (
<div className="productNameBQ">
{productNameText}
</div>
)}
{sellingPrice && (
<div className="SellingpriceBQ">
{sellingPriceText}
</div>
)}
</div>
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'13mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'100mm'}
</p>
</div>
</>
)
);
case '100X15 (70MM Printable)':
return (
// "L","R"
!(productName || sellingPrice || barcode || qrcode || mrp) ? (
<Empty />
) : (
<>
<div className="BarQrprint1" style={valueStyleRow}>
<div className="BarQrprint1details flexDirection">
{productName && (
<div className="productNameBQ">
{productNameText}
</div>
)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
{sellingPrice && (
<div className="SellingpriceBQ">
{sellingPriceText}
</div>
)}
</div>
<div className="Qrcodeimage">
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 120 : 40)}
</div>
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'15mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'100mm'}
</p>
</div>
</>
)
);
case '100X150':
return !(
productName ||
sellingPrice ||
mDate ||
eDate ||
color ||
barcode ||
qrcode ||
mrp
) ? (
<Empty />
) : (
<>
<div className="BarQrprint7" style={secondValueStyle}>
<div className="BarQrprint1details1">
{productName && (
<div className="productNameBQ">{productNameText}</div>
)}
{sellingPrice && (
<div className="SellingpriceBQ">
{sellingPriceText}
</div>
)}
{mDate && <div className="MandateBQ">{mDateText}</div>}
{eDate && <div className="ExpdateBQ">{eDateText}</div>}
{color && <div className="ColorBQ">{colorText}</div>}
</div>
<div className="Barcodeimage" style={valueStyleColumn}>
{(barcode || qrcode) &&
handleImageTag(barcodeOrQr ? 140 : 35, 35)}
{mrp && <div className="MRPBQ">{mrpText}</div>}
</div>
</div>
<div className="showInfoCross4Print">
<p>
Vertical
<div>
<GiVerticalFlip size={25} />{' '}
</div>
- {'150mm'}
</p>
<p>
Horizontal
<div>
<GiHorizontalFlip size={30} />{' '}
</div>
- {'100mm'}
</p>
</div>
</>
);
default:
return <Empty />;
}
})()}
<p>{sizeCheckList[0]?.SessionName}</p>
</div>
</div>
</div>
);
};
export default BarcodeTemplateSetup;