aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/ducks/ui
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2017-07-17 20:46:28 +0200
committerMaximilian Hils <git@maximilianhils.com>2017-07-17 21:04:01 +0200
commitbabd967eb8ac62c4a6ff6734ff57e46faaa5bab6 (patch)
treec44148fd3fc96f94f76442d1c8bcb97e117e169b /web/src/js/ducks/ui
parent21b3f9c02956c625c576c6787ab10409aab0618d (diff)
downloadmitmproxy-babd967eb8ac62c4a6ff6734ff57e46faaa5bab6.tar.gz
mitmproxy-babd967eb8ac62c4a6ff6734ff57e46faaa5bab6.tar.bz2
mitmproxy-babd967eb8ac62c4a6ff6734ff57e46faaa5bab6.zip
[web] options: make help and err permanently visible, improve perf
Diffstat (limited to 'web/src/js/ducks/ui')
-rw-r--r--web/src/js/ducks/ui/index.js4
-rw-r--r--web/src/js/ducks/ui/keyboard.js7
-rw-r--r--web/src/js/ducks/ui/option.js39
-rw-r--r--web/src/js/ducks/ui/optionsEditor.js73
4 files changed, 81 insertions, 42 deletions
diff --git a/web/src/js/ducks/ui/index.js b/web/src/js/ducks/ui/index.js
index cdee7ebb..f5e6851f 100644
--- a/web/src/js/ducks/ui/index.js
+++ b/web/src/js/ducks/ui/index.js
@@ -2,12 +2,12 @@ import { combineReducers } from 'redux'
import flow from './flow'
import header from './header'
import modal from './modal'
-import option from './option'
+import optionsEditor from './optionsEditor'
// TODO: Just move ducks/ui/* into ducks/?
export default combineReducers({
flow,
header,
modal,
- option,
+ optionsEditor,
})
diff --git a/web/src/js/ducks/ui/keyboard.js b/web/src/js/ducks/ui/keyboard.js
index 0e3491fa..e3f8c33c 100644
--- a/web/src/js/ducks/ui/keyboard.js
+++ b/web/src/js/ducks/ui/keyboard.js
@@ -1,6 +1,7 @@
import { Key } from "../../utils"
import { selectTab } from "./flow"
import * as flowsActions from "../flows"
+import * as modalActions from "./modal"
export function onKeyDown(e) {
@@ -46,7 +47,11 @@ export function onKeyDown(e) {
break
case Key.ESC:
- dispatch(flowsActions.select(null))
+ if(getState().ui.modal.activeModal){
+ dispatch(modalActions.hideModal())
+ } else {
+ dispatch(flowsActions.select(null))
+ }
break
case Key.LEFT: {
diff --git a/web/src/js/ducks/ui/option.js b/web/src/js/ducks/ui/option.js
deleted file mode 100644
index 6aba4998..00000000
--- a/web/src/js/ducks/ui/option.js
+++ /dev/null
@@ -1,39 +0,0 @@
-export const OPTION_UPDATE_START = 'UI_OPTION_UPDATE_START'
-export const OPTION_UPDATE_SUCCESS = 'UI_OPTION_UPDATE_SUCCESS'
-export const OPTION_UPDATE_ERROR = 'UI_OPTION_UPDATE_ERROR'
-
-const defaultState = {
- /* optionName -> {isUpdating, value (client-side), error} */
-}
-
-export default function reducer(state = defaultState, action) {
- switch (action.type) {
- case OPTION_UPDATE_START:
- return {
- ...state,
- [action.option]: {
- isUpdate: true,
- value: action.value,
- error: false,
- }
- }
-
- case OPTION_UPDATE_SUCCESS:
- let s = {...state}
- delete s[action.option]
- return s
-
- case OPTION_UPDATE_ERROR:
- return {
- ...state,
- [action.option]: {
- ...state[action.option],
- isUpdating: false,
- error: action.error
- }
- }
-
- default:
- return state
- }
-}
diff --git a/web/src/js/ducks/ui/optionsEditor.js b/web/src/js/ducks/ui/optionsEditor.js
new file mode 100644
index 00000000..23dfe01a
--- /dev/null
+++ b/web/src/js/ducks/ui/optionsEditor.js
@@ -0,0 +1,73 @@
+import { HIDE_MODAL } from "./modal"
+
+export const OPTION_UPDATE_START = 'UI_OPTION_UPDATE_START'
+export const OPTION_UPDATE_SUCCESS = 'UI_OPTION_UPDATE_SUCCESS'
+export const OPTION_UPDATE_ERROR = 'UI_OPTION_UPDATE_ERROR'
+
+const defaultState = {
+ /* optionName -> {isUpdating, value (client-side), error} */
+}
+
+export default function reducer(state = defaultState, action) {
+ switch (action.type) {
+ case OPTION_UPDATE_START:
+ return {
+ ...state,
+ [action.option]: {
+ isUpdate: true,
+ value: action.value,
+ error: false,
+ }
+ }
+
+ case OPTION_UPDATE_SUCCESS:
+ return {
+ ...state,
+ [action.option]: undefined
+ }
+
+ case OPTION_UPDATE_ERROR:
+ let val = state[action.option].value;
+ if (typeof(val) === "boolean") {
+ // If a boolean option errs, reset it to its previous state to be less confusing.
+ // Example: Start mitmweb, check "add_upstream_certs_to_client_chain".
+ val = !val;
+ }
+ return {
+ ...state,
+ [action.option]: {
+ value: val,
+ isUpdating: false,
+ error: action.error
+ }
+ }
+
+ case HIDE_MODAL:
+ return {}
+
+ default:
+ return state
+ }
+}
+
+export function startUpdate(option, value) {
+ return {
+ type: OPTION_UPDATE_START,
+ option,
+ value,
+ }
+}
+export function updateSuccess(option) {
+ return {
+ type: OPTION_UPDATE_SUCCESS,
+ option,
+ }
+}
+
+export function updateError(option, error) {
+ return {
+ type: OPTION_UPDATE_ERROR,
+ option,
+ error,
+ }
+}