@imtf/rjsf-conditionals
Version:
Extension of @rjsf/core with conditional field support
42 lines (41 loc) • 1.21 kB
JavaScript
import { toArray, findRelSchemaAndField, findRelUiSchema } from "../utils";
import { validateFields } from "./validateAction";
import PropTypes from "prop-types";
function doHide({
field,
schema
}, uiSchema) {
let requiredIndex = schema.required ? schema.required.indexOf(field) : -1;
if (requiredIndex !== -1) {
schema.required.splice(requiredIndex, 1);
}
delete schema.properties[field];
delete uiSchema[field];
let fieldIndex = (uiSchema["ui:order"] ? uiSchema["ui:order"] : []).indexOf(field);
if (fieldIndex !== -1) {
uiSchema["ui:order"].splice(fieldIndex, 1);
}
}
/**
* Hide specified field both from uiSchema and schema
*
* @param field
* @param schema
* @param uiSchema
* @returns {{schema: *, uiSchema: *}}
*/
export default function hide(params, schema, uiSchema, formData) {
const {
field
} = params;
let fieldArr = toArray(field);
fieldArr.forEach(field => doHide(findRelSchemaAndField(field, schema), findRelUiSchema(field, uiSchema), formData));
}
hide.propTypes = {
field: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]).isRequired
};
hide.validate = validateFields("hide", function ({
field
}) {
return field;
});