MCPcopy Create free account
hub / github.com/DTStack/molecule / FolderTreeService

Class FolderTreeService

src/services/workbench/explorer/folderTreeService.ts:174–586  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

172
173@singleton()
174export class FolderTreeService
175 extends Component<IFolderTree>
176 implements IFolderTreeService
177{
178 protected state: IFolderTree;
179 private readonly explorerService: IExplorerService;
180 private readonly builtinService: IBuiltinService;
181 private fileContextMenu: IMenuItemProps[] = [];
182 private folderContextMenu: IMenuItemProps[] = [];
183
184 constructor() {
185 super();
186 this.state = container.resolve(IFolderTreeModel);
187 this.explorerService = container.resolve(ExplorerService);
188 this.builtinService = container.resolve(BuiltinService);
189 }
190
191 private isHiddenFile(file: IFolderTreeNodeProps) {
192 return !!file.name?.startsWith('.');
193 }
194
195 private sortTree(tree: IFolderTreeNodeProps[]) {
196 tree.sort((pre, cur) => {
197 // folder before file
198 if (pre.isLeaf !== cur.isLeaf) {
199 return pre.isLeaf! > cur.isLeaf! ? 1 : -1;
200 }
201
202 // in general, both have name
203 if (pre.name && cur.name) {
204 const isHiddenFilePre = Number(this.isHiddenFile(pre));
205 const isHiddenFileCur = Number(this.isHiddenFile(cur));
206 // one is hidden file and another is not
207 if (isHiddenFilePre ^ isHiddenFileCur) {
208 return isHiddenFilePre ? -1 : 1;
209 }
210 // both are hidden files
211 if (isHiddenFilePre & isHiddenFilePre) {
212 // hidden file
213 return pre.name
214 .substring(1)
215 .localeCompare(cur.name.substring(1));
216 }
217 return pre.name.localeCompare(cur.name!);
218 }
219
220 // the node which is creating would without name
221 return pre.isEditable ? -1 : 1;
222 });
223
224 tree.forEach((treeNode) => this.sortTree(treeNode.children || []));
225 }
226
227 public reset() {
228 this.setState({
229 folderTree: {
230 contextMenu: [],
231 current: null,

Callers

nothing calls this directly

Calls 1

subscribeMethod · 0.80

Tested by

no test coverage detected