Source code

Revision control

Copy as Markdown

Other Tools

/* 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,
const {
getDisplayedMessages,
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,
};