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) => { state.listCursor = action.payload; }, listPriorityChanged: (state, action: PayloadAction) => { 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 = (selector: Selector) => createSelector(selectQueueSlice, selector); export const selectQueueListCursor = createQueueSelector((queue) => queue.listCursor); export const selectQueueListPriority = createQueueSelector((queue) => queue.listPriority);