feat(json-schema-2020-12): add support for defs deep extend

Refs #8513
This commit is contained in:
Vladimir Gorej
2023-04-24 10:49:36 +02:00
committed by Vladimír Gorej
parent d404bbd6d9
commit 6bc26b9666

View File

@@ -5,6 +5,7 @@ import React, { useCallback, useState } from "react"
import { schema } from "../../prop-types" import { schema } from "../../prop-types"
import { useComponent, useIsExpandedDeeply } from "../../hooks" import { useComponent, useIsExpandedDeeply } from "../../hooks"
import { JSONSchemaDeepExpansionContext } from "../../context"
const $defs = ({ schema }) => { const $defs = ({ schema }) => {
const $defs = schema?.$defs || {} const $defs = schema?.$defs || {}
@@ -15,20 +16,31 @@ const $defs = ({ schema }) => {
const isExpandedDeeply = useIsExpandedDeeply() const isExpandedDeeply = useIsExpandedDeeply()
const [expanded, setExpanded] = useState(isExpandedDeeply) const [expanded, setExpanded] = useState(isExpandedDeeply)
const [expandedDeeply, setExpandedDeeply] = useState(false)
const Accordion = useComponent("Accordion") const Accordion = useComponent("Accordion")
const ExpandDeepButton = useComponent("ExpandDeepButton")
const JSONSchema = useComponent("JSONSchema") const JSONSchema = useComponent("JSONSchema")
/**
* Event handlers.
*/
const handleExpansion = useCallback(() => { const handleExpansion = useCallback(() => {
setExpanded((prev) => !prev) setExpanded((prev) => !prev)
}, []) }, [])
const handleExpansionDeep = useCallback((e, expandedDeepNew) => {
setExpanded(expandedDeepNew)
setExpandedDeeply(expandedDeepNew)
}, [])
return ( return (
<JSONSchemaDeepExpansionContext.Provider value={expandedDeeply}>
<div className="json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs"> <div className="json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs">
<Accordion expanded={expanded} onChange={handleExpansion}> <Accordion expanded={expanded} onChange={handleExpansion}>
<span className="json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"> <span className="json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary">
$defs $defs
</span> </span>
</Accordion> </Accordion>
<ExpandDeepButton expanded={expanded} onClick={handleExpansionDeep} />
<span className="json-schema-2020-12__type">object</span> <span className="json-schema-2020-12__type">object</span>
{expanded && ( {expanded && (
<ul> <ul>
@@ -40,6 +52,7 @@ const $defs = ({ schema }) => {
</ul> </ul>
)} )}
</div> </div>
</JSONSchemaDeepExpansionContext.Provider>
) )
} }