UNPKG

@focuson/form_components

Version:

Components that can be used by @focuson/forms

40 lines (39 loc) 3.07 kB
"use strict"; 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;