import React, { useEffect, useCallback, useState, useMemo } from 'react'; import { Intent, Button, Classes, Popover, Tooltip, Menu, MenuItem, MenuDivider, Position, Tag, } from '@blueprintjs/core'; import { withRouter, useParams } from 'react-router-dom'; import { FormattedMessage as T, useIntl } from 'react-intl'; import moment from 'moment'; import { DataTable, If, Money, Choose, Icon } from 'components'; import { compose } from 'utils'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withManualJournals from 'containers/Accounting/withManualJournals'; import withManualJournalsActions from 'containers/Accounting/withManualJournalsActions'; /** * Status column accessor. */ function StatusAccessor(row) { return ( ); } /** * Note column accessor. */ function NoteAccessor(row) { return ( ); } function ManualJournalsDataTable({ // #withManualJournals manualJournalsCurrentPage, manualJournalsLoading, manualJournalsPagination, manualJournalsTableQuery, onFetchData, onEditJournal, onDeleteJournal, onPublishJournal, onSelectedRowsChange, }) { const [isMounted, setIsMounted] = useState(false); const { custom_view_id: customViewId } = useParams(); const { formatMessage } = useIntl(); useEffect(() => { setIsMounted(false); }, [customViewId]); useEffect(() => { if (!manualJournalsLoading) { setIsMounted(true); } }, [manualJournalsLoading, setIsMounted]); const handlePublishJournal = useCallback( (journal) => () => { onPublishJournal && onPublishJournal(journal); }, [onPublishJournal], ); const handleEditJournal = useCallback( (journal) => () => { onEditJournal && onEditJournal(journal); }, [onEditJournal], ); const handleDeleteJournal = useCallback( (journal) => () => { onDeleteJournal && onDeleteJournal(journal); }, [onDeleteJournal], ); const actionMenuList = useCallback( (journal) => ( {!journal.status && ( )} ), [ 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) => , 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 }) => (