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,
};
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) => (