import React from 'react';
import {
Intent,
Button,
Classes,
Popover,
Tooltip,
Position,
Tag,
MenuItem,
Menu,
MenuDivider,
} from '@blueprintjs/core';
import moment from 'moment';
import { FormattedMessage as T } from 'react-intl';
import { Money, Icon, If } from 'components';
import { formatMessage } from 'services/intl';
import { safeCallback } from 'utils';
/**
* Description accessor.
*/
export function DescriptionAccessor(row) {
return (
);
}
/**
* Actions menu.
*/
export function ActionsMenu({
row: { original },
payload: { onPublish, onEdit, onDelete },
}) {
return (
);
}
/**
* Actions cell.
*/
export function ActionsCell(props) {
return (
}
position={Position.RIGHT_BOTTOM}
>
} />
);
}
/**
* Total amount accessor.
*/
export function TotalAmountAccessor(row) {
return ;
}
/**
* Publish accessor.
*/
export function PublishAccessor(row) {
return row.is_published ? (
) : (
);
}
/**
* Expense account accessor.
*/
export function 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) => (
- {category.expense_account.name} ${category.amount}
));
return (
{'- Multi Categories -'}
);
}
}
/**
* Retrieve the expenses table columns.
*/
export function useExpensesTableColumns() {
return React.useMemo(
() => [
{
id: 'payment_date',
Header: formatMessage({ id: 'payment_date' }),
accessor: (r) => moment(r.payment_date).format('YYYY MMM DD'),
width: 140,
className: 'payment_date',
},
{
id: 'amount',
Header: formatMessage({ id: 'full_amount' }),
accessor: TotalAmountAccessor,
className: 'amount',
width: 150,
},
{
id: 'payment_account',
Header: formatMessage({ id: 'payment_account' }),
accessor: 'payment_account.name',
className: 'payment_account',
width: 150,
},
{
id: 'expense_account',
Header: formatMessage({ id: 'expense_account' }),
accessor: ExpenseAccountAccessor,
width: 160,
className: 'expense_account',
},
{
id: 'published',
Header: formatMessage({ id: 'publish' }),
accessor: PublishAccessor,
width: 100,
className: 'publish',
},
{
id: 'description',
Header: formatMessage({ id: 'description' }),
accessor: DescriptionAccessor,
disableSorting: true,
width: 150,
className: 'description',
},
{
id: 'actions',
Header: '',
Cell: ActionsCell,
className: 'actions',
width: 50,
disableResizing: true,
},
],
[],
);
}