import React, { useCallback, useMemo } from 'react'; import { Intent, Button, Popover, Menu, MenuItem, MenuDivider, Position, } from '@blueprintjs/core'; import { withRouter } from 'react-router'; import { FormattedMessage as T, useIntl } from 'react-intl'; import moment from 'moment'; import classNames from 'classnames'; import { CLASSES } from 'common/classes'; import { compose, saveInvoke } from 'utils'; import { useIsValuePassed } from 'hooks'; import { LoadingIndicator, Choose, DataTable, Money, Icon } from 'components'; import InvoicesEmptyStatus from './InvoicesEmptyStatus'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withDashboardActions from 'containers/Dashboard/withDashboardActions'; import withViewDetails from 'containers/Views/withViewDetails'; import withInvoices from './withInvoices'; import withInvoiceActions from './withInvoiceActions'; import withCurrentView from 'containers/Views/withCurrentView'; // Invoices datatable. function InvoicesDataTable({ // #withInvoices invoicesCurrentPage, invoicesLoading, invoicesPageination, invoicesCurrentViewId, // #withInvoicesActions addInvoiceTableQueries, // #OwnProps onEditInvoice, onDeleteInvoice, onSelectedRowsChange, }) { const { formatMessage } = useIntl(); const isLoadedBefore = useIsValuePassed(invoicesLoading, false); const handleEditInvoice = useCallback( (_invoice) => () => { saveInvoke(onEditInvoice, _invoice); }, [onEditInvoice], ); const handleDeleteInvoice = useCallback( (_invoice) => () => { saveInvoke(onDeleteInvoice, _invoice); }, [onDeleteInvoice], ); const actionMenuList = useCallback( (invoice) => ( } text={formatMessage({ id: 'view_details' })} /> } text={formatMessage({ id: 'edit_invoice' })} onClick={handleEditInvoice(invoice)} /> } /> ), [handleDeleteInvoice, handleEditInvoice, formatMessage], ); const onRowContextMenu = useCallback( (cell) => { return actionMenuList(cell.row.original); }, [actionMenuList], ); const columns = useMemo( () => [ { id: 'invoice_date', Header: formatMessage({ id: 'invoice_date' }), accessor: (r) => moment(r.invoice_date).format('YYYY MMM DD'), width: 140, className: 'invoice_date', }, { id: 'customer_id', Header: formatMessage({ id: 'customer_name' }), accessor: 'customer.display_name', width: 140, className: 'customer_id', }, { id: 'invoice_no', Header: formatMessage({ id: 'invoice_no__' }), accessor: (row) => `#${row.invoice_no}`, width: 140, className: 'invoice_no', }, { id: 'due_date', Header: formatMessage({ id: 'due_date' }), accessor: (r) => moment(r.due_date).format('YYYY MMM DD'), width: 140, className: 'due_date', }, { id: 'balance', Header: formatMessage({ id: 'balance' }), accessor: (r) => , width: 140, className: 'balance', }, { id: 'reference_no', Header: formatMessage({ id: 'reference_no' }), accessor: 'reference_no', width: 140, className: 'reference_no', }, { id: 'status', Header: formatMessage({ id: 'status' }), accessor: 'status', width: 140, className: 'status', }, { id: 'actions', Header: '', Cell: ({ cell }) => (