1
+ import { NightwatchBrowser } from 'nightwatch'
2
+ import EventEmitter from 'events'
3
+
4
+ class ExpandAllFolders extends EventEmitter {
5
+ command ( this : NightwatchBrowser , targetDirectory ?: string ) {
6
+ this . api . perform ( ( done ) => {
7
+ expandAllFolders ( this . api , targetDirectory , ( ) => {
8
+ done ( )
9
+ this . emit ( 'complete' )
10
+ } )
11
+ } )
12
+ return this
13
+ }
14
+ }
15
+
16
+ function expandAllFolders ( browser : NightwatchBrowser , targetDirectory ?: string , done ?: VoidFunction ) {
17
+ // Ensure file panel is open
18
+ browser . perform ( ( bdone : VoidFunction ) => {
19
+ browser . isVisible ( '[data-id="remixIdeSidePanel"]' , ( result ) => {
20
+ if ( result . value ) {
21
+ browser . element ( 'css selector' , '[data-id="verticalIconsKindfilePanel"] img[data-id="selected"]' , ( result ) => {
22
+ if ( result . status === 0 ) {
23
+ bdone ( )
24
+ } else browser . clickLaunchIcon ( 'filePanel' ) . perform ( ( ) => {
25
+ bdone ( )
26
+ } )
27
+ } )
28
+ } else {
29
+ browser . clickLaunchIcon ( 'filePanel' ) . perform ( ( ) => {
30
+ bdone ( )
31
+ } )
32
+ }
33
+ } )
34
+ } )
35
+ . perform ( ( ) => {
36
+ let iteration = 0
37
+ const maxIterations = 20 // Prevent infinite loops
38
+
39
+ const clickNext = ( ) => {
40
+ if ( iteration >= maxIterations ) {
41
+ if ( done ) done ( )
42
+ return
43
+ }
44
+
45
+ iteration ++
46
+
47
+ // Find folders that are not expanded, / in case no folder is passed
48
+ const folderSelector = targetDirectory ?
49
+ `li[data-id*="treeViewLitreeViewItem${ targetDirectory } "] li[data-id*="treeViewLitreeViewItem"] .fa-folder:not(.fa-folder-open)` :
50
+ 'li[data-id*="treeViewLitreeViewItem"] .fa-folder:not(.fa-folder-open)'
51
+
52
+ browser . element ( 'css selector' , folderSelector , ( result ) => {
53
+ if ( result . status === 0 && result . value ) {
54
+ // Found a closed folder, click its parent li element
55
+ browser . element ( 'css selector' , folderSelector , ( elementResult ) => {
56
+ if ( elementResult . status === 0 ) {
57
+ browser . elementIdElement ( ( elementResult . value as any ) [ 'element-6066-11e4-a52e-4f735466cecf' ] , 'xpath' , './..' , ( parentResult ) => {
58
+ if ( parentResult . status === 0 ) {
59
+ browser . elementIdClick ( ( parentResult . value as any ) [ 'element-6066-11e4-a52e-4f735466cecf' ] ) // click on folder name
60
+ . pause ( 100 )
61
+ . perform ( ( ) => clickNext ( ) ) // recursive nested folders
62
+ } else {
63
+ if ( done ) done ( )
64
+ }
65
+ } )
66
+ } else {
67
+ if ( done ) done ( )
68
+ }
69
+ } )
70
+ } else {
71
+ if ( done ) done ( )
72
+ }
73
+ } )
74
+ }
75
+
76
+ clickNext ( )
77
+ } )
78
+ }
79
+
80
+ module . exports = ExpandAllFolders
0 commit comments