import { useState, useEffect, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { useNavigate, useLocation } from 'react-router-dom'; import { Checkbox, Form } from 'antd'; import { ArrowRightOutlined } from '@ant-design/icons'; import { DropDowns } from '../../Components/Forms/DropDown.jsx'; import Buttons from '../../Components/Forms/Buttons.jsx'; import { Messages } from '../../Components/Notifications/Messages'; import FormHeader from '../PageComponents/FormHeader.jsx'; import { changeBreadCrumb } from '../../Features/AppPage/CenterPage.js'; import Search from '../../Components/Forms/Search.jsx'; import { getSession } from '../../Services/Others'; import { Tables } from '../../Components/Tables/Table'; import { getEmpListBasedOnCmpIdBrIDEdit, getEmpListBasedOnCmpIdBrID, getMasterOptionList, postEmpAccess, putEmpAccess, } from '../../Features/EmpAccess/EmpAccess.js'; import '../../Styles/EmpAccess/EmpAccess.scss'; import { FeatureAddon } from '../../Features/BookingScreen/BookingData/BookingData.js'; import { ApplicationPreferences, PricingAppPricingName, } from '../../Features/BrachLogin/BranchLogin.js'; import { gettableData } from '../../Features/PreferenceMaster/PreferenceMaster.js'; import { useSelector } from 'react-redux'; const subDirectory = import.meta.env.BASE_URL; const EmpAccessForm = ({ formType }) => { const formRef = useRef(null); const dispatch = useDispatch(); const navigate = useNavigate(); const location = useLocation(); const state = location?.state; const editstate = state?.editstate; const PricingName = state?.PricingName; const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [SelectedUserData, setSelectedUserData] = useState(); const [userDropDown, setuserDropDown] = useState([]); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [cmpId, setcmpId] = useState(getSession('CompId')); const [brId, setBrId] = useState(getSession('BranchId')); const [AppId, setAppId] = useState(getSession('AppId')); const UserId = getSession('UserId'); const UserType = getSession('UserType'); const [TableData, setTableData] = useState([]); const [FeatureAddonData, setFeatureAddonData] = useState([]); const [searchedText, setSearchedText] = useState(''); const [DineinData, setDineinData] = useState(false); const [EstimateData, setEstimateData] = useState(false); const appPreferences = useSelector(ApplicationPreferences); const bookingTypePreference = appPreferences?.find( (preference) => preference?.PreferredCatName === 'Booking Type' )?.PreferenceCatDetails; const dinePreference = bookingTypePreference?.find( (type) => type?.PreferredSubCatName?.toLowerCase() === 'dine in' && type?.PreferredStatus === 'Y' ); const AppType = getSession('AppType'); const validationMaster = [ 'Kiosk Setup', 'Kiosk Sales', 'Product Catalogue', 'Print Setup', 'Sales Setup', ]; const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, { name: 'Employee Access', link: `${subDirectory}setting/employee-access`, }, { name: editstate ? 'Edit' : 'New', link: null, }, ]; useEffect(() => { const fetchData = async () => { try { let Dineindata; let Estimatedata; if (AppId && cmpId && brId) { let DineinData = { AppId: AppId, CompId: cmpId, BranchId: brId, UserId: UserId, }; const response = await dispatch(gettableData(DineinData)).unwrap(); if (response?.data?.statusCode === 1) { const SettingValueData = response?.data?.data ?.find((e) => e.AppId === AppId) ?.SettingDtlDetails?.some( (e) => e.SettingIdName === 'DineIn' && e.SettingValue === 'Y' ); if (SettingValueData) { setDineinData(true); Dineindata = true; } else { setDineinData(false); Dineindata = false; } const EstimateValueData = response?.data?.data ?.find((e) => e.AppId === AppId) ?.SettingDtlDetails?.some( (e) => e.SettingIdName === 'Estimation' && e.SettingValue === 'Y' ); if (EstimateValueData) { setEstimateData(true); Estimatedata = true; } else { setEstimateData(false); Estimatedata = false; } } else { setDineinData(false); setEstimateData(false); } } // Ensure this is awaited if it returns a promise if (UserType !== 'Super Admin' && UserType !== 'Super Admin User') { let featureAddon = await dispatch( FeatureAddon({ AppId: AppId, UserId: UserId }) ).unwrap(); if (featureAddon?.data?.statusCode === 1) { var DataUpdate = featureAddon?.data?.data?.[0]?.FeatAddonHdr?.[0]?.FeatureDtls?.flatMap( (e) => { if ( e?.FeatureAddonName === 'Customized Template' || PricingName ) { return ['Sales Setup']; // Change name to "Sales Setup" if it matches } if (e?.FeatureAddonName === 'Kiosk Sales') { return ['Kiosk Sales', 'Kiosk Setup']; // Return both names in an array } return e?.FeatureAddonName ? [e?.FeatureAddonName] : []; // Return the original name in an array } ); setFeatureAddonData(DataUpdate); } else { setFeatureAddonData([]); } } // Ensure this is awaited if it returns a promise dispatch(changeBreadCrumb({ items: items })); if (formType === 'edit' && editstate) { editFetch(); formRef.current?.setFieldsValue({ EmpId: editstate?.EmpId }); setSelectedUserData(editstate?.EmpId); console.log(editstate?.EmpAccessDetails, 'DineinDataDineinData'); let FillterData = editstate?.EmpAccessDetails?.filter((e) => { if ( (e?.ConfigName === 'KOT' && !Dineindata) || (e?.ConfigName === 'Dine In' && !Dineindata) || (e?.ConfigName === 'Estimate' && !Estimatedata) ) { return false; } else if (!validationMaster?.includes(e?.ConfigName)) { return e; } else if ( (PricingName && e?.ConfigName !== 'Kiosk Setup' && e?.ConfigName !== 'Kiosk Sales') || DataUpdate?.includes(e?.ConfigName) ) { return e; } return false; }); let AfterFilterData = []; if (AppType?.toLowerCase() === 'wholesale') { const validConfigNames = [ 'Whole Sales', 'Product', 'Seller', 'Employee', 'Shift', 'Employee Access', 'Customer', 'Common Master', 'Config Type', 'Product Entry', 'Employee Screen Rights', 'Ledger', 'Preorder', 'Abstract', 'Sales', 'Payment Received', 'Seller Payment', 'Android App', 'Sales Report', 'Purchase Report', 'Purchase Payment', 'Sales Payment', ]; AfterFilterData = FillterData?.filter((item) => validConfigNames?.includes(item.ConfigName) ) || []; } else { const validConfigNames = ['Whole Sales', 'Product Entry']; !dinePreference && validConfigNames.push('Dine In', 'KOT'); AfterFilterData = FillterData?.filter( (item) => !validConfigNames?.includes(item.ConfigName) ) || []; } setTableData(AfterFilterData); let FilterSelectitems = AfterFilterData?.filter( (item) => 'Y' === item.AddAccess || 'Y' === item.UpdateAccess || 'Y' === item.DeleteAccess || 'Y' === item.ReadAccess ); let tempSelectList = FilterSelectitems.map((a) => a.MenuId); setSelectedRowKeys(tempSelectList); formRef.current?.setFieldsValue(editstate); } else { GetUserData(); } // else { // navigate(`${subDirectory}setting/employee-access/`); // } } catch (err) { console.log(err, 'err'); } }; fetchData(); // Call the async function // GetUserData(); // Optional: Cleanup function to avoid memory leaks return () => { // You can perform any cleanup tasks if needed }; }, []); // Ensure dependencies are set if required async function editFetch() { // getEmpListBasedOnCmpIdBrIDEdit let data = { CompId: cmpId, BranchId: brId, // 'AppId':AppId }; const gettingEmpData = await dispatch( getEmpListBasedOnCmpIdBrIDEdit(data) ).unwrap(); if (gettingEmpData?.data?.statusCode === 1) { setuserDropDown(gettingEmpData?.data?.data); } } async function GetUserData() { let data = { CompId: cmpId, BranchId: brId, AppId: AppId, }; const gettingEmpData = await dispatch( getEmpListBasedOnCmpIdBrID(data) ).unwrap(); if (gettingEmpData?.data?.statusCode === 1) { setuserDropDown(gettingEmpData?.data?.data); } const MsrtList = await dispatch(getMasterOptionList()).unwrap(); if (MsrtList?.data?.statusCode === 1) { let MsrtListData; const validConfigNames = AppType?.toLowerCase() === 'wholesale' ? [ 'Whole Sales', 'Product', 'Seller', 'Employee', 'Shift', 'Employee Access', 'Customer', 'Common Master', 'Config Type', 'Product Entry', 'Employee Screen Rights', 'Ledger', 'Preorder', 'Abstract', 'Sales', 'Payment Received', 'Seller Payment', 'Android App', 'Sales Report', 'Purchase Report', 'Purchase Payment', 'Sales Payment', ] : ['Whole Sales', 'Product Entry']; AppType?.toLowerCase() !== 'wholesale' && !dinePreference && validConfigNames.push('Dine In', 'KOT'); MsrtListData = MsrtList?.data?.data?.filter((item) => { if (AppType?.toLowerCase() === 'wholesale') { return validConfigNames?.includes(item.ConfigName); } else { return !validConfigNames?.includes(item.ConfigName); } }); let tempListData = []; let i = 0; for (i = 0; i < MsrtListData?.length; i++) { let configname = MsrtListData[i]?.ConfigName; if ( (configname === 'KOT' && !DineinData) || (configname === 'Dine In' && !DineinData) || (configname === 'Estimate' && !EstimateData) ) { continue; } if (validationMaster?.includes(configname)) { if ( (PricingName && configname !== 'Kiosk Setup' && configname !== 'Kiosk Sales') || FeatureAddonData?.includes(configname) ) { tempListData.push({ key: MsrtListData[i]?.ConfigId, MenuId: MsrtListData[i]?.ConfigId, ConfigName: MsrtListData[i]?.ConfigName, AddAccess: 'N', UpdateAccess: 'N', ReadAccess: 'N', DeleteAccess: 'N', }); } } else { tempListData.push({ key: MsrtListData[i]?.ConfigId, MenuId: MsrtListData[i]?.ConfigId, ConfigName: MsrtListData[i]?.ConfigName, AddAccess: 'N', UpdateAccess: 'N', ReadAccess: 'N', DeleteAccess: 'N', }); } } setTableData(tempListData); setSelectedRowKeys([]); } } const onFinish = async (values) => { let postData = values; postData['CompId'] = cmpId; postData['BranchId'] = brId; postData['AppId'] = AppId; postData['EmpId'] = SelectedUserData; postData['EmpAccessDetails'] = TableData; let response = {}; if (formType === 'add') { postData['CreatedBy'] = getSession('UserId'); response = await dispatch(postEmpAccess(postData)).unwrap(); } else if (formType === 'edit') { if (editstate) { postData['UpdatedBy'] = getSession('UserId'); } response = await dispatch(putEmpAccess(postData)).unwrap(); } if (response?.data?.statusCode == 1) { navigate(`${subDirectory}setting/employee-access/`, { state: { Notiffy: { messageType: 'success', messageData: response?.data?.response, }, }, }); } else { setMessageType('error'); setMessageData(response?.data?.response); } }; const UserDropDownChange = async (e) => { formRef.current?.setFieldsValue({ EmpId: e }); setSelectedUserData(e); GetUserData(); }; const columns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '80px', render: (text, object, index) => ( {index + 1} ), }, { title: 'Option Name', dataIndex: 'ConfigName', key: 'ConfigName', width: '180px', render: (text, row) => ( {text} ), filteredValue: [searchedText], onFilter: (value, record) => { console.log(value, record, '(value, record'); return ( String(record.ConfigName) ?.toLowerCase() ?.includes(value?.toLowerCase()) || String(record.ConfigName) ?.toLowerCase() ?.includes(value?.toLowerCase()) || String(record.ConfigName) ?.toLowerCase() ?.includes(value?.toLowerCase()) ); }, }, { title: 'View', dataIndex: 'ReadAccess', key: 'ReadAccess', render: (text, row) => ( onChangeSingleCheck('ReadAccess', row, text === 'Y' ? 'N' : 'Y') } /> ), }, { title: 'Add', dataIndex: 'AddAccess', key: 'AddAccess', render: (text, row) => ( onChangeSingleCheck('AddAccess', row, text === 'Y' ? 'N' : 'Y') } /> ), }, { title: 'Edit', dataIndex: 'UpdateAccess', key: 'UpdateAccess', render: (text, row) => ( onChangeSingleCheck('UpdateAccess', row, text === 'Y' ? 'N' : 'Y') } /> ), }, { title: 'Delete', dataIndex: 'DeleteAccess', key: 'DeleteAccess', render: (text, row) => ( onChangeSingleCheck('DeleteAccess', row, text === 'Y' ? 'N' : 'Y') } /> ), }, ]; const onSelectChange = (newSelectedRowKeys) => { var oldSelectedRowKeys = selectedRowKeys; if (oldSelectedRowKeys?.length === 0 && newSelectedRowKeys?.length === 1) { var updatedselectList = TableData?.map((item) => { if (parseInt(item.MenuId) === parseInt(newSelectedRowKeys[0])) { return { ...item, key: item?.key, MenuId: item?.MenuId, ConfigName: item?.ConfigName, AddAccess: 'Y', UpdateAccess: 'Y', ReadAccess: 'Y', DeleteAccess: 'Y', }; } return item; }); } else if ( oldSelectedRowKeys?.length === 0 && newSelectedRowKeys?.length > 1 ) { var updatedselectList = TableData?.map((item) => { // if (parseInt(item.MenuId) === parseInt(newSelectedRowKeys[0])) { return { ...item, key: item?.key, MenuId: item?.MenuId, ConfigName: item?.ConfigName, AddAccess: 'Y', UpdateAccess: 'Y', ReadAccess: 'Y', DeleteAccess: 'Y', }; }); } else if (newSelectedRowKeys?.length === 0) { var updatedselectList = TableData?.map((item) => { return { ...item, key: item?.key, MenuId: item?.MenuId, ConfigName: item?.ConfigName, AddAccess: 'N', UpdateAccess: 'N', ReadAccess: 'N', DeleteAccess: 'N', }; }); } else if ( oldSelectedRowKeys?.length > 0 && newSelectedRowKeys?.length >= 1 ) { if (oldSelectedRowKeys?.length < newSelectedRowKeys?.length) { let newVal = newSelectedRowKeys?.filter( (id) => !oldSelectedRowKeys?.includes(id) ); var updatedselectList = TableData?.map((item) => { if (newVal?.includes(item?.MenuId)) { return { ...item, key: item?.key, MenuId: item?.MenuId, ConfigName: item?.ConfigName, AddAccess: 'Y', UpdateAccess: 'Y', ReadAccess: 'Y', DeleteAccess: 'Y', }; } return item; }); } else if (oldSelectedRowKeys?.length > newSelectedRowKeys?.length) { let newVal = oldSelectedRowKeys?.filter( (id) => !newSelectedRowKeys?.includes(id) ); var updatedselectList = TableData?.map((item) => { if (newVal?.includes(item?.MenuId)) { return { ...item, key: item?.key, MenuId: item?.MenuId, ConfigName: item?.ConfigName, AddAccess: 'N', UpdateAccess: 'N', ReadAccess: 'N', DeleteAccess: 'N', }; } return item; }); } } setSelectedRowKeys(newSelectedRowKeys); setTableData(updatedselectList); }; const rowSelection = { selectedRowKeys, onChange: onSelectChange, }; const onChangeSingleCheck = (mode, e, updateData) => { let updatedItemList = TableData?.map((item) => { if (parseInt(item.MenuId) === parseInt(e?.MenuId)) { let updateObj = { ...item, [mode]: updateData }; let updatedItem = { ...item, [mode]: updateData }; if (mode === 'ReadAccess' && updateData === 'N') { updatedItem = { ...updatedItem, AddAccess: 'N', UpdateAccess: 'N', DeleteAccess: 'N', }; } const isRowSelected = [ 'AddAccess', 'UpdateAccess', 'DeleteAccess', 'ReadAccess', ].some((key) => updatedItem[key] === 'Y'); if (isRowSelected) { if (!selectedRowKeys?.includes(e.MenuId)) { setSelectedRowKeys([...selectedRowKeys, e.MenuId]); } } else { setSelectedRowKeys(selectedRowKeys.filter((key) => key !== e.MenuId)); } return updatedItem; } return item; }); // update the state setTableData(updatedItemList); }; const onSearch = (value) => { setSearchedText(value); }; const onSearchChange = (e) => { setSearchedText(e?.target?.value); }; return (
({ value: option.UniqueId, label: option.EmpFirstName + ' ' + (option.EmpLastName ? option.EmpLastName : ''), }))} label={} id="UserId" field="UserId" fieldState={true} fieldApi={true} className="field-DropDown-Emp" onChangeFunction={(e) => UserDropDownChange(e)} isOnchanges={formType == 'edit' ? true : false} valueData={SelectedUserData} disabled={formType == 'edit' ? true : false} />
{' '}
} // handleSubmit={handleSubmit} />
); }; export default EmpAccessForm;