1- import { h , Component } from 'preact' ;
21import { File } from './file'
32import { CSS_PREFIX } from './constants'
43
54
6- export class Folder extends Component
5+ export class Folder
76{
8- state : { name : string ; } = { name : '' } ;
9-
10- private subfolders : Folder [ ] = [ ] ;
11- private files : File [ ] = [ ] ;
7+ id : string = 'gtp' + Math . random ( ) . toString ( 36 ) . substr ( 2 , 10 ) ;
8+ state : { name : string ; subfolders : Folder [ ] ; files : File [ ] } = { name : '' , subfolders : [ ] , files : [ ] } ;
129
1310
1411 init ( name : string ) : Folder
1512 {
16- this . setProps ( { name } )
13+ this . updateState ( { name } )
1714
1815 return this ;
1916 }
2017
2118
22- setProps ( newProps : any ) : Folder
19+ updateState ( changes : any ) : Folder
2320 {
24- this . setState ( newProps ) ;
21+ Object . assign ( this . state , changes )
22+ this . tryToRerender ( ) ;
2523
2624 return this ;
2725 }
2826
2927
3028 get subfoldersSize ( ) : number
3129 {
32- return this . subfolders . length ;
30+ return this . state . subfolders . length ;
3331 }
3432
3533
3634 get filesSize ( ) : number
3735 {
38- return this . files . length ;
36+ return this . state . files . length ;
3937 }
4038
4139
4240 addFolder ( ...folders : Folder [ ] ) : void
4341 {
44- const copy : Folder [ ] = this . subfolders . slice ( 0 )
42+ const copy : Folder [ ] = this . state . subfolders . slice ( 0 )
4543 copy . push ( ...folders ) ;
46- this . subfolders = copy ;
44+ this . updateState ( { subfolders : copy } )
4745 }
4846
4947
5048 addFile ( ...files : File [ ] ) : void
5149 {
52- const copy : File [ ] = this . files . slice ( 0 ) ;
50+ const copy : File [ ] = this . state . files . slice ( 0 ) ;
5351 copy . push ( ...files ) ;
54- this . files = copy ;
52+ this . updateState ( { files : copy } )
5553 }
5654
5755
5856 getFolder ( folderName : string ) : Folder
5957 {
60- return this . subfolders . find ( x => x . state . name === folderName ) ;
58+ return this . state . subfolders . find ( x => x . state . name === folderName ) ;
6159 }
6260
6361
@@ -69,7 +67,7 @@ export class Folder extends Component
6967
7068 getFolders ( sort = 0 ) : Folder [ ]
7169 {
72- const copy : Folder [ ] = this . subfolders . slice ( 0 ) ;
70+ const copy : Folder [ ] = this . state . subfolders . slice ( 0 ) ;
7371 // copy.sort( ( a, b ) );
7472
7573 return copy ;
@@ -78,34 +76,44 @@ export class Folder extends Component
7876
7977 getFiles ( sort = 0 ) : File [ ]
8078 {
81- const copy : File [ ] = this . files . slice ( 0 ) ;
79+ const copy : File [ ] = this . state . files . slice ( 0 ) ;
8280 return copy ;
8381 }
8482
8583
8684 dropFolders ( ) : void
8785 {
88- this . subfolders = [ ] ;
86+ this . updateState ( { subfolders : [ ] } )
8987 }
9088
9189
9290 dropFiles ( ) : void
9391 {
94- this . files = [ ] ;
92+ this . updateState ( { files : [ ] } )
93+ }
94+
95+
96+ tryToRerender ( ) : void
97+ {
98+ const element : HTMLElement = document . getElementById ( this . id ) ;
99+
100+ if ( element )
101+ {
102+ element . outerHTML = this . render ( ) ;
103+ }
95104 }
96105
97106
98- render ( ) : any
107+ render ( ) : string
99108 {
100- console . log ( this . state )
101- return (
102- < div class = { `${ CSS_PREFIX } -folder ${ CSS_PREFIX } -folder-expanded` } >
109+ return `
110+ <div class="${ CSS_PREFIX } -folder ${ CSS_PREFIX } -folder-expanded" id="${ this . id } ">
103111
104- < div class = { CSS_PREFIX + ' -holder' } title = { this . state . name } > { this . state . name } </ div >
105- { this . subfolders . map ( fdr => fdr . render ( ) ) }
106- { this . files . map ( fls => fls . render ( ) ) }
112+ <div class=" $ {CSS_PREFIX } -holder" title=" $ {this . state . name } "> $ {this . state . name } </div>
113+ $ { this . state . subfolders . map ( fdr => fdr . render ( ) ) . join ( '' ) }
114+ $ { this . state . files . map ( fls => fls . render ( ) ) . join ( '' ) }
107115
108116 </div>
109- )
117+ `
110118 }
111119}
0 commit comments