From 77d0bb960b2c626e61882cbfe706eb767a16de50 Mon Sep 17 00:00:00 2001 From: twjasa Date: Mon, 21 Mar 2022 18:50:14 -0300 Subject: [PATCH] feat: add modelcollapse to primitive models (#7557) * update: primitive-model test with modelcollapse Co-authored-by: Tim Lai --- src/core/components/primitive-model.jsx | 62 +++++++++++++----------- test/unit/components/primitive-model.jsx | 24 +++++---- 2 files changed, 49 insertions(+), 37 deletions(-) diff --git a/src/core/components/primitive-model.jsx b/src/core/components/primitive-model.jsx index 22442daa377..0ffe858fe23 100644 --- a/src/core/components/primitive-model.jsx +++ b/src/core/components/primitive-model.jsx @@ -11,11 +11,12 @@ export default class Primitive extends Component { getConfigs: PropTypes.func.isRequired, name: PropTypes.string, displayName: PropTypes.string, - depth: PropTypes.number + depth: PropTypes.number, + expandDepth: PropTypes.number } render(){ - let { schema, getComponent, getConfigs, name, displayName, depth } = this.props + let { schema, getComponent, getConfigs, name, displayName, depth, expandDepth } = this.props const { showExtensions } = getConfigs() @@ -37,33 +38,40 @@ export default class Primitive extends Component { const Markdown = getComponent("Markdown", true) const EnumModel = getComponent("EnumModel") const Property = getComponent("Property") + const ModelCollapse = getComponent("ModelCollapse") + const titleEl = title && + + { title } + return - - { name && { title } } - { type } - { format && (${format})} - { - properties.size ? properties.entrySeq().map( ( [ key, v ] ) => ) : null - } - { - showExtensions && extensions.size ? extensions.entrySeq().map( ( [ key, v ] ) => ) : null - } - { - !description ? null : - - } - { - xml && xml.size ? (
xml: - { - xml.entrySeq().map( ( [ key, v ] ) =>
   {key}: { String(v) }
).toArray() - } -
): null - } - { - enumArray && - } -
+ = expandDepth} collapsedContent=" " hideSelfOnExpand={expandDepth !== depth}> + + {name && depth > 1 && { title } } + { type } + { format && (${format})} + { + properties.size ? properties.entrySeq().map( ( [ key, v ] ) => ) : null + } + { + showExtensions && extensions.size ? extensions.entrySeq().map( ( [ key, v ] ) => ) : null + } + { + !description ? null : + + } + { + xml && xml.size ? (
xml: + { + xml.entrySeq().map( ( [ key, v ] ) =>
   {key}: { String(v) }
).toArray() + } +
): null + } + { + enumArray && + } +
+
} } diff --git a/test/unit/components/primitive-model.jsx b/test/unit/components/primitive-model.jsx index fe9efb9bc3c..f6ff3f486a4 100644 --- a/test/unit/components/primitive-model.jsx +++ b/test/unit/components/primitive-model.jsx @@ -2,14 +2,15 @@ import React from "react" import { shallow } from "enzyme" import { fromJS } from "immutable" import PrimitiveModel from "components/primitive-model" +import ModelCollapse from "components/model-collapse" describe("", function () { - describe("Model name", function () { const dummyComponent = () => null const components = { Markdown: dummyComponent, EnumModel: dummyComponent, Property: dummyComponent, + "ModelCollapse" : ModelCollapse, } const props = { getComponent: c => components[c], @@ -21,17 +22,16 @@ describe("", function () { schema: fromJS({ type: "string", title: "Custom model title" - }) + }), + expandDepth: 1 } it("renders the schema's title", function () { // When const wrapper = shallow() - const modelTitleEl = wrapper.find("span.model-title") - expect(modelTitleEl.length).toEqual(1) + const modelTitleEl = wrapper.find("ModelCollapse").prop("title").props.children.props.children - // Then - expect(modelTitleEl.text()).toEqual("Custom model title") + expect(modelTitleEl).toEqual("Custom model title") }) it("falls back to the passed-in `name` prop for the title", function () { @@ -40,12 +40,16 @@ describe("", function () { type: "string" }) const wrapper = shallow() - const modelTitleEl = wrapper.find("span.model-title") - expect(modelTitleEl.length).toEqual(1) + const modelTitleEl = wrapper.find("ModelCollapse").prop("title").props.children.props.children // Then - expect(modelTitleEl.text()).toEqual("Name from props") + expect(modelTitleEl).toEqual("Name from props") + }) - }) + it("renders a collapsible header", function(){ + const wrapper = shallow() + const renderedModelCollapse = wrapper.find(ModelCollapse) + expect(renderedModelCollapse.length).toEqual(1) + }) })