From 97e38b3a9585d4261059637b0978eee487a4d52a Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Tue, 23 Feb 2016 13:05:59 +0200 Subject: [PATCH] Group operation parameters by type (fixes #23) --- lib/components/ParamsList/params-list.html | 35 +++++++++------- lib/components/ParamsList/params-list.js | 49 ++++++++++++---------- lib/components/ParamsList/params-list.scss | 6 +++ 3 files changed, 53 insertions(+), 37 deletions(-) diff --git a/lib/components/ParamsList/params-list.html b/lib/components/ParamsList/params-list.html index e4583e9a..0e623cf0 100644 --- a/lib/components/ParamsList/params-list.html +++ b/lib/components/ParamsList/params-list.html @@ -1,22 +1,25 @@

Parameters

-
-
-
- {{param.name}} -
-
-
- {{param._displayType}} {{param._displayFormat}} - Required -
- {{enumItem.val | json}} -
+

Request Body

diff --git a/lib/components/ParamsList/params-list.js b/lib/components/ParamsList/params-list.js index d027db7c..6a369b2e 100644 --- a/lib/components/ParamsList/params-list.js +++ b/lib/components/ParamsList/params-list.js @@ -4,6 +4,11 @@ import {RedocComponent, BaseComponent} from '../base'; import JsonSchema from '../JsonSchema/json-schema'; import JsonSchemaLazy from '../JsonSchema/json-schema-lazy'; +function safePush(obj, prop, item) { + if (!obj[prop]) obj[prop] = []; + obj[prop].push(item); +} + @RedocComponent({ selector: 'params-list', templateUrl: './lib/components/ParamsList/params-list.html', @@ -17,34 +22,36 @@ export default class ParamsList extends BaseComponent { prepareModel() { this.data = {}; - let params = this.schemaMgr.getMethodParams(this.pointer, true); - this.sortParams(params); + let paramsList = this.schemaMgr.getMethodParams(this.pointer, true); - // temporary handle body param - if (params.length && params[params.length - 1].in === 'body') { - let bodyParam = params.pop(); - bodyParam.pointer = bodyParam._pointer; - this.data.bodyParam = bodyParam; - } - - params = params.map((paramData) => { + paramsList = paramsList.map((paramData) => { let propPointer = paramData._pointer; return JsonSchema.injectPropData(paramData, paramData.name, propPointer); }); - this.data.noParams = !(params.length || this.data.bodyParam); + let paramsMap = this.orderParams(paramsList); + + if (paramsMap.body && paramsMap.body.length) { + let bodyParam = paramsMap.body[0]; + bodyParam.pointer = bodyParam._pointer; + this.data.bodyParam = bodyParam; + delete paramsMap.body; + } + + this.data.noParams = !(Object.keys(paramsMap).length || this.data.bodyParam); + + let paramsPlaces = ['path', 'query', 'formData', 'header', 'body']; + let params = []; + paramsPlaces.forEach(place => { + if (paramsMap[place] && paramsMap[place].length) + params.push({place: place, params: paramsMap[place]}); + }); this.data.params = params; } - sortParams(params) { - const sortOrder = { - 'path' : 0, - 'query' : 10, - 'formData' : 20, - 'header': 40, - 'body': 50 - }; - - params.sort((a, b) => sortOrder[a.in] - sortOrder[b.in]); + orderParams(params) { + let res = {}; + params.forEach((param) => safePush(res, param.in, param)); + return res; } } diff --git a/lib/components/ParamsList/params-list.scss b/lib/components/ParamsList/params-list.scss index 2475d8f7..9f8603c6 100644 --- a/lib/components/ParamsList/params-list.scss +++ b/lib/components/ParamsList/params-list.scss @@ -9,10 +9,15 @@ @import '../JsonSchema/json-schema-common'; +header.paramType { + margin: 10px 0; + text-transform: capitalize; +} // paramters can't be multilevel so table representation works for it without javascript .params-wrap { display: table; + width: 100%; } .param-name { @@ -22,6 +27,7 @@ .param-info { display: table-cell; + width: 100%; } .param {