UNPKG

@chris-bellman/rjsf-mantine-5-theme

Version:

Mantine 5 theme, fields and widgets for react-jsonschema-form. Based on @aokiapp/rjsf-mantine-theme

97 lines (94 loc) 3.26 kB
import { jsx } from 'react/jsx-runtime'; import { useCallback } from 'react'; import { enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, ariaDescribedByIds } from '@rjsf/utils'; import { MultiSelect, Select } from '@mantine/core'; import { createErrors } from '../utils/createErrors.mjs'; import { useFieldContext } from '../templates/FieldTemplate.mjs'; function SelectWidget({ id, options, value, required, disabled, readonly, label, hideLabel, rawErrors, multiple = false, autofocus = false, onChange, onBlur, onFocus, hideError, placeholder }) { const { enumOptions, enumDisabled, emptyValue: optEmptyVal } = options; const selectedIndices = enumOptionsIndexForValue(value, enumOptions, multiple); const handleFocus = useCallback(() => { return onFocus(id, enumOptionsValueForIndex(selectedIndices, enumOptions, optEmptyVal)); }, [onFocus, id, selectedIndices, enumOptions, optEmptyVal]); const handleBlur = useCallback(() => { return onBlur(id, enumOptionsValueForIndex(selectedIndices, enumOptions, optEmptyVal)); }, [onBlur, id, selectedIndices, enumOptions, optEmptyVal]); const handleChange = useCallback( (value2) => { return onChange(enumOptionsValueForIndex(value2, enumOptions, optEmptyVal)); }, [onChange, enumOptions, optEmptyVal] ); const { description } = useFieldContext(); if (multiple) { return /* @__PURE__ */ jsx( MultiSelect, { clearable: !required, data: (enumOptions || []).map(({ value: value2, label: label2 }, i) => { const disabled2 = enumDisabled && enumDisabled.indexOf(value2) !== -1; return { value: String(i), label: label2, disabled: disabled2 }; }), description, disabled: disabled || readonly, error: createErrors(rawErrors, hideError), label: labelValue(label, hideLabel, false), autoFocus: autofocus, required, searchable: true, value: selectedIndices, onChange: handleChange, onDropdownClose: handleBlur, onDropdownOpen: handleFocus, "aria-describedby": ariaDescribedByIds(id), placeholder, className: "armt-widget-select armt-widget-select-multiple" } ); } else { return /* @__PURE__ */ jsx( Select, { allowDeselect: true, clearable: !required, data: (enumOptions || []).map(({ value: value2, label: label2 }, i) => { const disabled2 = enumDisabled && enumDisabled.indexOf(value2) !== -1; return { value: String(i), label: label2, disabled: disabled2 }; }), description, disabled: disabled || readonly, error: createErrors(rawErrors, hideError), label: labelValue(label, hideLabel, false), autoFocus: autofocus, required, searchable: true, value: selectedIndices, onChange: handleChange, onDropdownClose: handleBlur, onDropdownOpen: handleFocus, "aria-describedby": ariaDescribedByIds(id), placeholder, className: "armt-widget-select armt-widget-select-single" } ); } } export { SelectWidget as default }; //# sourceMappingURL=SelectWidget.mjs.map