result.prepData = function()

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);
        })
    }