From fa829e3368b9722ef4d569fe42bf22dd3235971e Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Tue, 25 Apr 2023 10:24:49 +0200 Subject: [PATCH] feat(oas31): resolve components.schemas field before rendering Refs #8513 --- .../components/JSONSchema/JSONSchema.jsx | 7 ++-- src/core/plugins/oas31/components/models.jsx | 36 +++++++++++++++++-- .../oas31/spec-extensions/selectors.js | 17 +++++++-- .../plugins/oas31/wrap-components/models.jsx | 12 +++++-- 4 files changed, 63 insertions(+), 9 deletions(-) diff --git a/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx b/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx index bf36fb77..ea62e825 100644 --- a/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx +++ b/src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx @@ -1,7 +1,7 @@ /** * @prettier */ -import React, { useState, useCallback, useEffect } from "react" +import React, { forwardRef, useState, useCallback, useEffect } from "react" import PropTypes from "prop-types" import classNames from "classnames" @@ -21,7 +21,7 @@ import { JSONSchemaCyclesContext, } from "../../context" -const JSONSchema = ({ schema, name }) => { +const JSONSchema = forwardRef(({ schema, name }, ref) => { const fn = useFn() const isExpandedDeeply = useIsExpandedDeeply() const [expanded, setExpanded] = useState(isExpandedDeeply) @@ -96,6 +96,7 @@ const JSONSchema = ({ schema, name }) => {
{ ) -} +}) JSONSchema.propTypes = { name: PropTypes.oneOfType([PropTypes.string, PropTypes.element]), diff --git a/src/core/plugins/oas31/components/models.jsx b/src/core/plugins/oas31/components/models.jsx index bf286e7f..b3d65b74 100644 --- a/src/core/plugins/oas31/components/models.jsx +++ b/src/core/plugins/oas31/components/models.jsx @@ -1,11 +1,12 @@ /** * @prettier */ -import React, { useCallback } from "react" +import React, { useCallback, useEffect } from "react" import PropTypes from "prop-types" import classNames from "classnames" const Models = ({ + specActions, specSelectors, layoutSelectors, layoutActions, @@ -21,12 +22,39 @@ const Models = ({ const Collapse = getComponent("Collapse") const JSONSchema202012 = getComponent("JSONSchema202012") + /** + * Effects. + */ + useEffect(() => { + if (isOpen && specSelectors.specResolvedSubtree(schemasPath) == null) { + specActions.requestResolvedSubtree(schemasPath) + } + }, [isOpen]) + + /** + * Event handlers. + */ const handleCollapse = useCallback(() => { layoutActions.show(schemasPath, !isOpen) }, [layoutActions, schemasPath, isOpen]) + const handleModelsRef = useCallback((node) => { + if (node !== null) { + layoutActions.readyToScroll(schemasPath, node) + } + }, []) + + const handleJSONSchema202012Ref = (schemaName) => (node) => { + if (node !== null) { + layoutActions.readyToScroll([...schemasPath, schemaName], node) + } + } + return ( -
+