diff --git a/src/components/fields/ArrayField.js b/src/components/fields/ArrayField.js index 67f433394d..b8ad575a9f 100644 --- a/src/components/fields/ArrayField.js +++ b/src/components/fields/ArrayField.js @@ -15,6 +15,7 @@ import { toIdSchema, getDefaultRegistry, } from "../../utils"; +import { registryShape } from "../../types"; function ArrayFieldTitle({ TitleField, idSchema, title, required }) { if (!title) { @@ -649,14 +650,7 @@ if (process.env.NODE_ENV !== "production") { disabled: PropTypes.bool, readonly: PropTypes.bool, autofocus: PropTypes.bool, - registry: PropTypes.shape({ - widgets: PropTypes.objectOf( - PropTypes.oneOfType([PropTypes.func, PropTypes.object]) - ).isRequired, - fields: PropTypes.objectOf(PropTypes.func).isRequired, - definitions: PropTypes.object.isRequired, - formContext: PropTypes.object.isRequired, - }), + registry: registryShape, }; } diff --git a/src/components/fields/BooleanField.js b/src/components/fields/BooleanField.js index 5531486283..d97dd56898 100644 --- a/src/components/fields/BooleanField.js +++ b/src/components/fields/BooleanField.js @@ -7,6 +7,7 @@ import { optionsList, getDefaultRegistry, } from "../../utils"; +import { registryShape } from "../../types"; function BooleanField(props) { const { @@ -59,14 +60,7 @@ if (process.env.NODE_ENV !== "production") { disabled: PropTypes.bool, readonly: PropTypes.bool, autofocus: PropTypes.bool, - registry: PropTypes.shape({ - widgets: PropTypes.objectOf( - PropTypes.oneOfType([PropTypes.func, PropTypes.object]) - ).isRequired, - fields: PropTypes.objectOf(PropTypes.func).isRequired, - definitions: PropTypes.object.isRequired, - formContext: PropTypes.object.isRequired, - }), + registry: registryShape, }; } diff --git a/src/components/fields/NumberField.js b/src/components/fields/NumberField.js index 30c297b19b..2c64fcc2b8 100644 --- a/src/components/fields/NumberField.js +++ b/src/components/fields/NumberField.js @@ -2,6 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import { asNumber } from "../../utils"; +import { registryShape } from "../../types"; function NumberField(props) { const { StringField } = props.registry.fields; @@ -15,6 +16,7 @@ function NumberField(props) { if (process.env.NODE_ENV !== "production") { NumberField.propTypes = { + registry: registryShape.isRequired, schema: PropTypes.object.isRequired, uiSchema: PropTypes.object, idSchema: PropTypes.object, diff --git a/src/components/fields/ObjectField.js b/src/components/fields/ObjectField.js index e10c22410c..48a082076f 100644 --- a/src/components/fields/ObjectField.js +++ b/src/components/fields/ObjectField.js @@ -6,6 +6,7 @@ import { retrieveSchema, getDefaultRegistry, } from "../../utils"; +import { registryShape } from "../../types"; function DefaultObjectFieldTemplate(props) { const { TitleField, DescriptionField } = props; @@ -147,14 +148,7 @@ if (process.env.NODE_ENV !== "production") { required: PropTypes.bool, disabled: PropTypes.bool, readonly: PropTypes.bool, - registry: PropTypes.shape({ - widgets: PropTypes.objectOf( - PropTypes.oneOfType([PropTypes.func, PropTypes.object]) - ).isRequired, - fields: PropTypes.objectOf(PropTypes.func).isRequired, - definitions: PropTypes.object.isRequired, - formContext: PropTypes.object.isRequired, - }), + registry: registryShape, }; } diff --git a/src/components/fields/SchemaField.js b/src/components/fields/SchemaField.js index 4c9b109cb7..5ab833b6b7 100644 --- a/src/components/fields/SchemaField.js +++ b/src/components/fields/SchemaField.js @@ -9,6 +9,7 @@ import { isFilesArray, deepEquals, } from "../../utils"; +import { registryShape } from "../../types"; import UnsupportedField from "./UnsupportedField"; const REQUIRED_FIELD_SYMBOL = "*"; @@ -288,17 +289,7 @@ if (process.env.NODE_ENV !== "production") { idSchema: PropTypes.object, formData: PropTypes.any, errorSchema: PropTypes.object, - registry: PropTypes.shape({ - widgets: PropTypes.objectOf( - PropTypes.oneOfType([PropTypes.func, PropTypes.object]) - ).isRequired, - fields: PropTypes.objectOf(PropTypes.func).isRequired, - definitions: PropTypes.object.isRequired, - ArrayFieldTemplate: PropTypes.func, - ObjectFieldTemplate: PropTypes.func, - FieldTemplate: PropTypes.func, - formContext: PropTypes.object.isRequired, - }), + registry: registryShape, }; } diff --git a/src/components/fields/StringField.js b/src/components/fields/StringField.js index 9ecee6eb93..c351085379 100644 --- a/src/components/fields/StringField.js +++ b/src/components/fields/StringField.js @@ -8,6 +8,7 @@ import { optionsList, getDefaultRegistry, } from "../../utils"; +import { registryShape } from "../../types"; function StringField(props) { const { @@ -64,14 +65,7 @@ if (process.env.NODE_ENV !== "production") { onBlur: PropTypes.func, onFocus: PropTypes.func, formData: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), - registry: PropTypes.shape({ - widgets: PropTypes.objectOf( - PropTypes.oneOfType([PropTypes.func, PropTypes.object]) - ).isRequired, - fields: PropTypes.objectOf(PropTypes.func).isRequired, - definitions: PropTypes.object.isRequired, - formContext: PropTypes.object.isRequired, - }), + registry: registryShape, formContext: PropTypes.object.isRequired, required: PropTypes.bool, disabled: PropTypes.bool, diff --git a/src/components/widgets/AltDateTimeWidget.js b/src/components/widgets/AltDateTimeWidget.js index 2d18450ef5..61ee19c166 100644 --- a/src/components/widgets/AltDateTimeWidget.js +++ b/src/components/widgets/AltDateTimeWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function AltDateTimeWidget(props) { const { AltDateWidget } = props.registry.widgets; return ; @@ -8,6 +10,7 @@ function AltDateTimeWidget(props) { if (process.env.NODE_ENV !== "production") { AltDateTimeWidget.propTypes = { + registry: registryShape.isRequired, schema: PropTypes.object.isRequired, id: PropTypes.string.isRequired, value: PropTypes.string, diff --git a/src/components/widgets/AltDateWidget.js b/src/components/widgets/AltDateWidget.js index b28f48e75e..eb9ce2c81d 100644 --- a/src/components/widgets/AltDateWidget.js +++ b/src/components/widgets/AltDateWidget.js @@ -2,6 +2,7 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import { shouldRender, parseDateString, toDateString, pad } from "../../utils"; +import { registryShape } from "../../types"; function rangeOptions(start, stop) { let options = []; @@ -155,6 +156,7 @@ class AltDateWidget extends Component { if (process.env.NODE_ENV !== "production") { AltDateWidget.propTypes = { + registry: registryShape.isRequired, schema: PropTypes.object.isRequired, id: PropTypes.string.isRequired, value: PropTypes.string, diff --git a/src/components/widgets/ColorWidget.js b/src/components/widgets/ColorWidget.js index de622b0a6f..f5fb7affbb 100644 --- a/src/components/widgets/ColorWidget.js +++ b/src/components/widgets/ColorWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function ColorWidget(props) { const { disabled, readonly, registry: { widgets: { BaseInput } } } = props; return ; @@ -8,6 +10,7 @@ function ColorWidget(props) { if (process.env.NODE_ENV !== "production") { ColorWidget.propTypes = { + registry: registryShape.isRequired, schema: PropTypes.object.isRequired, id: PropTypes.string.isRequired, value: PropTypes.string, diff --git a/src/components/widgets/DateTimeWidget.js b/src/components/widgets/DateTimeWidget.js index cf787ec9f7..996bebe330 100644 --- a/src/components/widgets/DateTimeWidget.js +++ b/src/components/widgets/DateTimeWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; + import { pad } from "../../utils"; +import { registryShape } from "../../types"; export function utcToLocal(jsonDate) { if (!jsonDate) { @@ -46,6 +48,7 @@ function DateTimeWidget(props) { if (process.env.NODE_ENV !== "production") { DateTimeWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.string, }; } diff --git a/src/components/widgets/DateWidget.js b/src/components/widgets/DateWidget.js index 5ce3eacd96..733c504176 100644 --- a/src/components/widgets/DateWidget.js +++ b/src/components/widgets/DateWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function DateWidget(props) { const { onChange, registry: { widgets: { BaseInput } } } = props; return ( @@ -14,6 +16,7 @@ function DateWidget(props) { if (process.env.NODE_ENV !== "production") { DateWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.string, }; } diff --git a/src/components/widgets/EmailWidget.js b/src/components/widgets/EmailWidget.js index bdfe7a7ec7..60c9addcd8 100644 --- a/src/components/widgets/EmailWidget.js +++ b/src/components/widgets/EmailWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function EmailWidget(props) { const { BaseInput } = props.registry.widgets; return ; @@ -8,6 +10,7 @@ function EmailWidget(props) { if (process.env.NODE_ENV !== "production") { EmailWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.string, }; } diff --git a/src/components/widgets/PasswordWidget.js b/src/components/widgets/PasswordWidget.js index 397b1adca2..2c2159a935 100644 --- a/src/components/widgets/PasswordWidget.js +++ b/src/components/widgets/PasswordWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function PasswordWidget(props) { const { BaseInput } = props.registry.widgets; return ; @@ -8,6 +10,7 @@ function PasswordWidget(props) { if (process.env.NODE_ENV !== "production") { PasswordWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.string, }; } diff --git a/src/components/widgets/RangeWidget.js b/src/components/widgets/RangeWidget.js index 6e7e11184c..8c4872de36 100644 --- a/src/components/widgets/RangeWidget.js +++ b/src/components/widgets/RangeWidget.js @@ -2,6 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import { rangeSpec } from "../../utils"; +import { registryShape } from "../../types"; function RangeWidget(props) { const { schema, value, registry: { widgets: { BaseInput } } } = props; @@ -15,6 +16,7 @@ function RangeWidget(props) { if (process.env.NODE_ENV !== "production") { RangeWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }; } diff --git a/src/components/widgets/TextWidget.js b/src/components/widgets/TextWidget.js index 027e4e26f1..9994e0fce7 100644 --- a/src/components/widgets/TextWidget.js +++ b/src/components/widgets/TextWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function TextWidget(props) { const { BaseInput } = props.registry.widgets; return ; @@ -8,6 +10,7 @@ function TextWidget(props) { if (process.env.NODE_ENV !== "production") { TextWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), }; } diff --git a/src/components/widgets/URLWidget.js b/src/components/widgets/URLWidget.js index 8b3448a863..c61009ef9a 100644 --- a/src/components/widgets/URLWidget.js +++ b/src/components/widgets/URLWidget.js @@ -1,6 +1,8 @@ import React from "react"; import PropTypes from "prop-types"; +import { registryShape } from "../../types"; + function URLWidget(props) { const { BaseInput } = props.registry.widgets; return ; @@ -8,6 +10,7 @@ function URLWidget(props) { if (process.env.NODE_ENV !== "production") { URLWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.string, }; } diff --git a/src/components/widgets/UpDownWidget.js b/src/components/widgets/UpDownWidget.js index 933f65933a..2cd5eb2d0a 100644 --- a/src/components/widgets/UpDownWidget.js +++ b/src/components/widgets/UpDownWidget.js @@ -2,6 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import { rangeSpec } from "../../utils"; +import { registryShape } from "../../types"; function UpDownWidget(props) { const { registry: { widgets: { BaseInput } } } = props; @@ -10,6 +11,7 @@ function UpDownWidget(props) { if (process.env.NODE_ENV !== "production") { UpDownWidget.propTypes = { + registry: registryShape.isRequired, value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), }; } diff --git a/src/types.js b/src/types.js new file mode 100644 index 0000000000..1fb0824e29 --- /dev/null +++ b/src/types.js @@ -0,0 +1,13 @@ +import PropTypes from "prop-types"; + +const { func, object, objectOf, oneOfType, shape } = PropTypes; + +export const registryShape = shape({ + widgets: objectOf(oneOfType([func, object])).isRequired, + fields: objectOf(func).isRequired, + definitions: object.isRequired, + formContext: object.isRequired, + ArrayFieldTemplate: func, + ObjectFieldTemplate: func, + FieldTemplate: func, +});