/* ============================================================================ * Copyright (c) Palo Alto Networks * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * ========================================================================== */ import React from "react"; import { translate } from "@docusaurus/Translate"; import { Example } from "@theme/Example"; import Markdown from "@theme/Markdown"; /* eslint-disable import/no-extraneous-dependencies*/ import { OPENAPI_SCHEMA_ITEM } from "@theme/translationIds"; import clsx from "clsx"; import { getQualifierMessage, getSchemaName } from "../../markdown/schema"; import { guard } from "../../markdown/utils"; export interface ExampleObject { summary?: string; description?: string; value?: any; externalValue?: string; } export interface Props { className: string; param: { description: string; example: any; examples: Record | undefined; name: string; required: boolean; deprecated: boolean; schema: any; enumDescriptions?: [string, string][]; }; } const getEnumDescriptionMarkdown = (enumDescriptions?: [string, string][]) => { if (enumDescriptions?.length) { const enumValue = translate({ id: OPENAPI_SCHEMA_ITEM.ENUM_VALUE, message: "Enum Value", }); const description = translate({ id: OPENAPI_SCHEMA_ITEM.ENUM_DESCRIPTION, message: "Description", }); return `| ${enumValue} | ${description} | | ---- | ----- | ${enumDescriptions .map((desc) => { return `| ${desc[0]} | ${desc[1]} | `.replaceAll("\n", "
"); }) .join("\n")} `; } return ""; }; function ParamsItem({ param, ...rest }: Props) { const { description, name, required, deprecated, enumDescriptions } = param; let schema = param.schema; let defaultValue: string | undefined; let examples = param.examples ?? (schema?.examples as any[] | undefined); let example = param.example ?? schema?.example; if (!schema) { schema = { type: "any" }; } if (!schema.type) { schema.type = "any"; } if (schema) { if (schema.items) { defaultValue = schema.items.default; } else { defaultValue = schema.default; } } const renderSchemaName = guard(schema, (schema) => ( {getSchemaName(schema)} )); const renderSchemaRequired = guard(required, () => ( {translate({ id: OPENAPI_SCHEMA_ITEM.REQUIRED, message: "required" })} )); const renderDeprecated = guard(deprecated, () => ( {translate({ id: OPENAPI_SCHEMA_ITEM.DEPRECATED, message: "deprecated" })} )); const constValue = schema?.const; const renderQualifier = guard(getQualifierMessage(schema), (qualifier) => ( {qualifier} )); function renderConstValue() { if (constValue === undefined) { return undefined; } const label = translate({ id: OPENAPI_SCHEMA_ITEM.CONSTANT_VALUE, message: "Constant value:", }); return (
{label} {typeof constValue === "string" ? constValue : JSON.stringify(constValue)}
); } const renderDescription = guard(description, (description) => ( {description} )); const renderEnumDescriptions = guard( getEnumDescriptionMarkdown(enumDescriptions), (value) => { return (
{value}
); } ); function renderDefaultValue() { if (defaultValue !== undefined) { if (typeof defaultValue === "string") { return (
{translate({ id: OPENAPI_SCHEMA_ITEM.DEFAULT_VALUE, message: "Default value:", })}{" "} {defaultValue}
); } return (
{translate({ id: OPENAPI_SCHEMA_ITEM.DEFAULT_VALUE, message: "Default value:", })}{" "} {JSON.stringify(defaultValue)}
); } return undefined; } return (
{name} {renderSchemaName} {(required || deprecated) && ( )} {renderSchemaRequired} {renderDeprecated} {renderQualifier} {renderConstValue()} {renderDescription} {renderEnumDescriptions} {renderDefaultValue()}
); } export default ParamsItem;