redoc/lib/components/ParamsList/params-list.js

81 lines
2.1 KiB
JavaScript
Raw Normal View History

2015-10-10 16:01:41 +03:00
'use strict';
import {JsonPointer} from '../../utils/JsonPointer';
import {RedocComponent, BaseComponent} from '../base';
2015-10-17 21:12:46 +03:00
import {JsonSchemaView} from '../JsonSchemaView/json-schema-view';
/* inject JsonPointer into array elements */
function injectPointers(array, root) {
if (!array) return array;
return array.map((element, idx) => {
element.$$pointer = JsonPointer.join(root, idx);
return element;
});
}
2015-10-10 16:01:41 +03:00
@RedocComponent({
selector: 'params-list',
templateUrl: './lib/components/ParamsList/params-list.html',
2015-10-17 21:12:46 +03:00
styleUrls: ['./lib/components/ParamsList/params-list.css'],
directives: [JsonSchemaView]
2015-10-10 16:01:41 +03:00
})
export class ParamsList extends BaseComponent {
constructor(schemaMgr) {
super(schemaMgr);
}
prepareModel() {
this.data = {};
2015-10-17 21:12:46 +03:00
let params = injectPointers(this.componentSchema, this.pointer) || [];
2015-10-10 16:48:17 +03:00
let pathParams = this.getPathParams() || [];
params = params.concat(pathParams);
params = this.resolveRefs(params);
2015-10-10 16:01:41 +03:00
this.sortParams(params);
2015-10-17 21:12:46 +03:00
// temporary handle body param
2015-10-10 16:01:41 +03:00
if (params.length && params[params.length - 1].in === 'body') {
let bodyParam = params.pop();
2015-10-17 21:12:46 +03:00
bodyParam.pointer = bodyParam.$$pointer;
2015-10-10 16:01:41 +03:00
this.data.bodyParam = bodyParam;
}
this.data.noParams = !(params.length || this.data.bodyParam);
this.data.params = params;
}
getPathParams() {
let ptr = JsonPointer.dirName(this.pointer, 2) + '/parameters';
let pathParams = this.schemaMgr.byPointer(ptr);
if (Array.isArray(pathParams)) {
2015-10-17 21:12:46 +03:00
return injectPointers(pathParams, ptr);
2015-10-10 16:01:41 +03:00
}
if (pathParams && pathParams.$ref) {
2015-10-17 21:12:46 +03:00
return injectPointers(this.schemaMgr.byPointer(pathParams.$ref), pathParams.$ref);
2015-10-10 16:01:41 +03:00
}
return [];
}
2015-10-10 16:48:17 +03:00
resolveRefs(params) {
return params.map(param => {
if (param.$ref) {
return this.schemaMgr.byPointer(param.$ref);
} else {
return param;
}
});
}
2015-10-10 16:01:41 +03:00
sortParams(params) {
const sortOrder = {
'path' : 0,
'query' : 10,
'formData' : 20,
'header': 40,
'body': 50
};
2015-10-10 16:48:17 +03:00
params.sort((a, b) => sortOrder[a.in] - sortOrder[b.in]);
2015-10-10 16:01:41 +03:00
}
}