@focuson/form_components
Version:
Components that can be used by @focuson/forms
26 lines (25 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LabelAndRadio = exports.Radio = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const label_1 = require("./label");
const state_1 = require("@focuson/state");
function Radio({ state, mode, enums, ariaLabel, id, labelPosition, required }) {
let selected = state.optJson();
const hasValid = selected && Object.keys(enums).includes(selected);
const cssValidInput = hasValid || !required ? '' : ' invalid';
return (0, jsx_runtime_1.jsx)("div", Object.assign({ className: `radio-group-container ${cssValidInput}`, id: id }, { children: Object.entries(enums).map(([key, value]) => {
const checked = state.optJson() === key;
const cssChecked = checked ? 'checked' : '';
const disabled = mode === 'view';
const cssDisabled = disabled ? 'disabled' : '';
let onClick = () => state.setJson(key, (0, state_1.reasonFor)('Radio', 'onClick', id));
return (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: `radio-container ${labelPosition == 'Horizontal' ? 'd-flex-inline' : ''} ${cssChecked} ${cssDisabled}`, onClick: onClick }, { children: [(0, jsx_runtime_1.jsx)("input", { id: id + value, onChange: () => { }, checked: checked, value: state.optJson(), type: 'radio', name: id, disabled: disabled, "aria-label": ariaLabel, required: required }), (0, jsx_runtime_1.jsx)("span", { className: "checkmark" }), (0, jsx_runtime_1.jsx)(label_1.Label, { state: state, htmlFor: id + value, label: value })] }), key);
}) }));
}
exports.Radio = Radio;
function LabelAndRadio(props) {
const { label, name } = props;
return (0, jsx_runtime_1.jsxs)("div", Object.assign({ className: "labelRadioButton" }, { children: [(0, jsx_runtime_1.jsx)(label_1.Label, { state: props.state, htmlFor: name, label: label }), (0, jsx_runtime_1.jsx)(Radio, Object.assign({}, props))] }));
}
exports.LabelAndRadio = LabelAndRadio;