From 3045733c63fa124c30f281c58970bf46d807aa7e Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Mon, 23 Oct 2017 17:59:39 -0700 Subject: [PATCH] Memoize track ordering --- js/components/PlaylistWindow/index.js | 6 +++--- js/selectors.js | 10 ++++++++++ package.json | 5 +++-- yarn.lock | 4 ++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/js/components/PlaylistWindow/index.js b/js/components/PlaylistWindow/index.js index 013c6c85..e8e6256b 100644 --- a/js/components/PlaylistWindow/index.js +++ b/js/components/PlaylistWindow/index.js @@ -18,6 +18,7 @@ import { SET_FOCUSED_WINDOW, SET_PLAYLIST_SCROLL_POSITION } from "../../actionTypes"; +import { getOrderedTracks } from "../../selectors"; import { play, pause, stop, openFileDialog } from "../../actionCreators"; import "../../../css/playlist-window.css"; @@ -148,15 +149,14 @@ const mapDispatchToProps = (dispatch, ownProps) => ({ const mapStateToProps = state => { const { windows: { focused }, - display: { skinPlaylistStyle, playlistScrollPosition, playlistSize }, - playlist: { trackOrder } + display: { skinPlaylistStyle, playlistScrollPosition, playlistSize } } = state; return { focused, skinPlaylistStyle, playlistScrollPosition, playlistSize, - trackOrder: trackOrder.filter(id => state.tracks[id]) + trackOrder: getOrderedTracks(state) }; }; diff --git a/js/selectors.js b/js/selectors.js index c9fa7a86..204bc729 100644 --- a/js/selectors.js +++ b/js/selectors.js @@ -1,5 +1,6 @@ import { denormalize } from "./utils"; import { BANDS } from "./constants"; +import { createSelector } from "reselect"; export const getEqfData = state => { // state.equalizer.sliders @@ -17,3 +18,12 @@ export const getEqfData = state => { }; return eqfData; }; + +const getTracks = state => state.tracks; +const getTrackOrder = state => state.playlist.trackOrder; + +export const getOrderedTracks = createSelector( + getTracks, + getTrackOrder, + (tracks, trackOrder) => trackOrder.filter(id => tracks[id]) +); diff --git a/package.json b/package.json index 3ae11609..3d29c567 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "tdd": "jest --watch", "deploy": "ssh jordaneldredge.com HASH=$HASH sh < scripts/deploy.sh", "revert": "ssh jordaneldredge.com sh < scripts/revert.sh", - "format": + "format": "prettier --write js/**/*.js css/**/*.css webpack.config.js webpack.production.config.js", - "build-skin": + "build-skin": "rm skins/base-2.91.wsz && cd skins/base-2.91 && zip -x .* -x 'Skining Updates.txt' -r ../base-2.91.wsz .", "skin-info": "unzip -vl skins/base-2.91.wsz" }, @@ -73,6 +73,7 @@ "redux": "^3.5.2", "redux-devtools-extension": "^2.13.2", "redux-thunk": "^2.1.0", + "reselect": "^3.0.1", "webpack": "^3.6.0", "winamp-eqf": "^1.0.0" }, diff --git a/yarn.lock b/yarn.lock index dca64bf0..6318ab6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5125,6 +5125,10 @@ requires-port@1.0.x, requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +reselect@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"