Skip to content

Commit

Permalink
feat(json-schema-2020-12): detect expandable behavior
Browse files Browse the repository at this point in the history
Refs #8513
  • Loading branch information
char0n committed Apr 26, 2023
1 parent e517397 commit fe181ed
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
font-size: 12px;
color: rgb(175, 174, 174);
border: none;
padding-right: 0;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import * as propTypes from "../../prop-types"
import {
useComponent,
useLevel,
useFn,
useIsEmbedded,
useIsExpandedDeeply,
} from "../../hooks"
Expand All @@ -18,11 +19,13 @@ import {
} from "../../context"

const JSONSchema = ({ schema, name }) => {
const fn = useFn()
const isExpandedDeeply = useIsExpandedDeeply()
const [expanded, setExpanded] = useState(isExpandedDeeply)
const [expandedDeeply, setExpandedDeeply] = useState(false)
const [level, nextLevel] = useLevel()
const isEmbedded = useIsEmbedded()
const isExpandable = fn.isExpandable(schema)
const Accordion = useComponent("Accordion")
const KeywordProperties = useComponent("KeywordProperties")
const KeywordType = useComponent("KeywordType")
Expand Down Expand Up @@ -63,13 +66,19 @@ const JSONSchema = ({ schema, name }) => {
})}
>
<div className="json-schema-2020-12-head">
<Accordion expanded={expanded} onChange={handleExpansion}>
{isExpandable ? (
<>
<Accordion expanded={expanded} onChange={handleExpansion}>
<KeywordTitle title={name} schema={schema} />
</Accordion>
<ExpandDeepButton
expanded={expanded}
onClick={handleExpansionDeep}
/>
</>
) : (
<KeywordTitle title={name} schema={schema} />
</Accordion>
<ExpandDeepButton
expanded={expanded}
onClick={handleExpansionDeep}
/>
)}
<KeywordType schema={schema} />
<KeywordFormat schema={schema} />
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@
import React from "react"

import { schema } from "../../prop-types"
import { useFn, useComponent } from "../../hooks"
import { useComponent } from "../../hooks"

const Properties = ({ schema }) => {
const fn = useFn()
const JSONSchema = useComponent("JSONSchema")
const properties = schema?.properties || {}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
.json-schema-2020-12__title {
@include text_code();
font-size: 12px;
vertical-align: bottom;
vertical-align: middle;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
.json-schema-2020-12__type {
@include text_code();
color: $prop-type-font-color;
font-size: 12px;
text-transform: lowercase;
font-weight: bold;
.json-schema-2020-12 {
&__type {
@include text_code();
color: $prop-type-font-color;
font-size: 12px;
text-transform: lowercase;
font-weight: bold;
padding-left: 10px;
}

&-property {
.json-schema-2020-12__type {
vertical-align: middle;
}
}
}


6 changes: 5 additions & 1 deletion src/core/plugins/json-schema-2020-12/fn.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export const getType = (schema, processedSchemas = new WeakSet()) => {
schema.exclusiveMaximum ||
schema.multipleOf
) {
return "number|integer"
return "number | integer"
} else if (schema.const !== undefined) {
if (schema.const === null) {
return "null"
Expand Down Expand Up @@ -110,3 +110,7 @@ export const getType = (schema, processedSchemas = new WeakSet()) => {
}

export const isBooleanJSONSchema = (schema) => typeof schema === "boolean"

export const isExpandable = (schema) => {
return schema?.description || schema?.properties
}
9 changes: 8 additions & 1 deletion src/core/plugins/json-schema-2020-12/hoc.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@ import Accordion from "./components/Accordion/Accordion"
import ExpandDeepButton from "./components/ExpandDeepButton/ExpandDeepButton"
import ChevronRightIcon from "./components/icons/ChevronRight"
import { JSONSchemaContext } from "./context"
import { getTitle, isBooleanJSONSchema, upperFirst, getType } from "./fn"
import {
getTitle,
isBooleanJSONSchema,
upperFirst,
getType,
isExpandable,
} from "./fn"

export const withJSONSchemaContext = (Component, overrides = {}) => {
const value = {
Expand All @@ -38,6 +44,7 @@ export const withJSONSchemaContext = (Component, overrides = {}) => {
getTitle,
getType,
isBooleanJSONSchema,
isExpandable,
...overrides.fn,
},
}
Expand Down

0 comments on commit fe181ed

Please sign in to comment.