From 698d38b28e43ce0685ce8ce8c119926af2083cbc Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Thu, 2 Jun 2016 17:46:18 -0700 Subject: web: :hatching_chick: --- web/src/js/ducks/README.md | 1 + web/src/js/ducks/eventLog.js | 39 +++++++++++++++++++++++++++++++++++++++ web/src/js/ducks/index.js | 8 ++++++++ 3 files changed, 48 insertions(+) create mode 100644 web/src/js/ducks/README.md create mode 100644 web/src/js/ducks/eventLog.js create mode 100644 web/src/js/ducks/index.js (limited to 'web/src/js/ducks') 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..5bae252a --- /dev/null +++ b/web/src/js/ducks/eventLog.js @@ -0,0 +1,39 @@ +const TOGGLE_FILTER = 'TOGGLE_EVENTLOG_FILTER' +const TOGGLE_VISIBILITY = 'TOGGLE_EVENTLOG_VISIBILITY' + + +const defaultState = { + visible: false, + filter: { + "debug": false, + "info": true, + "web": true + } +} +export default function reducer(state = defaultState, action) { + switch (action.type) { + case TOGGLE_FILTER: + return { + ...state, + filter: { + ...state.filter, + [action.filter]: !state.filter[action.filter] + } + } + case TOGGLE_VISIBILITY: + return { + ...state, + visible: !state.visible + } + default: + return state + } +} + + +export function toggleEventLogFilter(filter) { + return {type: TOGGLE_FILTER, filter} +} +export function toggleEventLogVisibility() { + return {type: TOGGLE_VISIBILITY} +} \ 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..c82d42bb --- /dev/null +++ b/web/src/js/ducks/index.js @@ -0,0 +1,8 @@ +import {combineReducers} from 'redux' +import eventLog from './eventLog.js'; + +const rootReducer = combineReducers({ + eventLog +}) + +export default rootReducer \ No newline at end of file -- cgit v1.2.3 From 7c63aa3708a09b997575cb85cb6dfaaa41082fab Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Thu, 2 Jun 2016 21:12:59 -0700 Subject: web: reduxify WebSocket --- web/src/js/ducks/flows.js | 15 +++++++++++++++ web/src/js/ducks/index.js | 8 ++++++-- web/src/js/ducks/websocket.js | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 web/src/js/ducks/flows.js create mode 100644 web/src/js/ducks/websocket.js (limited to 'web/src/js/ducks') diff --git a/web/src/js/ducks/flows.js b/web/src/js/ducks/flows.js new file mode 100644 index 00000000..c4077f7a --- /dev/null +++ b/web/src/js/ducks/flows.js @@ -0,0 +1,15 @@ +const defaultState = { + list: [], + isFetching: false, + updateBeforeFetch: [], + byId: {}, + indexOf: {}, + views: {} +} + +export default function reducer(state = defaultState, action) { + switch (action.type) { + default: + return state + } +} diff --git a/web/src/js/ducks/index.js b/web/src/js/ducks/index.js index c82d42bb..0074bda4 100644 --- a/web/src/js/ducks/index.js +++ b/web/src/js/ducks/index.js @@ -1,8 +1,12 @@ import {combineReducers} from 'redux' -import eventLog from './eventLog.js'; +import eventLog from './eventLog.js' +import websocket from './websocket.js' +import flows from './flows.js' const rootReducer = combineReducers({ - eventLog + eventLog, + flows, + websocket, }) export default rootReducer \ 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..281d1f2c --- /dev/null +++ b/web/src/js/ducks/websocket.js @@ -0,0 +1,34 @@ +const CONNECTED = 'WEBSOCKET_CONNECTED' +const DISCONNECTED = 'WEBSOCKET_DISCONNECTED' +const RECEIVE_MESSAGE = 'RECEIVE_WEBSOCKET_MESSAGE' + + +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} +} +export function receiveMessage(message) { + return {type: RECEIVE_MESSAGE, message} +} \ No newline at end of file -- cgit v1.2.3 From 7afac747a8448ac524774a23c12ab23c9d4675f6 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Thu, 2 Jun 2016 23:40:30 -0700 Subject: web: reduxify event log store --- web/src/js/ducks/eventLog.js | 32 +++++++++++++++++++++++++++----- web/src/js/ducks/flows.js | 15 --------------- web/src/js/ducks/index.js | 2 -- web/src/js/ducks/list.js | 21 +++++++++++++++++++++ web/src/js/ducks/websocket.js | 4 ---- 5 files changed, 48 insertions(+), 26 deletions(-) delete mode 100644 web/src/js/ducks/flows.js create mode 100644 web/src/js/ducks/list.js (limited to 'web/src/js/ducks') diff --git a/web/src/js/ducks/eventLog.js b/web/src/js/ducks/eventLog.js index 5bae252a..2040711c 100644 --- a/web/src/js/ducks/eventLog.js +++ b/web/src/js/ducks/eventLog.js @@ -1,5 +1,7 @@ +import getList, {ADD} from "./list" const TOGGLE_FILTER = 'TOGGLE_EVENTLOG_FILTER' const TOGGLE_VISIBILITY = 'TOGGLE_EVENTLOG_VISIBILITY' +const UPDATE_LIST = "UPDATE_EVENTLOG" const defaultState = { @@ -8,23 +10,35 @@ const defaultState = { "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: { - ...state.filter, - [action.filter]: !state.filter[action.filter] - } + 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 } @@ -36,4 +50,12 @@ export function toggleEventLogFilter(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/flows.js b/web/src/js/ducks/flows.js deleted file mode 100644 index c4077f7a..00000000 --- a/web/src/js/ducks/flows.js +++ /dev/null @@ -1,15 +0,0 @@ -const defaultState = { - list: [], - isFetching: false, - updateBeforeFetch: [], - byId: {}, - indexOf: {}, - views: {} -} - -export default function reducer(state = defaultState, action) { - switch (action.type) { - default: - return state - } -} diff --git a/web/src/js/ducks/index.js b/web/src/js/ducks/index.js index 0074bda4..3043344c 100644 --- a/web/src/js/ducks/index.js +++ b/web/src/js/ducks/index.js @@ -1,11 +1,9 @@ import {combineReducers} from 'redux' import eventLog from './eventLog.js' import websocket from './websocket.js' -import flows from './flows.js' const rootReducer = combineReducers({ eventLog, - flows, websocket, }) 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 index 281d1f2c..3999dbcf 100644 --- a/web/src/js/ducks/websocket.js +++ b/web/src/js/ducks/websocket.js @@ -1,6 +1,5 @@ const CONNECTED = 'WEBSOCKET_CONNECTED' const DISCONNECTED = 'WEBSOCKET_DISCONNECTED' -const RECEIVE_MESSAGE = 'RECEIVE_WEBSOCKET_MESSAGE' const defaultState = { @@ -28,7 +27,4 @@ export function connected() { } export function disconnected() { return {type: DISCONNECTED} -} -export function receiveMessage(message) { - return {type: RECEIVE_MESSAGE, message} } \ No newline at end of file -- cgit v1.2.3