/** * @prettier */ import React, { useCallback, useState } from "react" import PropTypes from "prop-types" import classNames from "classnames" import DiscriminatorMapping from "./DiscriminatorMapping" const Discriminator = ({ schema, getSystem }) => { const discriminator = schema?.discriminator || {} const { fn, getComponent } = getSystem() const { useIsExpandedDeeply, useComponent } = fn.jsonSchema202012 const isExpandedDeeply = useIsExpandedDeeply() const isExpandable = !!discriminator.mapping const [expanded, setExpanded] = useState(isExpandedDeeply) const [expandedDeeply, setExpandedDeeply] = useState(false) const Accordion = useComponent("Accordion") const ExpandDeepButton = useComponent("ExpandDeepButton") const JSONSchemaDeepExpansionContext = getComponent( "JSONSchema202012DeepExpansionContext" )() /** * Event handlers. */ const handleExpansion = useCallback(() => { setExpanded((prev) => !prev) }, []) const handleExpansionDeep = useCallback((e, expandedDeepNew) => { setExpanded(expandedDeepNew) setExpandedDeeply(expandedDeepNew) }, []) /** * Rendering. */ if (Object.keys(discriminator).length === 0) { return null } return (
{isExpandable ? ( <> Discriminator ) : ( Discriminator )} {discriminator.propertyName && ( {discriminator.propertyName} )} object
    {expanded && (
  • )}
) } Discriminator.propTypes = { schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired, getSystem: PropTypes.func.isRequired, } export default Discriminator