committed by
Vladimír Gorej
parent
d404bbd6d9
commit
6bc26b9666
@@ -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,31 +16,43 @@ 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 (
|
||||||
<div className="json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs">
|
<JSONSchemaDeepExpansionContext.Provider value={expandedDeeply}>
|
||||||
<Accordion expanded={expanded} onChange={handleExpansion}>
|
<div className="json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs">
|
||||||
<span className="json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary">
|
<Accordion expanded={expanded} onChange={handleExpansion}>
|
||||||
$defs
|
<span className="json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary">
|
||||||
</span>
|
$defs
|
||||||
</Accordion>
|
</span>
|
||||||
<span className="json-schema-2020-12__type">object</span>
|
</Accordion>
|
||||||
{expanded && (
|
<ExpandDeepButton expanded={expanded} onClick={handleExpansionDeep} />
|
||||||
<ul>
|
<span className="json-schema-2020-12__type">object</span>
|
||||||
{Object.entries($defs).map(([schemaName, schema]) => (
|
{expanded && (
|
||||||
<li key={schemaName} className="json-schema-2020-12-property">
|
<ul>
|
||||||
<JSONSchema name={schemaName} schema={schema} />
|
{Object.entries($defs).map(([schemaName, schema]) => (
|
||||||
</li>
|
<li key={schemaName} className="json-schema-2020-12-property">
|
||||||
))}
|
<JSONSchema name={schemaName} schema={schema} />
|
||||||
</ul>
|
</li>
|
||||||
)}
|
))}
|
||||||
</div>
|
</ul>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</JSONSchemaDeepExpansionContext.Provider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user