import React, { useCallback, useMemo } from 'react'; import { Intent, Button, Popover, Tooltip, Menu, MenuItem, MenuDivider, Position, } from '@blueprintjs/core'; import { withRouter, useParams } from 'react-router-dom'; import { useIntl } from 'react-intl'; import moment from 'moment'; import classNames from 'classnames'; import { DataTable, If, Money, Choose, Icon, LoadingIndicator, } from 'components'; import { CLASSES } from 'common/classes'; import { useIsValuePassed } from 'hooks'; import ManualJournalsEmptyStatus from './ManualJournalsEmptyStatus'; import { AmountPopoverContent, NoteAccessor, StatusAccessor } from './components'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withManualJournals from 'containers/Accounting/withManualJournals'; import withManualJournalsActions from 'containers/Accounting/withManualJournalsActions'; import { compose, saveInvoke } from 'utils'; function ManualJournalsDataTable({ // #withManualJournals manualJournalsCurrentPage, manualJournalsLoading, manualJournalsPagination, manualJournalsTableQuery, manualJournalsCurrentViewId, // #withManualJournalsActions addManualJournalsTableQueries, // #ownProps onEditJournal, onDeleteJournal, onPublishJournal, onSelectedRowsChange, }) { const { custom_view_id: customViewId } = useParams(); const { formatMessage } = useIntl(); const isLoadedBefore = useIsValuePassed(manualJournalsLoading, false); const handlePublishJournal = useCallback( (journal) => () => { saveInvoke(onPublishJournal, journal); }, [onPublishJournal], ); const handleEditJournal = useCallback( (journal) => () => { saveInvoke(onEditJournal, journal); }, [onEditJournal], ); const handleDeleteJournal = useCallback( (journal) => () => { saveInvoke(onDeleteJournal, journal); }, [onDeleteJournal], ); const actionMenuList = useCallback( (journal) => ( } text={formatMessage({ id: 'view_details' })} /> } text={formatMessage({ id: 'publish_journal' })} onClick={handlePublishJournal(journal)} /> } text={formatMessage({ id: 'edit_journal' })} onClick={handleEditJournal(journal)} /> } intent={Intent.DANGER} onClick={handleDeleteJournal(journal)} /> ), [ handleEditJournal, handleDeleteJournal, handlePublishJournal, formatMessage, ], ); const onRowContextMenu = useCallback( (cell) => actionMenuList(cell.row.original), [actionMenuList], ); const columns = useMemo( () => [ { id: 'date', Header: formatMessage({ id: 'date' }), accessor: (r) => moment(r.date).format('YYYY MMM DD'), width: 115, className: 'date', }, { id: 'amount', Header: formatMessage({ id: 'amount' }), accessor: (r) => ( } position={Position.RIGHT_BOTTOM} > ), className: 'amount', width: 115, }, { id: 'journal_number', Header: formatMessage({ id: 'journal_no' }), accessor: (row) => `#${row.journal_number}`, className: 'journal_number', width: 100, }, { id: 'journal_type', Header: formatMessage({ id: 'journal_type' }), accessor: 'journal_type', width: 110, className: 'journal_type', }, { id: 'status', Header: formatMessage({ id: 'status' }), accessor: (row) => StatusAccessor(row), width: 95, className: 'status', }, { id: 'note', Header: formatMessage({ id: 'note' }), accessor: NoteAccessor, disableSorting: true, width: 85, className: 'note', }, { id: 'created_at', Header: formatMessage({ id: 'created_at' }), accessor: (r) => moment(r.created_at).format('YYYY MMM DD'), width: 125, className: 'created_at', }, { id: 'actions', Header: '', Cell: ({ cell }) => (