Fix shift-select

This commit is contained in:
Jordan Eldredge 2017-12-18 08:54:56 -08:00
parent 95109abaec
commit 6d0152cf70
2 changed files with 36 additions and 3 deletions

View file

@ -61,11 +61,12 @@ const playlist = (state = defaultPlaylistState, action) => {
const clickedIndex = action.index;
const start = Math.min(clickedIndex, state.lastSelectedIndex);
const end = Math.max(clickedIndex, state.lastSelectedIndex);
const selected = new Set(state.trackOrder.slice(start, end + 1));
return {
...state,
tracks: state.trackOrder.map((trackId, i) => ({
...state.tracks[trackId],
selected: i >= start && i <= end
tracks: mapObject(state.tracks, (track, trackId) => ({
...track,
selected: selected.has(Number(trackId))
}))
};
case SELECT_ALL:

View file

@ -0,0 +1,32 @@
import reducer from "./playlist";
import { SHIFT_CLICKED_TRACK } from "../actionTypes";
describe("playlist reducer", () => {
it("can handle shift-click", () => {
const initialState = {
tracks: {
0: { selected: false },
1: { selected: false },
2: { selected: false },
3: { selected: false }
},
trackOrder: [3, 2, 1, 0],
lastSelectedIndex: 1
};
const nextState = reducer(initialState, {
type: SHIFT_CLICKED_TRACK,
index: 3
});
expect(nextState).toEqual({
lastSelectedIndex: 1,
tracks: {
0: { selected: true },
1: { selected: true },
2: { selected: true },
3: { selected: false }
},
trackOrder: [3, 2, 1, 0]
});
});
});