diff --git a/src/core/components/array-model.jsx b/src/core/components/array-model.jsx index 6f646bb6..537fe365 100644 --- a/src/core/components/array-model.jsx +++ b/src/core/components/array-model.jsx @@ -38,7 +38,7 @@ export default class ArrayModel extends Component { */ return - expandDepth } collapsedContent="[...]"> + [ { properties.size ? properties.entrySeq().map( ( [ key, v ] ) => ) : null diff --git a/src/core/components/model-collapse.jsx b/src/core/components/model-collapse.jsx index b71096f2..d501d4b1 100644 --- a/src/core/components/model-collapse.jsx +++ b/src/core/components/model-collapse.jsx @@ -4,31 +4,47 @@ import PropTypes from "prop-types" export default class ModelCollapse extends Component { static propTypes = { collapsedContent: PropTypes.any, - collapsed: PropTypes.bool, + expanded: PropTypes.bool, children: PropTypes.any, - title: PropTypes.element + title: PropTypes.element, + modelName: PropTypes.string, + onToggle: PropTypes.func.isRequired } static defaultProps = { collapsedContent: "{...}", - collapsed: true, + expanded: false, title: null } constructor(props, context) { super(props, context) - let { collapsed, collapsedContent } = this.props + let { expanded, collapsedContent } = this.props this.state = { - collapsed: collapsed !== undefined ? collapsed : ModelCollapse.defaultProps.collapsed, + expanded : expanded, collapsedContent: collapsedContent || ModelCollapse.defaultProps.collapsedContent } } + componentWillReceiveProps(nextProps){ + + if(this.props.expanded!= nextProps.expanded){ + this.setState({expanded: nextProps.expanded}) + } + + } + toggleCollapsed=()=>{ + + + if(this.props.onToggle){ + this.props.onToggle(this.props.modelName,!this.state.expanded) + } + this.setState({ - collapsed: !this.state.collapsed + expanded: !this.state.expanded }) } @@ -38,10 +54,10 @@ export default class ModelCollapse extends Component { { title && {title} } - + - { this.state.collapsed ? this.state.collapsedContent : this.props.children } + { this.state.expanded ? this.props.children :this.state.collapsedContent } ) } -} \ No newline at end of file +} diff --git a/src/core/components/model-wrapper.jsx b/src/core/components/model-wrapper.jsx index fa117c2b..cec55295 100644 --- a/src/core/components/model-wrapper.jsx +++ b/src/core/components/model-wrapper.jsx @@ -1,22 +1,32 @@ import React, { Component, } from "react" import PropTypes from "prop-types" +//import layoutActions from "actions/layout" + + +export default class ModelWrapper extends Component { + -export default class ModelComponent extends Component { static propTypes = { schema: PropTypes.object.isRequired, name: PropTypes.string, getComponent: PropTypes.func.isRequired, getConfigs: PropTypes.func.isRequired, specSelectors: PropTypes.object.isRequired, - expandDepth: PropTypes.number + expandDepth: PropTypes.number, + layoutActions: PropTypes.object, + layoutSelectors: PropTypes.object.isRequired + } + + onToggle = (name,isShown) => { + this.props.layoutActions.show(["models", name],isShown) } render(){ let { getComponent, getConfigs } = this.props const Model = getComponent("Model") - + const expanded = this.props.layoutSelectors.isShown(["models",this.props.name]) return
- +
} } diff --git a/src/core/components/models.jsx b/src/core/components/models.jsx index 30d78b26..e404c3bc 100644 --- a/src/core/components/models.jsx +++ b/src/core/components/models.jsx @@ -31,13 +31,16 @@ export default class Models extends Component { { definitions.entrySeq().map( ( [ name, model ])=>{ - return
+ + return
+ specSelectors={ specSelectors } + getConfigs = {getConfigs} + layoutSelectors = {layoutSelectors} + layoutActions = {layoutActions}/>
}).toArray() } diff --git a/src/core/components/object-model.jsx b/src/core/components/object-model.jsx index 83530530..ac3f2133 100644 --- a/src/core/components/object-model.jsx +++ b/src/core/components/object-model.jsx @@ -10,6 +10,8 @@ export default class ObjectModel extends Component { schema: PropTypes.object.isRequired, getComponent: PropTypes.func.isRequired, getConfigs: PropTypes.func.isRequired, + expanded: PropTypes.bool, + onToggle: PropTypes.func.isRequired, specSelectors: PropTypes.object.isRequired, name: PropTypes.string, isRef: PropTypes.bool, @@ -18,8 +20,8 @@ export default class ObjectModel extends Component { } render(){ - let { schema, name, isRef, getComponent, getConfigs, depth, expandDepth, ...otherProps } = this.props - let { specSelectors } = otherProps + let { schema, name, isRef, getComponent, getConfigs, depth, onToggle, expanded, ...otherProps } = this.props + let { specSelectors,expandDepth } = otherProps let { isOAS3 } = specSelectors if(!schema) { @@ -60,7 +62,13 @@ export default class ObjectModel extends Component { return - expandDepth } collapsedContent={ collapsedContent }> + + { braceOpen } { !isRef ? null : diff --git a/src/core/plugins/deep-linking/spec-wrap-actions.js b/src/core/plugins/deep-linking/spec-wrap-actions.js index ebeebe5c..f385d9cb 100644 --- a/src/core/plugins/deep-linking/spec-wrap-actions.js +++ b/src/core/plugins/deep-linking/spec-wrap-actions.js @@ -1,8 +1,7 @@ -import scrollTo from "scroll-to-element" +import zenscroll from "zenscroll" import { escapeDeepLinkPath } from "core/utils" -const SCROLL_OFFSET = -5 -let hasHashBeenParsed = false +let hasHashBeenParsed = false //TODO this forces code to only run once which may prevent scrolling if page not refreshed export const updateResolved = (ori, { layoutActions, getConfigs }) => (...args) => { @@ -12,7 +11,6 @@ export const updateResolved = (ori, { layoutActions, getConfigs }) => (...args) if(!isDeepLinkingEnabled || isDeepLinkingEnabled === "false") { return } - if(window.location.hash && !hasHashBeenParsed ) { let hash = window.location.hash.slice(1) // # is first character @@ -30,21 +28,23 @@ export const updateResolved = (ori, { layoutActions, getConfigs }) => (...args) let [tag, operationId] = hash.split("/") + let swaggerUI = document.querySelector(".swagger-ui") + let myScroller = zenscroll.createScroller(swaggerUI) + if(tag && operationId) { // Pre-expand and scroll to the operation layoutActions.show(["operations-tag", tag], true) layoutActions.show(["operations", tag, operationId], true) - scrollTo(`#operations-${escapeDeepLinkPath(tag)}-${escapeDeepLinkPath(operationId)}`, { - offset: SCROLL_OFFSET - }) + let target = document.getElementById(`#operations-${escapeDeepLinkPath(tag)}-${escapeDeepLinkPath(operationId)}`, { + myScroller.to(target) + } else if(tag) { // Pre-expand and scroll to the tag layoutActions.show(["operations-tag", tag], true) - scrollTo(`#operations-tag-${escapeDeepLinkPath(tag)}`, { - offset: SCROLL_OFFSET - }) + let target = document.getElementById(`#operations-tag-${escapeDeepLinkPath(tag)}`, { + myScroller.to(target) } }