import React, { useCallback, useMemo } from 'react'; import { Intent, Button, Classes, Popover, Tooltip, Menu, MenuItem, MenuDivider, Position, Tag, } from '@blueprintjs/core'; import { FormattedMessage as T, useIntl } from 'react-intl'; import moment from 'moment'; import classNames from 'classnames'; import Icon from 'components/Icon'; import { compose, saveInvoke } from 'utils'; import { useExpensesListContext } from './ExpensesListProvider'; import { If, Money, Choose } from 'components'; import { CLASSES } from 'common/classes'; import DataTable from 'components/DataTable'; import ExpensesEmptyStatus from './ExpensesEmptyStatus'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withDashboardActions from 'containers/Dashboard/withDashboardActions'; import withExpensesActions from 'containers/Expenses/withExpensesActions'; import TableSkeletonRows from 'components/Datatable/TableSkeletonRows'; /** * Expenses datatable. */ function ExpensesDataTable({ // #withExpensesActions addExpensesTableQueries, // #ownProps onEditExpense, onDeleteExpense, onPublishExpense, onSelectedRowsChange, }) { const { formatMessage } = useIntl(); const { expenses, isExpensesLoading } = useExpensesListContext(); // Handle fetch data of manual jouranls datatable. const handleFetchData = useCallback( ({ pageIndex, pageSize, sortBy }) => { addExpensesTableQueries({ ...(sortBy.length > 0 ? { column_sort_by: sortBy[0].id, sort_order: sortBy[0].desc ? 'desc' : 'asc', } : {}), page_size: pageSize, page: pageIndex + 1, }); }, [addExpensesTableQueries], ); const handlePublishExpense = useCallback( (expense) => () => { saveInvoke(onPublishExpense, expense); }, [onPublishExpense], ); const handleEditExpense = useCallback( (expense) => () => { saveInvoke(onEditExpense, expense); }, [onEditExpense], ); const handleDeleteExpense = useCallback( (expense) => () => { saveInvoke(onDeleteExpense, expense); }, [onDeleteExpense], ); const actionMenuList = useCallback( (expense) => (
), [ handleEditExpense, handleDeleteExpense, handlePublishExpense, formatMessage, ], ); const onRowContextMenu = useCallback( (cell) => { return actionMenuList(cell.row.original); }, [actionMenuList], ); const expenseAccountAccessor = (_expense) => { if (_expense.categories.length === 1) { return _expense.categories[0].expense_account.name; } else if (_expense.categories.length > 1) { const mutliCategories = _expense.categories.map((category) => (