summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/src/actions/messages.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/src/actions/messages.js')
-rw-r--r--devtools/client/netmonitor/src/actions/messages.js188
1 files changed, 188 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/src/actions/messages.js b/devtools/client/netmonitor/src/actions/messages.js
new file mode 100644
index 0000000000..a8f49e9735
--- /dev/null
+++ b/devtools/client/netmonitor/src/actions/messages.js
@@ -0,0 +1,188 @@
+/* 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 {
+ MSG_ADD,
+ MSG_SELECT,
+ MSG_OPEN_DETAILS,
+ MSG_CLEAR,
+ MSG_TOGGLE_FILTER_TYPE,
+ MSG_TOGGLE_CONTROL,
+ MSG_SET_FILTER_TEXT,
+ MSG_TOGGLE_COLUMN,
+ MSG_RESET_COLUMNS,
+ MSG_CLOSE_CONNECTION,
+} = require("resource://devtools/client/netmonitor/src/constants.js");
+
+const {
+ getDisplayedMessages,
+} = require("resource://devtools/client/netmonitor/src/selectors/index.js");
+const PAGE_SIZE_ITEM_COUNT_RATIO = 5;
+
+/**
+ * Add message into state.
+ */
+function addMessage(httpChannelId, data, batch) {
+ return {
+ type: MSG_ADD,
+ httpChannelId,
+ data,
+ meta: { batch },
+ };
+}
+
+/**
+ * Select message.
+ */
+function selectMessage(message) {
+ return {
+ type: MSG_SELECT,
+ open: true,
+ message,
+ };
+}
+
+/**
+ * Open message details panel.
+ *
+ * @param {boolean} open - expected message details panel open state
+ */
+function openMessageDetails(open) {
+ return {
+ type: MSG_OPEN_DETAILS,
+ open,
+ };
+}
+
+/**
+ * Clear all messages from the MessageListContent
+ * component belonging to the current channelId
+ */
+function clearMessages() {
+ return {
+ type: MSG_CLEAR,
+ };
+}
+
+/**
+ * Show filtered messages from the MessageListContent
+ * component belonging to the current channelId
+ */
+function toggleMessageFilterType(filter) {
+ return {
+ type: MSG_TOGGLE_FILTER_TYPE,
+ filter,
+ };
+}
+
+/**
+ * Show control frames from the MessageListContent
+ * component belonging to the current channelId
+ */
+function toggleControlFrames() {
+ return {
+ type: MSG_TOGGLE_CONTROL,
+ };
+}
+
+/**
+ * Set filter text in toolbar.
+ *
+ */
+function setMessageFilterText(text) {
+ return {
+ type: MSG_SET_FILTER_TEXT,
+ text,
+ };
+}
+
+/**
+ * Resets all Messages columns to their default state.
+ *
+ */
+function resetMessageColumns() {
+ return {
+ type: MSG_RESET_COLUMNS,
+ };
+}
+
+/**
+ * Toggles a Message column
+ *
+ * @param {string} column - The column that is going to be toggled
+ */
+function toggleMessageColumn(column) {
+ return {
+ type: MSG_TOGGLE_COLUMN,
+ column,
+ };
+}
+
+/**
+ * Sets current connection status to closed
+ *
+ * @param {number} httpChannelId - Unique id identifying the channel
+ * @param {boolean} wasClean - False if connection terminated due to error
+ * @param {number} code - Error code
+ * @param {string} reason
+ */
+function closeConnection(httpChannelId, wasClean, code, reason) {
+ return {
+ type: MSG_CLOSE_CONNECTION,
+ httpChannelId,
+ wasClean,
+ code,
+ reason,
+ };
+}
+
+/**
+ * Move the selection up to down according to the "delta" parameter. Possible values:
+ * - Number: positive or negative, move up or down by specified distance
+ * - "PAGE_UP" | "PAGE_DOWN" (String): page up or page down
+ * - +Infinity | -Infinity: move to the start or end of the list
+ */
+function selectMessageDelta(delta) {
+ return ({ dispatch, getState }) => {
+ const state = getState();
+ const messages = getDisplayedMessages(state);
+
+ if (messages.length === 0) {
+ return;
+ }
+
+ const selIndex = messages.findIndex(
+ r => r === state.messages.selectedMessage
+ );
+
+ if (delta === "PAGE_DOWN") {
+ delta = Math.ceil(messages.length / PAGE_SIZE_ITEM_COUNT_RATIO);
+ } else if (delta === "PAGE_UP") {
+ delta = -Math.ceil(messages.length / PAGE_SIZE_ITEM_COUNT_RATIO);
+ }
+
+ const newIndex = Math.min(
+ Math.max(0, selIndex + delta),
+ messages.length - 1
+ );
+ const newItem = messages[newIndex];
+ dispatch(selectMessage(newItem));
+ };
+}
+
+module.exports = {
+ addMessage,
+ clearMessages,
+ closeConnection,
+ openMessageDetails,
+ resetMessageColumns,
+ selectMessage,
+ selectMessageDelta,
+ setMessageFilterText,
+ toggleControlFrames,
+ toggleMessageColumn,
+ toggleMessageFilterType,
+};