|
import type { PayloadAction, Selector } from '@reduxjs/toolkit'; |
|
import { createSelector, createSlice } from '@reduxjs/toolkit'; |
|
import type { RootState } from 'app/store/store'; |
|
|
|
interface QueueState { |
|
listCursor: number | undefined; |
|
listPriority: number | undefined; |
|
selectedQueueItem: string | undefined; |
|
resumeProcessorOnEnqueue: boolean; |
|
} |
|
|
|
const initialQueueState: QueueState = { |
|
listCursor: undefined, |
|
listPriority: undefined, |
|
selectedQueueItem: undefined, |
|
resumeProcessorOnEnqueue: true, |
|
}; |
|
|
|
export const queueSlice = createSlice({ |
|
name: 'queue', |
|
initialState: initialQueueState, |
|
reducers: { |
|
listCursorChanged: (state, action: PayloadAction<number | undefined>) => { |
|
state.listCursor = action.payload; |
|
}, |
|
listPriorityChanged: (state, action: PayloadAction<number | undefined>) => { |
|
state.listPriority = action.payload; |
|
}, |
|
listParamsReset: (state) => { |
|
state.listCursor = undefined; |
|
state.listPriority = undefined; |
|
}, |
|
}, |
|
}); |
|
|
|
export const { listCursorChanged, listPriorityChanged, listParamsReset } = queueSlice.actions; |
|
|
|
const selectQueueSlice = (state: RootState) => state.queue; |
|
const createQueueSelector = <T>(selector: Selector<QueueState, T>) => createSelector(selectQueueSlice, selector); |
|
export const selectQueueListCursor = createQueueSelector((queue) => queue.listCursor); |
|
export const selectQueueListPriority = createQueueSelector((queue) => queue.listPriority); |
|
|