[UI Work] Artist Detail Page, Album Studio, Wanted, NavSearch, Rename

This commit is contained in:
Qstick 2017-09-11 23:11:32 -04:00
parent 456ead09da
commit 0054226307
93 changed files with 590 additions and 603 deletions

View file

@ -59,10 +59,10 @@ export const TOGGLE_ARTIST_MONITORED = 'TOGGLE_ARTIST_MONITORED';
export const TOGGLE_ALBUM_MONITORED = 'TOGGLE_ALBUM_MONITORED';
//
// Series Editor
// Artist Editor
export const SET_SERIES_EDITOR_SORT = 'SET_SERIES_EDITOR_SORT';
export const SET_SERIES_EDITOR_FILTER = 'SET_SERIES_EDITOR_FILTER';
export const SET_ARTIST_EDITOR_SORT = 'SET_ARTIST_EDITOR_SORT';
export const SET_ARTIST_EDITOR_FILTER = 'SET_ARTIST_EDITOR_FILTER';
export const SAVE_ARTIST_EDITOR = 'SAVE_ARTIST_EDITOR';
export const BULK_DELETE_ARTIST = 'BULK_DELETE_ARTIST';

View file

@ -3,11 +3,11 @@ import $ from 'jquery';
import getMonitoringOptions from 'Utilities/Series/getMonitoringOptions';
import * as types from './actionTypes';
import { set } from './baseActions';
import { fetchArtist } from './seriesActions';
import { fetchArtist } from './artistActions';
const section = 'seasonPass';
const section = 'albumStudio';
const seasonPassActionHandlers = {
const albumStudioActionHandlers = {
[types.SAVE_SEASON_PASS]: function(payload) {
return function(dispatch, getState) {
const {
@ -50,7 +50,7 @@ const seasonPassActionHandlers = {
}));
const promise = $.ajax({
url: '/seasonPass',
url: '/albumStudio',
method: 'POST',
data: JSON.stringify({
series,
@ -80,4 +80,4 @@ const seasonPassActionHandlers = {
}
};
export default seasonPassActionHandlers;
export default albumStudioActionHandlers;

View file

@ -0,0 +1,7 @@
import { createAction } from 'redux-actions';
import * as types from './actionTypes';
import albumStudioActionHandlers from './albumStudioActionHandlers';
export const setAlbumStudioSort = createAction(types.SET_SEASON_PASS_SORT);
export const setAlbumStudioFilter = createAction(types.SET_SEASON_PASS_FILTER);
export const saveAlbumStudio = albumStudioActionHandlers[types.SAVE_SEASON_PASS];

View file

@ -3,9 +3,9 @@ import { batchActions } from 'redux-batched-actions';
import * as types from './actionTypes';
import { set, updateItem } from './baseActions';
const section = 'seriesEditor';
const section = 'artistEditor';
const seriesEditorActionHandlers = {
const artistEditorActionHandlers = {
[types.SAVE_ARTIST_EDITOR]: function(payload) {
return function(dispatch, getState) {
dispatch(set({
@ -14,7 +14,7 @@ const seriesEditorActionHandlers = {
}));
const promise = $.ajax({
url: '/series/editor',
url: '/artist/editor',
method: 'PUT',
data: JSON.stringify(payload),
dataType: 'json'
@ -56,7 +56,7 @@ const seriesEditorActionHandlers = {
}));
const promise = $.ajax({
url: '/series/editor',
url: '/artist/editor',
method: 'DELETE',
data: JSON.stringify(payload),
dataType: 'json'
@ -83,4 +83,4 @@ const seriesEditorActionHandlers = {
}
};
export default seriesEditorActionHandlers;
export default artistEditorActionHandlers;

View file

@ -0,0 +1,8 @@
import { createAction } from 'redux-actions';
import * as types from './actionTypes';
import artistEditorActionHandlers from './artistEditorActionHandlers';
export const setArtistEditorSort = createAction(types.SET_ARTIST_EDITOR_SORT);
export const setArtistEditorFilter = createAction(types.SET_ARTIST_EDITOR_FILTER);
export const saveArtistEditor = artistEditorActionHandlers[types.SAVE_ARTIST_EDITOR];
export const bulkDeleteArtist = artistEditorActionHandlers[types.BULK_DELETE_ARTIST];

View file

@ -116,7 +116,7 @@ const importArtistActionHandlers = {
// Make sure we have a selected series and
// the same series hasn't been added yet.
if (selectedSeries && !_.some(acc, { tvdbId: selectedSeries.tvdbId })) {
if (selectedSeries && !_.some(acc, { foreignArtistId: selectedSeries.foreignArtistId })) {
const newSeries = getNewSeries(_.cloneDeep(selectedSeries), item);
newSeries.path = item.path;

View file

@ -1,7 +0,0 @@
import { createAction } from 'redux-actions';
import * as types from './actionTypes';
import seasonPassActionHandlers from './seasonPassActionHandlers';
export const setSeasonPassSort = createAction(types.SET_SEASON_PASS_SORT);
export const setSeasonPassFilter = createAction(types.SET_SEASON_PASS_FILTER);
export const saveSeasonPass = seasonPassActionHandlers[types.SAVE_SEASON_PASS];

View file

@ -1,8 +0,0 @@
import { createAction } from 'redux-actions';
import * as types from './actionTypes';
import seriesEditorActionHandlers from './seriesEditorActionHandlers';
export const setSeriesEditorSort = createAction(types.SET_SERIES_EDITOR_SORT);
export const setSeriesEditorFilter = createAction(types.SET_SERIES_EDITOR_FILTER);
export const saveArtistEditor = seriesEditorActionHandlers[types.SAVE_ARTIST_EDITOR];
export const bulkDeleteArtist = seriesEditorActionHandlers[types.BULK_DELETE_ARTIST];

View file

@ -3,8 +3,8 @@ import persistState from 'redux-localstorage';
import * as addArtistReducers from 'Store/Reducers/addArtistReducers';
import * as episodeReducers from 'Store/Reducers/episodeReducers';
import * as artistIndexReducers from 'Store/Reducers/artistIndexReducers';
import * as seriesEditorReducers from 'Store/Reducers/seriesEditorReducers';
import * as seasonPassReducers from 'Store/Reducers/seasonPassReducers';
import * as artistEditorReducers from 'Store/Reducers/artistEditorReducers';
import * as albumStudioReducers from 'Store/Reducers/albumStudioReducers';
import * as calendarReducers from 'Store/Reducers/calendarReducers';
import * as historyReducers from 'Store/Reducers/historyReducers';
import * as blacklistReducers from 'Store/Reducers/blacklistReducers';
@ -18,8 +18,8 @@ const reducers = [
addArtistReducers,
episodeReducers,
artistIndexReducers,
seriesEditorReducers,
seasonPassReducers,
artistEditorReducers,
albumStudioReducers,
calendarReducers,
historyReducers,
blacklistReducers,

View file

@ -18,16 +18,16 @@ export const defaultState = {
};
export const persistState = [
'seasonPass.sortKey',
'seasonPass.sortDirection',
'seasonPass.filterKey',
'seasonPass.filterValue',
'seasonPass.filterType'
'albumStudio.sortKey',
'albumStudio.sortDirection',
'albumStudio.filterKey',
'albumStudio.filterValue',
'albumStudio.filterType'
];
const reducerSection = 'seasonPass';
const reducerSection = 'albumStudio';
const seasonPassReducers = handleActions({
const albumStudioReducers = handleActions({
[types.SET]: createSetReducer(reducerSection),
@ -36,4 +36,4 @@ const seasonPassReducers = handleActions({
}, defaultState);
export default seasonPassReducers;
export default albumStudioReducers;

View file

@ -20,22 +20,22 @@ export const defaultState = {
};
export const persistState = [
'seriesEditor.sortKey',
'seriesEditor.sortDirection',
'seriesEditor.filterKey',
'seriesEditor.filterValue',
'seriesEditor.filterType'
'artistEditor.sortKey',
'artistEditor.sortDirection',
'artistEditor.filterKey',
'artistEditor.filterValue',
'artistEditor.filterType'
];
const reducerSection = 'seriesEditor';
const reducerSection = 'artistEditor';
const seriesEditorReducers = handleActions({
const artistEditorReducers = handleActions({
[types.SET]: createSetReducer(reducerSection),
[types.SET_SERIES_EDITOR_SORT]: createSetClientSideCollectionSortReducer(reducerSection),
[types.SET_SERIES_EDITOR_FILTER]: createSetClientSideCollectionFilterReducer(reducerSection)
[types.SET_ARTIST_EDITOR_SORT]: createSetClientSideCollectionSortReducer(reducerSection),
[types.SET_ARTIST_EDITOR_FILTER]: createSetClientSideCollectionFilterReducer(reducerSection)
}, defaultState);
export default seriesEditorReducers;
export default artistEditorReducers;

View file

@ -22,7 +22,7 @@ export const defaultState = {
const reducerSection = 'series';
const seriesReducers = handleActions({
const artistReducers = handleActions({
[types.SET]: createSetReducer(reducerSection),
[types.UPDATE]: createUpdateReducer(reducerSection),
@ -34,4 +34,4 @@ const seriesReducers = handleActions({
}, defaultState);
export default seriesReducers;
export default artistReducers;

View file

@ -4,10 +4,10 @@ import { routerReducer } from 'react-router-redux';
import app, { defaultState as defaultappState } from './appReducers';
import addArtist, { defaultState as defaultAddSeriesState } from './addArtistReducers';
import importArtist, { defaultState as defaultImportArtistState } from './importArtistReducers';
import series, { defaultState as defaultSeriesState } from './seriesReducers';
import series, { defaultState as defaultSeriesState } from './artistReducers';
import seriesIndex, { defaultState as defaultSeriesIndexState } from './artistIndexReducers';
import seriesEditor, { defaultState as defaultSeriesEditorState } from './seriesEditorReducers';
import seasonPass, { defaultState as defaultSeasonPassState } from './seasonPassReducers';
import artistEditor, { defaultState as defaultArtistEditorState } from './artistEditorReducers';
import albumStudio, { defaultState as defaultAlbumStudioState } from './albumStudioReducers';
import calendar, { defaultState as defaultCalendarState } from './calendarReducers';
import history, { defaultState as defaultHistoryState } from './historyReducers';
import queue, { defaultState as defaultQueueState } from './queueReducers';
@ -34,8 +34,8 @@ export const defaultState = {
importArtist: defaultImportArtistState,
series: defaultSeriesState,
seriesIndex: defaultSeriesIndexState,
seriesEditor: defaultSeriesEditorState,
seasonPass: defaultSeasonPassState,
artistEditor: defaultArtistEditorState,
albumStudio: defaultAlbumStudioState,
calendar: defaultCalendarState,
history: defaultHistoryState,
queue: defaultQueueState,
@ -63,8 +63,8 @@ export default enableBatching(combineReducers({
importArtist,
series,
seriesIndex,
seriesEditor,
seasonPass,
artistEditor,
albumStudio,
calendar,
history,
queue,

View file

@ -14,7 +14,7 @@ export const defaultState = {
isFetching: false,
isPopulated: false,
pageSize: 20,
sortKey: 'airDateUtc',
sortKey: 'releaseDate',
sortDirection: sortDirections.DESCENDING,
filterKey: 'monitored',
filterValue: 'true',
@ -23,32 +23,32 @@ export const defaultState = {
columns: [
{
name: 'series.sortTitle',
label: 'Series Title',
name: 'artist.sortName',
label: 'Artist Name',
isSortable: true,
isVisible: true
},
// {
// name: 'episode',
// label: 'Episode',
// isVisible: true
// },
{
name: 'episode',
label: 'Episode',
name: 'albumTitle',
label: 'Album Title',
isVisible: true
},
{
name: 'episodeTitle',
label: 'Episode Title',
isVisible: true
},
{
name: 'airDateUtc',
label: 'Air Date',
name: 'releaseDate',
label: 'Release Date',
isSortable: true,
isVisible: true
},
{
name: 'status',
label: 'Status',
isVisible: true
},
// {
// name: 'status',
// label: 'Status',
// isVisible: true
// },
{
name: 'actions',
columnLabel: 'Actions',

View file

@ -1,6 +1,6 @@
import { createSelector } from 'reselect';
function createAllSeriesSelector() {
function createAllArtistSelector() {
return createSelector(
(state) => state.series,
(series) => {
@ -9,4 +9,4 @@ function createAllSeriesSelector() {
);
}
export default createAllSeriesSelector;
export default createAllArtistSelector;

View file

@ -1,11 +1,11 @@
import _ from 'lodash';
import { createSelector } from 'reselect';
import createAllSeriesSelector from './createAllSeriesSelector';
import createAllArtistSelector from './createAllArtistSelector';
function createArtistSelector() {
return createSelector(
(state, { artistId }) => artistId,
createAllSeriesSelector(),
createAllArtistSelector(),
(artistId, series) => {
return _.find(series, { id: artistId });
}

View file

@ -1,11 +1,11 @@
import _ from 'lodash';
import { createSelector } from 'reselect';
import createAllSeriesSelector from './createAllSeriesSelector';
import createAllArtistSelector from './createAllArtistSelector';
function createExistingArtistSelector() {
return createSelector(
(state, { foreignArtistId }) => foreignArtistId,
createAllSeriesSelector(),
createAllArtistSelector(),
(foreignArtistId, series) => {
return _.some(series, { foreignArtistId });
}

View file

@ -1,17 +1,17 @@
import _ from 'lodash';
import { createSelector } from 'reselect';
import createAllSeriesSelector from './createAllSeriesSelector';
import createAllArtistSelector from './createAllArtistSelector';
function createImportArtistItemSelector() {
return createSelector(
(state, { id }) => id,
(state) => state.addArtist,
(state) => state.importArtist,
createAllSeriesSelector(),
createAllArtistSelector(),
(id, addArtist, importArtist, series) => {
const item = _.find(importArtist.items, { id }) || {};
const selectedSeries = item && item.selectedSeries;
const isExistingArtist = !!selectedSeries && _.some(series, { tvdbId: selectedSeries.tvdbId });
const isExistingArtist = !!selectedSeries && _.some(series, { foreignArtistId: selectedSeries.foreignArtistId });
return {
defaultMonitor: addArtist.defaults.monitor,

View file

@ -1,11 +1,11 @@
import _ from 'lodash';
import { createSelector } from 'reselect';
import createAllSeriesSelector from './createAllSeriesSelector';
import createAllArtistSelector from './createAllArtistSelector';
function createProfileInUseSelector(profileProp) {
return createSelector(
(state, { id }) => id,
createAllSeriesSelector(),
createAllArtistSelector(),
(id, series) => {
if (!id) {
return false;