summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/src/reducers/search.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/client/netmonitor/src/reducers/search.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/reducers/search.js b/devtools/client/netmonitor/src/reducers/search.js
new file mode 100644
index 0000000000..91e843e18c
--- /dev/null
+++ b/devtools/client/netmonitor/src/reducers/search.js
@@ -0,0 +1,118 @@
+/* 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 {
+ ADD_SEARCH_QUERY,
+ ADD_SEARCH_RESULT,
+ CLEAR_SEARCH_RESULTS,
+ ADD_ONGOING_SEARCH,
+ SEARCH_STATUS,
+ TOGGLE_SEARCH_CASE_SENSITIVE_SEARCH,
+ UPDATE_SEARCH_STATUS,
+ SET_TARGET_SEARCH_RESULT,
+} = require("resource://devtools/client/netmonitor/src/constants.js");
+
+/**
+ * Search reducer stores the following data:
+ * - query [String]: the string the user is looking for
+ * - results [Object]: the list of search results
+ * - ongoingSearch [Object]: the object representing the current search
+ * - status [String]: status of the current search (see constants.js)
+ */
+function Search(overrideParams = {}) {
+ return Object.assign(
+ {
+ query: "",
+ results: [],
+ ongoingSearch: null,
+ status: SEARCH_STATUS.INITIAL,
+ caseSensitive: false,
+ targetSearchResult: null,
+ },
+ overrideParams
+ );
+}
+
+function search(state = new Search(), action) {
+ switch (action.type) {
+ case ADD_SEARCH_QUERY:
+ return onAddSearchQuery(state, action);
+ case ADD_SEARCH_RESULT:
+ return onAddSearchResult(state, action);
+ case CLEAR_SEARCH_RESULTS:
+ return onClearSearchResults(state);
+ case ADD_ONGOING_SEARCH:
+ return onAddOngoingSearch(state, action);
+ case TOGGLE_SEARCH_CASE_SENSITIVE_SEARCH:
+ return onToggleCaseSensitiveSearch(state);
+ case UPDATE_SEARCH_STATUS:
+ return onUpdateSearchStatus(state, action);
+ case SET_TARGET_SEARCH_RESULT:
+ return onSetTargetSearchResult(state, action);
+ }
+ return state;
+}
+
+function onAddSearchQuery(state, action) {
+ return {
+ ...state,
+ query: action.query,
+ };
+}
+
+function onAddSearchResult(state, action) {
+ const { resource } = action;
+ const results = state.results.slice();
+ results.push({
+ resource,
+ results: action.result,
+ });
+
+ return {
+ ...state,
+ results,
+ };
+}
+
+function onClearSearchResults(state) {
+ return {
+ ...state,
+ results: [],
+ };
+}
+
+function onAddOngoingSearch(state, action) {
+ return {
+ ...state,
+ ongoingSearch: action.ongoingSearch,
+ };
+}
+
+function onToggleCaseSensitiveSearch(state) {
+ return {
+ ...state,
+ caseSensitive: !state.caseSensitive,
+ };
+}
+
+function onUpdateSearchStatus(state, action) {
+ return {
+ ...state,
+ status: action.status,
+ };
+}
+
+function onSetTargetSearchResult(state, action) {
+ return {
+ ...state,
+ targetSearchResult: action.searchResult,
+ };
+}
+
+module.exports = {
+ Search,
+ search,
+};