@rjsf/core 5.11.2 → 5.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.umd.js +3464 -0
- package/dist/index.esm.js +3814 -0
- package/dist/index.esm.js.map +7 -0
- package/dist/index.js +3714 -5
- package/dist/index.js.map +7 -0
- package/{dist/index.d.ts → lib/components/Form.d.ts} +321 -337
- package/lib/components/Form.js +474 -0
- package/lib/components/Form.js.map +1 -0
- package/lib/components/fields/ArrayField.d.ts +179 -0
- package/lib/components/fields/ArrayField.js +568 -0
- package/lib/components/fields/ArrayField.js.map +1 -0
- package/lib/components/fields/BooleanField.d.ts +9 -0
- package/lib/components/fields/BooleanField.js +62 -0
- package/lib/components/fields/BooleanField.js.map +1 -0
- package/lib/components/fields/MultiSchemaField.d.ts +47 -0
- package/lib/components/fields/MultiSchemaField.js +129 -0
- package/lib/components/fields/MultiSchemaField.js.map +1 -0
- package/lib/components/fields/NullField.d.ts +8 -0
- package/lib/components/fields/NullField.js +17 -0
- package/lib/components/fields/NullField.js.map +1 -0
- package/lib/components/fields/NumberField.d.ts +21 -0
- package/lib/components/fields/NumberField.js +70 -0
- package/lib/components/fields/NumberField.js.map +1 -0
- package/lib/components/fields/ObjectField.d.ts +73 -0
- package/lib/components/fields/ObjectField.js +222 -0
- package/lib/components/fields/ObjectField.js.map +1 -0
- package/lib/components/fields/SchemaField.d.ts +10 -0
- package/lib/components/fields/SchemaField.js +172 -0
- package/lib/components/fields/SchemaField.js.map +1 -0
- package/lib/components/fields/StringField.d.ts +8 -0
- package/lib/components/fields/StringField.js +25 -0
- package/lib/components/fields/StringField.js.map +1 -0
- package/lib/components/fields/index.d.ts +3 -0
- package/lib/components/fields/index.js +24 -0
- package/lib/components/fields/index.js.map +1 -0
- package/lib/components/templates/ArrayFieldDescriptionTemplate.d.ts +8 -0
- package/lib/components/templates/ArrayFieldDescriptionTemplate.js +18 -0
- package/lib/components/templates/ArrayFieldDescriptionTemplate.js.map +1 -0
- package/lib/components/templates/ArrayFieldItemTemplate.d.ts +7 -0
- package/lib/components/templates/ArrayFieldItemTemplate.js +20 -0
- package/lib/components/templates/ArrayFieldItemTemplate.js.map +1 -0
- package/lib/components/templates/ArrayFieldTemplate.d.ts +7 -0
- package/lib/components/templates/ArrayFieldTemplate.js +22 -0
- package/lib/components/templates/ArrayFieldTemplate.js.map +1 -0
- package/lib/components/templates/ArrayFieldTitleTemplate.d.ts +8 -0
- package/lib/components/templates/ArrayFieldTitleTemplate.js +18 -0
- package/lib/components/templates/ArrayFieldTitleTemplate.js.map +1 -0
- package/lib/components/templates/BaseInputTemplate.d.ts +9 -0
- package/lib/components/templates/BaseInputTemplate.js +39 -0
- package/lib/components/templates/BaseInputTemplate.js.map +1 -0
- package/lib/components/templates/ButtonTemplates/AddButton.d.ts +5 -0
- package/lib/components/templates/ButtonTemplates/AddButton.js +10 -0
- package/lib/components/templates/ButtonTemplates/AddButton.js.map +1 -0
- package/lib/components/templates/ButtonTemplates/IconButton.d.ts +7 -0
- package/lib/components/templates/ButtonTemplates/IconButton.js +24 -0
- package/lib/components/templates/ButtonTemplates/IconButton.js.map +1 -0
- package/lib/components/templates/ButtonTemplates/SubmitButton.d.ts +5 -0
- package/lib/components/templates/ButtonTemplates/SubmitButton.js +12 -0
- package/lib/components/templates/ButtonTemplates/SubmitButton.js.map +1 -0
- package/lib/components/templates/ButtonTemplates/index.d.ts +3 -0
- package/lib/components/templates/ButtonTemplates/index.js +15 -0
- package/lib/components/templates/ButtonTemplates/index.js.map +1 -0
- package/lib/components/templates/DescriptionField.d.ts +7 -0
- package/lib/components/templates/DescriptionField.js +18 -0
- package/lib/components/templates/DescriptionField.js.map +1 -0
- package/lib/components/templates/ErrorList.d.ts +7 -0
- package/lib/components/templates/ErrorList.js +13 -0
- package/lib/components/templates/ErrorList.js.map +1 -0
- package/lib/components/templates/FieldErrorTemplate.d.ts +7 -0
- package/lib/components/templates/FieldErrorTemplate.js +19 -0
- package/lib/components/templates/FieldErrorTemplate.js.map +1 -0
- package/lib/components/templates/FieldHelpTemplate.d.ts +7 -0
- package/lib/components/templates/FieldHelpTemplate.js +18 -0
- package/lib/components/templates/FieldHelpTemplate.js.map +1 -0
- package/lib/components/templates/FieldTemplate/FieldTemplate.d.ts +8 -0
- package/lib/components/templates/FieldTemplate/FieldTemplate.js +18 -0
- package/lib/components/templates/FieldTemplate/FieldTemplate.js.map +1 -0
- package/lib/components/templates/FieldTemplate/Label.d.ts +14 -0
- package/lib/components/templates/FieldTemplate/Label.js +14 -0
- package/lib/components/templates/FieldTemplate/Label.js.map +1 -0
- package/lib/components/templates/FieldTemplate/index.d.ts +2 -0
- package/lib/components/templates/FieldTemplate/index.js +3 -0
- package/lib/components/templates/FieldTemplate/index.js.map +1 -0
- package/lib/components/templates/ObjectFieldTemplate.d.ts +9 -0
- package/lib/components/templates/ObjectFieldTemplate.js +18 -0
- package/lib/components/templates/ObjectFieldTemplate.js.map +1 -0
- package/lib/components/templates/TitleField.d.ts +7 -0
- package/lib/components/templates/TitleField.js +11 -0
- package/lib/components/templates/TitleField.js.map +1 -0
- package/lib/components/templates/UnsupportedField.d.ts +9 -0
- package/lib/components/templates/UnsupportedField.js +28 -0
- package/lib/components/templates/UnsupportedField.js.map +1 -0
- package/lib/components/templates/WrapIfAdditionalTemplate.d.ts +8 -0
- package/lib/components/templates/WrapIfAdditionalTemplate.js +21 -0
- package/lib/components/templates/WrapIfAdditionalTemplate.js.map +1 -0
- package/lib/components/templates/index.d.ts +3 -0
- package/lib/components/templates/index.js +36 -0
- package/lib/components/templates/index.js.map +1 -0
- package/lib/components/widgets/AltDateTimeWidget.d.ts +9 -0
- package/lib/components/widgets/AltDateTimeWidget.js +14 -0
- package/lib/components/widgets/AltDateTimeWidget.js.map +1 -0
- package/lib/components/widgets/AltDateWidget.d.ts +7 -0
- package/lib/components/widgets/AltDateWidget.js +77 -0
- package/lib/components/widgets/AltDateWidget.js.map +1 -0
- package/lib/components/widgets/CheckboxWidget.d.ts +9 -0
- package/lib/components/widgets/CheckboxWidget.js +23 -0
- package/lib/components/widgets/CheckboxWidget.js.map +1 -0
- package/lib/components/widgets/CheckboxesWidget.d.ts +9 -0
- package/lib/components/widgets/CheckboxesWidget.js +31 -0
- package/lib/components/widgets/CheckboxesWidget.js.map +1 -0
- package/lib/components/widgets/ColorWidget.d.ts +8 -0
- package/lib/components/widgets/ColorWidget.js +13 -0
- package/lib/components/widgets/ColorWidget.js.map +1 -0
- package/lib/components/widgets/DateTimeWidget.d.ts +8 -0
- package/lib/components/widgets/DateTimeWidget.js +13 -0
- package/lib/components/widgets/DateTimeWidget.js.map +1 -0
- package/lib/components/widgets/DateWidget.d.ts +8 -0
- package/lib/components/widgets/DateWidget.js +15 -0
- package/lib/components/widgets/DateWidget.js.map +1 -0
- package/lib/components/widgets/EmailWidget.d.ts +7 -0
- package/lib/components/widgets/EmailWidget.js +12 -0
- package/lib/components/widgets/EmailWidget.js.map +1 -0
- package/lib/components/widgets/FileWidget.d.ts +8 -0
- package/lib/components/widgets/FileWidget.js +105 -0
- package/lib/components/widgets/FileWidget.js.map +1 -0
- package/lib/components/widgets/HiddenWidget.d.ts +9 -0
- package/lib/components/widgets/HiddenWidget.js +11 -0
- package/lib/components/widgets/HiddenWidget.js.map +1 -0
- package/lib/components/widgets/PasswordWidget.d.ts +7 -0
- package/lib/components/widgets/PasswordWidget.js +12 -0
- package/lib/components/widgets/PasswordWidget.js.map +1 -0
- package/lib/components/widgets/RadioWidget.d.ts +9 -0
- package/lib/components/widgets/RadioWidget.js +24 -0
- package/lib/components/widgets/RadioWidget.js.map +1 -0
- package/lib/components/widgets/RangeWidget.d.ts +8 -0
- package/lib/components/widgets/RangeWidget.js +11 -0
- package/lib/components/widgets/RangeWidget.js.map +1 -0
- package/lib/components/widgets/SelectWidget.d.ts +9 -0
- package/lib/components/widgets/SelectWidget.js +41 -0
- package/lib/components/widgets/SelectWidget.js.map +1 -0
- package/lib/components/widgets/TextWidget.d.ts +7 -0
- package/lib/components/widgets/TextWidget.js +12 -0
- package/lib/components/widgets/TextWidget.js.map +1 -0
- package/lib/components/widgets/TextareaWidget.d.ts +14 -0
- package/lib/components/widgets/TextareaWidget.js +19 -0
- package/lib/components/widgets/TextareaWidget.js.map +1 -0
- package/lib/components/widgets/TimeWidget.d.ts +8 -0
- package/lib/components/widgets/TimeWidget.js +15 -0
- package/lib/components/widgets/TimeWidget.js.map +1 -0
- package/lib/components/widgets/URLWidget.d.ts +7 -0
- package/lib/components/widgets/URLWidget.js +12 -0
- package/lib/components/widgets/URLWidget.js.map +1 -0
- package/lib/components/widgets/UpDownWidget.d.ts +7 -0
- package/lib/components/widgets/UpDownWidget.js +12 -0
- package/lib/components/widgets/UpDownWidget.js.map +1 -0
- package/lib/components/widgets/index.d.ts +3 -0
- package/lib/components/widgets/index.js +44 -0
- package/lib/components/widgets/index.js.map +1 -0
- package/lib/getDefaultRegistry.d.ts +6 -0
- package/lib/getDefaultRegistry.js +19 -0
- package/lib/getDefaultRegistry.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/withTheme.d.ts +9 -0
- package/lib/withTheme.js +16 -0
- package/lib/withTheme.js.map +1 -0
- package/package.json +23 -16
- package/src/components/Form.tsx +853 -0
- package/src/components/fields/ArrayField.tsx +875 -0
- package/src/components/fields/BooleanField.tsx +114 -0
- package/src/components/fields/MultiSchemaField.tsx +221 -0
- package/src/components/fields/NullField.tsx +22 -0
- package/src/components/fields/NumberField.tsx +86 -0
- package/src/components/fields/ObjectField.tsx +331 -0
- package/src/components/fields/SchemaField.tsx +360 -0
- package/src/components/fields/StringField.tsx +71 -0
- package/src/components/fields/index.ts +31 -0
- package/src/components/templates/ArrayFieldDescriptionTemplate.tsx +41 -0
- package/src/components/templates/ArrayFieldItemTemplate.tsx +90 -0
- package/src/components/templates/ArrayFieldTemplate.tsx +88 -0
- package/src/components/templates/ArrayFieldTitleTemplate.tsx +43 -0
- package/src/components/templates/BaseInputTemplate.tsx +102 -0
- package/src/components/templates/ButtonTemplates/AddButton.tsx +29 -0
- package/src/components/templates/ButtonTemplates/IconButton.tsx +77 -0
- package/src/components/templates/ButtonTemplates/SubmitButton.tsx +21 -0
- package/src/components/templates/ButtonTemplates/index.ts +22 -0
- package/src/components/templates/DescriptionField.tsx +29 -0
- package/src/components/templates/ErrorList.tsx +35 -0
- package/src/components/templates/FieldErrorTemplate.tsx +33 -0
- package/src/components/templates/FieldHelpTemplate.tsx +29 -0
- package/src/components/templates/FieldTemplate/FieldTemplate.tsx +41 -0
- package/src/components/templates/FieldTemplate/Label.tsx +27 -0
- package/src/components/templates/FieldTemplate/index.ts +3 -0
- package/src/components/templates/ObjectFieldTemplate.tsx +83 -0
- package/src/components/templates/TitleField.tsx +19 -0
- package/src/components/templates/UnsupportedField.tsx +37 -0
- package/src/components/templates/WrapIfAdditionalTemplate.tsx +80 -0
- package/src/components/templates/index.ts +43 -0
- package/src/components/widgets/AltDateTimeWidget.tsx +16 -0
- package/src/components/widgets/AltDateWidget.tsx +198 -0
- package/src/components/widgets/CheckboxWidget.tsx +92 -0
- package/src/components/widgets/CheckboxesWidget.tsx +92 -0
- package/src/components/widgets/ColorWidget.tsx +14 -0
- package/src/components/widgets/DateTimeWidget.tsx +31 -0
- package/src/components/widgets/DateWidget.tsx +17 -0
- package/src/components/widgets/EmailWidget.tsx +13 -0
- package/src/components/widgets/FileWidget.tsx +178 -0
- package/src/components/widgets/HiddenWidget.tsx +15 -0
- package/src/components/widgets/PasswordWidget.tsx +15 -0
- package/src/components/widgets/RadioWidget.tsx +88 -0
- package/src/components/widgets/RangeWidget.tsx +23 -0
- package/src/components/widgets/SelectWidget.tsx +100 -0
- package/src/components/widgets/TextWidget.tsx +13 -0
- package/src/components/widgets/TextareaWidget.tsx +61 -0
- package/src/components/widgets/TimeWidget.tsx +17 -0
- package/src/components/widgets/URLWidget.tsx +13 -0
- package/src/components/widgets/UpDownWidget.tsx +13 -0
- package/src/components/widgets/index.ts +51 -0
- package/src/getDefaultRegistry.ts +24 -0
- package/src/index.ts +8 -0
- package/src/withTheme.tsx +42 -0
- package/dist/core.cjs.development.js +0 -4403
- package/dist/core.cjs.development.js.map +0 -1
- package/dist/core.cjs.production.min.js +0 -2
- package/dist/core.cjs.production.min.js.map +0 -1
- package/dist/core.esm.js +0 -4383
- package/dist/core.esm.js.map +0 -1
- package/dist/core.umd.development.js +0 -4393
- package/dist/core.umd.development.js.map +0 -1
- package/dist/core.umd.production.min.js +0 -2
- package/dist/core.umd.production.min.js.map +0 -1
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Component, createRef } from 'react';
|
|
3
|
+
import { createSchemaUtils, deepEquals, getTemplate, getUiOptions, isObject, mergeObjects, NAME_KEY, RJSF_ADDITONAL_PROPERTIES_FLAG, shouldRender, SUBMIT_BTN_OPTIONS_KEY, toErrorList, UI_GLOBAL_OPTIONS_KEY, UI_OPTIONS_KEY, validationDataMerge, } from '@rjsf/utils';
|
|
4
|
+
import _get from 'lodash/get';
|
|
5
|
+
import _isEmpty from 'lodash/isEmpty';
|
|
6
|
+
import _pick from 'lodash/pick';
|
|
7
|
+
import _toPath from 'lodash/toPath';
|
|
8
|
+
import getDefaultRegistry from '../getDefaultRegistry';
|
|
9
|
+
/** The `Form` component renders the outer form and all the fields defined in the `schema` */
|
|
10
|
+
export default class Form extends Component {
|
|
11
|
+
/** Constructs the `Form` from the `props`. Will setup the initial state from the props. It will also call the
|
|
12
|
+
* `onChange` handler if the initially provided `formData` is modified to add missing default values as part of the
|
|
13
|
+
* state construction.
|
|
14
|
+
*
|
|
15
|
+
* @param props - The initial props for the `Form`
|
|
16
|
+
*/
|
|
17
|
+
constructor(props) {
|
|
18
|
+
super(props);
|
|
19
|
+
/** Returns the `formData` with only the elements specified in the `fields` list
|
|
20
|
+
*
|
|
21
|
+
* @param formData - The data for the `Form`
|
|
22
|
+
* @param fields - The fields to keep while filtering
|
|
23
|
+
*/
|
|
24
|
+
this.getUsedFormData = (formData, fields) => {
|
|
25
|
+
// For the case of a single input form
|
|
26
|
+
if (fields.length === 0 && typeof formData !== 'object') {
|
|
27
|
+
return formData;
|
|
28
|
+
}
|
|
29
|
+
// _pick has incorrect type definition, it works with string[][], because lodash/hasIn supports it
|
|
30
|
+
const data = _pick(formData, fields);
|
|
31
|
+
if (Array.isArray(formData)) {
|
|
32
|
+
return Object.keys(data).map((key) => data[key]);
|
|
33
|
+
}
|
|
34
|
+
return data;
|
|
35
|
+
};
|
|
36
|
+
/** Returns the list of field names from inspecting the `pathSchema` as well as using the `formData`
|
|
37
|
+
*
|
|
38
|
+
* @param pathSchema - The `PathSchema` object for the form
|
|
39
|
+
* @param [formData] - The form data to use while checking for empty objects/arrays
|
|
40
|
+
*/
|
|
41
|
+
this.getFieldNames = (pathSchema, formData) => {
|
|
42
|
+
const getAllPaths = (_obj, acc = [], paths = [[]]) => {
|
|
43
|
+
Object.keys(_obj).forEach((key) => {
|
|
44
|
+
if (typeof _obj[key] === 'object') {
|
|
45
|
+
const newPaths = paths.map((path) => [...path, key]);
|
|
46
|
+
// If an object is marked with additionalProperties, all its keys are valid
|
|
47
|
+
if (_obj[key][RJSF_ADDITONAL_PROPERTIES_FLAG] && _obj[key][NAME_KEY] !== '') {
|
|
48
|
+
acc.push(_obj[key][NAME_KEY]);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
getAllPaths(_obj[key], acc, newPaths);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (key === NAME_KEY && _obj[key] !== '') {
|
|
55
|
+
paths.forEach((path) => {
|
|
56
|
+
const formValue = _get(formData, path);
|
|
57
|
+
// adds path to fieldNames if it points to a value
|
|
58
|
+
// or an empty object/array
|
|
59
|
+
if (typeof formValue !== 'object' || _isEmpty(formValue)) {
|
|
60
|
+
acc.push(path);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
return acc;
|
|
66
|
+
};
|
|
67
|
+
return getAllPaths(pathSchema);
|
|
68
|
+
};
|
|
69
|
+
/** Function to handle changes made to a field in the `Form`. This handler receives an entirely new copy of the
|
|
70
|
+
* `formData` along with a new `ErrorSchema`. It will first update the `formData` with any missing default fields and
|
|
71
|
+
* then, if `omitExtraData` and `liveOmit` are turned on, the `formData` will be filterer to remove any extra data not
|
|
72
|
+
* in a form field. Then, the resulting formData will be validated if required. The state will be updated with the new
|
|
73
|
+
* updated (potentially filtered) `formData`, any errors that resulted from validation. Finally the `onChange`
|
|
74
|
+
* callback will be called if specified with the updated state.
|
|
75
|
+
*
|
|
76
|
+
* @param formData - The new form data from a change to a field
|
|
77
|
+
* @param newErrorSchema - The new `ErrorSchema` based on the field change
|
|
78
|
+
* @param id - The id of the field that caused the change
|
|
79
|
+
*/
|
|
80
|
+
this.onChange = (formData, newErrorSchema, id) => {
|
|
81
|
+
const { extraErrors, omitExtraData, liveOmit, noValidate, liveValidate, onChange } = this.props;
|
|
82
|
+
const { schemaUtils, schema } = this.state;
|
|
83
|
+
if (isObject(formData) || Array.isArray(formData)) {
|
|
84
|
+
const newState = this.getStateFromProps(this.props, formData);
|
|
85
|
+
formData = newState.formData;
|
|
86
|
+
}
|
|
87
|
+
const mustValidate = !noValidate && liveValidate;
|
|
88
|
+
let state = { formData, schema };
|
|
89
|
+
let newFormData = formData;
|
|
90
|
+
if (omitExtraData === true && liveOmit === true) {
|
|
91
|
+
const retrievedSchema = schemaUtils.retrieveSchema(schema, formData);
|
|
92
|
+
const pathSchema = schemaUtils.toPathSchema(retrievedSchema, '', formData);
|
|
93
|
+
const fieldNames = this.getFieldNames(pathSchema, formData);
|
|
94
|
+
newFormData = this.getUsedFormData(formData, fieldNames);
|
|
95
|
+
state = {
|
|
96
|
+
formData: newFormData,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (mustValidate) {
|
|
100
|
+
const schemaValidation = this.validate(newFormData);
|
|
101
|
+
let errors = schemaValidation.errors;
|
|
102
|
+
let errorSchema = schemaValidation.errorSchema;
|
|
103
|
+
const schemaValidationErrors = errors;
|
|
104
|
+
const schemaValidationErrorSchema = errorSchema;
|
|
105
|
+
if (extraErrors) {
|
|
106
|
+
const merged = validationDataMerge(schemaValidation, extraErrors);
|
|
107
|
+
errorSchema = merged.errorSchema;
|
|
108
|
+
errors = merged.errors;
|
|
109
|
+
}
|
|
110
|
+
state = {
|
|
111
|
+
formData: newFormData,
|
|
112
|
+
errors,
|
|
113
|
+
errorSchema,
|
|
114
|
+
schemaValidationErrors,
|
|
115
|
+
schemaValidationErrorSchema,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
else if (!noValidate && newErrorSchema) {
|
|
119
|
+
const errorSchema = extraErrors
|
|
120
|
+
? mergeObjects(newErrorSchema, extraErrors, 'preventDuplicates')
|
|
121
|
+
: newErrorSchema;
|
|
122
|
+
state = {
|
|
123
|
+
formData: newFormData,
|
|
124
|
+
errorSchema: errorSchema,
|
|
125
|
+
errors: toErrorList(errorSchema),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
this.setState(state, () => onChange && onChange(Object.assign(Object.assign({}, this.state), state), id));
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Callback function to handle reset form data.
|
|
132
|
+
* - Reset all fields with default values.
|
|
133
|
+
* - Reset validations and errors
|
|
134
|
+
*
|
|
135
|
+
*/
|
|
136
|
+
this.reset = () => {
|
|
137
|
+
const { onChange } = this.props;
|
|
138
|
+
const newState = this.getStateFromProps(this.props, undefined);
|
|
139
|
+
const newFormData = newState.formData;
|
|
140
|
+
const state = {
|
|
141
|
+
formData: newFormData,
|
|
142
|
+
errorSchema: {},
|
|
143
|
+
errors: [],
|
|
144
|
+
schemaValidationErrors: [],
|
|
145
|
+
schemaValidationErrorSchema: {},
|
|
146
|
+
};
|
|
147
|
+
this.setState(state, () => onChange && onChange(Object.assign(Object.assign({}, this.state), state)));
|
|
148
|
+
};
|
|
149
|
+
/** Callback function to handle when a field on the form is blurred. Calls the `onBlur` callback for the `Form` if it
|
|
150
|
+
* was provided.
|
|
151
|
+
*
|
|
152
|
+
* @param id - The unique `id` of the field that was blurred
|
|
153
|
+
* @param data - The data associated with the field that was blurred
|
|
154
|
+
*/
|
|
155
|
+
this.onBlur = (id, data) => {
|
|
156
|
+
const { onBlur } = this.props;
|
|
157
|
+
if (onBlur) {
|
|
158
|
+
onBlur(id, data);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
/** Callback function to handle when a field on the form is focused. Calls the `onFocus` callback for the `Form` if it
|
|
162
|
+
* was provided.
|
|
163
|
+
*
|
|
164
|
+
* @param id - The unique `id` of the field that was focused
|
|
165
|
+
* @param data - The data associated with the field that was focused
|
|
166
|
+
*/
|
|
167
|
+
this.onFocus = (id, data) => {
|
|
168
|
+
const { onFocus } = this.props;
|
|
169
|
+
if (onFocus) {
|
|
170
|
+
onFocus(id, data);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
/** Callback function to handle when the form is submitted. First, it prevents the default event behavior. Nothing
|
|
174
|
+
* happens if the target and currentTarget of the event are not the same. It will omit any extra data in the
|
|
175
|
+
* `formData` in the state if `omitExtraData` is true. It will validate the resulting `formData`, reporting errors
|
|
176
|
+
* via the `onError()` callback unless validation is disabled. Finally, it will add in any `extraErrors` and then call
|
|
177
|
+
* back the `onSubmit` callback if it was provided.
|
|
178
|
+
*
|
|
179
|
+
* @param event - The submit HTML form event
|
|
180
|
+
*/
|
|
181
|
+
this.onSubmit = (event) => {
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
if (event.target !== event.currentTarget) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
event.persist();
|
|
187
|
+
const { omitExtraData, extraErrors, noValidate, onSubmit } = this.props;
|
|
188
|
+
let { formData: newFormData } = this.state;
|
|
189
|
+
const { schema, schemaUtils } = this.state;
|
|
190
|
+
if (omitExtraData === true) {
|
|
191
|
+
const retrievedSchema = schemaUtils.retrieveSchema(schema, newFormData);
|
|
192
|
+
const pathSchema = schemaUtils.toPathSchema(retrievedSchema, '', newFormData);
|
|
193
|
+
const fieldNames = this.getFieldNames(pathSchema, newFormData);
|
|
194
|
+
newFormData = this.getUsedFormData(newFormData, fieldNames);
|
|
195
|
+
}
|
|
196
|
+
if (noValidate || this.validateForm()) {
|
|
197
|
+
// There are no errors generated through schema validation.
|
|
198
|
+
// Check for user provided errors and update state accordingly.
|
|
199
|
+
const errorSchema = extraErrors || {};
|
|
200
|
+
const errors = extraErrors ? toErrorList(extraErrors) : [];
|
|
201
|
+
this.setState({
|
|
202
|
+
formData: newFormData,
|
|
203
|
+
errors,
|
|
204
|
+
errorSchema,
|
|
205
|
+
schemaValidationErrors: [],
|
|
206
|
+
schemaValidationErrorSchema: {},
|
|
207
|
+
}, () => {
|
|
208
|
+
if (onSubmit) {
|
|
209
|
+
onSubmit(Object.assign(Object.assign({}, this.state), { formData: newFormData, status: 'submitted' }), event);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
if (!props.validator) {
|
|
215
|
+
throw new Error('A validator is required for Form functionality to work');
|
|
216
|
+
}
|
|
217
|
+
this.state = this.getStateFromProps(props, props.formData);
|
|
218
|
+
if (this.props.onChange && !deepEquals(this.state.formData, this.props.formData)) {
|
|
219
|
+
this.props.onChange(this.state);
|
|
220
|
+
}
|
|
221
|
+
this.formElement = createRef();
|
|
222
|
+
}
|
|
223
|
+
/** React lifecycle method that gets called before new props are provided, updates the state based on new props. It
|
|
224
|
+
* will also call the`onChange` handler if the `formData` is modified to add missing default values as part of the
|
|
225
|
+
* state construction.
|
|
226
|
+
*
|
|
227
|
+
* @param nextProps - The new set of props about to be applied to the `Form`
|
|
228
|
+
*/
|
|
229
|
+
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
230
|
+
const nextState = this.getStateFromProps(nextProps, nextProps.formData);
|
|
231
|
+
if (!deepEquals(nextState.formData, nextProps.formData) &&
|
|
232
|
+
!deepEquals(nextState.formData, this.state.formData) &&
|
|
233
|
+
nextProps.onChange) {
|
|
234
|
+
nextProps.onChange(nextState);
|
|
235
|
+
}
|
|
236
|
+
this.setState(nextState);
|
|
237
|
+
}
|
|
238
|
+
/** Extracts the updated state from the given `props` and `inputFormData`. As part of this process, the
|
|
239
|
+
* `inputFormData` is first processed to add any missing required defaults. After that, the data is run through the
|
|
240
|
+
* validation process IF required by the `props`.
|
|
241
|
+
*
|
|
242
|
+
* @param props - The props passed to the `Form`
|
|
243
|
+
* @param inputFormData - The new or current data for the `Form`
|
|
244
|
+
* @returns - The new state for the `Form`
|
|
245
|
+
*/
|
|
246
|
+
getStateFromProps(props, inputFormData) {
|
|
247
|
+
const state = this.state || {};
|
|
248
|
+
const schema = 'schema' in props ? props.schema : this.props.schema;
|
|
249
|
+
const uiSchema = ('uiSchema' in props ? props.uiSchema : this.props.uiSchema) || {};
|
|
250
|
+
const edit = typeof inputFormData !== 'undefined';
|
|
251
|
+
const liveValidate = 'liveValidate' in props ? props.liveValidate : this.props.liveValidate;
|
|
252
|
+
const mustValidate = edit && !props.noValidate && liveValidate;
|
|
253
|
+
const rootSchema = schema;
|
|
254
|
+
const experimental_defaultFormStateBehavior = 'experimental_defaultFormStateBehavior' in props
|
|
255
|
+
? props.experimental_defaultFormStateBehavior
|
|
256
|
+
: this.props.experimental_defaultFormStateBehavior;
|
|
257
|
+
let schemaUtils = state.schemaUtils;
|
|
258
|
+
if (!schemaUtils ||
|
|
259
|
+
schemaUtils.doesSchemaUtilsDiffer(props.validator, rootSchema, experimental_defaultFormStateBehavior)) {
|
|
260
|
+
schemaUtils = createSchemaUtils(props.validator, rootSchema, experimental_defaultFormStateBehavior);
|
|
261
|
+
}
|
|
262
|
+
const formData = schemaUtils.getDefaultFormState(schema, inputFormData);
|
|
263
|
+
const retrievedSchema = schemaUtils.retrieveSchema(schema, formData);
|
|
264
|
+
const getCurrentErrors = () => {
|
|
265
|
+
if (props.noValidate) {
|
|
266
|
+
return { errors: [], errorSchema: {} };
|
|
267
|
+
}
|
|
268
|
+
else if (!props.liveValidate) {
|
|
269
|
+
return {
|
|
270
|
+
errors: state.schemaValidationErrors || [],
|
|
271
|
+
errorSchema: state.schemaValidationErrorSchema || {},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
errors: state.errors || [],
|
|
276
|
+
errorSchema: state.errorSchema || {},
|
|
277
|
+
};
|
|
278
|
+
};
|
|
279
|
+
let errors;
|
|
280
|
+
let errorSchema;
|
|
281
|
+
let schemaValidationErrors = state.schemaValidationErrors;
|
|
282
|
+
let schemaValidationErrorSchema = state.schemaValidationErrorSchema;
|
|
283
|
+
if (mustValidate) {
|
|
284
|
+
const schemaValidation = this.validate(formData, schema, schemaUtils);
|
|
285
|
+
errors = schemaValidation.errors;
|
|
286
|
+
errorSchema = schemaValidation.errorSchema;
|
|
287
|
+
schemaValidationErrors = errors;
|
|
288
|
+
schemaValidationErrorSchema = errorSchema;
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
const currentErrors = getCurrentErrors();
|
|
292
|
+
errors = currentErrors.errors;
|
|
293
|
+
errorSchema = currentErrors.errorSchema;
|
|
294
|
+
}
|
|
295
|
+
if (props.extraErrors) {
|
|
296
|
+
const merged = validationDataMerge({ errorSchema, errors }, props.extraErrors);
|
|
297
|
+
errorSchema = merged.errorSchema;
|
|
298
|
+
errors = merged.errors;
|
|
299
|
+
}
|
|
300
|
+
const idSchema = schemaUtils.toIdSchema(retrievedSchema, uiSchema['ui:rootFieldId'], formData, props.idPrefix, props.idSeparator);
|
|
301
|
+
const nextState = {
|
|
302
|
+
schemaUtils,
|
|
303
|
+
schema,
|
|
304
|
+
uiSchema,
|
|
305
|
+
idSchema,
|
|
306
|
+
formData,
|
|
307
|
+
edit,
|
|
308
|
+
errors,
|
|
309
|
+
errorSchema,
|
|
310
|
+
schemaValidationErrors,
|
|
311
|
+
schemaValidationErrorSchema,
|
|
312
|
+
};
|
|
313
|
+
return nextState;
|
|
314
|
+
}
|
|
315
|
+
/** React lifecycle method that is used to determine whether component should be updated.
|
|
316
|
+
*
|
|
317
|
+
* @param nextProps - The next version of the props
|
|
318
|
+
* @param nextState - The next version of the state
|
|
319
|
+
* @returns - True if the component should be updated, false otherwise
|
|
320
|
+
*/
|
|
321
|
+
shouldComponentUpdate(nextProps, nextState) {
|
|
322
|
+
return shouldRender(this, nextProps, nextState);
|
|
323
|
+
}
|
|
324
|
+
/** Validates the `formData` against the `schema` using the `altSchemaUtils` (if provided otherwise it uses the
|
|
325
|
+
* `schemaUtils` in the state), returning the results.
|
|
326
|
+
*
|
|
327
|
+
* @param formData - The new form data to validate
|
|
328
|
+
* @param schema - The schema used to validate against
|
|
329
|
+
* @param altSchemaUtils - The alternate schemaUtils to use for validation
|
|
330
|
+
*/
|
|
331
|
+
validate(formData, schema = this.props.schema, altSchemaUtils) {
|
|
332
|
+
const schemaUtils = altSchemaUtils ? altSchemaUtils : this.state.schemaUtils;
|
|
333
|
+
const { customValidate, transformErrors, uiSchema } = this.props;
|
|
334
|
+
const resolvedSchema = schemaUtils.retrieveSchema(schema, formData);
|
|
335
|
+
return schemaUtils
|
|
336
|
+
.getValidator()
|
|
337
|
+
.validateFormData(formData, resolvedSchema, customValidate, transformErrors, uiSchema);
|
|
338
|
+
}
|
|
339
|
+
/** Renders any errors contained in the `state` in using the `ErrorList`, if not disabled by `showErrorList`. */
|
|
340
|
+
renderErrors(registry) {
|
|
341
|
+
const { errors, errorSchema, schema, uiSchema } = this.state;
|
|
342
|
+
const { formContext } = this.props;
|
|
343
|
+
const options = getUiOptions(uiSchema);
|
|
344
|
+
const ErrorListTemplate = getTemplate('ErrorListTemplate', registry, options);
|
|
345
|
+
if (errors && errors.length) {
|
|
346
|
+
return (_jsx(ErrorListTemplate, { errors: errors, errorSchema: errorSchema || {}, schema: schema, uiSchema: uiSchema, formContext: formContext, registry: registry }));
|
|
347
|
+
}
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
/** Returns the registry for the form */
|
|
351
|
+
getRegistry() {
|
|
352
|
+
var _a;
|
|
353
|
+
const { translateString: customTranslateString, uiSchema = {} } = this.props;
|
|
354
|
+
const { schemaUtils } = this.state;
|
|
355
|
+
const { fields, templates, widgets, formContext, translateString } = getDefaultRegistry();
|
|
356
|
+
return {
|
|
357
|
+
fields: Object.assign(Object.assign({}, fields), this.props.fields),
|
|
358
|
+
templates: Object.assign(Object.assign(Object.assign({}, templates), this.props.templates), { ButtonTemplates: Object.assign(Object.assign({}, templates.ButtonTemplates), (_a = this.props.templates) === null || _a === void 0 ? void 0 : _a.ButtonTemplates) }),
|
|
359
|
+
widgets: Object.assign(Object.assign({}, widgets), this.props.widgets),
|
|
360
|
+
rootSchema: this.props.schema,
|
|
361
|
+
formContext: this.props.formContext || formContext,
|
|
362
|
+
schemaUtils,
|
|
363
|
+
translateString: customTranslateString || translateString,
|
|
364
|
+
globalUiOptions: uiSchema[UI_GLOBAL_OPTIONS_KEY],
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
/** Provides a function that can be used to programmatically submit the `Form` */
|
|
368
|
+
submit() {
|
|
369
|
+
if (this.formElement.current) {
|
|
370
|
+
this.formElement.current.dispatchEvent(new CustomEvent('submit', {
|
|
371
|
+
cancelable: true,
|
|
372
|
+
}));
|
|
373
|
+
this.formElement.current.requestSubmit();
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/** Attempts to focus on the field associated with the `error`. Uses the `property` field to compute path of the error
|
|
377
|
+
* field, then, using the `idPrefix` and `idSeparator` converts that path into an id. Then the input element with that
|
|
378
|
+
* id is attempted to be found using the `formElement` ref. If it is located, then it is focused.
|
|
379
|
+
*
|
|
380
|
+
* @param error - The error on which to focus
|
|
381
|
+
*/
|
|
382
|
+
focusOnError(error) {
|
|
383
|
+
const { idPrefix = 'root', idSeparator = '_' } = this.props;
|
|
384
|
+
const { property } = error;
|
|
385
|
+
const path = _toPath(property);
|
|
386
|
+
if (path[0] === '') {
|
|
387
|
+
// Most of the time the `.foo` property results in the first element being empty, so replace it with the idPrefix
|
|
388
|
+
path[0] = idPrefix;
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
// Otherwise insert the idPrefix into the first location using unshift
|
|
392
|
+
path.unshift(idPrefix);
|
|
393
|
+
}
|
|
394
|
+
const elementId = path.join(idSeparator);
|
|
395
|
+
let field = this.formElement.current.elements[elementId];
|
|
396
|
+
if (!field) {
|
|
397
|
+
// if not an exact match, try finding an input starting with the element id (like radio buttons or checkboxes)
|
|
398
|
+
field = this.formElement.current.querySelector(`input[id^=${elementId}`);
|
|
399
|
+
}
|
|
400
|
+
if (field && field.length) {
|
|
401
|
+
// If we got a list with length > 0
|
|
402
|
+
field = field[0];
|
|
403
|
+
}
|
|
404
|
+
if (field) {
|
|
405
|
+
field.focus();
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/** Programmatically validate the form. If `onError` is provided, then it will be called with the list of errors the
|
|
409
|
+
* same way as would happen on form submission.
|
|
410
|
+
*
|
|
411
|
+
* @returns - True if the form is valid, false otherwise.
|
|
412
|
+
*/
|
|
413
|
+
validateForm() {
|
|
414
|
+
const { extraErrors, extraErrorsBlockSubmit, focusOnFirstError, onError } = this.props;
|
|
415
|
+
const { formData } = this.state;
|
|
416
|
+
const schemaValidation = this.validate(formData);
|
|
417
|
+
let errors = schemaValidation.errors;
|
|
418
|
+
let errorSchema = schemaValidation.errorSchema;
|
|
419
|
+
const schemaValidationErrors = errors;
|
|
420
|
+
const schemaValidationErrorSchema = errorSchema;
|
|
421
|
+
if (errors.length > 0 || (extraErrors && extraErrorsBlockSubmit)) {
|
|
422
|
+
if (extraErrors) {
|
|
423
|
+
const merged = validationDataMerge(schemaValidation, extraErrors);
|
|
424
|
+
errorSchema = merged.errorSchema;
|
|
425
|
+
errors = merged.errors;
|
|
426
|
+
}
|
|
427
|
+
if (focusOnFirstError) {
|
|
428
|
+
if (typeof focusOnFirstError === 'function') {
|
|
429
|
+
focusOnFirstError(errors[0]);
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
this.focusOnError(errors[0]);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
this.setState({
|
|
436
|
+
errors,
|
|
437
|
+
errorSchema,
|
|
438
|
+
schemaValidationErrors,
|
|
439
|
+
schemaValidationErrorSchema,
|
|
440
|
+
}, () => {
|
|
441
|
+
if (onError) {
|
|
442
|
+
onError(errors);
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
console.error('Form validation failed', errors);
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
return false;
|
|
449
|
+
}
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
/** Renders the `Form` fields inside the <form> | `tagName` or `_internalFormWrapper`, rendering any errors if
|
|
453
|
+
* needed along with the submit button or any children of the form.
|
|
454
|
+
*/
|
|
455
|
+
render() {
|
|
456
|
+
const { children, id, idPrefix, idSeparator, className = '', tagName, name, method, target, action, autoComplete, enctype, acceptcharset, noHtml5Validate = false, disabled = false, readonly = false, formContext, showErrorList = 'top', _internalFormWrapper, } = this.props;
|
|
457
|
+
const { schema, uiSchema, formData, errorSchema, idSchema } = this.state;
|
|
458
|
+
const registry = this.getRegistry();
|
|
459
|
+
const { SchemaField: _SchemaField } = registry.fields;
|
|
460
|
+
const { SubmitButton } = registry.templates.ButtonTemplates;
|
|
461
|
+
// The `semantic-ui` and `material-ui` themes have `_internalFormWrapper`s that take an `as` prop that is the
|
|
462
|
+
// PropTypes.elementType to use for the inner tag, so we'll need to pass `tagName` along if it is provided.
|
|
463
|
+
// NOTE, the `as` prop is native to `semantic-ui` and is emulated in the `material-ui` theme
|
|
464
|
+
const as = _internalFormWrapper ? tagName : undefined;
|
|
465
|
+
const FormTag = _internalFormWrapper || tagName || 'form';
|
|
466
|
+
let { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions = {} } = getUiOptions(uiSchema);
|
|
467
|
+
if (disabled) {
|
|
468
|
+
submitOptions = Object.assign(Object.assign({}, submitOptions), { props: Object.assign(Object.assign({}, submitOptions.props), { disabled: true }) });
|
|
469
|
+
}
|
|
470
|
+
const submitUiSchema = { [UI_OPTIONS_KEY]: { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions } };
|
|
471
|
+
return (_jsxs(FormTag, Object.assign({ className: className ? className : 'rjsf', id: id, name: name, method: method, target: target, action: action, autoComplete: autoComplete, encType: enctype, acceptCharset: acceptcharset, noValidate: noHtml5Validate, onSubmit: this.onSubmit, as: as, ref: this.formElement }, { children: [showErrorList === 'top' && this.renderErrors(registry), _jsx(_SchemaField, { name: '', schema: schema, uiSchema: uiSchema, errorSchema: errorSchema, idSchema: idSchema, idPrefix: idPrefix, idSeparator: idSeparator, formContext: formContext, formData: formData, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, registry: registry, disabled: disabled, readonly: readonly }), children ? children : _jsx(SubmitButton, { uiSchema: submitUiSchema, registry: registry }), showErrorList === 'bottom' && this.renderErrors(registry)] })));
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
//# sourceMappingURL=Form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Form.js","sourceRoot":"","sources":["../../src/components/Form.tsx"],"names":[],"mappings":"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"}
|