Skip to content

Commit da8e596

Browse files
committed
introduce reselect for better re-render of files
1 parent a49162b commit da8e596

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

package-lock.json

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"node-sass": "^4.13.1",
2929
"package.json": "^2.0.1",
3030
"prop-types": "^15.7.2",
31+
"rclone-api": "^1.0.0",
3132
"react": "^16.12.0",
3233
"react-app-polyfill": "^1.0.6",
3334
"react-autosuggest": "^10.0.0",
@@ -45,9 +46,9 @@
4546
"reactstrap": "^8.4.1",
4647
"redux": "^4.0.5",
4748
"redux-thunk": "^2.3.0",
49+
"reselect": "^4.0.0",
4850
"simple-line-icons": "^2.4.1",
49-
"typescript": "^3.7.5",
50-
"rclone-api": "^1.0.0"
51+
"typescript": "^3.7.5"
5152
},
5253
"devDependencies": {
5354
"check-prop-types": "^1.1.2",

src/views/Explorer/FilesView/FilesView.js

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {PROP_CURRENT_PATH, PROP_FS_INFO} from "../../../utils/RclonePropTypes";
2323
import * as PropTypes from 'prop-types';
2424
import ErrorBoundary from "../../../ErrorHandling/ErrorBoundary";
2525
import {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

475474
FilesView.propTypes = propTypes;
476475
FilesView.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

479505
const 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

Comments
 (0)