mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-22 09:37:17 +00:00
Fix shift-select
This commit is contained in:
parent
95109abaec
commit
6d0152cf70
2 changed files with 36 additions and 3 deletions
|
|
@ -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:
|
||||
|
|
|
|||
32
js/reducers/playlist.test.js
Normal file
32
js/reducers/playlist.test.js
Normal 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]
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue