feat(queue): move shuffle/loop controls into queue drawer, scoped to queue
This commit is contained in:
@@ -23,6 +23,8 @@ export interface QueueState {
|
||||
source: QueueSource;
|
||||
sourceId: string | null;
|
||||
sourceName: string | null;
|
||||
shuffle: boolean;
|
||||
loop: boolean;
|
||||
}
|
||||
|
||||
export const queueInitialState: QueueState = {
|
||||
@@ -31,6 +33,8 @@ export const queueInitialState: QueueState = {
|
||||
source: 'manual',
|
||||
sourceId: null,
|
||||
sourceName: null,
|
||||
shuffle: false,
|
||||
loop: false,
|
||||
};
|
||||
|
||||
export const queueSlice = createSlice({
|
||||
@@ -82,7 +86,15 @@ export const queueSlice = createSlice({
|
||||
state.currentIndex = action.payload;
|
||||
},
|
||||
nextTrack(state) {
|
||||
if (state.currentIndex < state.entries.length - 1) state.currentIndex++;
|
||||
if (state.shuffle && state.entries.length > 1) {
|
||||
let next = state.currentIndex;
|
||||
while (next === state.currentIndex) {
|
||||
next = Math.floor(Math.random() * state.entries.length);
|
||||
}
|
||||
state.currentIndex = next;
|
||||
} else if (state.currentIndex < state.entries.length - 1) {
|
||||
state.currentIndex++;
|
||||
}
|
||||
},
|
||||
prevTrack(state) {
|
||||
if (state.currentIndex > 0) state.currentIndex--;
|
||||
@@ -91,6 +103,12 @@ export const queueSlice = createSlice({
|
||||
state.entries = [];
|
||||
state.currentIndex = -1;
|
||||
},
|
||||
toggleShuffle(state) {
|
||||
state.shuffle = !state.shuffle;
|
||||
},
|
||||
toggleLoop(state) {
|
||||
state.loop = !state.loop;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -105,5 +123,7 @@ export const {
|
||||
nextTrack,
|
||||
prevTrack,
|
||||
clearQueue,
|
||||
toggleShuffle,
|
||||
toggleLoop,
|
||||
} = queueSlice.actions;
|
||||
export default queueSlice.reducer;
|
||||
|
||||
Reference in New Issue
Block a user