mirror of
https://github.com/Redocly/redoc.git
synced 2024-11-10 19:06:34 +03:00
Use an option usePathInSidebar (#1805)
* Use an option usePathInSidebar If this option is enabled, it displays a path in the sidebar instead of summary. Usage: ```js <RedocStandalone spec={props.spec} options={{ scrollYOffset:'.navbar', nativeScrollbars: true, usePathInSidebar:true }} ``` * Rename usePathInSidebar to sideNavStyle * Rename sidebarName to sidebarLabel * Use ternary operator * Use enums instead of raw string
This commit is contained in:
parent
8b1eea8c0c
commit
2e4663b3b7
|
@ -45,8 +45,8 @@ export class MenuItem extends React.Component<MenuItemProps> {
|
|||
<OperationMenuItemContent {...this.props} item={item as OperationModel} />
|
||||
) : (
|
||||
<MenuItemLabel depth={item.depth} active={item.active} type={item.type} ref={this.ref}>
|
||||
<MenuItemTitle title={item.name}>
|
||||
{item.name}
|
||||
<MenuItemTitle title={item.sidebarLabel}>
|
||||
{item.sidebarLabel}
|
||||
{this.props.children}
|
||||
</MenuItemTitle>
|
||||
{(item.depth > 0 && item.items.length > 0 && (
|
||||
|
@ -96,7 +96,7 @@ export class OperationMenuItemContent extends React.Component<OperationMenuItemC
|
|||
<OperationBadge type={item.httpVerb}>{shortenHTTPVerb(item.httpVerb)}</OperationBadge>
|
||||
)}
|
||||
<MenuItemTitle width="calc(100% - 38px)">
|
||||
{item.name}
|
||||
{item.sidebarLabel}
|
||||
{this.props.children}
|
||||
</MenuItemTitle>
|
||||
</MenuItemLabel>
|
||||
|
|
|
@ -16,6 +16,7 @@ export interface IMenuItem {
|
|||
id: string;
|
||||
absoluteIdx?: number;
|
||||
name: string;
|
||||
sidebarLabel: string;
|
||||
description?: string;
|
||||
depth: number;
|
||||
active: boolean;
|
||||
|
|
|
@ -5,6 +5,11 @@ import { isNumeric, mergeObjects } from '../utils/helpers';
|
|||
import { LabelsConfigRaw, setRedocLabels } from './Labels';
|
||||
import { MDXComponentMeta } from './MarkdownRenderer';
|
||||
|
||||
export enum SideNavStyleEnum {
|
||||
SummaryOnly = 'summary-only',
|
||||
PathOnly = 'path-only',
|
||||
}
|
||||
|
||||
export interface RedocRawOptions {
|
||||
theme?: ThemeInterface;
|
||||
scrollYOffset?: number | string | (() => number);
|
||||
|
@ -22,6 +27,7 @@ export interface RedocRawOptions {
|
|||
disableSearch?: boolean | string;
|
||||
onlyRequiredInSamples?: boolean | string;
|
||||
showExtensions?: boolean | string | string[];
|
||||
sideNavStyle?: SideNavStyleEnum;
|
||||
hideSingleRequestSampleTab?: boolean | string;
|
||||
menuToggle?: boolean | string;
|
||||
jsonSampleExpandLevel?: number | string | 'all';
|
||||
|
@ -142,6 +148,22 @@ export class RedocNormalizedOptions {
|
|||
}
|
||||
}
|
||||
|
||||
static normalizeSideNavStyle(value: RedocRawOptions['sideNavStyle']): SideNavStyleEnum {
|
||||
const defaultValue = SideNavStyleEnum.SummaryOnly;
|
||||
if (typeof value !== 'string') {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
switch (value) {
|
||||
case defaultValue:
|
||||
return value;
|
||||
case SideNavStyleEnum.PathOnly:
|
||||
return SideNavStyleEnum.PathOnly;
|
||||
default:
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
static normalizePayloadSampleIdx(value: RedocRawOptions['payloadSampleIdx']): number {
|
||||
if (typeof value === 'number') {
|
||||
return Math.max(0, value); // always greater or equal than 0
|
||||
|
@ -189,6 +211,7 @@ export class RedocNormalizedOptions {
|
|||
disableSearch: boolean;
|
||||
onlyRequiredInSamples: boolean;
|
||||
showExtensions: boolean | string[];
|
||||
sideNavStyle: SideNavStyleEnum;
|
||||
hideSingleRequestSampleTab: boolean;
|
||||
menuToggle: boolean;
|
||||
jsonSampleExpandLevel: number;
|
||||
|
@ -247,6 +270,7 @@ export class RedocNormalizedOptions {
|
|||
this.disableSearch = argValueToBoolean(raw.disableSearch);
|
||||
this.onlyRequiredInSamples = argValueToBoolean(raw.onlyRequiredInSamples);
|
||||
this.showExtensions = RedocNormalizedOptions.normalizeShowExtensions(raw.showExtensions);
|
||||
this.sideNavStyle = RedocNormalizedOptions.normalizeSideNavStyle(raw.sideNavStyle);
|
||||
this.hideSingleRequestSampleTab = argValueToBoolean(raw.hideSingleRequestSampleTab);
|
||||
this.menuToggle = argValueToBoolean(raw.menuToggle, true);
|
||||
this.jsonSampleExpandLevel = RedocNormalizedOptions.normalizeJsonSampleExpandLevel(
|
||||
|
|
|
@ -14,6 +14,7 @@ export class GroupModel implements IMenuItem {
|
|||
id: string;
|
||||
absoluteIdx?: number;
|
||||
name: string;
|
||||
sidebarLabel: string;
|
||||
description?: string;
|
||||
type: MenuItemGroupType;
|
||||
|
||||
|
@ -43,6 +44,8 @@ export class GroupModel implements IMenuItem {
|
|||
this.name = tagOrGroup['x-displayName'] || tagOrGroup.name;
|
||||
this.level = (tagOrGroup as MarkdownHeading).level || 1;
|
||||
|
||||
this.sidebarLabel = this.name;
|
||||
|
||||
// remove sections from markdown, same as in ApiInfo
|
||||
this.description = tagOrGroup.description || '';
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import { FieldModel } from './Field';
|
|||
import { MediaContentModel } from './MediaContent';
|
||||
import { RequestBodyModel } from './RequestBody';
|
||||
import { ResponseModel } from './Response';
|
||||
import { SideNavStyleEnum } from '../RedocNormalizedOptions';
|
||||
|
||||
export interface XPayloadSample {
|
||||
lang: 'payload';
|
||||
|
@ -49,6 +50,7 @@ export class OperationModel implements IMenuItem {
|
|||
id: string;
|
||||
absoluteIdx?: number;
|
||||
name: string;
|
||||
sidebarLabel: string;
|
||||
description?: string;
|
||||
type = 'operation' as const;
|
||||
|
||||
|
@ -104,6 +106,8 @@ export class OperationModel implements IMenuItem {
|
|||
|
||||
this.name = getOperationSummary(operationSpec);
|
||||
|
||||
this.sidebarLabel = options.sideNavStyle === SideNavStyleEnum.PathOnly ? this.path : this.name;
|
||||
|
||||
if (this.isCallback) {
|
||||
// NOTE: Callbacks by default should not inherit the specification's global `security` definition.
|
||||
// Can be defined individually per-callback in the specification. Defaults to none.
|
||||
|
|
Loading…
Reference in New Issue
Block a user