diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3acb80b0..3b6d0c15 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ We love contributions from our community of users! This document explains our gu #### Environment setup -0. Install Node.js (4 or newer) and npm (3 or newer). +0. Install Node.js (6 or newer) and npm (3 or newer). 1. Make a fork of Swagger-UI on GitHub, then clone your fork to your machine. 2. Run `npm install` in your Swagger-UI directory. 3. Run `npm run dev`. `localhost:3200` should open automatically. diff --git a/package.json b/package.json index dd30067d..3987317b 100644 --- a/package.json +++ b/package.json @@ -61,13 +61,13 @@ "react-addons-perf": "^15.4.0", "react-addons-shallow-compare": "0.14.8", "react-addons-test-utils": "^15.6.2", - "react-collapse": "2.3.1", + "react-collapse": "^4.0.3", "react-dom": "^15.6.2", "react-height": "^2.0.0", "react-hot-loader": "1.3.1", "react-immutable-proptypes": "2.1.0", "react-markdown": "^2.5.0", - "react-motion": "0.4.4", + "react-motion": "^0.5.2", "react-object-inspector": "0.2.1", "react-redux": "^4.x.x", "react-split-pane": "0.1.57", diff --git a/src/core/components/content-type.jsx b/src/core/components/content-type.jsx index 4a5e7349..6f81f671 100644 --- a/src/core/components/content-type.jsx +++ b/src/core/components/content-type.jsx @@ -37,7 +37,7 @@ export default class ContentType extends React.Component { return (
- { contentTypes.map( (val) => { return }).toArray()} diff --git a/src/core/components/debug.jsx b/src/core/components/debug.jsx index 6cb7d5d7..382f2cac 100644 --- a/src/core/components/debug.jsx +++ b/src/core/components/debug.jsx @@ -1,6 +1,6 @@ import React from "react" import PropTypes from "prop-types" -import Collapse from "react-collapse" +import { Collapse } from "react-collapse" import { presets } from "react-motion" import ObjectInspector from "react-object-inspector" import Perf from "react-addons-perf" diff --git a/src/core/components/errors.jsx b/src/core/components/errors.jsx index bea01ba9..c72dd2fd 100644 --- a/src/core/components/errors.jsx +++ b/src/core/components/errors.jsx @@ -1,7 +1,7 @@ import React from "react" import PropTypes from "prop-types" import { List } from "immutable" -import Collapse from "react-collapse" +import { Collapse } from "react-collapse" export default class Errors extends React.Component { diff --git a/src/core/components/layout-utils.jsx b/src/core/components/layout-utils.jsx index f80e0c90..d1adfeb1 100644 --- a/src/core/components/layout-utils.jsx +++ b/src/core/components/layout-utils.jsx @@ -1,6 +1,6 @@ import React from "react" import PropTypes from "prop-types" -import OriCollapse from "react-collapse" +import { Collapse as OriCollapse } from "react-collapse" function xclass(...args) { return args.filter(a => !!a).join(" ").trim() diff --git a/src/core/components/model.jsx b/src/core/components/model.jsx index 73163388..3d5de80f 100644 --- a/src/core/components/model.jsx +++ b/src/core/components/model.jsx @@ -1,7 +1,7 @@ -import React, { Component } from "react" +import React, { PureComponent } from "react" import PropTypes from "prop-types" -export default class Model extends Component { +export default class Model extends PureComponent { static propTypes = { schema: PropTypes.object.isRequired, getComponent: PropTypes.func.isRequired, @@ -35,7 +35,7 @@ export default class Model extends Component { const PrimitiveModel = getComponent("PrimitiveModel") let type = "object" let $$ref = schema && schema.get("$$ref") - + // If we weren't passed a `name` but have a ref, grab the name from the ref if ( !name && $$ref ) { name = this.getModelName( $$ref ) @@ -44,11 +44,11 @@ export default class Model extends Component { if ( !schema && $$ref ) { schema = this.getRefSchema( name ) } - + const deprecated = specSelectors.isOAS3() && schema.get("deprecated") isRef = isRef !== undefined ? isRef : !!$$ref type = schema && schema.get("type") || type - + switch(type) { case "object": return ( swagger
- {control} + {control.map((el, i) => cloneElement(el, { key: i }))}
diff --git a/test/components/object-model.js b/test/components/object-model.js new file mode 100644 index 00000000..d926d04c --- /dev/null +++ b/test/components/object-model.js @@ -0,0 +1,63 @@ +import React from "react" +import expect from "expect" +import { shallow } from "enzyme" +import { fromJS } from "immutable" +import ObjectModel from "components/object-model" +import ModelExample from "components/model-example" +import Immutable from "immutable" +import Model from "components/model" +import ModelCollapse from "components/model-collapse" +import { inferSchema } from "corePlugins/samples/fn" + +describe("", function() { + const dummyComponent = () => null + const components = { + "JumpToPath" : dummyComponent, + "Markdown" : dummyComponent, + "Model" : Model, + "ModelCollapse" : ModelCollapse + } + const props = { + getComponent: c => components[c], + isRef : false, + schema: Immutable.fromJS( + { + "properties": { + // Note reverse order: c, b, a + c: { + type: "integer", + name: "c" + }, + b: { + type: "boolean", + name: "b" + }, + a: { + type: "string", + name: "a" + } + } + } + ), + specSelectors: { + isOAS3(){ + return false + } + }, + className: "for-test" + } + it("renders a collapsible header", function(){ + const wrapper = shallow() + const renderedModelCollapse = wrapper.find(ModelCollapse) + expect(renderedModelCollapse.length).toEqual(1) + }) + + it("renders the object properties in order", function() { + const wrapper = shallow() + const renderedModel = wrapper.find(Model) + expect(renderedModel.length).toEqual(3) + expect(renderedModel.get(0).props.schema.get("name")).toEqual("c") + expect(renderedModel.get(1).props.schema.get("name")).toEqual("b") + expect(renderedModel.get(2).props.schema.get("name")).toEqual("a") + }) +})