UNPKG

@focuson/form_components

Version:

Components that can be used by @focuson/forms

29 lines (28 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PlusMinusButtonsAndInput = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const state_1 = require("@focuson/state"); const labelAndInput_1 = require("./labelAndInput"); const label_1 = require("./label"); const common_1 = require("./common"); const modifyFlags = (flagValue) => (flags) => { const i = flags.findIndex(f => f['flagName'] == "misuse"); return i < 0 ? [...flags, { flagName: "misuse", flagValue }] : [...flags.slice(0, i), { flagName: "misuse", flagValue }, ...flags.slice(i + 1)]; }; function modifyNumber(old, fn) { const newValue = fn(old); return newValue < 0 ? 0 : newValue; } function PlusMinusButtonsAndInput({ state, id, label, allButtons, required, min, flags, buttonType }) { const onClick = (fn) => () => { const newNumber = modifyNumber(state.optJsonOr(0), fn); const transforms = [ [state.optional, () => newNumber], [flags.optional, modifyFlags(newNumber != 0)] ]; state.massTransform((0, state_1.reasonFor)('ModalButton', 'onClick', id))(...transforms); }; return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "labelValueButton" }, { children: [(0, jsx_runtime_1.jsx)(label_1.Label, { state: state, htmlFor: id, label: label }), (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "inputAndButtons" }, { children: [(0, jsx_runtime_1.jsx)("button", Object.assign({ className: (0, common_1.getButtonClassName)(buttonType), id: `${id}.minus`, title: "Minus", onClick: onClick(x => x - 1) }, { children: "-" })), (0, jsx_runtime_1.jsx)(labelAndInput_1.LabelAndNumberInput, { id: id, allButtons: allButtons, required: required, min: min, state: state, mode: 'view', noLabel: true }), (0, jsx_runtime_1.jsx)("button", Object.assign({ className: (0, common_1.getButtonClassName)(buttonType), id: `${id}.plus`, title: "Plus", onClick: onClick(x => x + 1) }, { children: "+" }))] }))] })) }); } exports.PlusMinusButtonsAndInput = PlusMinusButtonsAndInput;