/* 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 { SELECT_REQUEST, } = require("resource://devtools/client/netmonitor/src/constants.js"); const { getDisplayedRequests, getSortedRequests, } = require("resource://devtools/client/netmonitor/src/selectors/index.js"); const PAGE_SIZE_ITEM_COUNT_RATIO = 5; /** * Select request with a given id. */ function selectRequest(id, request) { return { type: SELECT_REQUEST, id, request, }; } /** * Select request with a given index (sorted order) */ function selectRequestByIndex(index) { return ({ dispatch, getState }) => { const requests = getSortedRequests(getState()); let itemId; if (index >= 0 && index < requests.length) { itemId = requests[index].id; } dispatch(selectRequest(itemId)); }; } /** * 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 selectDelta(delta) { return ({ dispatch, getState }) => { const state = getState(); const requests = getDisplayedRequests(state); if (!requests.length) { return; } const selIndex = requests.findIndex( r => r.id === state.requests.selectedId ); if (delta === "PAGE_DOWN") { delta = Math.ceil(requests.length / PAGE_SIZE_ITEM_COUNT_RATIO); } else if (delta === "PAGE_UP") { delta = -Math.ceil(requests.length / PAGE_SIZE_ITEM_COUNT_RATIO); } const newIndex = Math.min( Math.max(0, selIndex + delta), requests.length - 1 ); const newItem = requests[newIndex]; dispatch(selectRequest(newItem.id, newItem)); }; } module.exports = { selectRequest, selectRequestByIndex, selectDelta, };