evmtools-node
Version:
このライブラリは、プライムブレインズ社で利用している「進捗管理ツール(Excel)」ファイルを読み込み、 プロジェクトの進捗状況や要員別の作業量を可視化するためのライブラリです。
56 lines • 2.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskService = void 0;
const TaskNode_1 = require("./TaskNode");
const TaskRow_1 = require("./TaskRow");
class TaskService {
constructor() {
// const flattenTaskNodes = (nodes: TaskNode[]): TaskNode[] => {
// const result: TaskNode[] = []
// const dfs = (node: TaskNode) => {
// result.push({ ...node, children: [] }) // children は空でOK(再ツリー化の邪魔になるため)
// node.children.forEach(dfs)
// }
// nodes.forEach(dfs)
// return result
// }
/**
* TaskNodeから、オブジェクト構造に従って、フラット化したTaskRowを返す
* parentId,levelは再計算する
* @param nodes
* @returns
*/
this.convertToTaskRows = (nodes) => {
const result = [];
const dfs = (node, parentId, level = 1) => {
result.push(TaskRow_1.TaskRow.fromNode(node, level, parentId));
node.children.forEach((child) => dfs(child, node.id, level + 1));
};
nodes.forEach((root) => dfs(root, undefined, 1)); // ルートノードは親なし、level=1
return result;
};
}
/**
* TaskRowからparentIdに従って、ツリー構造のTaskNodeをビルドする
* @param rows
* @returns
*/
buildTaskTree(rows) {
const nodeMap = new Map();
const roots = [];
for (const row of rows) {
const node = TaskNode_1.TaskNode.fromRow(row);
nodeMap.set(row.id, node);
if (row.parentId !== undefined) {
const parentNode = nodeMap.get(row.parentId);
parentNode?.children.push(node);
}
else {
roots.push(node);
}
}
return roots;
}
}
exports.TaskService = TaskService;
//# sourceMappingURL=TaskService.js.map