@@ -37,7 +37,6 @@ import { isNullOrUndefined } from "util";
3737import { Button , Input } from "@material-ui/core" ;
3838import * as reactMoment from "react-moment" ;
3939import { CreateIcon } from "../../../../../../icons" ;
40- import Snackbar from "@material-ui/core/Snackbar" ;
4140import BrowserBreadcrumbs from "../../../../ObjectBrowser/BrowserBreadcrumbs" ;
4241import get from "lodash/get" ;
4342import { withRouter } from "react-router-dom" ;
@@ -51,6 +50,10 @@ import { ObjectBrowserState, Route } from "../../../../ObjectBrowser/reducers";
5150import CreateFolderModal from "./CreateFolderModal" ;
5251import UploadFile from "../../../../../../icons/UploadFile" ;
5352import { download } from "../utils" ;
53+ import {
54+ setLoadingProgress ,
55+ setSnackBarMessage ,
56+ } from "../../../../../../actions" ;
5457
5558const commonIcon = {
5659 backgroundRepeat : "no-repeat" ,
@@ -134,6 +137,8 @@ interface IListObjectsProps {
134137 setAllRoutes : ( path : string ) => any ;
135138 routesList : Route [ ] ;
136139 setLastAsFile : ( ) => any ;
140+ setLoadingProgress : typeof setLoadingProgress ;
141+ setSnackBarMessage : typeof setSnackBarMessage ;
137142}
138143
139144interface ObjectBrowserReducer {
@@ -147,6 +152,8 @@ const ListObjects = ({
147152 setAllRoutes,
148153 routesList,
149154 setLastAsFile,
155+ setLoadingProgress,
156+ setSnackBarMessage,
150157} : IListObjectsProps ) => {
151158 const [ records , setRecords ] = useState < BucketObject [ ] > ( [ ] ) ;
152159 const [ loading , setLoading ] = useState < boolean > ( true ) ;
@@ -155,8 +162,6 @@ const ListObjects = ({
155162 const [ selectedObject , setSelectedObject ] = useState < string > ( "" ) ;
156163 const [ selectedBucket , setSelectedBucket ] = useState < string > ( "" ) ;
157164 const [ filterObjects , setFilterObjects ] = useState < string > ( "" ) ;
158- const [ openSnackbar , setOpenSnackbar ] = useState < boolean > ( false ) ;
159- const [ snackBarMessage , setSnackbarMessage ] = useState < string > ( "" ) ;
160165
161166 useEffect ( ( ) => {
162167 const bucketName = match . params [ "bucket" ] ;
@@ -185,26 +190,28 @@ const ListObjects = ({
185190 } ) ;
186191 } ;
187192
188- let extraPath = "" ;
189- if ( internalPaths ) {
190- extraPath = `?prefix=${ internalPaths } /` ;
191- }
193+ if ( loading ) {
194+ let extraPath = "" ;
195+ if ( internalPaths ) {
196+ extraPath = `?prefix=${ internalPaths } /` ;
197+ }
192198
193- api
194- . invoke ( "GET" , `/api/v1/buckets/${ bucketName } /objects${ extraPath } ` )
195- . then ( ( res : BucketObjectsList ) => {
196- setSelectedBucket ( bucketName ) ;
197- setRecords ( res . objects || [ ] ) ;
198- // In case no objects were retrieved, We check if item is a file
199- if ( ! res . objects && extraPath !== "" ) {
200- verifyIfIsFile ( ) ;
201- return ;
202- }
203- setLoading ( false ) ;
204- } )
205- . catch ( ( err : any ) => {
206- setLoading ( false ) ;
207- } ) ;
199+ api
200+ . invoke ( "GET" , `/api/v1/buckets/${ bucketName } /objects${ extraPath } ` )
201+ . then ( ( res : BucketObjectsList ) => {
202+ setSelectedBucket ( bucketName ) ;
203+ setRecords ( res . objects || [ ] ) ;
204+ // In case no objects were retrieved, We check if item is a file
205+ if ( ! res . objects && extraPath !== "" ) {
206+ verifyIfIsFile ( ) ;
207+ return ;
208+ }
209+ setLoading ( false ) ;
210+ } )
211+ . catch ( ( err : any ) => {
212+ setLoading ( false ) ;
213+ } ) ;
214+ }
208215 } , [ loading , match , setLastAsFile ] ) ;
209216
210217 useEffect ( ( ) => {
@@ -218,7 +225,7 @@ const ListObjects = ({
218225 setDeleteOpen ( false ) ;
219226
220227 if ( refresh ) {
221- showSnackBarMessage ( `Object '${ selectedObject } ' deleted successfully.` ) ;
228+ setSnackBarMessage ( `Object '${ selectedObject } ' deleted successfully.` ) ;
222229 setLoading ( true ) ;
223230 }
224231 } ;
@@ -227,16 +234,6 @@ const ListObjects = ({
227234 setCreateFolderOpen ( false ) ;
228235 } ;
229236
230- const showSnackBarMessage = ( text : string ) => {
231- setSnackbarMessage ( text ) ;
232- setOpenSnackbar ( true ) ;
233- } ;
234-
235- const closeSnackBar = ( ) => {
236- setSnackbarMessage ( "" ) ;
237- setOpenSnackbar ( false ) ;
238- } ;
239-
240237 const upload = ( e : any , bucketName : string , path : string ) => {
241238 if ( isNullOrUndefined ( e ) || isNullOrUndefined ( e . target ) ) {
242239 return ;
@@ -252,31 +249,34 @@ const ListObjects = ({
252249 xhr . open ( "POST" , uploadUrl , true ) ;
253250
254251 xhr . withCredentials = false ;
255- xhr . onload = function ( event ) {
256- // TODO: handle status
257- if ( xhr . status === 401 || xhr . status === 403 ) {
258- showSnackBarMessage ( "An error occurred while uploading the file." ) ;
259- }
260- if ( xhr . status === 500 ) {
261- showSnackBarMessage ( "An error occurred while uploading the file." ) ;
252+ xhr . onload = function ( event ) {
253+ if (
254+ xhr . status === 401 ||
255+ xhr . status === 403 ||
256+ xhr . status === 400 ||
257+ xhr . status === 500
258+ ) {
259+ setSnackBarMessage ( "An error occurred while uploading the file." ) ;
262260 }
263261 if ( xhr . status === 200 ) {
264- showSnackBarMessage ( "Object uploaded successfully." ) ;
265- setLoading ( true ) ;
262+ setSnackBarMessage ( "Object uploaded successfully." ) ;
266263 }
267264 } ;
268265
269266 xhr . upload . addEventListener ( "error" , ( event ) => {
270- // TODO: handle error
271- showSnackBarMessage ( "An error occurred while uploading the file." ) ;
267+ setSnackBarMessage ( "An error occurred while uploading the file." ) ;
272268 } ) ;
273269
274270 xhr . upload . addEventListener ( "progress" , ( event ) => {
275- // TODO: handle progress with event.loaded, event. total
271+ setLoadingProgress ( Math . floor ( ( event . loaded * 100 ) / event . total ) ) ;
276272 } ) ;
277273
278274 xhr . onerror = ( ) => {
279- showSnackBarMessage ( "An error occurred while uploading the file." ) ;
275+ setSnackBarMessage ( "An error occurred while uploading the file." ) ;
276+ } ;
277+ xhr . onloadend = ( ) => {
278+ setLoading ( true ) ;
279+ setLoadingProgress ( 100 ) ;
280280 } ;
281281
282282 const formData = new FormData ( ) ;
@@ -346,23 +346,9 @@ const ListObjects = ({
346346 path = `${ splitPaths . slice ( 2 ) . join ( "/" ) } /` ;
347347 }
348348
349- let file = e . target . files [ 0 ] ;
350- showSnackBarMessage ( `Uploading: ${ file . name } ` ) ;
351349 upload ( e , selectedBucket , path ) ;
352350 } ;
353351
354- const snackBarAction = (
355- < Button
356- color = "secondary"
357- size = "small"
358- onClick = { ( ) => {
359- closeSnackBar ( ) ;
360- } }
361- >
362- Dismiss
363- </ Button >
364- ) ;
365-
366352 const tableActions = [
367353 { type : "view" , onClick : openPath , sendOnlyId : true } ,
368354 { type : "download" , onClick : downloadObject } ,
@@ -419,11 +405,6 @@ const ListObjects = ({
419405 onClose = { closeAddFolderModal }
420406 />
421407 ) }
422- < Snackbar
423- open = { openSnackbar }
424- message = { snackBarMessage }
425- action = { snackBarAction }
426- />
427408 < PageHeader label = "Object Browser" />
428409 < Grid container >
429410 < Grid item xs = { 12 } className = { classes . container } >
@@ -526,6 +507,8 @@ const mapDispatchToProps = {
526507 addRoute,
527508 setAllRoutes,
528509 setLastAsFile,
510+ setLoadingProgress,
511+ setSnackBarMessage,
529512} ;
530513
531514const connector = connect ( mapStateToProps , mapDispatchToProps ) ;
0 commit comments