Files
bigcapital/packages/webapp/src/containers/FinancialStatements/TrialBalanceSheet/dynamicColumns.ts
2023-10-25 13:18:13 +02:00

57 lines
1.6 KiB
TypeScript

// @ts-nocheck
import * as R from 'ramda';
import { Align } from '@/constants';
import { getColumnWidth } from '@/utils';
const ACCOUNT_NAME_COLUMN_WIDTH = 320;
const AMOUNT_COLUMNS_MIN_WIDTH = 120;
const AMOUNT_COLUMNS_MAGIC_SPACING = 10;
const getTableCellValueAccessor = (index: number) => `cells[${index}].value`;
const accountNameAccessor = R.curry((data, column) => {
const accessor = getTableCellValueAccessor(column.cell_index);
return {
Header: column.label,
id: column.key,
accessor,
className: column.key,
width: ACCOUNT_NAME_COLUMN_WIDTH,
};
});
const amountAccessor = R.curry((data, column) => {
const accessor = getTableCellValueAccessor(column.cell_index);
return {
Header: column.label,
id: column.key,
accessor,
className: column.key,
width: getColumnWidth(data, accessor, {
magicSpacing: AMOUNT_COLUMNS_MAGIC_SPACING,
minWidth: AMOUNT_COLUMNS_MIN_WIDTH,
}),
align: Align.Right,
};
});
const dynamicColumnMapper = R.curry((data, column) => {
const accountNameColumn = accountNameAccessor(data);
const creditColumn = amountAccessor(data);
const debitColumn = amountAccessor(data);
const totalColumn = amountAccessor(data);
return R.compose(
R.when(R.pathEq(['key'], 'account_name'), accountNameColumn),
R.when(R.pathEq(['key'], 'credit'), creditColumn),
R.when(R.pathEq(['key'], 'debit'), debitColumn),
R.when(R.pathEq(['key'], 'total'), totalColumn),
)(column);
});
export const trialBalancesheetDynamicColumns = (columns, data) => {
return R.map(dynamicColumnMapper(data), columns);
};