diff --git a/src/services/workbench/__tests__/folderTreeService.test.ts b/src/services/workbench/__tests__/folderTreeService.test.ts index f6548bdf3..8f0aed3a6 100644 --- a/src/services/workbench/__tests__/folderTreeService.test.ts +++ b/src/services/workbench/__tests__/folderTreeService.test.ts @@ -494,4 +494,46 @@ describe('Test StatusBarService', () => { folderTreeService.emit(FolderTreeEvent.onExpandKeys); }); }); + + test('Should support to get the current treeNodes parentNode', () => { + const mockRootTree: IFolderTreeNodeProps = { + id: '0', + name: 'test0', + fileType: 'RootFolder', + location: 'test0', + }; + + const mockFolderData = { + id: '2', + name: 'test1-1', + icon: 'test', + isLeaf: false, + fileType: FileTypes.Folder, + }; + + const mockFileData = { + id: '3', + name: 'test1-2', + icon: 'test', + isLeaf: true, + fileType: FileTypes.File, + }; + + folderTreeService.add(mockRootTree); + expect(folderTreeService.get(mockRootTree.id)).toEqual(mockRootTree); + + folderTreeService.add(mockFolderData, mockRootTree.id); + expect(folderTreeService.get(mockFolderData.id)).toEqual( + mockFolderData + ); + + folderTreeService.add(mockFileData, mockFolderData.id); + expect(folderTreeService.get(mockFileData.id)).toEqual(mockFileData); + + const expectedData = folderTreeService.get(mockFolderData.id); + + expect(folderTreeService.getParentNode(mockFileData.id)).toEqual( + expectedData + ); + }); }); diff --git a/src/services/workbench/explorer/folderTreeService.ts b/src/services/workbench/explorer/folderTreeService.ts index 4a33c1690..1f1430cf6 100644 --- a/src/services/workbench/explorer/folderTreeService.ts +++ b/src/services/workbench/explorer/folderTreeService.ts @@ -44,6 +44,11 @@ export interface IFolderTreeService extends Component { * @param id */ get(id: UniqueId): IFolderTreeNodeProps | null; + /** + * get the current treeNode's parentNode + * @param id + */ + getParentNode(id: UniqueId): IFolderTreeNodeProps | null; /** * Get the context menus for file */ @@ -227,6 +232,15 @@ export class FolderTreeService return this.fileContextMenu; } + public getParentNode(id: UniqueId): IFolderTreeNodeProps | null { + const root = this.state.folderTree?.data?.[0]; + if (!root) return null; + const treeHelper = new TreeViewUtil(root); + const node = treeHelper.getHashMap(id); + if (!node) return null; + return node.parent ? treeHelper.getNode(node.parent) : null; + } + public setFileContextMenu(menus: IMenuItemProps[]) { this.fileContextMenu = menus; } diff --git a/stories/extensions/test/testPane.tsx b/stories/extensions/test/testPane.tsx index be28738aa..c7b75e400 100644 --- a/stories/extensions/test/testPane.tsx +++ b/stories/extensions/test/testPane.tsx @@ -412,6 +412,7 @@ PARTITIONED BY (DE STRING) LIFECYCLE 1000; children, }) ); + notice( `The root folder has been added to Explorer and you can switch to Explorer to view it` );