UNPKG

@pinuts/bsr-uikit-relaunch

Version:

BSR UI-KIT Relaunch

124 lines (122 loc) 5.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _formBuilder = require("@pinuts/form-builder"); var _reactI18next = require("react-i18next"); var _useGetOptionList = _interopRequireDefault(require("../../hooks/useGetOptionList.js")); var _FormFieldChildPropTypes = _interopRequireDefault(require("../FormFieldWrapper/FormFieldChildPropTypes.jsx")); var _FormFieldWrapper = _interopRequireDefault(require("../FormFieldWrapper/FormFieldWrapper.jsx")); var _withFieldGroup = _interopRequireDefault(require("../../hooks/withFieldGroup.jsx")); var _getUikitClassNames = require("../../utils/getUikitClassNames.js"); var _HTMLParserSanitized = require("../HTMLParserSanitized/HTMLParserSanitized.jsx"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /* eslint-disable jsx-a11y/role-supports-aria-props */ // form-builder // components const { getClassNames } = _formBuilder.utils; const getIsSelected = (value, opt) => Array.isArray(value) ? value.includes(opt.value) : value === opt.value; const GroupInputField = _ref => { let { viewMode, readOnly, inputProps = {}, field = {}, options, skipOptions, inline, emptyOptionLabel, multipleChoice = true, onChange = () => {}, value, fieldIds, isInvalid, disabled, helpText } = _ref; const [t] = (0, _reactI18next.useTranslation)(); const inputOptions = (0, _useGetOptionList.default)(options, emptyOptionLabel, skipOptions); const inputClassNames = (0, _getUikitClassNames.getInputClassNames)(isInvalid, readOnly, disabled, inputProps.className, [['input']]); const handleCheckboxChange = e => { const nextValue = inputOptions[e.target.value]?.value; if (!value) { onChange([nextValue]); } else if (value.indexOf(nextValue) === -1) { onChange([...(value || []), nextValue]); } else { onChange([...(value || []).filter(el => el !== nextValue)]); } }; const handleRadioChange = e => { onChange(inputOptions[e.target.value]?.value); }; const translateLabel = function () { let label = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return !label.includes(':') && !label.includes('<') ? t(label) : label; }; if (viewMode) { return /*#__PURE__*/_react.default.createElement(_HTMLParserSanitized.HTMLParserSanitized, null, inputOptions.filter(opt => getIsSelected(value, opt)).map(opt => translateLabel(opt.label)).join(', ')); } const ariaDescribedBy = [helpText && fieldIds.helpText, isInvalid && fieldIds.errorMessage].filter(Boolean).join(' '); return /*#__PURE__*/_react.default.createElement("div", null, inputOptions.length ? /*#__PURE__*/_react.default.createElement("ul", { className: `${inline ? 'inline' : ''} ${'groupInputList mt-1'}` }, inputOptions.map((opt, index) => { const typeConfig = multipleChoice ? { type: 'checkbox', onChange: !readOnly && !viewMode ? handleCheckboxChange : null, checked: getIsSelected(value, opt), 'aria-describedby': ariaDescribedBy, 'aria-checked': getIsSelected(value, opt) } : { type: 'radio', onChange: !readOnly && !viewMode ? handleRadioChange : null, checked: value === opt.value, 'aria-describedby': ariaDescribedBy, 'aria-checked': value === opt.value }; const usedId = `${fieldIds.fieldId}_${typeof opt.value === 'string' ? opt.value.replaceAll(' ', '_') : opt.value}`; return /*#__PURE__*/_react.default.createElement("li", { className: `${inline ? 'inline me-4' : ''}`, key: opt.value }, /*#__PURE__*/_react.default.createElement("input", _extends({ disabled: readOnly, readOnly: readOnly }, field, { name: fieldIds.fieldId, value: index, className: getClassNames([inputClassNames]), "aria-disabled": readOnly }, typeConfig, inputProps, { id: usedId })), /*#__PURE__*/_react.default.createElement("label", { className: "label ps-2", htmlFor: usedId }, /*#__PURE__*/_react.default.createElement(_HTMLParserSanitized.HTMLParserSanitized, null, translateLabel(opt.label)))); })) : /*#__PURE__*/_react.default.createElement("div", { className: "error-text" }, t('bsrItems.noOptionsGiven'))); }; GroupInputField.propTypes = { ..._FormFieldChildPropTypes.default, options: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({ value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]), label: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]) }), _propTypes.default.string])).isRequired, skipOptions: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.string), _propTypes.default.string]) }; GroupInputField.formFieldConfig = { labelIsLegend: true, isFieldset: true }; const HigherOrderGroupInputField = (0, _withFieldGroup.default)(GroupInputField); // wrap the field label, error message help text and more const WrappedGroupInputField = props => { return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(HigherOrderGroupInputField, props)); }; (0, _formBuilder.registerComponent)('GroupInputField', WrappedGroupInputField); (0, _formBuilder.registerComponent)('GroupInputFieldBasic', HigherOrderGroupInputField); var _default = exports.default = WrappedGroupInputField;