feat: add modelcollapse to primitive models (#7557)

* update: primitive-model test with modelcollapse

Co-authored-by: Tim Lai <timothy.lai@gmail.com>
This commit is contained in:
twjasa
2022-03-21 18:50:14 -03:00
committed by GitHub
parent c81d7f0f30
commit 77d0bb960b
2 changed files with 49 additions and 37 deletions

View File

@@ -11,11 +11,12 @@ export default class Primitive extends Component {
getConfigs: PropTypes.func.isRequired, getConfigs: PropTypes.func.isRequired,
name: PropTypes.string, name: PropTypes.string,
displayName: PropTypes.string, displayName: PropTypes.string,
depth: PropTypes.number depth: PropTypes.number,
expandDepth: PropTypes.number
} }
render(){ render(){
let { schema, getComponent, getConfigs, name, displayName, depth } = this.props let { schema, getComponent, getConfigs, name, displayName, depth, expandDepth } = this.props
const { showExtensions } = getConfigs() const { showExtensions } = getConfigs()
@@ -37,33 +38,40 @@ export default class Primitive extends Component {
const Markdown = getComponent("Markdown", true) const Markdown = getComponent("Markdown", true)
const EnumModel = getComponent("EnumModel") const EnumModel = getComponent("EnumModel")
const Property = getComponent("Property") const Property = getComponent("Property")
const ModelCollapse = getComponent("ModelCollapse")
const titleEl = title &&
<span className="model-title">
<span className="model-title__text">{ title }</span>
</span>
return <span className="model"> return <span className="model">
<span className="prop"> <ModelCollapse title={titleEl} expanded={depth >= expandDepth} collapsedContent=" " hideSelfOnExpand={expandDepth !== depth}>
{ name && <span className={`${depth === 1 && "model-title"} prop-name`}>{ title }</span> } <span className="prop">
<span className="prop-type">{ type }</span> {name && depth > 1 && <span className={`${depth === 1 && "model-title"} prop-name`}>{ title }</span> }
{ format && <span className="prop-format">(${format})</span>} <span className="prop-type">{ type }</span>
{ { format && <span className="prop-format">(${format})</span>}
properties.size ? properties.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propClass={ propClass } />) : null {
} properties.size ? properties.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propClass={ propClass } />) : null
{ }
showExtensions && extensions.size ? extensions.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propClass={ propClass } />) : null {
} showExtensions && extensions.size ? extensions.entrySeq().map( ( [ key, v ] ) => <Property key={`${key}-${v}`} propKey={ key } propVal={ v } propClass={ propClass } />) : null
{ }
!description ? null : {
<Markdown source={ description } /> !description ? null :
} <Markdown source={ description } />
{ }
xml && xml.size ? (<span><br /><span className={ propClass }>xml:</span> {
{ xml && xml.size ? (<span><br /><span className={ propClass }>xml:</span>
xml.entrySeq().map( ( [ key, v ] ) => <span key={`${key}-${v}`} className={ propClass }><br/>&nbsp;&nbsp;&nbsp;{key}: { String(v) }</span>).toArray() {
} xml.entrySeq().map( ( [ key, v ] ) => <span key={`${key}-${v}`} className={ propClass }><br/>&nbsp;&nbsp;&nbsp;{key}: { String(v) }</span>).toArray()
</span>): null }
} </span>): null
{ }
enumArray && <EnumModel value={ enumArray } getComponent={ getComponent } /> {
} enumArray && <EnumModel value={ enumArray } getComponent={ getComponent } />
</span> }
</span>
</ModelCollapse>
</span> </span>
} }
} }

View File

@@ -2,14 +2,15 @@ import React from "react"
import { shallow } from "enzyme" import { shallow } from "enzyme"
import { fromJS } from "immutable" import { fromJS } from "immutable"
import PrimitiveModel from "components/primitive-model" import PrimitiveModel from "components/primitive-model"
import ModelCollapse from "components/model-collapse"
describe("<PrimitiveModel/>", function () { describe("<PrimitiveModel/>", function () {
describe("Model name", function () {
const dummyComponent = () => null const dummyComponent = () => null
const components = { const components = {
Markdown: dummyComponent, Markdown: dummyComponent,
EnumModel: dummyComponent, EnumModel: dummyComponent,
Property: dummyComponent, Property: dummyComponent,
"ModelCollapse" : ModelCollapse,
} }
const props = { const props = {
getComponent: c => components[c], getComponent: c => components[c],
@@ -21,17 +22,16 @@ describe("<PrimitiveModel/>", function () {
schema: fromJS({ schema: fromJS({
type: "string", type: "string",
title: "Custom model title" title: "Custom model title"
}) }),
expandDepth: 1
} }
it("renders the schema's title", function () { it("renders the schema's title", function () {
// When // When
const wrapper = shallow(<PrimitiveModel {...props} />) const wrapper = shallow(<PrimitiveModel {...props} />)
const modelTitleEl = wrapper.find("span.model-title") const modelTitleEl = wrapper.find("ModelCollapse").prop("title").props.children.props.children
expect(modelTitleEl.length).toEqual(1)
// Then expect(modelTitleEl).toEqual("Custom model title")
expect(modelTitleEl.text()).toEqual("Custom model title")
}) })
it("falls back to the passed-in `name` prop for the title", function () { it("falls back to the passed-in `name` prop for the title", function () {
@@ -40,12 +40,16 @@ describe("<PrimitiveModel/>", function () {
type: "string" type: "string"
}) })
const wrapper = shallow(<PrimitiveModel {...props} />) const wrapper = shallow(<PrimitiveModel {...props} />)
const modelTitleEl = wrapper.find("span.model-title") const modelTitleEl = wrapper.find("ModelCollapse").prop("title").props.children.props.children
expect(modelTitleEl.length).toEqual(1)
// Then // Then
expect(modelTitleEl.text()).toEqual("Name from props") expect(modelTitleEl).toEqual("Name from props")
}) })
}) it("renders a collapsible header", function(){
const wrapper = shallow(<PrimitiveModel {...props}/>)
const renderedModelCollapse = wrapper.find(ModelCollapse)
expect(renderedModelCollapse.length).toEqual(1)
})
}) })