11import * as vscode from "vscode" ;
22
33import { AtelierAPI } from "../api" ;
4- import { ClassNode } from "../explorer/models/classNode" ;
54import { PackageNode } from "../explorer/models/packageNode" ;
65import { RootNode } from "../explorer/models/rootNode" ;
7- import { RoutineNode } from "../explorer/models/routineNode " ;
6+ import { NodeBase } from "../explorer/models/nodeBase " ;
87import { explorerProvider } from "../extension" ;
98import { outputChannel } from "../utils" ;
109import { OtherStudioAction , fireOtherStudioAction } from "./studio" ;
1110import { DocumentContentProvider } from "../providers/DocumentContentProvider" ;
1211
13- function deleteList ( items : string [ ] , workspaceFolder : string ) : Promise < any > {
12+ function deleteList ( items : string [ ] , workspaceFolder : string , namespace : string ) : Promise < any > {
1413 if ( ! items || ! items . length ) {
15- vscode . window . showWarningMessage ( "Nothing to export " ) ;
14+ vscode . window . showWarningMessage ( "Nothing to delete " ) ;
1615 }
1716
1817 const api = new AtelierAPI ( workspaceFolder ) ;
18+ api . setNamespace ( namespace ) ;
1919 return Promise . all ( items . map ( ( item ) => api . deleteDoc ( item ) ) ) . then ( ( files ) => {
2020 files . forEach ( ( file ) => {
2121 if ( file . result . ext ) {
@@ -27,18 +27,34 @@ function deleteList(items: string[], workspaceFolder: string): Promise<any> {
2727 } ) ;
2828}
2929
30- export async function deleteItem ( node : RootNode | PackageNode | ClassNode | RoutineNode ) : Promise < any > {
31- const workspaceFolder = node . workspaceFolder ;
32- const nodesList = node instanceof RootNode ? node . getChildren ( node ) : Promise . resolve ( [ node ] ) ;
33- return nodesList
34- . then ( ( nodes ) =>
35- nodes . reduce (
30+ export async function deleteExplorerItems ( nodes : NodeBase [ ] ) : Promise < any > {
31+ const { workspaceFolder, namespace } = nodes [ 0 ] ;
32+ const nodesPromiseList : Promise < NodeBase [ ] > [ ] = [ ] ;
33+ for ( const node of nodes ) {
34+ nodesPromiseList . push ( node instanceof RootNode ? node . getChildren ( node ) : Promise . resolve ( [ node ] ) ) ;
35+ }
36+ return Promise . all ( nodesPromiseList )
37+ . then ( ( nodesList ) => nodesList . flat ( ) )
38+ . then ( ( allNodes ) =>
39+ allNodes . reduce < string [ ] > (
3640 ( list , subNode ) => list . concat ( subNode instanceof PackageNode ? subNode . getClasses ( ) : [ subNode . fullName ] ) ,
3741 [ ]
3842 )
3943 )
40- . then ( ( items ) => {
41- deleteList ( items , workspaceFolder ) ;
44+ . then ( async ( items ) => {
45+ if ( nodes . length > 1 ) {
46+ // Ask the user to confirm if they're deleting more than one explorer node
47+ const confirm = await vscode . window . showWarningMessage (
48+ `About to delete ${ items . length } documents. Are you sure you want to proceed?` ,
49+ "Cancel" ,
50+ "Confirm"
51+ ) ;
52+ if ( confirm !== "Confirm" ) {
53+ // Don't delete without confirmation
54+ return ;
55+ }
56+ }
57+ deleteList ( items , workspaceFolder , namespace ) ;
4258 explorerProvider . refresh ( ) ;
4359 } ) ;
4460}
0 commit comments