mirror of
				https://github.com/Redocly/redoc.git
				synced 2025-10-31 15:57:30 +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