diff --git a/lib/www/server/lib/utils/flattenQCDefinitions.js b/lib/www/server/lib/utils/flattenQCDefinitions.js new file mode 100644 index 0000000..2aaf78f --- /dev/null +++ b/lib/www/server/lib/utils/flattenQCDefinitions.js @@ -0,0 +1,27 @@ + +/** Convert QC definitions tree into a flat list. + */ +function flattenQCDefinitions(items, keywords=[], labels=[], disabled=false) { + const result = []; + + if (items) { + for (const item of items) { + if (!item.children) { + result.push({ + ...item, + iterate: (item.iterate ?? "shots"), + labels: labels.concat(item.labels??[]), + disabled: (item.disabled ?? disabled) + }); + } else { + const k = [...keywords, item.name]; + const l = [...labels, ...(item.labels??[])]; + const d = item.disabled ?? disabled + result.push(...flattenQCDefinitions(item.children, k, l, d)) + } + } + } + return result; +} + +module.exports = flattenQCDefinitions; diff --git a/lib/www/server/lib/utils/index.js b/lib/www/server/lib/utils/index.js index dc020f7..1d56a1a 100644 --- a/lib/www/server/lib/utils/index.js +++ b/lib/www/server/lib/utils/index.js @@ -2,5 +2,6 @@ module.exports = { geometryAsString: require('./geometryAsString'), dms: require('./dms'), - replaceMarkers: require('./replaceMarkers') + replaceMarkers: require('./replaceMarkers'), + flattenQCDefinitions: require('./flattenQCDefinitions') };