import 'react-native-gesture-handler'; import * as React from 'react'; import { View, StyleSheet, Platform, Picker, ScrollView, Image, Dimensions } from 'react-native'; import { Dialog, Provider, Card, DataTable, Button, Text, Searchbar, Portal, Avatar, Surface } from 'react-native-paper'; import { IconButton, Colors } from 'react-native-paper'; import { useSelector, useDispatch } from 'react-redux' import RenderHtml from 'react-native-render-html'; import { deleteEmployeeAction, EditEmployeeAction, employeeFilter, getAllEmployeeAction, getAllRolesAction, } from '../../state/actions/employeeAction'; import Header from '../auth/components/header'; import { useToast } from 'react-native-paper-toast'; import isEmpty from '../../state/validations/is-empty'; import EsiSearchDropdown from '../../components/custom/searchable-dropdown'; const filterOptions = [ { value: 'All', label: 'All' }, { value: 'Partner_Employee_Id', label: 'Employee ID' }, { value: 'Partner_Employee_Email_Id', label: 'Partner Employee Email' }, { value: 'Is_Active', label: 'Status' }, ]; const window = Dimensions.get("window"); const screen = Dimensions.get("screen"); const numberOfItemsPerPageList = [5, 10, 20]; function employeeDetails({ navigation }: { navigation: any }) { const [page, setPage] = React.useState(0); const toast = useToast(); // Role restriction const permissions = useSelector(state => state.auth.permissions); const employees = useSelector(state => state.employee.employees.all); let employeeMenu = useSelector(state => state.employee.employeeFilter.select); let employeeSearch = useSelector(state => state.employee.employeeFilter.search); const roles = useSelector(state => state.employee.employeeRoles.roles); const [showDropDown, setShowDropDown] = React.useState(false); const EmailID = useSelector(state => state.auth?.user); const [numberOfItemsPerPage, onItemsPerPageChange] = React.useState(numberOfItemsPerPageList[0]); const from = page * numberOfItemsPerPage; const to = Math.min((page + 1) * numberOfItemsPerPage, employees?.length); const dispatch = useDispatch() React.useEffect(() => { let formData = { Records_Filter: "FILTER", Partner_Details_Id: EmailID.Partner_Details_Id }; dispatch(getAllEmployeeAction(formData, toast)) dispatch(employeeFilter('search', '')); dispatch(employeeFilter('select', 'All')); }, []); React.useEffect(() => { let formData1 = { Filter: "PARTNER_%", }; dispatch(getAllRolesAction(formData1)) }, []); const [oldSearch, setOldSearch] = React.useState(0); const checkEmployeesForTable = () => { if (employeeSearch) { try { if (employeeMenu === "All") { return employees.filter(x => { let keys = ["Partner_Employee_Id", "Partner_Employee_Email_Id", "Is_Active"]; for (let i = 0; i < keys.length; i++) { try { if (x[keys[i]].toLowerCase().includes(employeeSearch.toLowerCase())) { return true; } } catch (error) { if (x[keys[i]].toString().toLowerCase().includes(employeeSearch.toLowerCase())) { return true; } } } }); } else { return employees.filter(x => (x[employeeMenu] ? x[employeeMenu].toLowerCase() : '').includes(employeeSearch.toLowerCase())); } } finally { if (page > 0) { if (oldSearch !== employeeSearch.length) { setOldSearch(employeeSearch.length); setPage(0); } } else if (oldSearch !== employeeSearch.length) { setOldSearch(employeeSearch.length); setPage(0); } } } else { return employees } } const [dimensions, setDimensions] = React.useState(Dimensions.get('window').width); React.useEffect(() => { const subscription = Dimensions.addEventListener( "change", ({ window, screen }) => { setDimensions(window.width); } ); // return () => subscription?.remove(); }); const [order, setOrder] = React.useState('ascending'); const [orderBy, setOrderBy] = React.useState('Partner_Employee_Id'); const handleRequestSort = (event, property) => { const isAsc = orderBy === property && order === 'ascending'; setOrder(isAsc ? 'descending' : 'ascending'); setOrderBy(property); }; const createSortHandler = (property) => (event) => { handleRequestSort(event, property); }; function descendingComparator(a, b, orderBy) { if (b[orderBy].toLowerCase() < a[orderBy].toLowerCase()) { return -1; } if (b[orderBy].toLowerCase() > a[orderBy].toLowerCase()) { return 1; } return 0; } function getComparator(order, orderBy) { return order === 'descending' ? (a, b) => descendingComparator(a, b, orderBy) : (a, b) => -descendingComparator(a, b, orderBy); } function stableSort(array, comparator) { const stabilizedThis = array.map((el, index) => [el, index]); stabilizedThis.sort((a, b) => { const order = comparator(a[0], b[0]); if (order !== 0) return order; return a[1] - b[1]; }); return stabilizedThis.map((el) => el[0]); } const [visible, setVisible] = React.useState(false); const [Edata, setData] = React.useState(); const [rolevisible, setRoleVisible] = React.useState(false); const [Rdata, setRoleData] = React.useState(); const hideDialog = () => setVisible(false); const rolehideDialog = () => setRoleVisible(false); const handleChange = itemValue => { dispatch(employeeFilter('select', itemValue)); }; const handleSearch = value => { dispatch(employeeFilter('search', value)); }; const data = stableSort( checkEmployeesForTable(), getComparator(order, orderBy)) const deleteEmployee = (employee) => { if (employee) { const deleteData = { Partner_Details_Id: employee.Partner_Details_Id, Partner_Employee_Email_Id: employee.Partner_Employee_Email_Id, Mobile_Number: employee.Mobile, Is_Active: 0, User_Type: employee.User_Type, Partner_Employee_Id: employee.Partner_Employee_Id }; dispatch(deleteEmployeeAction(deleteData, toast)); } }; return (
{/* view popup */} = 500) ? "auto" : 500, marginLeft: 'auto', marginRight: 'auto' }}> setVisible(!visible)} /> Partner Employee Details {/* */} Email {Edata?.Partner_Employee_Email_Id} Mobile {Edata?.Mobile} Type {Edata?.User_Type} Created By {Edata?.Created_By} Status {Edata?.Is_Active === "true" ? "Active" : "In-Active"} {/* */} = 500) ? "auto" : 500, marginLeft: 'auto', marginRight: 'auto' }}> setRoleVisible(!rolevisible)} /> Available Roles {roles.map((data, index) => ( {data?.Role_Name?.replace(/_/g, ' ')} ))} {/* Add Button Navigation */} Partner Employees {dimensions <= 700 ? : null} {(permissions.Employees === "write") && (dimensions <= 700 ? : null)} {/* Filter Dropdown */} {Platform.OS !== "web" ? setShowDropDown(true)} onBlur={() => setShowDropDown(false)} onUpdateValue={item => { setShowDropDown(false); handleChange(item.value) }} /> : handleChange(itemValue)} > } handleSearch(value)} value={employeeSearch} /> {dimensions >= 700 ? : null} {(permissions.Employees === "write") && (dimensions >= 700 ? : null)} = 500 ? false : true}> {/* Datatable */} Employee ID Employee Email ID Status Actions { data.slice(page * numberOfItemsPerPage, page * numberOfItemsPerPage + numberOfItemsPerPage).map((employee, index) => ( {employee.Partner_Employee_Id} {employee.Partner_Employee_Email_Id} {employee.Is_Active === "true" ? "Active" : "In-Active"} { setData(employee); setVisible(!visible) }} /> {(permissions.Employees === "write") && ( navigation.navigate("EditEmployee", { employee: employee })} />)} {(permissions.Employees === "write") && ( deleteEmployee(employee)} />)} )) } {isEmpty(data) && No records found. } setPage(page)} label={employees?.length ? `${from + 1}-${to} of ${employees?.length}` : '0-0'} showFastPaginationControls // showFastPagination numberOfItemsPerPageList={numberOfItemsPerPageList} numberOfItemsPerPage={numberOfItemsPerPage} onItemsPerPageChange={onItemsPerPageChange} selectPageDropdownLabel={'Rows per page'} /> ); } const style = StyleSheet.create({ container: { flex: 1, alignItems: 'center', justifyContent: 'center', }, title: { // margin: 10, fontSize: 35, alignItems: 'center', justifyContent: 'center', width: 200 }, mainbox: { textAlign: 'center', margin: 15, flex: 1, justifyContent: 'space-between', }, databeBox: { margin: 10, textAlign: 'center', }, databeHeader: { margin: 10, textAlign: 'center', }, dropdown: { height: 50, borderColor: 'gray', borderWidth: 0.5, borderRadius: 5, paddingHorizontal: 8, }, icon: { marginRight: 5, }, dropdownlabel: { position: 'absolute', backgroundColor: 'white', left: 22, top: 8, zIndex: 999, paddingHorizontal: 8, fontSize: 14, }, placeholderStyle: { fontSize: 16, }, selectedTextStyle: { fontSize: 16, }, iconStyle: { width: 20, height: 20, }, inputSearchStyle: { height: 40, fontSize: 16, }, containerstyle: { width: 150 }, titletext: { fontWeight: "bold", fontSize: 14, color: 'black', }, tablerow: { justifyContent: "center", textAlign: "center", width: 140 }, }); export default employeeDetails