MCPcopy Create free account
hub / github.com/bytebase/bytebase / buildTree

Function buildTree

frontend/src/views/sql-editor/Sheet/context.ts:572–618  ·  view source on GitHub ↗
(
  view: SheetViewMode,
  parent: WorksheetFolderNode,
  worksheetsByFolder: Map<string, WorksheetLikeItem[]>,
  hideEmpty: boolean
)

Source from the content-addressed store, hash-verified

570};
571
572const buildTree = (
573 view: SheetViewMode,
574 parent: WorksheetFolderNode,
575 worksheetsByFolder: Map<string, WorksheetLikeItem[]>,
576 hideEmpty: boolean
577): WorksheetFolderNode => {
578 const folderContext = getFolderContext(view);
579 const subfolders: WorksheetFolderNode[] = folderContext
580 .listSubFolders(parent.key)
581 .map((folder) => ({
582 isLeaf: false,
583 children: [],
584 key: folder,
585 label: folder.split("/").slice(-1)[0],
586 editable: true,
587 }));
588
589 let empty = true;
590 for (const childNode of subfolders) {
591 const subtree = buildTree(view, childNode, worksheetsByFolder, hideEmpty);
592 if (!subtree.empty || !hideEmpty) {
593 parent.children.push(subtree);
594 }
595 if (!subtree.empty) {
596 empty = false;
597 }
598 }
599
600 const sheets = orderBy(
601 worksheetsByFolder.get(parent.key) ?? [],
602 (item) => item.title
603 ).map<WorksheetFolderNode>((worksheet) => ({
604 isLeaf: true,
605 key: getKeyForWorksheet(view, worksheet),
606 label: worksheet.title,
607 worksheet,
608 editable: true,
609 children: [],
610 }));
611
612 parent.children.push(...sheets);
613 parent.empty = sheets.length === 0 && empty;
614 if (parent.key !== folderContext.rootPath) {
615 parent.isLeaf = parent.children.length === 0;
616 }
617 return parent;
618};
619
620const worksheetsForView = (view: SheetViewMode): Worksheet[] => {
621 if (view !== "my" && view !== "shared") return [];

Callers 2

rebuildTreeImplFunction · 0.70
folderTreeFunction · 0.70

Calls 3

getFolderContextFunction · 0.85
getKeyForWorksheetFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected