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.
136 lines
3.3 KiB
136 lines
3.3 KiB
6 years ago
|
import _ from 'lodash';
|
||
|
import { createAction } from 'redux-actions';
|
||
|
import getSectionState from 'Utilities/State/getSectionState';
|
||
|
import updateSectionState from 'Utilities/State/updateSectionState';
|
||
|
import createHandleActions from './Creators/createHandleActions';
|
||
|
|
||
|
function getDimensions(width, height) {
|
||
|
const dimensions = {
|
||
|
width,
|
||
|
height,
|
||
|
isExtraSmallScreen: width <= 480,
|
||
|
isSmallScreen: width <= 768,
|
||
|
isMediumScreen: width <= 992,
|
||
|
isLargeScreen: width <= 1200
|
||
|
};
|
||
|
|
||
|
return dimensions;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Variables
|
||
|
|
||
|
export const section = 'app';
|
||
|
const messagesSection = 'app.messages';
|
||
|
|
||
|
//
|
||
|
// State
|
||
|
|
||
|
export const defaultState = {
|
||
|
dimensions: getDimensions(window.innerWidth, window.innerHeight),
|
||
|
messages: {
|
||
|
items: []
|
||
|
},
|
||
|
version: window.Radarr.version,
|
||
|
isUpdated: false,
|
||
|
isConnected: true,
|
||
|
isReconnecting: false,
|
||
|
isDisconnected: false,
|
||
|
isRestarting: false,
|
||
|
isSidebarVisible: !getDimensions(window.innerWidth, window.innerHeight).isSmallScreen
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Action Types
|
||
|
|
||
|
export const SHOW_MESSAGE = 'app/showMessage';
|
||
|
export const HIDE_MESSAGE = 'app/hideMessage';
|
||
|
export const SAVE_DIMENSIONS = 'app/saveDimensions';
|
||
|
export const SET_VERSION = 'app/setVersion';
|
||
|
export const SET_APP_VALUE = 'app/setAppValue';
|
||
|
export const SET_IS_SIDEBAR_VISIBLE = 'app/setIsSidebarVisible';
|
||
|
|
||
|
//
|
||
|
// Action Creators
|
||
|
|
||
|
export const saveDimensions = createAction(SAVE_DIMENSIONS);
|
||
|
export const setVersion = createAction(SET_VERSION);
|
||
|
export const setIsSidebarVisible = createAction(SET_IS_SIDEBAR_VISIBLE);
|
||
|
export const setAppValue = createAction(SET_APP_VALUE);
|
||
|
export const showMessage = createAction(SHOW_MESSAGE);
|
||
|
export const hideMessage = createAction(HIDE_MESSAGE);
|
||
|
|
||
|
//
|
||
|
// Reducers
|
||
|
|
||
|
export const reducers = createHandleActions({
|
||
|
|
||
|
[SAVE_DIMENSIONS]: function(state, { payload }) {
|
||
|
const {
|
||
|
width,
|
||
|
height
|
||
|
} = payload;
|
||
|
|
||
|
const dimensions = getDimensions(width, height);
|
||
|
|
||
|
return Object.assign({}, state, { dimensions });
|
||
|
},
|
||
|
|
||
|
[SHOW_MESSAGE]: function(state, { payload }) {
|
||
|
const newState = getSectionState(state, messagesSection);
|
||
|
const items = newState.items;
|
||
|
const index = _.findIndex(items, { id: payload.id });
|
||
|
|
||
|
newState.items = [...items];
|
||
|
|
||
|
if (index >= 0) {
|
||
|
const item = items[index];
|
||
|
|
||
|
newState.items.splice(index, 1, { ...item, ...payload });
|
||
|
} else {
|
||
|
newState.items.push({ ...payload });
|
||
|
}
|
||
|
|
||
|
return updateSectionState(state, messagesSection, newState);
|
||
|
},
|
||
|
|
||
|
[HIDE_MESSAGE]: function(state, { payload }) {
|
||
|
const newState = getSectionState(state, messagesSection);
|
||
|
|
||
|
newState.items = [...newState.items];
|
||
|
_.remove(newState.items, { id: payload.id });
|
||
|
|
||
|
return updateSectionState(state, messagesSection, newState);
|
||
|
},
|
||
|
|
||
|
[SET_APP_VALUE]: function(state, { payload }) {
|
||
|
const newState = Object.assign(getSectionState(state, section), payload);
|
||
|
|
||
|
return updateSectionState(state, section, newState);
|
||
|
},
|
||
|
|
||
|
[SET_VERSION]: function(state, { payload }) {
|
||
|
const version = payload.version;
|
||
|
|
||
|
const newState = {
|
||
|
version
|
||
|
};
|
||
|
|
||
|
if (state.version !== version) {
|
||
|
newState.isUpdated = true;
|
||
|
}
|
||
|
|
||
|
return Object.assign({}, state, newState);
|
||
|
},
|
||
|
|
||
|
[SET_IS_SIDEBAR_VISIBLE]: function(state, { payload }) {
|
||
|
const newState = {
|
||
|
isSidebarVisible: payload.isSidebarVisible
|
||
|
};
|
||
|
|
||
|
return Object.assign({}, state, newState);
|
||
|
}
|
||
|
|
||
|
}, defaultState, section);
|
||
|
|