in ui-modules/app-inspector/app/components/task-sunburst/task-sunburst.directive.js [91:146]
result.prepData = function() {
tasksData = {name: "root", task: null, children: []};
const tasks = Array.isArray($scope.tasks) ? $scope.tasks : Object.values($scope.tasks);
tasksById = {};
// accept array or map where values are the array
// built a map with keys as the id, values a map wrapping the original task in key "task"
// alongside keys name, parentId, children
tasks.forEach(t => {
if ($scope.excludeTransient && t.tags && t.tags.findIndex(tag => tag=='TRANSIENT')>=0) {
return
}
tasksById[t.id] = { task: t, name: t.displayName };
});
let filteredTo = $scope.filteredTo && $scope.filteredTo.reduce( (result,v)=>{result[v.id]=v; return result;}, {} );
function filteredToAccepts(v) {
if (!filteredTo) return true;
if (!v || !v.task) return false;
if (filteredTo[v.task.id]) return true;
if (!v.parentId) return false;
return filteredToAccepts(tasksById[v.parentId]);
}
Object.values(tasksById).forEach((v,i) => {
v.sequenceId = i;
if (v.task.children) {
// set this as the parent of all known children
v.task.children.forEach(c => {
var ct = tasksById[c.metadata.id];
if (ct && !ct.parentId) {
ct.parentId = v.task.id;
}
});
}
// and if this was submitted by something known set the submitter as the parent
if (v.task.submittedByTask) {
v.parentId = v.task.submittedByTask.metadata.id;
}
});
Object.values(tasksById).forEach(v => {
if (!filteredToAccepts(v)) return;
if (v.parentId) {
var parentTask = tasksById[v.parentId];
if (parentTask && filteredToAccepts(parentTask)) {
// we know the parent, put this as a child of it
if (!parentTask.children) parentTask.children = [];
parentTask.children.push(v);
return;
}
}
// put at root if we don't know the parent
tasksData.children.push(v);
})
}