You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.9 KiB
72 lines
1.9 KiB
import _ from 'lodash';
|
|
import { handleActions } from 'redux-actions';
|
|
import * as types from 'Store/Actions/actionTypes';
|
|
import { sortDirections } from 'Helpers/Props';
|
|
import createSetReducer from './Creators/createSetReducer';
|
|
import createUpdateReducer from './Creators/createUpdateReducer';
|
|
import createSetClientSideCollectionSortReducer from './Creators/createSetClientSideCollectionSortReducer';
|
|
|
|
export const defaultState = {
|
|
isFetching: false,
|
|
isPopulated: false,
|
|
error: null,
|
|
items: [],
|
|
sortKey: 'releaseWeight',
|
|
sortDirection: sortDirections.ASCENDING,
|
|
sortPredicates: {
|
|
peers: function(item, direction) {
|
|
const seeders = item.seeders || 0;
|
|
const leechers = item.leechers || 0;
|
|
|
|
return seeders * 1000000 + leechers;
|
|
},
|
|
|
|
rejections: function(item, direction) {
|
|
const rejections = item.rejections;
|
|
const releaseWeight = item.releaseWeight;
|
|
|
|
if (rejections.length !== 0) {
|
|
return releaseWeight + 1000000;
|
|
}
|
|
|
|
return releaseWeight;
|
|
}
|
|
}
|
|
};
|
|
|
|
const reducerSection = 'releases';
|
|
|
|
const releaseReducers = handleActions({
|
|
|
|
[types.SET]: createSetReducer(reducerSection),
|
|
[types.UPDATE]: createUpdateReducer(reducerSection),
|
|
|
|
[types.CLEAR_RELEASES]: (state) => {
|
|
return Object.assign({}, state, defaultState);
|
|
},
|
|
|
|
[types.UPDATE_RELEASE]: (state, { payload }) => {
|
|
const guid = payload.guid;
|
|
const newState = Object.assign({}, state);
|
|
const items = newState.items;
|
|
|
|
// Return early if there aren't any items (the user closed the modal)
|
|
if (!items.length) {
|
|
return;
|
|
}
|
|
|
|
const index = _.findIndex(items, { guid });
|
|
const item = Object.assign({}, items[index], payload);
|
|
|
|
newState.items = [...items];
|
|
newState.items.splice(index, 1, item);
|
|
|
|
return newState;
|
|
},
|
|
|
|
[types.SET_RELEASES_SORT]: createSetClientSideCollectionSortReducer(reducerSection)
|
|
|
|
}, defaultState);
|
|
|
|
export default releaseReducers;
|