Lidarr/frontend/src/Store/Reducers/queueReducers.js

142 lines
3.2 KiB
JavaScript

import { handleActions } from 'redux-actions';
import { sortDirections } from 'Helpers/Props';
import * as types from 'Store/Actions/actionTypes';
import createClearReducer from './Creators/createClearReducer';
import createSetReducer from './Creators/createSetReducer';
import createSetTableOptionReducer from './Creators/createSetTableOptionReducer';
import createUpdateReducer from './Creators/createUpdateReducer';
import createUpdateItemReducer from './Creators/createUpdateItemReducer';
import createReducers from './Creators/createReducers';
import createUpdateServerSideCollectionReducer from './Creators/createUpdateServerSideCollectionReducer';
export const defaultState = {
queueStatus: {
isFetching: false,
isPopulated: false,
error: null,
item: {}
},
details: {
isFetching: false,
isPopulated: false,
error: null,
items: [],
params: {}
},
paged: {
isFetching: false,
isPopulated: false,
pageSize: 20,
sortKey: 'timeleft',
sortDirection: sortDirections.ASCENDING,
error: null,
items: [],
isGrabbing: false,
isRemoving: false,
columns: [
{
name: 'status',
columnLabel: 'Status',
isVisible: true,
isModifiable: false
},
{
name: 'series.sortName',
label: 'Artist',
isSortable: true,
isVisible: true
},
{
name: 'episodeTitle',
label: 'Album Title',
isVisible: true
},
{
name: 'quality',
label: 'Quality',
isSortable: true,
isVisible: true
},
{
name: 'protocol',
label: 'Protocol',
isVisible: false
},
{
name: 'indexer',
label: 'Indexer',
isVisible: false
},
{
name: 'downloadClient',
label: 'Download Client',
isVisible: false
},
{
name: 'estimatedCompletionTime',
label: 'Timeleft',
isSortable: true,
isVisible: true
},
{
name: 'progress',
label: 'Progress',
isSortable: true,
isVisible: true
},
{
name: 'actions',
columnLabel: 'Actions',
isVisible: true,
isModifiable: false
}
]
},
queueEpisodes: {
isPopulated: false,
items: []
}
};
export const persistState = [
'queue.paged.pageSize',
'queue.paged.sortKey',
'queue.paged.sortDirection',
'queue.paged.columns'
];
const propertyNames = [
'queueStatus',
'details',
'episodes'
];
const paged = 'paged';
const queueReducers = handleActions({
[types.SET]: createReducers([...propertyNames, paged], createSetReducer),
[types.UPDATE]: createReducers([...propertyNames, paged], createUpdateReducer),
[types.UPDATE_ITEM]: createReducers(['queueEpisodes', paged], createUpdateItemReducer),
[types.CLEAR_QUEUE_DETAILS]: createClearReducer('details', defaultState.details),
[types.UPDATE_SERVER_SIDE_COLLECTION]: createUpdateServerSideCollectionReducer(paged),
[types.SET_QUEUE_TABLE_OPTION]: createSetTableOptionReducer(paged),
[types.CLEAR_QUEUE]: createClearReducer('paged', {
isFetching: false,
isPopulated: false,
error: null,
items: []
})
}, defaultState);
export default queueReducers;