Skip to content
Snippets Groups Projects
Commit adce943a authored by Steve Reis's avatar Steve Reis
Browse files

feat(datashield): Update domains input

parent 28d89b79
No related branches found
No related tags found
No related merge requests found
...@@ -10,24 +10,23 @@ export const transformToDomain = jsonata(` ...@@ -10,24 +10,23 @@ export const transformToDomain = jsonata(`
"id": "sophia", "id": "sophia",
"label": "Sophia", "label": "Sophia",
"datasets": datasets.{ "datasets": datasets.{
"id": $.id[0], "id": $.id[0],
"label": $.label[0] "label": $.label[0]
}, },
"rootGroup": { "rootGroup": {
"id": "root", "id": "root",
"label": "Sophia", "label": "Sophia",
"groups": $append(rootGroup.groups, $keys($.groups.variables)) "groups": $append(rootGroup.groups, $keys($.groups.variables))
}, },
"groups": datasets.{ "groups": datasets.{
"id": $.id[0], "id": $.id[0],
"label": $.label[0], "label": $.label[0],
"groups": [], "groups": [],
"datasets": $.id[0][] "datasets": $.id[0][]
}[], }[],
"variables": $distinct(groups.variables.($type($) = 'object' ? $.* : $)).{ "variables": variables.(
"id": $, $merge([$, {'label': $.label ? $label : $trim($replace($.id, '.', ' '))}])
"label": $trim($replace($ & '', '.', ' ')) )
}
} }
`); `);
...@@ -86,39 +85,50 @@ $ ~> |$|{'id': subjectId}, ['subjectId']| ...@@ -86,39 +85,50 @@ $ ~> |$|{'id': subjectId}, ['subjectId']|
`); `);
export type dsGroup = { export type dsGroup = {
id: string[]; id: string;
label: string[]; label: string;
variables: Record<string, string[]> | string[]; variables: Record<string, string[]> | string[];
groups?: string[]; groups?: string[];
}; };
export const dataToGroups = (dsDomain: Domain, groups: dsGroup[]) => { export const dataToGroups = (dsDomain: Domain, groups: dsGroup[]) => {
groups.forEach((g) => { groups.forEach((group) => {
if (Array.isArray(g.variables)) { // Check if variables contains sub db split
dsDomain.groups.push({ if (Array.isArray(group.variables)) {
id: g.id[0], // Global group (exist in every cohort)
label: g.label[0], group.variables = dsDomain.datasets.reduce((prev, db) => {
variables: g.variables, prev[db.id] = group.variables;
}); return prev;
return; }, {});
} }
if (dsDomain.rootGroup.groups.includes(g.id[0])) { let isRootGroup = false;
// remove group if it's in the root
if (dsDomain.rootGroup.groups.includes(group.id)) {
isRootGroup = true;
dsDomain.rootGroup.groups = dsDomain.rootGroup.groups.filter( dsDomain.rootGroup.groups = dsDomain.rootGroup.groups.filter(
(gId) => gId !== g.id[0], (gId) => gId !== group.id,
); );
} }
return Object.entries(g.variables).map(([key, val]) => { return Object.entries(group.variables).map(([db, variables]) => {
const id = `${g.id}-${key}`; const id = `${group.id}-${db}`;
dsDomain.groups.find((g) => g.id === key).groups.push(id);
const group: Group = { // push group into root db group
if (isRootGroup)
dsDomain.groups.find((g2) => g2.id === db).groups.push(id);
const newGroup: Group = {
id, id,
variables: val, variables,
groups: g['groups'] ? g['groups'].map((g) => `${g}-${key}`) : undefined, groups: group['groups']
label: `${g.label[0]} (${key})`, ? group['groups'].map((g2) => `${g2}-${db}`)
: undefined,
label: `${group.label} (${db})`,
}; };
dsDomain.groups.push(group);
dsDomain.groups.push(newGroup);
}); });
}); });
}; };
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment