From 843a59cbb0c24bb90161ce554f8439f2c508c37f Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Thu, 26 Apr 2018 07:05:28 -0700 Subject: [PATCH] Merge duplicate utlity functions --- js/actionCreators.js | 10 +++++----- js/reducers/playlist.js | 14 +++++++------- js/utils.js | 27 ++++++++++----------------- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/js/actionCreators.js b/js/actionCreators.js index b34eb9b2..d49c0259 100644 --- a/js/actionCreators.js +++ b/js/actionCreators.js @@ -28,7 +28,8 @@ import { downloadURI, normalize, sort, - uniqueId + uniqueId, + objectMap } from "./utils"; import { CLOSE_WINAMP, @@ -511,10 +512,9 @@ function withWindowGraphIntegrity(action) { const positionDiff = getPositionDiff(graph, sizeDiff); const windowPositions = getWindowPositions(state); - const newPositions = {}; - for (const key of Object.keys(windowPositions)) { - newPositions[key] = applyDiff(windowPositions[key], positionDiff[key]); - } + const newPositions = objectMap(windowPositions, (position, key) => + applyDiff(position, positionDiff[key]) + ); dispatch(updateWindowPositions(newPositions)); }; diff --git a/js/reducers/playlist.js b/js/reducers/playlist.js index c766cd91..c8345616 100644 --- a/js/reducers/playlist.js +++ b/js/reducers/playlist.js @@ -23,7 +23,7 @@ import { import { MEDIA_TAG_REQUEST_STATUS } from "../constants"; import { filenameFromUrl } from "../fileUtils"; -import { shuffle, moveSelected, mapObject, filterObject } from "../utils"; +import { shuffle, moveSelected, objectMap, objectFilter } from "../utils"; const defaultPlaylistState = { trackOrder: [], @@ -38,7 +38,7 @@ const playlist = (state = defaultPlaylistState, action) => { const clickedId = String(state.trackOrder[action.index]); return { ...state, - tracks: mapObject(state.tracks, (track, id) => ({ + tracks: objectMap(state.tracks, (track, id) => ({ ...track, selected: id === clickedId })), @@ -68,7 +68,7 @@ const playlist = (state = defaultPlaylistState, action) => { const selected = new Set(state.trackOrder.slice(start, end + 1)); return { ...state, - tracks: mapObject(state.tracks, (track, trackId) => ({ + tracks: objectMap(state.tracks, (track, trackId) => ({ ...track, selected: selected.has(Number(trackId)) })) @@ -76,12 +76,12 @@ const playlist = (state = defaultPlaylistState, action) => { case SELECT_ALL: return { ...state, - tracks: mapObject(state.tracks, track => ({ ...track, selected: true })) + tracks: objectMap(state.tracks, track => ({ ...track, selected: true })) }; case SELECT_ZERO: return { ...state, - tracks: mapObject(state.tracks, track => ({ + tracks: objectMap(state.tracks, track => ({ ...track, selected: false })) @@ -89,7 +89,7 @@ const playlist = (state = defaultPlaylistState, action) => { case INVERT_SELECTION: return { ...state, - tracks: mapObject(state.tracks, track => ({ + tracks: objectMap(state.tracks, track => ({ ...track, selected: !track.selected })) @@ -113,7 +113,7 @@ const playlist = (state = defaultPlaylistState, action) => { trackId => !actionIds.includes(trackId) ), currentTrack: actionIds.includes(currentTrack) ? null : currentTrack, - tracks: filterObject( + tracks: objectFilter( state.tracks, (track, trackId) => !action.ids.includes(trackId) ), diff --git a/js/utils.js b/js/utils.js index 78480fb4..36d1c0bc 100644 --- a/js/utils.js +++ b/js/utils.js @@ -207,22 +207,6 @@ export const moveSelected = (arr, isSelected, offset) => { return newArr; }; -export const mapObject = (obj, iteratee) => - // TODO: Could return the original reference if no values change - Object.keys(obj).reduce((newObj, key) => { - newObj[key] = iteratee(obj[key], key); - return newObj; - }, {}); - -export const filterObject = (obj, predicate) => - // TODO: Could return the original reference if no values change - Object.keys(obj).reduce((newObj, key) => { - if (predicate(obj[key], key)) { - newObj[key] = obj[key]; - } - return newObj; - }, {}); - export const spliceIn = (original, start, newValues) => { const newArr = [...original]; newArr.splice(start, 0, ...newValues); @@ -248,6 +232,15 @@ export function uniqueId() { export function objectMap(obj, cb) { const modified = {}; - Object.keys(obj).forEach(key => (modified[key] = cb(obj[key]))); + Object.keys(obj).forEach(key => (modified[key] = cb(obj[key], key))); return modified; } + +export const objectFilter = (obj, predicate) => + // TODO: Could return the original reference if no values change + Object.keys(obj).reduce((newObj, key) => { + if (predicate(obj[key], key)) { + newObj[key] = obj[key]; + } + return newObj; + }, {});