From 9205e93f8d269f74727036adb6dfcb86278a045b Mon Sep 17 00:00:00 2001 From: Gerald Glynn Date: Wed, 13 Mar 2019 12:24:33 +0000 Subject: [PATCH] Added onLoad()s and tweaker onToggle() to support ScrollTo functionality for Models --- src/core/components/model-collapse.jsx | 13 +++++++++++++ src/core/components/model-wrapper.jsx | 7 ++++++- src/core/components/models.jsx | 12 ++++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/core/components/model-collapse.jsx b/src/core/components/model-collapse.jsx index 41ae29b94bb..05d05270957 100644 --- a/src/core/components/model-collapse.jsx +++ b/src/core/components/model-collapse.jsx @@ -1,5 +1,6 @@ import React, { Component } from "react" import PropTypes from "prop-types" +import Im from "immutable" export default class ModelCollapse extends Component { static propTypes = { @@ -11,6 +12,8 @@ export default class ModelCollapse extends Component { classes: PropTypes.string, onToggle: PropTypes.func, hideSelfOnExpand: PropTypes.bool, + layoutActions: PropTypes.object, + layoutSelectors: PropTypes.object.isRequired } static defaultProps = { @@ -58,6 +61,16 @@ export default class ModelCollapse extends Component { }) } + onLoad = (ref) => { + if(ref) { + const name = this.props.modelName + const scrollToKey = this.props.layoutSelectors.getScrollToKey() + + if( Im.is(scrollToKey, Im.fromJS(["models", name])) ) this.toggleCollapsed() + this.props.layoutActions.readyToScroll(["models", name], ref.parentElement) + } + } + render () { const { title, classes } = this.props diff --git a/src/core/components/model-wrapper.jsx b/src/core/components/model-wrapper.jsx index fe878d613b3..f48960ce00b 100644 --- a/src/core/components/model-wrapper.jsx +++ b/src/core/components/model-wrapper.jsx @@ -18,10 +18,15 @@ export default class ModelWrapper extends Component { layoutSelectors: PropTypes.object.isRequired } + getSchemaBasePath = () => { + const isOAS3 = this.props.specSelectors.isOAS3() + return isOAS3 ? ["components", "schemas"] : ["definitions"] + } + onToggle = (name,isShown) => { // If this prop is present, we'll have deepLinking for it if(this.props.layoutActions) { - this.props.layoutActions.show(["models", name],isShown) + this.props.layoutActions.show([...this.getSchemaBasePath(), name],isShown) } } diff --git a/src/core/components/models.jsx b/src/core/components/models.jsx index d23020bbb67..ff035aa0f04 100644 --- a/src/core/components/models.jsx +++ b/src/core/components/models.jsx @@ -29,6 +29,13 @@ export default class Models extends Component { } } + onLoad = (ref) => { + if (ref) { + const name = ref.getAttribute("data-name") + this.props.layoutActions.readyToScroll(["models", name], ref) + } + } + render(){ let { specSelectors, getComponent, layoutSelectors, layoutActions, getConfigs } = this.props let definitions = specSelectors.definitions() @@ -62,7 +69,7 @@ export default class Models extends Component { const schema = Map.isMap(schemaValue) ? schemaValue : Im.Map() const rawSchema = Map.isMap(rawSchemaValue) ? rawSchemaValue : Im.Map() - + const displayName = schema.get("title") || rawSchema.get("title") || name if(layoutSelectors.isShown(["models", name], false) && (schema.size === 0 && rawSchema.size > 0)) { @@ -90,7 +97,8 @@ export default class Models extends Component { - return
+ return