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 (
-
+