@focuson/form_components
Version:
Components that can be used by @focuson/forms
29 lines (28 loc) • 2.13 kB
JavaScript
;
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;