Merge duplicate utlity functions

This commit is contained in:
Jordan Eldredge 2018-04-26 07:05:28 -07:00
parent 21278239fa
commit 843a59cbb0
3 changed files with 22 additions and 29 deletions

View file

@ -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));
};

View file

@ -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)
),

View file

@ -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;
}, {});