-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pass raw errors to field widgets #826
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR. I don't see any tests here. Could you please add a couple? In particular, I don't see how ArrayField or ObjectField handle these raw errors.
src/components/widgets/BaseInput.js
Outdated
@@ -22,14 +22,18 @@ function BaseInput(props) { | |||
const _onChange = ({ target: { value } }) => { | |||
return props.onChange(value === "" ? options.emptyValue : value); | |||
}; | |||
|
|||
const cleanProps = { ...inputProps }; | |||
delete cleanProps.rawErrors; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you can do const {rawErrors, ...cleanProps} = inputProps;
See the "Rest in object destructuring section" of https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring.
src/components/fields/SchemaField.js
Outdated
{children} | ||
{React.Children.map(children, child => { | ||
return React.cloneElement(child, { rawErrors: props.rawErrors }); | ||
})} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems a bit heavy. Why is this necessary? Wouldn't it be better to pass the rawErrors
prop when we constructed widgets?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've just reviewed the code again and I see that this can be passed through the SchemaFieldRender function. I'll update this.
Thinking about this more, I don't think the ArrayField or ObjectField even need to be passed the raw errors. The objective of the PR is to pass field level errors down to the fields so that custom field components can render errors in any way they wish. I think I can remove the props for ArrayField and ObjectField. |
…est for passing of raw errors; removed unused prop from ArrayField.
@glasserc any feedback on my latest changes? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, looks good to me. I had missed that the raw errors came from the errorSchema, which is already being passed correctly through arrays/objects.
* Fix rjsf-team#221: No validating but updating errorSchema base on array operation when live validation is off. * Fix comparing * Directly update errorSchema in onChange * Typo fix (rjsf-team#737) * Make form submission example clearer (rjsf-team#736) In the example, the `onSubmit` function receives a `formData` obj. However, the actual data is in `formData.formData`. While this is explained in the docs, I propose making it clearer in the example as well. * Update prettier to v1.8.2 (rjsf-team#756) * fix: Pass `disabled` prop to `FieldTemplate`. (rjsf-team#741) If you want to change how your FieldTemplate is rendered based on ui:disabled, you currently have to check `uiSchema["ui:disabled"]`, which is unlike the pattern for `readonly` and other known `ui:*` settings. * Fix issue rjsf-team#747 (rjsf-team#748) * 66 enum no type (rjsf-team#668) * Failing test for enum without type (rjsf-team#66 rjsf-team#611) * Proposed fix for enum without type (rjsf-team#66 rjsf-team#611) * PR feedback - getSchemaType function https://github.com/mozilla-services/react-jsonschema-form/pull/668/files#r133395455 * Fix onAddClick signature in ArrayFieldTemplate (rjsf-team#775) According to https://github.com/mozilla-services/react-jsonschema-form/blob/master/src/components/fields/ArrayField.js#L224 `onAddClick` is not returning function as specified in the documentation. * fix typo in css code (rjsf-team#799) * README: fix code snippet (rjsf-team#785) * Generating idSchema based on dependency changes Fix rjsf-team#778 , Fix rjsf-team#803 * Add idPrefix option (Fix rjsf-team#796) (rjsf-team#806) * Make .editorconfig valid (rjsf-team#807) * typo (rjsf-team#811) * Add span and class to label required symbol (rjsf-team#765) * a priori should be italicized for readibility (rjsf-team#825) * Priori should by prior, I think * Italicizing a priori based on suggestion * pass raw errors to field widgets (rjsf-team#826) * pass raw errors to field widgets * fixed formatting * fixing line endings * Pass raw errors into Field at creation; object destructuring; added test for passing of raw errors; removed unused prop from ArrayField. * fix lineEndings * Bump 1.0.1 * Move to the 3.x series of react-codemirror2 (rjsf-team#857) * Move to the 3.x series of react-codemirror2 * Move to the 4.x series of react-codemirror2 See scniro/react-codemirror2#63 for more details. * Pass formContext to ArrayFieldTemplate when rendering fixed array (rjsf-team#858) * handle errors to correctly display schema errors in form (rjsf-team#864) * Bump version 1.0.2 * Link to official JSON Schema site (rjsf-team#873) * Updated README to mention the support from JSON Schema compliant drop-down enums (rjsf-team#882) * Add passing of raw errors to ArrayField template and components (rjsf-team#876) * Fixed multiplicative errors on schema dependencies (rjsf-team#884) * Add idPrefix option (rjsf-team#883) * Fix warning on FileWidget (rjsf-team#842) * Update prettier and fix files (rjsf-team#892) * Bump 1.0.3
Reasons for making this change
See issue #727
The current implementation of ArrayField, BooleanField, and StringField don't pass the error schema down to the widgets they render. This makes rendering errors as part of a custom control tricky.
This PR solves this by passing the raw errors down, but maintaining the default implementation for displaying errors with the libraries built in widgets.
Checklist
npm run cs-format
on my branch to conform my code to prettier coding style