UI Action Handler Changes, Misc Fixes

This commit is contained in:
Qstick
2017-11-26 15:09:45 -05:00
parent 7825319d89
commit cd5b658196
193 changed files with 6992 additions and 6341 deletions
@@ -1,7 +1,139 @@
import _ from 'lodash';
import $ from 'jquery';
import { createAction } from 'redux-actions';
import * as types from './actionTypes';
import albumStudioActionHandlers from './albumStudioActionHandlers';
import getMonitoringOptions from 'Utilities/Artist/getMonitoringOptions';
import { filterTypes, sortDirections } from 'Helpers/Props';
import { createThunk, handleThunks } from 'Store/thunks';
import createSetClientSideCollectionSortReducer from './Creators/Reducers/createSetClientSideCollectionSortReducer';
import createSetClientSideCollectionFilterReducer from './Creators/Reducers/createSetClientSideCollectionFilterReducer';
import createHandleActions from './Creators/createHandleActions';
import { set } from './baseActions';
import { fetchArtist } from './artistActions';
//
// Variables
export const section = 'albumStudio';
//
// State
export const defaultState = {
isSaving: false,
saveError: null,
sortKey: 'sortName',
sortDirection: sortDirections.ASCENDING,
secondarySortKey: 'sortName',
secondarySortDirection: sortDirections.ASCENDING,
filterKey: null,
filterValue: null,
filterType: filterTypes.EQUAL
};
export const persistState = [
'albumStudio.sortKey',
'albumStudio.sortDirection',
'albumStudio.filterKey',
'albumStudio.filterValue',
'albumStudio.filterType'
];
//
// Actions Types
export const SET_ALBUM_STUDIO_SORT = 'albumStudio/setAlbumStudioSort';
export const SET_ALBUM_STUDIO_FILTER = 'albumStudio/setAlbumStudioFilter';
export const SAVE_ALBUM_STUDIO = 'albumStudio/saveAlbumStudio';
//
// Action Creators
export const setAlbumStudioSort = createAction(SET_ALBUM_STUDIO_SORT);
export const setAlbumStudioFilter = createAction(SET_ALBUM_STUDIO_FILTER);
export const saveAlbumStudio = createThunk(SAVE_ALBUM_STUDIO);
//
// Action Handlers
export const actionHandlers = handleThunks({
[SAVE_ALBUM_STUDIO]: function(getState, payload, dispatch) {
const {
artistIds,
monitored,
monitor
} = payload;
let monitoringOptions = null;
const artist = [];
const allArtists = getState().artist.items;
artistIds.forEach((id) => {
const s = _.find(allArtists, { id });
const artistToUpdate = { id };
if (payload.hasOwnProperty('monitored')) {
artistToUpdate.monitored = monitored;
}
if (monitor) {
const {
albums,
options: artistMonitoringOptions
} = getMonitoringOptions(_.cloneDeep(s.albums), monitor);
if (!monitoringOptions) {
monitoringOptions = artistMonitoringOptions;
}
artistToUpdate.albums = albums;
}
artist.push(artistToUpdate);
});
dispatch(set({
section,
isSaving: true
}));
const promise = $.ajax({
url: '/albumStudio',
method: 'POST',
data: JSON.stringify({
artist,
monitoringOptions
}),
dataType: 'json'
});
promise.done((data) => {
dispatch(fetchArtist());
dispatch(set({
section,
isSaving: false,
saveError: null
}));
});
promise.fail((xhr) => {
dispatch(set({
section,
isSaving: false,
saveError: xhr
}));
});
}
});
//
// Reducers
export const reducers = createHandleActions({
[SET_ALBUM_STUDIO_SORT]: createSetClientSideCollectionSortReducer(section),
[SET_ALBUM_STUDIO_FILTER]: createSetClientSideCollectionFilterReducer(section)
}, defaultState, section);
export const setAlbumStudioSort = createAction(types.SET_ALBUM_STUDIO_SORT);
export const setAlbumStudioFilter = createAction(types.SET_ALBUM_STUDIO_FILTER);
export const saveAlbumStudio = albumStudioActionHandlers[types.SAVE_ALBUM_STUDIO];