@@ -36,6 +36,7 @@ import {
3636 bgLightestShade ,
3737 bgInputs ,
3838} from "../../theme" ;
39+ import { Tooltip } from "@mui/material" ;
3940
4041const useStyles = makeStyles ( ( theme ) => ( {
4142 textField : {
@@ -178,6 +179,22 @@ export default ({
178179 setChecked ( { } ) ;
179180 } , [ refresh ] ) ;
180181
182+ const resourcesList = React . useMemo ( ( ) => currentPath
183+ ?. slice ( - 1 ) [ 0 ]
184+ ?. children ?. filter (
185+ ( e ) => ! filter || e . resource . name . toLowerCase ( ) . includes ( filter )
186+ ) , [ currentPath , filter ] ) ;
187+
188+ let resourcesListObject : {
189+ [ id : string ] : RepositoryResourceNode ;
190+ } = React . useMemo ( ( ) => resourcesList ?. reduce (
191+ ( resourcesListObject , item ) => {
192+ resourcesListObject [ item . resource . path ] = item . children ;
193+ return resourcesListObject ;
194+ } ,
195+ { }
196+ ) , [ resourcesList ] ) ;
197+
181198 const onCheck = ( isChecked : boolean , value : RepositoryResourceNode ) => {
182199 if ( isChecked ) {
183200 checked [ value . resource . path ] = value ;
@@ -192,6 +209,17 @@ export default ({
192209 setCurrentPath ( [ ...currentPath , n ] ) ;
193210 } ;
194211
212+ const onSelectAllFiles = ( value ) => {
213+ if ( value ) {
214+ setChecked ( resourcesListObject ) ;
215+ checkedChanged ( resourcesList ) ;
216+ } else {
217+ setChecked ( { } ) ;
218+ checkedChanged ( [ ] )
219+ }
220+ } ;
221+
222+
195223 return < >
196224 < Box display = "flex" flex-direction = "row" alignItems = "center" >
197225 { backAction && (
@@ -233,7 +261,40 @@ export default ({
233261 < Box mt = { 1 } className = "scrollbar" >
234262 < TableContainer component = "div" >
235263 < Table className = { classes . list } aria-label = "repository resources" >
264+ < TableHead
265+ sx = { {
266+ "& .MuiTableCell-root" : {
267+ padding : "8px 8px 8px 0" ,
268+
269+ "& .MuiButtonBase-root" : {
270+ padding : 0 ,
271+ } ,
272+ } ,
273+ } }
274+ >
275+ < TableRow >
276+ < TableCell padding = "checkbox" sx = { { width : "1.8em" } } >
277+ < Tooltip title = "Select all files" >
278+ < Checkbox
279+ color = "primary"
280+ checked = {
281+ Object . keys ( checked ) ?. length ===
282+ currentPath . slice ( - 1 ) [ 0 ] . children ?. length
283+ }
284+ onChange = { ( e ) => onSelectAllFiles ( e . target . checked ) }
285+ inputProps = { {
286+ "aria-label" : "select all files" ,
287+ } }
288+ />
289+ </ Tooltip >
290+ </ TableCell >
291+ < TableCell component = "th" >
292+ < Typography component = "p" > Name</ Typography >
293+ </ TableCell >
294+ </ TableRow >
295+ </ TableHead >
236296 < TableBody >
297+
237298 { currentPath
238299 . slice ( - 1 ) [ 0 ]
239300 . children . filter (
0 commit comments