Files
Iris/src/js/services/ui/reducer.js

215 lines
5.9 KiB
JavaScript
Raw Normal View History

import { omit } from 'lodash';
2016-10-27 10:02:12 +13:00
2019-09-05 15:36:11 +12:00
export default function reducer(ui = {}, action) {
switch (action.type) {
2019-09-05 15:36:11 +12:00
case 'LAZY_LOADING':
return { ...ui, lazy_loading: action.start };
2016-10-27 10:02:12 +13:00
2019-09-05 15:36:11 +12:00
case 'SET_SLIM_MODE':
return { ...ui, slim_mode: action.slim_mode };
2016-11-09 15:51:38 +13:00
2019-09-05 15:36:11 +12:00
case 'SET_WINDOW_FOCUS':
return { ...ui, window_focus: action.window_focus };
2019-09-05 15:36:11 +12:00
case 'DEBUG':
return { ...ui, debug_response: action.response };
2019-09-05 15:36:11 +12:00
case 'UI_SET':
return { ...ui, ...action.data };
case 'UI_SET_SORT':
return {
...ui,
sort: {
...ui.sort,
[action.key]: action.sort,
},
};
2019-09-05 15:36:11 +12:00
case 'SET_WINDOW_TITLE':
if (action.title) {
return { ...ui, window_title: action.title };
}
return ui;
2016-11-21 10:06:25 +13:00
2019-09-05 15:36:11 +12:00
case 'TOGGLE_SIDEBAR':
var new_state = !ui.sidebar_open;
if (typeof (action.new_state) !== 'undefined') new_state = action.new_state;
return { ...ui, sidebar_open: new_state };
2016-11-21 21:46:53 +13:00
2019-09-05 15:36:11 +12:00
case 'SET_CURRENT_TRACK_TRANSITION':
return { ...ui, current_track_transition: action.current_track_transition };
2018-12-10 19:11:33 +13:00
2019-09-05 15:36:11 +12:00
case 'SET_SELECTED_TRACKS':
return { ...ui, selected_tracks: Object.assign([], action.keys) };
2017-07-21 22:56:28 +12:00
2019-09-05 15:36:11 +12:00
case 'ICON_LOADED':
var icons = { ...ui.icons };
icons[action.key] = action.icon;
return { ...ui, icons };
2019-09-05 15:36:11 +12:00
case 'INSTALL_PROMPT':
return { ...ui, install_prompt: action.event };
2019-09-05 15:36:11 +12:00
/**
2016-11-09 15:51:38 +13:00
* Context menu
2019-09-05 15:36:11 +12:00
* */
case 'SHOW_CONTEXT_MENU':
return { ...ui, context_menu: action.data };
2016-10-27 10:02:12 +13:00
2019-09-05 15:36:11 +12:00
case 'HIDE_CONTEXT_MENU':
return { ...ui, context_menu: { ...ui.context_menu, closing: true } };
2019-09-05 15:36:11 +12:00
case 'REMOVE_CONTEXT_MENU':
return { ...ui, context_menu: null };
2019-09-05 15:36:11 +12:00
case 'SHOW_TOUCH_CONTEXT_MENU':
return { ...ui, touch_context_menu: action.data };
2019-09-05 15:36:11 +12:00
case 'HIDE_TOUCH_CONTEXT_MENU':
return { ...ui, touch_context_menu: { ...ui.touch_context_menu, closing: true } };
2016-11-10 16:17:10 +13:00
2019-09-05 15:36:11 +12:00
case 'REMOVE_TOUCH_CONTEXT_MENU':
return { ...ui, touch_context_menu: null };
2016-11-10 16:17:10 +13:00
2019-09-05 15:36:11 +12:00
/**
* Dragging
* */
case 'DRAG_START':
return {
...ui,
2019-09-05 15:36:11 +12:00
dragger: {
dragging: true,
active: false,
context: action.context,
from_uri: action.from_uri,
victims: action.victims,
victims_indexes: action.victims_indexes,
start_x: action.start_x,
start_y: action.start_y,
},
2019-09-05 15:36:11 +12:00
};
case 'DRAG_ACTIVE':
var dragger = { ...ui.dragger, active: true };
return { ...ui, dragger };
case 'DRAG_END':
return { ...ui, dragger: false };
/**
2016-11-11 23:21:51 +13:00
* Modals
2019-09-05 15:36:11 +12:00
* */
case 'OPEN_MODAL':
return { ...ui, modal: action.modal };
2016-11-11 23:21:51 +13:00
2019-09-05 15:36:11 +12:00
case 'CLOSE_MODAL':
return { ...ui, modal: false };
2016-11-11 23:21:51 +13:00
2019-09-05 15:36:11 +12:00
/**
2016-12-13 11:08:13 +13:00
* Notifications
2019-09-05 15:36:11 +12:00
* */
case 'CREATE_NOTIFICATION':
var notifications = { ...ui.notifications };
notifications[action.notification.key] = action.notification;
return { ...ui, notifications };
2017-05-29 16:29:49 +12:00
2019-09-05 15:36:11 +12:00
case 'CLOSE_NOTIFICATION':
var notifications = { ...ui.notifications };
if (notifications[action.key]) {
notifications[action.key].closing = true;
}
return { ...ui, notifications };
2016-12-13 11:08:13 +13:00
2019-09-05 15:36:11 +12:00
case 'REMOVE_NOTIFICATION':
var notifications = { ...ui.notifications };
delete notifications[action.key];
return { ...ui, notifications };
2016-12-13 11:08:13 +13:00
2019-09-05 15:36:11 +12:00
/**
2017-04-05 20:28:41 +12:00
* Loading and processes
2019-09-05 15:36:11 +12:00
* */
case 'START_LOADING': {
return {
...ui,
load_queue: {
...ui.load_queue || {},
[action.key]: action.source || action.key,
},
};
}
2019-09-05 15:36:11 +12:00
case 'STOP_LOADING':
return {
...ui,
load_queue: omit(ui.load_queue, action.keys),
};
2019-09-05 15:36:11 +12:00
case 'START_PROCESS':
2020-10-20 21:34:43 +13:00
case 'UPDATE_PROCESS': {
const processes = { ...(ui.processes || []) };
2019-09-05 15:36:11 +12:00
processes[action.key] = {
key: action.key,
...processes[action.key] || { status: 'running', notification: true },
2020-10-20 21:34:43 +13:00
...(action.type === 'START_PROCESS' ? { status: 'running', remaining: 0, total: 0 } : {}),
...action.process,
2019-09-05 15:36:11 +12:00
};
return { ...ui, processes };
2020-10-20 21:34:43 +13:00
}
2019-09-05 15:36:11 +12:00
2020-10-20 21:34:43 +13:00
case 'CANCEL_PROCESS': {
const processes = { ...(ui.processes ? ui.processes : {}) };
action.keys.forEach((key) => {
if (processes[key]) {
processes[key] = {
...processes[key],
status: 'cancelling',
total: undefined,
remaining: undefined,
};
}
});
2019-09-05 15:36:11 +12:00
return { ...ui, processes };
2020-10-20 21:34:43 +13:00
}
2019-09-05 15:36:11 +12:00
2020-10-20 21:34:43 +13:00
case 'PROCESS_CANCELLED': {
2019-09-05 15:36:11 +12:00
var processes = { ...(ui.processes ? ui.processes : {}) };
if (processes[action.key]) {
processes[action.key] = { ...processes[action.key], status: 'cancelled' };
}
return { ...ui, processes };
2020-10-20 21:34:43 +13:00
}
2019-09-05 15:36:11 +12:00
2020-10-20 21:34:43 +13:00
case 'PROCESS_FINISHED': {
2020-02-13 10:41:20 +13:00
var processes = { ...(ui.processes ? ui.processes : {}) };
if (processes[action.key]) {
processes[action.key] = { ...processes[action.key], status: 'finished' };
}
return { ...ui, processes };
2020-10-20 21:34:43 +13:00
}
2020-02-13 10:41:20 +13:00
2020-10-20 21:34:43 +13:00
case 'CLOSE_PROCESS': {
2019-09-05 15:36:11 +12:00
var processes = { ...(ui.processes ? ui.processes : {}) };
if (processes[action.key]) {
processes[action.key] = { ...processes[action.key], closing: true };
}
return { ...ui, processes };
2020-10-20 21:34:43 +13:00
}
2019-09-05 15:36:11 +12:00
2020-10-20 21:34:43 +13:00
case 'REMOVE_PROCESS': {
2019-09-05 15:36:11 +12:00
var processes = { ...(ui.processes ? ui.processes : {}) };
if (processes[action.key]) {
2020-02-13 10:41:20 +13:00
processes[action.key] = { ...processes[action.key], status: 'completed', closing: false };
2019-09-05 15:36:11 +12:00
}
return { ...ui, processes };
2020-10-20 21:34:43 +13:00
}
2019-09-05 15:36:11 +12:00
case 'SUPPRESS_BROADCAST':
return { ...ui, suppressed_broadcasts: [...(ui.suppressed_broadcasts || []), action.key] };
2019-09-05 15:36:11 +12:00
default:
return ui;
}
2016-10-27 10:02:12 +13:00
}