From e34b0f4a12e04a2b9d8cc750cbbe6238508e0e13 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 16 Nov 2023 16:21:52 +0100 Subject: [PATCH] api-viewer: implement basic oneOf support for parameters only for now, also only implement the basic use case we want to have currently: use in section config apis where we have more than one type. we could improve upon that, e.g. by properly grouping the type relevant options, and also implementing that for return types. Signed-off-by: Dominik Csapak --- src/api-viewer/APIViewer.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/api-viewer/APIViewer.js b/src/api-viewer/APIViewer.js index d9753b2..26a1c08 100644 --- a/src/api-viewer/APIViewer.js +++ b/src/api-viewer/APIViewer.js @@ -7,7 +7,7 @@ Ext.onReady(function() { 'name', 'type', 'typetext', 'description', 'verbose_description', 'enum', 'minimum', 'maximum', 'minLength', 'maxLength', 'pattern', 'title', 'requires', 'format', 'default', - 'disallow', 'extends', 'links', + 'disallow', 'extends', 'links', 'instance-types', { name: 'optional', type: 'boolean', @@ -214,6 +214,10 @@ Ext.onReady(function() { }, groupField: 'optional', sorters: [ + { + property: 'instance-types', + direction: 'ASC', + }, { property: 'name', direction: 'ASC', @@ -221,9 +225,27 @@ Ext.onReady(function() { ], }); + let has_type_properties = false; + Ext.Object.each(info.parameters.properties, function(name, pdef) { - pdef.name = name; - pstore.add(pdef); + if (pdef.oneOf) { + pdef.oneOf.forEach((alternative) => { + alternative.name = name; + pstore.add(alternative); + has_type_properties = true; + }); + } else if (pdef['instance-types']) { + pdef['instance-types'].forEach((type) => { + let typePdef = Ext.apply({}, pdef); + typePdef.name = name; + typePdef['instance-types'] = [type]; + pstore.add(typePdef); + has_type_properties = true; + }); + } else { + pdef.name = name; + pstore.add(pdef); + } }); pstore.sort(); @@ -255,6 +277,12 @@ Ext.onReady(function() { renderer: render_type, flex: 1, }, + { + header: 'For Types', + dataIndex: 'instance-types', + hidden: !has_type_properties, + flex: 1, + }, { header: 'Default', dataIndex: 'default',