feat: New option onlyRequiredInSamples (#646)

* Add onlyRequiredInSamples option that let user to show only required fields in Request samples.
This commit is contained in:
TATSUNO Yasuhiro 2018-10-05 22:14:41 +09:00 committed by Roman Hotsiy
parent fbcec82275
commit 10bca66dce
3 changed files with 13 additions and 2 deletions

View File

@ -227,6 +227,7 @@ You can use all of the following options with standalone version on <redoc> tag
* `nativeScrollbars` - use native scrollbar for sidemenu instead of perfect-scroll (scrolling performance optimization for big specs)
* `hideDownloadButton` - do not show "Download" spec button. **THIS DOESN'T MAKE YOUR SPEC PRIVATE**, it just hides the button.
* `disableSearch` - disable search indexing and search box
* `onlyRequiredInSamples` - shows only required fields in request samples.
* `theme` - ReDoc theme. Not documented yet. For details check source code: [theme.ts](https://github.com/Rebilly/ReDoc/blob/master/src/theme.ts)
## Advanced usage of standalone version

View File

@ -18,6 +18,7 @@ export interface RedocRawOptions {
hideLoading?: boolean | string;
hideDownloadButton?: boolean | string;
disableSearch?: boolean | string;
onlyRequiredInSamples?: boolean | string;
showExtensions?: boolean | string | string[];
unstable_ignoreMimeParameters?: boolean;
@ -117,6 +118,7 @@ export class RedocNormalizedOptions {
untrustedSpec: boolean;
hideDownloadButton: boolean;
disableSearch: boolean;
onlyRequiredInSamples: boolean;
showExtensions: boolean | string[];
/* tslint:disable-next-line */
@ -144,6 +146,7 @@ export class RedocNormalizedOptions {
this.untrustedSpec = argValueToBoolean(raw.untrustedSpec);
this.hideDownloadButton = argValueToBoolean(raw.hideDownloadButton);
this.disableSearch = argValueToBoolean(raw.disableSearch);
this.onlyRequiredInSamples = argValueToBoolean(raw.onlyRequiredInSamples);
this.showExtensions = RedocNormalizedOptions.normalizeShowExtensions(raw.showExtensions);
this.unstable_ignoreMimeParameters = argValueToBoolean(raw.unstable_ignoreMimeParameters);

View File

@ -13,6 +13,7 @@ export class MediaTypeModel {
schema?: SchemaModel;
name: string;
isRequestType: boolean;
onlyRequiredInSamples: boolean;
/**
* @param isRequestType needed to know if skipe RO/RW fields in objects
@ -27,6 +28,7 @@ export class MediaTypeModel {
this.name = name;
this.isRequestType = isRequestType;
this.schema = info.schema && new SchemaModel(parser, info.schema, '', options);
this.onlyRequiredInSamples = options.onlyRequiredInSamples;
if (info.examples !== undefined) {
this.examples = mapValues(info.examples, example => new ExampleModel(parser, example));
} else if (info.example !== undefined) {
@ -39,12 +41,17 @@ export class MediaTypeModel {
}
generateExample(parser: OpenAPIParser, info: OpenAPIMediaType) {
const samplerOptions = {
skipReadOnly: this.isRequestType,
skipNonRequired: this.isRequestType && this.onlyRequiredInSamples,
skipWriteOnly: !this.isRequestType,
};
if (this.schema && this.schema.oneOf) {
this.examples = {};
for (const subSchema of this.schema.oneOf) {
const sample = Sampler.sample(
subSchema.rawSchema,
{ skipReadOnly: this.isRequestType, skipWriteOnly: !this.isRequestType },
samplerOptions,
parser.spec,
);
@ -61,7 +68,7 @@ export class MediaTypeModel {
default: new ExampleModel(parser, {
value: Sampler.sample(
info.schema,
{ skipReadOnly: this.isRequestType, skipWriteOnly: !this.isRequestType },
samplerOptions,
parser.spec,
),
}),