diff --git a/src/components/structures/LoggedInView.tsx b/src/components/structures/LoggedInView.tsx index 4876d79131..a5a1c628a3 100644 --- a/src/components/structures/LoggedInView.tsx +++ b/src/components/structures/LoggedInView.tsx @@ -53,6 +53,7 @@ import { } from "../../toasts/ServerLimitToast"; import { Action } from "../../dispatcher/actions"; import LeftPanel2 from "./LeftPanel2"; +import { ViewRoomDeltaPayload } from "../../dispatcher/payloads/ViewRoomDeltaPayload"; // We need to fetch each pinned message individually (if we don't already have it) // so each pinned message may trigger a request. Limit the number per room for sanity. @@ -460,8 +461,8 @@ class LoggedInView extends React.Component { case Key.ARROW_UP: case Key.ARROW_DOWN: if (ev.altKey && !ev.ctrlKey && !ev.metaKey) { - dis.dispatch({ - action: 'view_room_delta', + dis.dispatch({ + action: Action.ViewRoomDelta, delta: ev.key === Key.ARROW_UP ? -1 : 1, unread: ev.shiftKey, }); diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index 379a0a4451..9be674b59e 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -79,4 +79,9 @@ export enum Action { * Sets a system font. Should be used with UpdateSystemFontPayload */ UpdateSystemFont = "update_system_font", + + /** + * Changes room based on room list order and payload parameters. Should be used with ViewRoomDeltaPayload. + */ + ViewRoomDelta = "view_room_delta", } diff --git a/src/dispatcher/payloads/ViewRoomDeltaPayload.ts b/src/dispatcher/payloads/ViewRoomDeltaPayload.ts new file mode 100644 index 0000000000..de33a88b2e --- /dev/null +++ b/src/dispatcher/payloads/ViewRoomDeltaPayload.ts @@ -0,0 +1,32 @@ +/* +Copyright 2020 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { ActionPayload } from "../payloads"; +import { Action } from "../actions"; + +export interface ViewRoomDeltaPayload extends ActionPayload { + action: Action.ViewRoomDelta; + + /** + * The delta index of the room to view. + */ + delta: number; + + /** + * Optionally, whether or not to filter to unread (Bold/Grey/Red) rooms only. (Default: false) + */ + unread?: boolean; +}