1
1
import fileListElementsStyles from './fileListElements.module.scss' ;
2
2
import { FileListElementType , FileListElementTypeType } from '../../../../../types/data/fileListType.ts' ;
3
- import { useState } from 'react' ;
3
+ import { useEffect , useState } from 'react' ;
4
4
import FolderIcon from '../../../../../assets/folder_gray.svg' ;
5
5
import FolderOpenIcon from '../../../../../assets/folder_open_gray.svg' ;
6
6
import FileListFile from './fileListFile.tsx' ;
7
7
8
- function FileListFolder ( props : { folder : FileListElementType [ ] ; name : string ; foldedOut : boolean } ) {
8
+ function FileListFolder ( props : { folder : FileListElementType [ ] ; name : string ; foldedOut : boolean ; checked : boolean } ) {
9
9
const [ foldedOut , setFoldedOut ] = useState ( props . foldedOut ) ;
10
+ const [ checked , setChecked ] = useState ( props . checked ) ;
11
+ useEffect ( ( ) => {
12
+ setChecked ( props . checked ) ;
13
+ } , [ props . checked ] ) ;
10
14
return (
11
15
< >
12
16
{ foldedOut ? (
13
17
< >
14
- < div className = { fileListElementsStyles . element } onClick = { ( ) => setFoldedOut ( false ) } >
15
- < img src = { FolderOpenIcon } alt = { `folder open ${ props . name } ` } />
16
- < span > { props . name } </ span >
18
+ < div className = { 'flex items-center' } >
19
+ < input
20
+ type = { 'checkbox' }
21
+ className = { 'checkbox checkbox-accent checkbox-xs' }
22
+ checked = { checked }
23
+ onChange = { ( e ) => setChecked ( e . target . checked ) }
24
+ />
25
+ < div className = { fileListElementsStyles . element } onClick = { ( ) => setFoldedOut ( false ) } >
26
+ < img src = { FolderOpenIcon } alt = { `folder open ${ props . name } ` } />
27
+ < span > { props . name } </ span >
28
+ </ div >
17
29
</ div >
18
30
< div className = { fileListElementsStyles . inset } >
19
31
{ props . folder
@@ -25,18 +37,27 @@ function FileListFolder(props: { folder: FileListElementType[]; name: string; fo
25
37
key = { `fileListElement${ i } ` }
26
38
folder = { element . children }
27
39
name = { element . name }
28
- foldedOut = { false } > </ FileListFolder >
40
+ foldedOut = { false }
41
+ checked = { checked } > </ FileListFolder >
29
42
) ;
30
43
} else {
31
- return < FileListFile key = { `fileListElement${ i } ` } file = { element } > </ FileListFile > ;
44
+ return < FileListFile key = { `fileListElement${ i } ` } file = { element } checked = { checked } > </ FileListFile > ;
32
45
}
33
46
} ) }
34
47
</ div >
35
48
</ >
36
49
) : (
37
- < div onClick = { ( ) => setFoldedOut ( true ) } className = { fileListElementsStyles . element } >
38
- < img src = { FolderIcon } alt = { `folder ${ props . name } ` } />
39
- < span > { props . name } </ span >
50
+ < div className = { 'flex items-center' } >
51
+ < input
52
+ type = { 'checkbox' }
53
+ className = { 'checkbox checkbox-accent checkbox-xs' }
54
+ checked = { checked }
55
+ onChange = { ( e ) => setChecked ( e . target . checked ) }
56
+ />
57
+ < div onClick = { ( ) => setFoldedOut ( true ) } className = { fileListElementsStyles . element } >
58
+ < img src = { FolderIcon } alt = { `folder ${ props . name } ` } />
59
+ < span > { props . name } </ span >
60
+ </ div >
40
61
</ div >
41
62
) }
42
63
</ >
0 commit comments