// @ts-nocheck import React from 'react'; import { getColumnWidth } from '@/utils'; import * as R from 'ramda'; import { useGeneralLedgerContext } from './GeneralLedgerProvider'; import { Align, CLASSES } from '@/constants'; /** * Description cell – wraps value in a div with muted text class. */ function DescriptionCell({ cell: { value } }) { return React.createElement( 'div', { className: `cell ${CLASSES.TEXT_MUTED}` }, value, ); } const getTableCellValueAccessor = (index) => `cells[${index}].value`; const getReportColWidth = (data, accessor, headerText) => { return getColumnWidth( data, accessor, { magicSpacing: 10, minWidth: 100 }, headerText, ); }; /** * Account name column mapper. */ const commonColumnMapper = R.curry((data, column) => { const accessor = getTableCellValueAccessor(column.cell_index); return { key: column.key, Header: column.label, accessor, className: column.key, textOverview: true, }; }); /** * Numeric columns accessor. */ const numericColumnAccessor = R.curry((data, column) => { const accessor = getTableCellValueAccessor(column.cell_index); const width = getReportColWidth(data, accessor, column.label); return { ...column, align: Align.Right, width, money: true, }; }); /** * Date column accessor. */ const dateColumnAccessor = R.curry((column) => { return { ...column, width: 120, }; }); /** * Transaction type column accessor. */ const transactionTypeColumnAccessor = (column) => { return { ...column, width: 125, }; }; /** * Transaction number column accessor. */ const transactionIdColumnAccessor = (column) => { return { ...column, width: 80, }; }; /** * Description column accessor (muted text in wrapped cell). */ const descriptionColumnAccessor = (column) => { return { ...column, Cell: DescriptionCell, }; }; const dynamiColumnMapper = R.curry((data, column) => { const _numericColumnAccessor = numericColumnAccessor(data); return R.compose( R.when(R.pathEq(['key'], 'date'), dateColumnAccessor), R.when( R.pathEq(['key'], 'reference_type'), transactionTypeColumnAccessor, ), R.when( R.pathEq(['key'], 'reference_number'), transactionIdColumnAccessor, ), R.when(R.pathEq(['key'], 'description'), descriptionColumnAccessor), R.when(R.pathEq(['key'], 'credit'), _numericColumnAccessor), R.when(R.pathEq(['key'], 'debit'), _numericColumnAccessor), R.when(R.pathEq(['key'], 'amount'), _numericColumnAccessor), R.when(R.pathEq(['key'], 'running_balance'), _numericColumnAccessor), commonColumnMapper(data), )(column); }); /** * Composes the dynamic columns that fetched from request to columns to table component. */ export const dynamicColumns = R.curry((data, columns) => { return R.map(dynamiColumnMapper(data), columns); }); /** * Retrieves the G/L sheet table columns for table component. */ export const useGeneralLedgerTableColumns = () => { const { generalLedger } = useGeneralLedgerContext(); if (!generalLedger) { throw new Error('asdfadsf'); } const { table } = generalLedger; return dynamicColumns(table.rows, table.columns); };