diff options
Diffstat (limited to 'web/src/js/ducks')
-rw-r--r-- | web/src/js/ducks/README.md | 1 | ||||
-rw-r--r-- | web/src/js/ducks/eventLog.js | 61 | ||||
-rw-r--r-- | web/src/js/ducks/index.js | 10 | ||||
-rw-r--r-- | web/src/js/ducks/list.js | 21 | ||||
-rw-r--r-- | web/src/js/ducks/websocket.js | 30 |
5 files changed, 123 insertions, 0 deletions
diff --git a/web/src/js/ducks/README.md b/web/src/js/ducks/README.md new file mode 100644 index 00000000..9d005f35 --- /dev/null +++ b/web/src/js/ducks/README.md @@ -0,0 +1 @@ +https://github.com/erikras/ducks-modular-redux
\ No newline at end of file diff --git a/web/src/js/ducks/eventLog.js b/web/src/js/ducks/eventLog.js new file mode 100644 index 00000000..2040711c --- /dev/null +++ b/web/src/js/ducks/eventLog.js @@ -0,0 +1,61 @@ +import getList, {ADD} from "./list" +const TOGGLE_FILTER = 'TOGGLE_EVENTLOG_FILTER' +const TOGGLE_VISIBILITY = 'TOGGLE_EVENTLOG_VISIBILITY' +const UPDATE_LIST = "UPDATE_EVENTLOG" + + +const defaultState = { + visible: false, + filter: { + "debug": false, + "info": true, + "web": true + }, + events: getList(), + filteredEvents: [], +} + +export default function reducer(state = defaultState, action) { + switch (action.type) { + case TOGGLE_FILTER: + const filter = { + ...state.filter, + [action.filter]: !state.filter[action.filter] + } + return { + ...state, + filter, + filteredEvents: state.events.list.filter(x => filter[x.level]) + } + case TOGGLE_VISIBILITY: + return { + ...state, + visible: !state.visible + } + case UPDATE_LIST: + const events = getList(state.events, action) + return { + ...state, + events, + filteredEvents: events.list.filter(x => state.filter[x.level]) + } + default: + return state + } +} + + +export function toggleEventLogFilter(filter) { + return {type: TOGGLE_FILTER, filter} +} +export function toggleEventLogVisibility() { + return {type: TOGGLE_VISIBILITY} +} +let id = 0; +export function addLogEntry(message, level = "web") { + return { + type: UPDATE_LIST, + cmd: ADD, + data: {message, level, id: `log-${id++}`} + } +}
\ No newline at end of file diff --git a/web/src/js/ducks/index.js b/web/src/js/ducks/index.js new file mode 100644 index 00000000..3043344c --- /dev/null +++ b/web/src/js/ducks/index.js @@ -0,0 +1,10 @@ +import {combineReducers} from 'redux' +import eventLog from './eventLog.js' +import websocket from './websocket.js' + +const rootReducer = combineReducers({ + eventLog, + websocket, +}) + +export default rootReducer
\ No newline at end of file diff --git a/web/src/js/ducks/list.js b/web/src/js/ducks/list.js new file mode 100644 index 00000000..0b3771e2 --- /dev/null +++ b/web/src/js/ducks/list.js @@ -0,0 +1,21 @@ +export const ADD = 'add' + +const defaultState = { + list: [], + //isFetching: false, + //updateBeforeFetch: [], + indexOf: {}, + //views: {} +}; + +export default function getList(state = defaultState, action = {}) { + switch (action.cmd) { + case ADD: + return { + list: [...state.list, action.data], + indexOf: {...state.indexOf, [action.data.id]: state.list.length}, + } + default: + return state + } +}
\ No newline at end of file diff --git a/web/src/js/ducks/websocket.js b/web/src/js/ducks/websocket.js new file mode 100644 index 00000000..3999dbcf --- /dev/null +++ b/web/src/js/ducks/websocket.js @@ -0,0 +1,30 @@ +const CONNECTED = 'WEBSOCKET_CONNECTED' +const DISCONNECTED = 'WEBSOCKET_DISCONNECTED' + + +const defaultState = { + connected: true, + /* we may want to have an error message attribute here at some point */ +} +export default function reducer(state = defaultState, action) { + switch (action.type) { + case CONNECTED: + return { + connected: true + } + case DISCONNECTED: + return { + connected: false + } + default: + return state + } +} + + +export function connected() { + return {type: CONNECTED} +} +export function disconnected() { + return {type: DISCONNECTED} +}
\ No newline at end of file |