@@ -75,6 +75,9 @@ import {
7575} from "../../../../../../actions" ;
7676import { BucketVersioning } from "../../../types" ;
7777import RewindEnable from "./RewindEnable" ;
78+ import FileCopyIcon from "@material-ui/icons/FileCopy" ;
79+ import DeleteIcon from "@material-ui/icons/Delete" ;
80+ import DeleteMultipleObjects from "./DeleteMultipleObjects" ;
7881
7982const commonIcon = {
8083 backgroundRepeat : "no-repeat" ,
@@ -226,6 +229,7 @@ const ListObjects = ({
226229 const [ rewind , setRewind ] = useState < RewindObject [ ] > ( [ ] ) ;
227230 const [ loadingRewind , setLoadingRewind ] = useState < boolean > ( true ) ;
228231 const [ deleteOpen , setDeleteOpen ] = useState < boolean > ( false ) ;
232+ const [ deleteMultipleOpen , setDeleteMultipleOpen ] = useState < boolean > ( false ) ;
229233 const [ createFolderOpen , setCreateFolderOpen ] = useState < boolean > ( false ) ;
230234 const [ selectedObject , setSelectedObject ] = useState < string > ( "" ) ;
231235 const [ selectedBucket , setSelectedBucket ] = useState < string > ( "" ) ;
@@ -236,6 +240,7 @@ const ListObjects = ({
236240 const [ loadingVersioning , setLoadingVersioning ] = useState < boolean > ( true ) ;
237241 const [ isVersioned , setIsVersioned ] = useState < boolean > ( false ) ;
238242 const [ rewindSelect , setRewindSelect ] = useState < boolean > ( false ) ;
243+ const [ selectedObjects , setSelectedObjects ] = useState < string [ ] > ( [ ] ) ;
239244
240245 const bucketName = match . params [ "bucket" ] ;
241246
@@ -451,6 +456,16 @@ const ListObjects = ({
451456 }
452457 } ;
453458
459+ const closeDeleteMultipleModalAndRefresh = ( refresh : boolean ) => {
460+ setDeleteMultipleOpen ( false ) ;
461+
462+ if ( refresh ) {
463+ setSnackBarMessage ( `Objects deleted successfully.` ) ;
464+ setSelectedObjects ( [ ] ) ;
465+ setLoading ( true ) ;
466+ }
467+ } ;
468+
454469 const closeAddFolderModal = ( ) => {
455470 setCreateFolderOpen ( false ) ;
456471 } ;
@@ -676,6 +691,25 @@ const ListObjects = ({
676691 }
677692 } ;
678693
694+ const selectListObjects = ( e : React . ChangeEvent < HTMLInputElement > ) => {
695+ const targetD = e . target ;
696+ const value = targetD . value ;
697+ const checked = targetD . checked ;
698+
699+ let elements : string [ ] = [ ...selectedObjects ] ; // We clone the selectedBuckets array
700+
701+ if ( checked ) {
702+ // If the user has checked this field we need to push this to selectedBucketsList
703+ elements . push ( value ) ;
704+ } else {
705+ // User has unchecked this field, we need to remove it from the list
706+ elements = elements . filter ( ( element ) => element !== value ) ;
707+ }
708+ setSelectedObjects ( elements ) ;
709+
710+ return elements ;
711+ } ;
712+
679713 const listModeColumns = [
680714 {
681715 label : "Name" ,
@@ -737,6 +771,14 @@ const ListObjects = ({
737771 closeDeleteModalAndRefresh = { closeDeleteModalAndRefresh }
738772 />
739773 ) }
774+ { deleteMultipleOpen && (
775+ < DeleteMultipleObjects
776+ deleteOpen = { deleteMultipleOpen }
777+ selectedBucket = { selectedBucket }
778+ selectedObjects = { selectedObjects }
779+ closeDeleteModalAndRefresh = { closeDeleteMultipleModalAndRefresh }
780+ />
781+ ) }
740782 { createFolderOpen && (
741783 < CreateFolderModal
742784 modalOpen = { createFolderOpen }
@@ -837,6 +879,17 @@ const ListObjects = ({
837879 style = { { display : "none" } }
838880 />
839881 </ Button >
882+ < Button
883+ variant = "contained"
884+ color = "primary"
885+ startIcon = { < DeleteIcon /> }
886+ onClick = { ( ) => {
887+ setDeleteMultipleOpen ( true ) ;
888+ } }
889+ disabled = { selectedObjects . length === 0 }
890+ >
891+ Delete Selected
892+ </ Button >
840893 </ Grid >
841894 < Grid item xs = { 12 } >
842895 < br />
@@ -851,6 +904,8 @@ const ListObjects = ({
851904 idField = "name"
852905 records = { rewindEnabled ? rewind : filteredRecords }
853906 customPaperHeight = { classes . browsePaper }
907+ selectedItems = { selectedObjects }
908+ onSelect = { selectListObjects }
854909 />
855910 </ Grid >
856911 </ Grid >
0 commit comments