UNPKG

@talend/react-forms

Version:

React forms library based on json schema form.

115 lines (113 loc) 3.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Select; var _propTypes = _interopRequireDefault(require("prop-types")); var _designSystem = require("@talend/design-system"); var _labels = require("../../utils/labels"); var _properties = require("../../utils/properties"); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /* eslint-disable jsx-a11y/no-autofocus */ function getSelectedOptions(select, multiple) { if (multiple) { return Array.prototype.slice.call(select.options).filter(option => option.selected).map(option => option.value); } return select.value; } function Select({ id, isValid, errorMessage, onChange, onFinish, schema, value, valueIsUpdating }) { const { autoFocus, description, disabled = false, placeholder, readOnly = false, title, labelProps, ...rest } = schema; const multiple = schema.schema.type === 'array' && schema.schema.uniqueItems; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_designSystem.Form.Select, { id: id, multiple: multiple, autoFocus: autoFocus, disabled: disabled || valueIsUpdating, placeholder: placeholder, onChange: event => { const payload = { schema, value: getSelectedOptions(event.target, multiple) }; onChange(event, payload); onFinish(event, payload); }, readOnly: readOnly, value: value, required: schema.required, label: (0, _labels.getLabelProps)(title, labelProps, schema.hint, schema.required), description: errorMessage || description, hasError: !isValid, "aria-invalid": !isValid, "aria-required": schema.required, ...(0, _properties.extractDataAttributes)(rest), children: schema.titleMap && schema.titleMap.map((option, index) => { return /*#__PURE__*/(0, _jsxRuntime.jsx)("option", { value: option.value, selected: value === option.value, children: option.name }, option.value || option.name || index); }) }); } if (process.env.NODE_ENV !== 'production') { Select.propTypes = { id: _propTypes.default.string, isValid: _propTypes.default.bool, errorMessage: _propTypes.default.string, onChange: _propTypes.default.func.isRequired, onFinish: _propTypes.default.func.isRequired, schema: _propTypes.default.shape({ autoFocus: _propTypes.default.bool, description: _propTypes.default.string, disabled: _propTypes.default.bool, placeholder: _propTypes.default.string, readOnly: _propTypes.default.bool, required: _propTypes.default.bool, schema: _propTypes.default.shape({ type: _propTypes.default.string, uniqueItems: _propTypes.default.bool }), title: _propTypes.default.string, labelProps: _propTypes.default.object, titleMap: _propTypes.default.arrayOf(_propTypes.default.shape({ name: _propTypes.default.string.isRequired, value: _propTypes.default.string.isRequired })), type: _propTypes.default.string, hint: _propTypes.default.shape({ icon: _propTypes.default.string, className: _propTypes.default.string, overlayComponent: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.string]).isRequired, overlayPlacement: _propTypes.default.string }) }), value: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.array]), valueIsUpdating: _propTypes.default.bool }; } Select.defaultProps = { isValid: true, schema: {}, value: '' }; //# sourceMappingURL=Select.component.js.map