feat(api-ref): show schema of a tag (#7297)
This commit is contained in:
85
www/apps/api-reference/hooks/use-schema-example.ts
Normal file
85
www/apps/api-reference/hooks/use-schema-example.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
"use client"
|
||||
|
||||
import { useMemo } from "react"
|
||||
import { ExampleObject, SchemaObject } from "../types/openapi"
|
||||
import type { JSONSchema7 } from "json-schema"
|
||||
import stringify from "json-stringify-pretty-compact"
|
||||
import { sample } from "openapi-sampler"
|
||||
import { OpenAPIV3 } from "openapi-types"
|
||||
|
||||
type Options = {
|
||||
schema?: SchemaObject
|
||||
schemaExamples?: OpenAPIV3.ExampleObject
|
||||
schemaExample?: any
|
||||
options?: {
|
||||
skipNonRequired?: boolean
|
||||
}
|
||||
}
|
||||
|
||||
const useSchemaExample = ({
|
||||
schema,
|
||||
schemaExamples,
|
||||
schemaExample,
|
||||
options = {},
|
||||
}: Options) => {
|
||||
const { skipNonRequired = true } = options
|
||||
const examples = useMemo(() => {
|
||||
const tempExamples: ExampleObject[] = []
|
||||
|
||||
if (!schema) {
|
||||
return tempExamples
|
||||
}
|
||||
|
||||
if (schemaExamples) {
|
||||
Object.entries(schemaExamples).forEach(([value, example]) => {
|
||||
if ("$ref" in example) {
|
||||
return []
|
||||
}
|
||||
|
||||
tempExamples.push({
|
||||
title: example.summary || "",
|
||||
value,
|
||||
content: stringify(example.value, {
|
||||
maxLength: 50,
|
||||
}),
|
||||
})
|
||||
})
|
||||
} else if (schemaExample) {
|
||||
tempExamples.push({
|
||||
title: "",
|
||||
value: "",
|
||||
content: stringify(schemaExample, {
|
||||
maxLength: 50,
|
||||
}),
|
||||
})
|
||||
} else {
|
||||
const contentSample = stringify(
|
||||
sample(
|
||||
{
|
||||
...schema,
|
||||
} as JSONSchema7,
|
||||
{
|
||||
skipNonRequired,
|
||||
}
|
||||
),
|
||||
{
|
||||
maxLength: 50,
|
||||
}
|
||||
)
|
||||
|
||||
tempExamples.push({
|
||||
title: "",
|
||||
value: "",
|
||||
content: contentSample,
|
||||
})
|
||||
}
|
||||
|
||||
return tempExamples
|
||||
}, [schema, schemaExample, schemaExamples, skipNonRequired])
|
||||
|
||||
return {
|
||||
examples,
|
||||
}
|
||||
}
|
||||
|
||||
export default useSchemaExample
|
||||
Reference in New Issue
Block a user