From 4380961410064716178f690940d2c47d75dc8988 Mon Sep 17 00:00:00 2001 From: Matthew Bellew Date: Wed, 17 Jan 2024 19:34:22 -0800 Subject: [PATCH] checkpoint POC for smaller GetQueryDetails.api response --- src/labkey/query/GetQueryDetails.ts | 46 +++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/labkey/query/GetQueryDetails.ts b/src/labkey/query/GetQueryDetails.ts index 8f0fe124..8b9344ef 100644 --- a/src/labkey/query/GetQueryDetails.ts +++ b/src/labkey/query/GetQueryDetails.ts @@ -99,6 +99,7 @@ export interface QueryDetailsResponse { name: string; schemaName: string; targetContainers: Container[]; + templateColumn : QueryColumn; title: string; titleColumn: string; viewDataUrl: string; @@ -171,10 +172,51 @@ export function getQueryDetails(options: GetQueryDetailsOptions): XMLHttpRequest params.includeTriggers = options.includeTriggers; } + + function _expandColumnMetaData(template : any, col : any) + { + const name = col.name; + for (let key in ['fieldKey', 'fieldKeyPath', 'shortCaption', 'caption']) { + if (!(key in col)) + col[key] = name; + } + if (!('fieldKeyArray' in col)) + col['fieldKeyArray'] = [name]; + return Object.assign(Object.assign({}, template), col); + } + + function _transformQueryDetailsResponse(json : any) : any + { + const template = json.templateColumn; + // if null==template we don't do any compression, including name/fieldKey/caption etc + if (!template) + return json; + if (Array.isArray(json.columns)) { + let columns = json.columns; + for (let i in columns) + columns[i] = _expandColumnMetaData(template, columns[i]); + } + if (json.defaultView && Array.isArray(json.defaultView.columns)) { + let columns = json.defaultView.columns; + for (let i in columns) + columns[i] = _expandColumnMetaData(template, columns[i]); + } + if (Array.isArray(json.views)) { + for (let v in json.views) { + if (Array.isArray(json.views[v].fields)) { + let columns = json.views[v].fields; + for (let i in columns) + columns[i] = _expandColumnMetaData(template, columns[i]); + } + } + } + return json; + } + return request({ - url: buildURL('query', 'getQueryDetails.api', options.containerPath), + url: buildURL('query', 'getQueryDetails2.api', options.containerPath), method: getMethod(options.method), - success: getCallbackWrapper(getOnSuccess(options), options.scope), + success: getCallbackWrapper(getOnSuccess(options), options.scope, false, _transformQueryDetailsResponse), failure: getCallbackWrapper(getOnFailure(options), options.scope, true), params, });