diff options
Diffstat (limited to '')
-rw-r--r-- | devtools/client/netmonitor/src/reducers/filters.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/reducers/filters.js b/devtools/client/netmonitor/src/reducers/filters.js new file mode 100644 index 0000000000..4635f6f94a --- /dev/null +++ b/devtools/client/netmonitor/src/reducers/filters.js @@ -0,0 +1,102 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { + ENABLE_REQUEST_FILTER_TYPE_ONLY, + TOGGLE_REQUEST_FILTER_TYPE, + SET_REQUEST_FILTER_TEXT, + FILTER_TAGS, +} = require("resource://devtools/client/netmonitor/src/constants.js"); + +function FilterTypes(overrideParams = {}) { + const allFilterTypes = ["all"].concat(FILTER_TAGS); + // filter only those keys which are valid filter tags + overrideParams = Object.keys(overrideParams) + .filter(key => allFilterTypes.includes(key)) + .reduce((obj, key) => { + obj[key] = overrideParams[key]; + return obj; + }, {}); + const filterTypes = allFilterTypes.reduce( + (o, tag) => Object.assign(o, { [tag]: false }), + {} + ); + return Object.assign({}, filterTypes, overrideParams); +} + +function Filters(overrideParams = {}) { + return Object.assign( + { + requestFilterTypes: new FilterTypes({ all: true }), + requestFilterText: "", + }, + overrideParams + ); +} + +function toggleRequestFilterType(state, action) { + const { filter } = action; + let newState; + + // Ignore unknown filter type + if (!state.hasOwnProperty(filter)) { + return state; + } + if (filter === "all") { + return new FilterTypes({ all: true }); + } + + newState = { ...state }; + newState.all = false; + newState[filter] = !state[filter]; + + if (!Object.values(newState).includes(true)) { + newState = new FilterTypes({ all: true }); + } + + return newState; +} + +function enableRequestFilterTypeOnly(state, action) { + const { filter } = action; + + // Ignore unknown filter type + if (!state.hasOwnProperty(filter)) { + return state; + } + + return new FilterTypes({ [filter]: true }); +} + +function filters(state = new Filters(), action) { + state = { ...state }; + switch (action.type) { + case ENABLE_REQUEST_FILTER_TYPE_ONLY: + state.requestFilterTypes = enableRequestFilterTypeOnly( + state.requestFilterTypes, + action + ); + break; + case TOGGLE_REQUEST_FILTER_TYPE: + state.requestFilterTypes = toggleRequestFilterType( + state.requestFilterTypes, + action + ); + break; + case SET_REQUEST_FILTER_TEXT: + state.requestFilterText = action.text; + break; + default: + break; + } + return state; +} + +module.exports = { + FilterTypes, + Filters, + filters, +}; |