@focuson/form_components
Version:
Components that can be used by @focuson/forms
40 lines (39 loc) • 3.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthoriseTable = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const state_1 = require("@focuson/state");
const lens_1 = require("@focuson/lens");
const utils_1 = require("@focuson/utils");
const labelAndInput_1 = require("./labelAndInput");
const layout_1 = require("./layout");
const table_1 = require("./table");
const labelAndFixedNumber_1 = require("./labelAndFixedNumber");
const getValueForAuthorisedTable = (o, row, joiners) => {
return o === 'status' && row['hold'] ? 'HELD' : (0, table_1.getValueForTable)(o, row, joiners);
};
const haltBox = (state, id) => (i, row) => {
const onChange = () => {
let newRow = Object.assign(Object.assign({}, row), { hold: !row.hold });
const thisTx = [state.optional.chain(lens_1.Lenses.nth(i)), row => newRow];
state.massTransform((0, state_1.reasonFor)(`AuthoriseTable[${i}]`, 'onChange', id))(thisTx);
};
return (0, jsx_runtime_1.jsx)("input", { type: 'checkbox', "aria-label": `Halt for row ${i}`, onChange: onChange, checked: row.hold });
};
function sum(ds, crOrDr) {
return "" + (0, utils_1.safeArray)(ds).reduce((acc, v) => v.type == crOrDr ? acc + Number.parseFloat(v.amount) : acc, 0);
}
function AuthoriseTable(props) {
const { state, order, id, mode, copySelectedItemTo, firstColumnName } = props;
const dispTitle = (id, field, i) => i === 0 ? (0, jsx_runtime_1.jsx)("th", Object.assign({ id: `${id}.th[${i}]` }, { children: firstColumnName }), field) : (0, table_1.defaultDisplayTitleFn)(id, field, i);
const AuthTable = (0, table_1.rawTable)([...order, 'Halt'], (0, table_1.defaultOnClick)(props), (0, table_1.defaultOneRowWithGetValue)(getValueForAuthorisedTable)(id, order, [], haltBox(state, id)), dispTitle);
const data = state.optJsonOr([]);
const credits = sum(data, 'CR');
const debits = sum(data, 'DR');
// @ts-ignorea
const approvedByS = copySelectedItemTo.focusOn('approvedBy');
// @ts-ignore
const authorisedByS = copySelectedItemTo.focusOn('authorisedBy');
return (0, jsx_runtime_1.jsxs)(layout_1.Layout, Object.assign({ state: state, details: '[[1],[1,1],[1,1,1]]' }, { children: [(0, jsx_runtime_1.jsx)(AuthTable, Object.assign({}, props)), (0, jsx_runtime_1.jsx)(labelAndInput_1.LabelAndStringInput, { id: `${id}.approvedBy`, label: 'Approved By', state: approvedByS, mode: 'view', allButtons: {} }), (0, jsx_runtime_1.jsx)(labelAndInput_1.LabelAndStringInput, { id: `${id}.authorisedBy`, label: 'Authorised By', state: authorisedByS, mode: 'view', allButtons: {} }), (0, jsx_runtime_1.jsx)(labelAndFixedNumber_1.LabelAndFixedNumber, { id: `${id}.totalCredits`, label: 'Total Credits', number: credits }), (0, jsx_runtime_1.jsx)(labelAndFixedNumber_1.LabelAndFixedNumber, { id: `${id}.totalDebuts`, label: 'Total Debits', number: debits }), (0, jsx_runtime_1.jsx)(labelAndFixedNumber_1.LabelAndFixedNumber, { id: `${id}.waste`, label: 'Waste', number: '0.00' })] }));
}
exports.AuthoriseTable = AuthoriseTable;