diff --git a/docs/advanced-customization/custom-templates.md b/docs/advanced-customization/custom-templates.md index 5eabf6a5ee..bd91607a79 100644 --- a/docs/advanced-customization/custom-templates.md +++ b/docs/advanced-customization/custom-templates.md @@ -219,5 +219,6 @@ The following props are part of each element in `properties`: - `name`: A string representing the property name. - `disabled`: A boolean value stating if the object property is disabled. - `readonly`: A boolean value stating if the property is read-only. +- `hidden`: A boolean value stating if the property should be hidden. > Note: Array and object field templates are always rendered inside of the FieldTemplate. To fully customize an object field template, you may need to specify both `ui:FieldTemplate` and `ui:ObjectFieldTemplate`. diff --git a/packages/antd/src/templates/ObjectFieldTemplate/index.js b/packages/antd/src/templates/ObjectFieldTemplate/index.js index c558435969..4652f18461 100644 --- a/packages/antd/src/templates/ObjectFieldTemplate/index.js +++ b/packages/antd/src/templates/ObjectFieldTemplate/index.js @@ -75,9 +75,6 @@ const ObjectFieldTemplate = ({ return defaultColSpan; }; - const filterHidden = (element) => - element.content.props.uiSchema['ui:widget'] !== 'hidden'; - return (
@@ -99,7 +96,7 @@ const ObjectFieldTemplate = ({ /> )} - {properties.filter(filterHidden).map((element) => ( + {properties.filter((e) => !e.hidden).map((element) => ( {element.content} diff --git a/packages/antd/test/Form.test.js b/packages/antd/test/Form.test.js index 2e57ce61ef..d408c9710d 100644 --- a/packages/antd/test/Form.test.js +++ b/packages/antd/test/Form.test.js @@ -78,4 +78,23 @@ describe("single fields", () => { .toJSON(); expect(tree).toMatchSnapshot(); }); + test("hidden field", () => { + const schema = { + type: "object", + properties: { + "my-field": { + type: "string", + }, + }, + }; + const uiSchema = { + "my-field": { + "ui:widget": "hidden", + }, + }; + const tree = renderer + .create(
) + .toJSON(); + expect(tree).toMatchSnapshot(); + }); }); diff --git a/packages/antd/test/__snapshots__/Form.test.js.snap b/packages/antd/test/__snapshots__/Form.test.js.snap index 155f4967db..057c23adab 100644 --- a/packages/antd/test/__snapshots__/Form.test.js.snap +++ b/packages/antd/test/__snapshots__/Form.test.js.snap @@ -1,5 +1,39 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`single fields hidden field 1`] = ` + +
+
+
+
+
+
+ +
+
+`; + exports[`single fields null field 1`] = `
{properties.map((element: any, index: number) => ( - + {element.content} ))} diff --git a/packages/bootstrap-4/test/Form.test.tsx b/packages/bootstrap-4/test/Form.test.tsx index 7fb76f4841..4d3247fbcd 100644 --- a/packages/bootstrap-4/test/Form.test.tsx +++ b/packages/bootstrap-4/test/Form.test.tsx @@ -197,4 +197,23 @@ describe("single fields", () => { .toJSON(); expect(tree).toMatchSnapshot(); }); + test("hidden field", () => { + const schema: JSONSchema7 = { + type: "object", + properties: { + "my-field": { + type: "string", + }, + }, + }; + const uiSchema: UiSchema = { + "my-field": { + "ui:widget": "hidden", + }, + }; + const tree = renderer + .create() + .toJSON(); + expect(tree).toMatchSnapshot(); + }); }); diff --git a/packages/bootstrap-4/test/__snapshots__/Form.test.tsx.snap b/packages/bootstrap-4/test/__snapshots__/Form.test.tsx.snap index ec2606e00b..abb92593dd 100644 --- a/packages/bootstrap-4/test/__snapshots__/Form.test.tsx.snap +++ b/packages/bootstrap-4/test/__snapshots__/Form.test.tsx.snap @@ -346,6 +346,55 @@ exports[`single fields format datetime 1`] = ` `; +exports[`single fields hidden field 1`] = ` +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+
+`; + exports[`single fields null field 1`] = `
() => void; readonly: boolean; diff --git a/packages/core/src/components/fields/ObjectField.js b/packages/core/src/components/fields/ObjectField.js index 09de06e318..fa80926c45 100644 --- a/packages/core/src/components/fields/ObjectField.js +++ b/packages/core/src/components/fields/ObjectField.js @@ -229,6 +229,11 @@ class ObjectField extends Component { const addedByAdditionalProperties = schema.properties[ name ].hasOwnProperty(ADDITIONAL_PROPERTY_FLAG); + const fieldUiSchema = addedByAdditionalProperties + ? uiSchema.additionalProperties + : uiSchema[name]; + const hidden = fieldUiSchema && fieldUiSchema["ui:widget"] === "hidden"; + return { content: ( { // TODO: do this better by not returning the form-group class from master. classNames = "ms-Grid-col ms-sm12 " + classNames.replace("form-group", ""); return ( -
+