diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-06-17 22:11:16 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-17 22:11:16 -0700 |
commit | 23b976a999f41439e83c1010474ec9dc680b8486 (patch) | |
tree | e6e6d5ac969710292833662d5f1f85e1caed86ab /web/src/js/ducks/settings.js | |
parent | 9c6199db9be34fad18eaedb86463333671ae190a (diff) | |
parent | f203936fbf51b04f424666f9d2dd63bce8c84404 (diff) | |
download | mitmproxy-23b976a999f41439e83c1010474ec9dc680b8486.tar.gz mitmproxy-23b976a999f41439e83c1010474ec9dc680b8486.tar.bz2 mitmproxy-23b976a999f41439e83c1010474ec9dc680b8486.zip |
Merge pull request #1270 from mitmproxy/settings
[web] Settings Ducks 2
Diffstat (limited to 'web/src/js/ducks/settings.js')
-rw-r--r-- | web/src/js/ducks/settings.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/web/src/js/ducks/settings.js b/web/src/js/ducks/settings.js new file mode 100644 index 00000000..73c62120 --- /dev/null +++ b/web/src/js/ducks/settings.js @@ -0,0 +1,77 @@ +import {fetchApi} from "../utils"; + +export const REQUEST_SETTINGS = "REQUEST_SETTINGS" +export const RECEIVE_SETTINGS = "RECEIVE_SETTINGS" +export const UPDATE_SETTINGS = "UPDATE_SETTINGS" + +const defaultState = { + settings: {}, + isFetching: false, + actionsDuringFetch: [], +} + +export default function reducer(state = defaultState, action) { + switch (action.type) { + + case REQUEST_SETTINGS: + return { + ...state, + isFetching: true + } + + case RECEIVE_SETTINGS: + let s = { + settings: action.settings, + isFetching: false, + actionsDuringFetch: [], + } + for (action of state.actionsDuringFetch) { + s = reducer(s, action) + } + return s + + case UPDATE_SETTINGS: + if (state.isFetching) { + return { + ...state, + actionsDuringFetch: [...state.actionsDuringFetch, action] + } + } + return { + ...state, + settings: {...state.settings, ...action.settings} + } + + default: + return state + } +} + +export function updateSettings(event) { + /* This action creator takes all WebSocket events */ + if (event.cmd === "update") { + return { + type: UPDATE_SETTINGS, + settings: event.data + } + } + console.error("unknown settings update", event) +} + +export function fetchSettings() { + return dispatch => { + dispatch({type: REQUEST_SETTINGS}) + + return fetchApi("/settings") + .then(response => response.json()) + .then(json => + dispatch({type: RECEIVE_SETTINGS, settings: json.data}) + ) + // TODO: Error handling + } +} + +export function setInterceptPattern(intercept) { + return dispatch => + fetchApi.put("/settings", {intercept}) +} |