liusuyi
2023-04-24 4737f1e038743ced243c9e52423404d9034d6107
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import _ from 'lodash';
 
import Module from './Module';
import ContentModule from './ContentModule';
import ContentFolder from './ContentFolder';
import {getModulePathParts} from './utils';
 
export default class ConcatenatedModule extends Module {
 
  constructor(name, data, parent) {
    super(name, data, parent);
    this.name += ' (concatenated)';
    this.children = Object.create(null);
    this.fillContentModules();
  }
 
  fillContentModules() {
    _.each(this.data.modules, moduleData => this.addContentModule(moduleData));
  }
 
  addContentModule(moduleData) {
    const pathParts = getModulePathParts(moduleData);
 
    if (!pathParts) {
      return;
    }
 
    const [folders, fileName] = [pathParts.slice(0, -1), _.last(pathParts)];
    let currentFolder = this;
 
    _.each(folders, folderName => {
      let childFolder = currentFolder.getChild(folderName);
 
      if (!childFolder) {
        childFolder = currentFolder.addChildFolder(new ContentFolder(folderName, this));
      }
 
      currentFolder = childFolder;
    });
 
    const module = new ContentModule(fileName, moduleData, this);
    currentFolder.addChildModule(module);
  }
 
  getChild(name) {
    return this.children[name];
  }
 
  addChildModule(module) {
    module.parent = this;
    this.children[module.name] = module;
  }
 
  addChildFolder(folder) {
    folder.parent = this;
    this.children[folder.name] = folder;
    return folder;
  }
 
  mergeNestedFolders() {
    _.invokeMap(this.children, 'mergeNestedFolders');
  }
 
  toChartData() {
    return {
      ...super.toChartData(),
      concatenated: true,
      groups: _.invokeMap(this.children, 'toChartData')
    };
  }
 
};