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) => (
), [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 => (