import React from 'react'; import { useHistory } from 'react-router'; import { TABLES } from 'common/tables'; import { DataTable, DashboardContentTable } from 'components'; import TableSkeletonRows from 'components/Datatable/TableSkeletonRows'; import TableSkeletonHeader from 'components/Datatable/TableHeaderSkeleton'; import VendorsEmptyStatus from './VendorsEmptyStatus'; import { useVendorsListContext } from './VendorsListProvider'; import { useMemorizedColumnsWidths } from 'hooks'; import withVendorsActions from './withVendorsActions'; import withVendors from './withVendors'; import withAlertsActions from 'containers/Alert/withAlertActions'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withDrawerActions from 'containers/Drawer/withDrawerActions'; import withSettings from '../../Settings/withSettings'; import { ActionsMenu, useVendorsTableColumns } from './components'; import { compose } from 'utils'; /** * Vendors table. */ function VendorsTable({ // #withVendorsActions setVendorsTableState, // #withVendors vendorsTableState, // #withAlertsActions openAlert, // #withDrawerActions openDrawer, // #withDialogActions openDialog, // #withSettings vendorsTableSize, }) { // Vendors list context. const { vendors, pagination, isVendorsFetching, isVendorsLoading, isEmptyStatus, } = useVendorsListContext(); // Vendors table columns. const columns = useVendorsTableColumns(); // History context. const history = useHistory(); // Handle edit vendor data table const handleEditVendor = (vendor) => { history.push(`/vendors/${vendor.id}/edit`); }; // Handle cancel/confirm inactive. const handleInactiveVendor = ({ id, contact_service }) => { openAlert('vendor-inactivate', { vendorId: id, service: contact_service, }); }; // Handle cancel/confirm activate. const handleActivateVendor = ({ id, contact_service }) => { openAlert('vendor-activate', { vendorId: id, service: contact_service }); }; // Handle click delete vendor. const handleDeleteVendor = ({ id }) => { openAlert('vendor-delete', { contactId: id }); }; // Handle contact duplicate . const handleContactDuplicate = ({ id }) => { openDialog('contact-duplicate', { contactId: id, }); }; // Handle view detail item. const handleViewDetailVendor = ({ id }) => { openDrawer('vendor-details-drawer', { vendorId: id }); }; // Handle cell click. const handleCellClick = (cell, event) => { openDrawer('vendor-details-drawer', { vendorId: cell.row.original.id }); }; // Local storage memorizing columns widths. const [initialColumnsWidths, , handleColumnResizing] = useMemorizedColumnsWidths(TABLES.VENDORS); // Handle fetch data once the page index, size or sort by of the table change. const handleFetchData = React.useCallback( ({ pageSize, pageIndex, sortBy }) => { setVendorsTableState({ pageIndex, pageSize, sortBy, }); }, [setVendorsTableState], ); // Display empty status instead of the table. if (isEmptyStatus) { return ; } return ( ); } export default compose( withVendorsActions, withAlertsActions, withDialogActions, withDrawerActions, withVendors(({ vendorsTableState }) => ({ vendorsTableState })), withSettings(({ vendorsSettings }) => ({ vendorsTableSize: vendorsSettings?.tableSize, })), )(VendorsTable);