import React, { useEffect, useCallback, useState, useMemo } from 'react'; import { Intent, Button, Classes, Popover, Tooltip, Menu, MenuItem, MenuDivider, Position, Tag, } from '@blueprintjs/core'; import { useParams } from 'react-router-dom'; import { FormattedMessage as T, useIntl } from 'react-intl'; import moment from 'moment'; import Icon from 'components/Icon'; import { compose } from 'utils'; import { useUpdateEffect } from 'hooks'; import LoadingIndicator from 'components/LoadingIndicator'; import { If, Money } from 'components'; import DataTable from 'components/DataTable'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withDashboardActions from 'containers/Dashboard/withDashboardActions'; import withViewDetails from 'containers/Views/withViewDetails'; import withExpenses from 'containers/Expenses/withExpenses'; import withExpensesActions from 'containers/Expenses/withExpensesActions'; function ExpenseDataTable({ //#withExpenes expenses, expensesLoading, // #withDashboardActions changeCurrentView, changePageSubtitle, setTopbarEditView, // #withView viewMeta, // #ownProps loading, onFetchData, onEditExpense, onDeleteExpense, onPublishExpense, onSelectedRowsChange, }) { const { custom_view_id: customViewId } = useParams(); const [initialMount, setInitialMount] = useState(false); const { formatMessage } = useIntl(); useUpdateEffect(() => { if (!expensesLoading) { setInitialMount(true); } }, [expensesLoading, setInitialMount]); useEffect(() => { if (customViewId) { changeCurrentView(customViewId); setTopbarEditView(customViewId); } changePageSubtitle(customViewId && viewMeta ? viewMeta.name : ''); }, [ customViewId, changeCurrentView, changePageSubtitle, setTopbarEditView, viewMeta, ]); const handlePublishExpense = useCallback( (expense) => () => { onPublishExpense && onPublishExpense(expense); }, [onPublishExpense], ); const handleEditExpense = useCallback( (expense) => () => { onEditExpense && onEditExpense(expense); }, [onEditExpense], ); const handleDeleteExpense = useCallback( (expense) => () => { onDeleteExpense && onDeleteExpense(expense); }, [onDeleteExpense], ); const actionMenuList = useCallback( (expense) => ( } /> } onClick={handlePublishExpense(expense)} /> } onClick={handleEditExpense(expense)} /> } intent={Intent.DANGER} onClick={handleDeleteExpense(expense)} /> ), [handleEditExpense, handleDeleteExpense, handlePublishExpense], ); const columns = useMemo( () => [ { id: 'payment_date', Header: formatMessage({ id: 'payment_date' }), accessor: () => moment().format('YYYY-MM-DD'), width: 150, className: 'payment_date', }, { id: 'beneficiary', Header: formatMessage({ id: 'beneficiary' }), // accessor: 'beneficiary', width: 150, className: 'beneficiary', }, { id: 'total_amount', Header: formatMessage({ id: 'full_amount' }), accessor: (r) => , disableResizing: true, className: 'total_amount', width: 150, }, { id: 'payment_account_id', Header: formatMessage({ id: 'payment_account' }), accessor: 'payment_account.name', className: 'payment_account', width: 150, }, { id: 'expense_account_id', Header: formatMessage({ id: 'expense_account' }), accessor:'expense_account_id', width: 150, className: 'expense_account', }, { id: 'publish', Header: formatMessage({ id: 'publish' }), accessor: (r) => { return !r.published ? ( ) : ( ); }, disableResizing: true, width: 100, className: 'publish', }, { id: 'description', Header: formatMessage({ id: 'description' }), accessor: (row) => ( ), disableSorting: true, width: 150, className: 'description', }, { id: 'actions', Header: '', Cell: ({ cell }) => (