@@ -23,7 +23,7 @@ import {PROP_CURRENT_PATH, PROP_FS_INFO} from "../../../utils/RclonePropTypes";
2323import * as PropTypes from 'prop-types' ;
2424import ErrorBoundary from "../../../ErrorHandling/ErrorBoundary" ;
2525import { createNewPublicLink , deleteFile , purgeDir } from "rclone-api" ;
26-
26+ import { createSelector } from "reselect" ;
2727
2828/*
2929* Start code for react DND
@@ -468,19 +468,44 @@ const propTypes = {
468468 loadImages : PropTypes . bool . isRequired
469469} ;
470470
471- const defaultProps = {
472- } ;
471+ const defaultProps = { } ;
473472
474473
475474FilesView . propTypes = propTypes ;
476475FilesView . defaultProps = defaultProps ;
477476
477+ let count = 0 ;
478+
479+ const getVisibleFiles = createSelector (
480+ ( state , props ) => props . containerID ,
481+ ( state , props ) => state . explorer . currentPaths [ props . containerID ] ,
482+ ( state , props ) => state . explorer . visibilityFilters [ props . containerID ] ,
483+ ( state , props ) => state . explorer . sortFilters [ props . containerID ] ,
484+ ( state , props ) => state . explorer . searchQueries [ props . containerID ] ,
485+ ( state , props ) => state . explorer . sortFiltersAscending [ props . containerID ] ,
486+ ( state , props ) => state . remote . files [ `${ state . explorer . currentPaths [ props . containerID ] . remoteName } -${ state . explorer . currentPaths [ props . containerID ] . remotePath } ` ] ,
487+ ( containerID , currentPath , visibilityFilter , sortFilter , searchQuery , sortFilterAscending , files ) => {
488+ console . log ( "Files render : " + ( ++ count ) ) ;
489+ files = files . files ;
490+ // Filter according to visibility filters
491+ if ( visibilityFilter && visibilityFilter !== "" ) {
492+ files = changeListVisibility ( files , visibilityFilter ) ;
493+ }
494+
495+ //Filter according to search query, if any
496+ if ( searchQuery ) {
497+ files = changeSearchFilter ( files , searchQuery ) ;
498+ }
499+ files . sort ( getSortCompareFunction ( sortFilter , sortFilterAscending ) ) ;
500+
501+ return files ;
502+ }
503+ )
478504
479505const mapStateToProps = ( state , ownProps ) => {
480506 const { currentPaths, visibilityFilters, gridMode, searchQueries, loadImages, sortFilters, sortFiltersAscending} = state . explorer ;
481507 const { containerID} = ownProps ;
482508 const currentPath = currentPaths [ containerID ] ;
483- const visibilityFilter = visibilityFilters [ containerID ] ;
484509 const mgridMode = gridMode [ containerID ] ;
485510 const searchQuery = searchQueries [ containerID ] ;
486511 const mloadImages = loadImages [ containerID ] ;
@@ -491,7 +516,6 @@ const mapStateToProps = (state, ownProps) => {
491516 const { remoteName, remotePath} = currentPath ;
492517
493518 if ( currentPath && state . remote . configs ) {
494-
495519 const tempRemoteName = remoteName . split ( ':' ) [ 0 ] ;
496520 if ( state . remote . configs [ tempRemoteName ] )
497521 fsInfo = state . remote . configs [ tempRemoteName ] ;
@@ -502,24 +526,10 @@ const mapStateToProps = (state, ownProps) => {
502526 let files = state . remote . files [ pathKey ] ;
503527
504528 if ( files ) {
505- console . log ( files ) ;
506- files = files . files ;
507- // Filter according to visibility filters
508- if ( visibilityFilter && visibilityFilter !== "" ) {
509- files = changeListVisibility ( files , visibilityFilter ) ;
510- }
511-
512- //Filter according to search query, if any
513- if ( searchQuery ) {
514- files = changeSearchFilter ( files , searchQuery ) ;
515- }
516- files . sort ( getSortCompareFunction ( sortFilter , sortFilterAscending ) ) ;
517-
529+ files = getVisibleFiles ( state , ownProps ) ;
518530 }
519531
520532 // Sort the files
521-
522-
523533 return {
524534 files,
525535 currentPath,
0 commit comments