From d27cae00850b802c87b7bade997923468231d05e Mon Sep 17 00:00:00 2001 From: Owen Conti Date: Wed, 28 Jun 2017 22:07:07 -0600 Subject: [PATCH] Work on #3102. Moved all the components out of model.jsx into their own files so they can be grabbed via getComponent() --- src/core/components/array-model.jsx | 43 ++++ src/core/components/enum-model.jsx | 19 ++ src/core/components/layouts/base.jsx | 2 +- src/core/components/model-collapse.jsx | 40 ++++ src/core/components/model-example.jsx | 4 +- src/core/components/model-wrapper.jsx | 22 ++ src/core/components/model.jsx | 267 +----------------------- src/core/components/models.jsx | 6 +- src/core/components/object-model.jsx | 104 +++++++++ src/core/components/primitive-model.jsx | 54 +++++ src/core/presets/base.js | 16 +- 11 files changed, 308 insertions(+), 269 deletions(-) create mode 100644 src/core/components/array-model.jsx create mode 100644 src/core/components/enum-model.jsx create mode 100644 src/core/components/model-collapse.jsx create mode 100644 src/core/components/model-wrapper.jsx create mode 100644 src/core/components/object-model.jsx create mode 100644 src/core/components/primitive-model.jsx diff --git a/src/core/components/array-model.jsx b/src/core/components/array-model.jsx new file mode 100644 index 00000000..1a01b0ff --- /dev/null +++ b/src/core/components/array-model.jsx @@ -0,0 +1,43 @@ +import React, { Component, PropTypes } from "react" + +const propStyle = { color: "#999", fontStyle: "italic" } + +export default class ArrayModel extends Component { + static propTypes = { + schema: PropTypes.object.isRequired, + getComponent: PropTypes.func.isRequired, + specSelectors: PropTypes.object.isRequired, + name: PropTypes.string, + required: PropTypes.bool, + expandDepth: PropTypes.number, + depth: PropTypes.number + } + + render(){ + let { getComponent, required, schema, depth, expandDepth } = this.props + let items = schema.get("items") + let properties = schema.filter( ( v, key) => ["type", "items", "$$ref"].indexOf(key) === -1 ) + + const ModelCollapse = getComponent("ModelCollapse") + const Model = getComponent("Model") + + return + + { schema.get("title") } + + expandDepth } collapsedContent="[...]"> + [ + + ] + { + properties.size ? + { properties.entrySeq().map( ( [ key, v ] ) => +
{ `${key}:`}{ String(v) }
) + }
+ : null + } +
+ { required && *} +
+ } +} \ No newline at end of file diff --git a/src/core/components/enum-model.jsx b/src/core/components/enum-model.jsx new file mode 100644 index 00000000..78af10da --- /dev/null +++ b/src/core/components/enum-model.jsx @@ -0,0 +1,19 @@ +import React from "react" +import ImPropTypes from "react-immutable-proptypes" + +const EnumModel = ({ value, getComponent }) => { + let ModelCollapse = getComponent("ModelCollapse") + let collapsedContent = Array [ { value.count() } ] + return + Enum:
+ + [ { value.join(", ") } ] + +
+} +EnumModel.propTypes = { + value: ImPropTypes.iterable, + getComponent: ImPropTypes.func +} + +export default EnumModel \ No newline at end of file diff --git a/src/core/components/layouts/base.jsx b/src/core/components/layouts/base.jsx index 35cfd7b8..f8132bf0 100644 --- a/src/core/components/layouts/base.jsx +++ b/src/core/components/layouts/base.jsx @@ -25,7 +25,7 @@ export default class BaseLayout extends React.Component { let Info = getComponent("info") let Operations = getComponent("operations", true) - let Models = getComponent("models", true) + let Models = getComponent("Models", true) let AuthorizeBtn = getComponent("authorizeBtn", true) let Row = getComponent("Row") let Col = getComponent("Col") diff --git a/src/core/components/model-collapse.jsx b/src/core/components/model-collapse.jsx new file mode 100644 index 00000000..256c440e --- /dev/null +++ b/src/core/components/model-collapse.jsx @@ -0,0 +1,40 @@ +import React, { Component, PropTypes } from "react" + +export default class ModelCollapse extends Component { + static propTypes = { + collapsedContent: PropTypes.any, + collapsed: PropTypes.bool, + children: PropTypes.any + } + + static defaultProps = { + collapsedContent: "{...}", + collapsed: true, + } + + constructor(props, context) { + super(props, context) + + let { collapsed, collapsedContent } = this.props + + this.state = { + collapsed: collapsed !== undefined ? collapsed : ModelCollapse.defaultProps.collapsed, + collapsedContent: collapsedContent || ModelCollapse.defaultProps.collapsedContent + } + } + + toggleCollapsed=()=>{ + this.setState({ + collapsed: !this.state.collapsed + }) + } + + render () { + return ( + + + + { this.state.collapsed ? this.state.collapsedContent : this.props.children } + ) + } +} \ No newline at end of file diff --git a/src/core/components/model-example.jsx b/src/core/components/model-example.jsx index 0117c9a5..e7737d12 100644 --- a/src/core/components/model-example.jsx +++ b/src/core/components/model-example.jsx @@ -28,7 +28,7 @@ export default class ModelExample extends React.Component { render() { let { getComponent, specSelectors, schema, example, isExecute } = this.props - const Model = getComponent("model") + const ModelWrapper = getComponent("ModelWrapper") return