@aokiapp/rjsf-mantine-theme
Version:
Mantine theme, fields and widgets for react-jsonschema-form
85 lines (82 loc) • 2.7 kB
JavaScript
import { jsx } from 'react/jsx-runtime';
import { enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, optionId, ariaDescribedByIds } from '@rjsf/utils';
import { Checkbox, Box } from '@mantine/core';
import { useCallback } from 'react';
import { createErrors } from '../utils/createErrors.mjs';
import { useFieldContext } from '../templates/FieldTemplate.mjs';
function CheckboxesWidget(props) {
const {
id,
disabled,
options: { inline = false, enumOptions, enumDisabled, emptyValue },
value,
autofocus,
readonly,
label,
hideLabel,
onChange,
onBlur,
onFocus,
required,
rawErrors,
hideError
} = props;
const checkboxesValues = Array.isArray(value) ? value : [value];
const selectedIndices = enumOptionsIndexForValue(checkboxesValues, enumOptions, true);
const handleBlur = useCallback(
({ target: { value: value2 } }) => onBlur(id, enumOptionsValueForIndex(value2, enumOptions, emptyValue)),
[onBlur, id, enumOptions, emptyValue]
);
const handleFocus = useCallback(
({ target: { value: value2 } }) => onFocus(id, enumOptionsValueForIndex(value2, enumOptions, emptyValue)),
[onFocus, id, enumOptions, emptyValue]
);
const { description } = useFieldContext();
const _onChange = (nextIndices) => {
const nextValues = enumOptionsValueForIndex(nextIndices, enumOptions, []);
onChange(nextValues);
};
return /* @__PURE__ */ jsx(
Checkbox.Group,
{
label: labelValue(label, hideLabel, false),
description,
error: createErrors(rawErrors, hideError),
onChange: _onChange,
onBlur: handleBlur,
onFocus: handleFocus,
value: selectedIndices,
id,
required,
autoFocus: autofocus,
className: "armt-widget-checkboxes",
children: /* @__PURE__ */ jsx(
Box,
{
style: {
display: "flex",
flexDirection: inline ? "row" : "column",
gap: "0.5rem"
},
children: enumOptions?.map((option, index) => {
return /* @__PURE__ */ jsx(
Checkbox,
{
id: optionId(id, index),
label: option.label,
value: enumOptionsIndexForValue(option.value, enumOptions, false),
disabled: disabled || readonly || (enumDisabled ?? []).includes(index),
name: id,
"aria-describedby": ariaDescribedByIds(id),
description: option.schema?.description
},
index
);
})
}
)
}
);
}
export { CheckboxesWidget as default };
//# sourceMappingURL=CheckboxesWidget.mjs.map