1
1
import * as vscode from "vscode" ;
2
2
3
3
import { AtelierAPI } from "../api" ;
4
- import { ClassNode } from "../explorer/models/classNode" ;
5
4
import { PackageNode } from "../explorer/models/packageNode" ;
6
5
import { RootNode } from "../explorer/models/rootNode" ;
7
- import { RoutineNode } from "../explorer/models/routineNode " ;
6
+ import { NodeBase } from "../explorer/models/nodeBase " ;
8
7
import { explorerProvider } from "../extension" ;
9
8
import { outputChannel } from "../utils" ;
10
9
import { OtherStudioAction , fireOtherStudioAction } from "./studio" ;
11
10
import { DocumentContentProvider } from "../providers/DocumentContentProvider" ;
12
11
13
- function deleteList ( items : string [ ] , workspaceFolder : string ) : Promise < any > {
12
+ function deleteList ( items : string [ ] , workspaceFolder : string , namespace : string ) : Promise < any > {
14
13
if ( ! items || ! items . length ) {
15
- vscode . window . showWarningMessage ( "Nothing to export " ) ;
14
+ vscode . window . showWarningMessage ( "Nothing to delete " ) ;
16
15
}
17
16
18
17
const api = new AtelierAPI ( workspaceFolder ) ;
18
+ api . setNamespace ( namespace ) ;
19
19
return Promise . all ( items . map ( ( item ) => api . deleteDoc ( item ) ) ) . then ( ( files ) => {
20
20
files . forEach ( ( file ) => {
21
21
if ( file . result . ext ) {
@@ -27,18 +27,34 @@ function deleteList(items: string[], workspaceFolder: string): Promise<any> {
27
27
} ) ;
28
28
}
29
29
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 [ ] > (
36
40
( list , subNode ) => list . concat ( subNode instanceof PackageNode ? subNode . getClasses ( ) : [ subNode . fullName ] ) ,
37
41
[ ]
38
42
)
39
43
)
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 ) ;
42
58
explorerProvider . refresh ( ) ;
43
59
} ) ;
44
60
}
0 commit comments