import React, { useCallback } from 'react'; import { useHistory } from 'react-router-dom'; import classNames from 'classnames'; import InvoicesEmptyStatus from './InvoicesEmptyStatus'; import { CLASSES } from 'common/classes'; import { compose } from 'utils'; import { DataTable } from 'components'; import TableSkeletonRows from 'components/Datatable/TableSkeletonRows'; import TableSkeletonHeader from 'components/Datatable/TableHeaderSkeleton'; import withDashboardActions from 'containers/Dashboard/withDashboardActions'; import withInvoiceActions from './withInvoiceActions'; import withSettings from 'containers/Settings/withSettings'; import withAlertsActions from 'containers/Alert/withAlertActions'; import { useInvoicesTableColumns, ActionsMenu } from './components'; import { useInvoicesListContext } from './InvoicesListProvider'; /** * Invoices datatable. */ function InvoicesDataTable({ // #withInvoicesActions setInvoicesTableState, // #withSettings baseCurrency, // #withAlertsActions openAlert, }) { const history = useHistory(); // Invoices list context. const { invoices, pagination, isEmptyStatus, isInvoicesLoading, isInvoicesFetching, } = useInvoicesListContext(); // Invoices table columns. const columns = useInvoicesTableColumns(); // Handle delete sale invoice. const handleDeleteInvoice = ({ id }) => { openAlert('invoice-delete', { invoiceId: id }); }; // Handle cancel/confirm invoice deliver. const handleDeliverInvoice = ({ id }) => { openAlert('invoice-deliver', { invoiceId: id }); }; // Handle edit sale invoice. const handleEditInvoice = (invoice) => { history.push(`/invoices/${invoice.id}/edit`); }; // Handles fetch data once the table state change. const handleDataTableFetchData = useCallback( ({ pageSize, pageIndex, sortBy }) => { setInvoicesTableState({ pageSize, pageIndex, sortBy, }); }, [setInvoicesTableState], ); // Display invoice empty status instead of the table. if (isEmptyStatus) { return ; } return ( ); } export default compose( withDashboardActions, withInvoiceActions, withAlertsActions, withSettings(({ organizationSettings }) => ({ baseCurrency: organizationSettings?.baseCurrency, })), )(InvoicesDataTable);