@@ -439,21 +439,23 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
439
439
type : null , idx : null
440
440
} ) ;
441
441
442
+ // apply sort
442
443
const sortedItems = useMemo ( ( ) => (
443
444
[ ...items ] . sort ( getComparator ( sortColumns [ 0 ] ) )
444
445
) , [ items , sortColumns ] ) ;
445
446
446
- const filteredItems = useMemo ( ( ) => {
447
+ // apply filter on sorted
448
+ const finalItems = useMemo ( ( ) => {
447
449
return sortedItems . filter ( ( i ) => i . Filename ?. toLowerCase ( ) . includes ( search ?. toLocaleLowerCase ( ) ) ) ;
448
450
} , [ items , sortColumns , search ] ) ;
449
451
450
452
const itemsText = useMemo ( ( ) => {
451
453
let suffix = items . length == 1 ? 'item' : 'items' ;
452
- if ( items . length == filteredItems . length ) {
454
+ if ( items . length == finalItems . length ) {
453
455
return `${ items . length } ${ suffix } ` ;
454
456
}
455
- return `${ filteredItems . length } of ${ items . length } ${ suffix } ` ;
456
- } , [ items , filteredItems ] ) ;
457
+ return `${ finalItems . length } of ${ items . length } ${ suffix } ` ;
458
+ } , [ items , finalItems ] ) ;
457
459
458
460
const changeDir = async ( storage ) => {
459
461
setSelectedSS ( storage ) ;
@@ -478,7 +480,9 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
478
480
setLoaderText ( '' ) ;
479
481
} ;
480
482
481
- const completeOperation = async ( oldRow , newRow , rowIdx , selectedSS , func ) => {
483
+ const completeOperation = async ( oldRow , newRow , selectedSS , func ) => {
484
+ // We need to find the index in actual items list not final items list
485
+ const rowIdx = oldRow ? items . findIndex ( ( i ) => i . Filename == oldRow ?. Filename && i . Path == oldRow ?. Path ) : 0 ;
482
486
setOperation ( { } ) ;
483
487
if ( oldRow ?. Filename == newRow . Filename ) {
484
488
setItems ( ( prev ) => [
@@ -519,7 +523,7 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
519
523
const onDownload = async ( ) => {
520
524
setLoaderText ( 'Downloading...' ) ;
521
525
try {
522
- await fmUtilsObj . downloadFile ( filteredItems [ selectedRowIdx . current ] , selectedSS ) ;
526
+ await fmUtilsObj . downloadFile ( finalItems [ selectedRowIdx . current ] , selectedSS ) ;
523
527
} catch ( error ) {
524
528
setErrorMsg ( parseApiError ( error ) ) ;
525
529
console . error ( error ) ;
@@ -534,10 +538,10 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
534
538
setOperation ( {
535
539
type : 'add' ,
536
540
idx : 0 ,
537
- onComplete : async ( row , rowIdx ) => {
541
+ onComplete : async ( row ) => {
538
542
setErrorMsg ( '' ) ;
539
543
setLoaderText ( 'Creating folder...' ) ;
540
- await completeOperation ( null , row , rowIdx , selectedSS , fmUtilsObj . addFolder . bind ( fmUtilsObj ) ) ;
544
+ await completeOperation ( null , row , selectedSS , fmUtilsObj . addFolder . bind ( fmUtilsObj ) ) ;
541
545
setLoaderText ( '' ) ;
542
546
}
543
547
} ) ;
@@ -554,8 +558,8 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
554
558
onComplete : async ( row , rowIdx ) => {
555
559
setErrorMsg ( '' ) ;
556
560
setLoaderText ( 'Renaming...' ) ;
557
- let oldRow = items [ rowIdx ] ;
558
- await completeOperation ( oldRow , row , rowIdx , selectedSS , fmUtilsObj . renameItem . bind ( fmUtilsObj ) ) ;
561
+ let oldRow = finalItems [ rowIdx ] ;
562
+ await completeOperation ( oldRow , row , selectedSS , fmUtilsObj . renameItem . bind ( fmUtilsObj ) ) ;
559
563
setLoaderText ( '' ) ;
560
564
}
561
565
} ) ;
@@ -570,10 +574,14 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
570
574
setConfirmFile ( [ null , null ] ) ;
571
575
setLoaderText ( 'Deleting...' ) ;
572
576
try {
573
- await fmUtilsObj . deleteItem ( items [ selectedRowIdx . current ] , selectedSS ) ;
577
+ // selectedRowIdx is index in finalItems, so we need to find the index in actual items list
578
+ const oldRow = finalItems [ selectedRowIdx . current ] ;
579
+ const itemsRowIdx = items . findIndex ( ( i ) => i . Filename == oldRow ?. Filename && i . Path == oldRow ?. Path ) ;
580
+
581
+ await fmUtilsObj . deleteItem ( oldRow , selectedSS ) ;
574
582
setItems ( ( prev ) => [
575
- ...prev . slice ( 0 , selectedRowIdx . current ) ,
576
- ...prev . slice ( selectedRowIdx . current + 1 ) ,
583
+ ...prev . slice ( 0 , itemsRowIdx ) ,
584
+ ...prev . slice ( itemsRowIdx + 1 ) ,
577
585
] ) ;
578
586
} catch ( error ) {
579
587
setErrorMsg ( parseApiError ( error ) ) ;
@@ -613,33 +621,33 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
613
621
} ] ) ;
614
622
return ;
615
623
}
616
- } else if ( selectedRowIdx ?. current >= 0 && filteredItems [ selectedRowIdx ?. current ] ) {
617
- onOkPath = filteredItems [ selectedRowIdx ?. current ] [ 'Path' ] ;
624
+ } else if ( selectedRowIdx ?. current >= 0 && finalItems [ selectedRowIdx ?. current ] ) {
625
+ onOkPath = finalItems [ selectedRowIdx ?. current ] [ 'Path' ] ;
618
626
}
619
627
await fmUtilsObj . setLastVisitedDir ( fmUtilsObj . currPath , selectedSS ) ;
620
628
onOK ?. ( onOkPath , selectedSS ) ;
621
629
closeModal ( ) ;
622
- } , [ filteredItems , saveAs , fileType ] ) ;
630
+ } , [ finalItems , saveAs , fileType ] ) ;
623
631
const onItemEnter = useCallback ( async ( row ) => {
624
632
if ( row . file_type == 'dir' || row . file_type == 'drive' ) {
625
633
await openDir ( row . Path , selectedSS ) ;
626
634
} else if ( params . dialog_type == 'select_file' ) {
627
635
onOkClick ( ) ;
628
636
}
629
- } , [ filteredItems ] ) ;
637
+ } , [ finalItems ] ) ;
630
638
const onItemSelect = useCallback ( ( idx ) => {
631
639
selectedRowIdx . current = idx ;
632
640
fewBtnDisableCheck ( ) ;
633
- } , [ filteredItems ] ) ;
641
+ } , [ finalItems ] ) ;
634
642
const onItemClick = useCallback ( ( idx ) => {
635
- let row = filteredItems [ selectedRowIdx . current ] ;
643
+ let row = finalItems [ selectedRowIdx . current ] ;
636
644
if ( params . dialog_type == 'create_file' && row ?. file_type != 'dir' && row ?. file_type != 'drive' ) {
637
- setSaveAs ( filteredItems [ idx ] ?. Filename ) ;
645
+ setSaveAs ( finalItems [ idx ] ?. Filename ) ;
638
646
}
639
- } , [ filteredItems ] ) ;
647
+ } , [ finalItems ] ) ;
640
648
const fewBtnDisableCheck = ( ) => {
641
649
let disabled = true ;
642
- let row = filteredItems [ selectedRowIdx . current ] ;
650
+ let row = finalItems [ selectedRowIdx . current ] ;
643
651
if ( params . dialog_type == 'create_file' ) {
644
652
disabled = ! saveAs ?. trim ( ) ;
645
653
} else if ( selectedRowIdx . current >= 0 && row ) {
@@ -688,7 +696,7 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
688
696
689
697
useEffect ( ( ) => {
690
698
fewBtnDisableCheck ( ) ;
691
- } , [ saveAs , filteredItems . length ] ) ;
699
+ } , [ saveAs , finalItems . length ] ) ;
692
700
693
701
const isNoneSelected = _ . isUndefined ( selectedRow ) ;
694
702
let okBtnText = params . btn_primary ;
@@ -812,10 +820,10 @@ export default function FileManager({params, closeModal, onOK, onCancel, sharedS
812
820
}
813
821
} } /> }
814
822
{ viewMode == 'list' &&
815
- < ListView key = { fmUtilsObj . currPath } items = { filteredItems } operation = { operation } onItemEnter = { onItemEnter }
823
+ < ListView key = { fmUtilsObj . currPath } items = { finalItems } operation = { operation } onItemEnter = { onItemEnter }
816
824
onItemSelect = { onItemSelect } onItemClick = { onItemClick } sortColumns = { sortColumns } onSortColumnsChange = { setSortColumns } /> }
817
825
{ viewMode == 'grid' &&
818
- < GridView key = { fmUtilsObj . currPath } items = { filteredItems } operation = { operation } onItemEnter = { onItemEnter }
826
+ < GridView key = { fmUtilsObj . currPath } items = { finalItems } operation = { operation } onItemEnter = { onItemEnter }
819
827
onItemSelect = { onItemSelect } /> }
820
828
< FormFooterMessage type = { MESSAGE_TYPE . ERROR } message = { _ . escape ( errorMsg ) } closable onClose = { ( ) => setErrorMsg ( '' ) } />
821
829
{ params . dialog_type == 'create_file' &&
0 commit comments