From ae0dba4e874834d050643ab5eb4e4fb6f929f339 Mon Sep 17 00:00:00 2001 From: Renan Cleyson Date: Thu, 25 Nov 2021 17:49:43 -0300 Subject: [PATCH] Add `view_room` to `Action` enum (#7203) * Add ViewRoom action to Action enum Signed-off-by: Renan * Change view_room occurrences to Action.ViewRoom Signed-off-by: Renan * Add missing Action import --- src/CallHandler.tsx | 6 +++--- src/SlashCommands.tsx | 10 +++++----- src/TextForEvent.tsx | 2 +- src/components/structures/GroupView.js | 2 +- src/components/structures/MatrixChat.tsx | 10 +++++----- src/components/structures/RightPanel.tsx | 2 +- src/components/structures/RoomDirectory.tsx | 3 ++- src/components/structures/RoomSearch.tsx | 2 +- src/components/structures/RoomView.tsx | 8 ++++---- src/components/structures/SearchBox.tsx | 3 ++- src/components/structures/ThreadView.tsx | 2 +- src/components/structures/TimelinePanel.tsx | 3 ++- src/components/structures/UserMenu.tsx | 2 +- .../views/context_menus/MessageContextMenu.tsx | 2 +- .../views/context_menus/SpaceContextMenu.tsx | 2 +- .../views/context_menus/ThreadListContextMenu.tsx | 3 ++- .../views/dialogs/CreateCommunityPrototypeDialog.tsx | 3 ++- src/components/views/dialogs/InviteDialog.tsx | 2 +- src/components/views/elements/ImageView.tsx | 3 ++- src/components/views/messages/RoomCreate.tsx | 3 ++- src/components/views/right_panel/UserInfo.tsx | 4 ++-- src/components/views/rooms/EventTile.tsx | 2 +- src/components/views/rooms/MessageComposer.tsx | 2 +- src/components/views/rooms/PinnedEventTile.tsx | 3 ++- src/components/views/rooms/ReplyTile.tsx | 3 ++- src/components/views/rooms/RoomDetailList.tsx | 3 ++- src/components/views/rooms/RoomList.tsx | 2 +- src/components/views/rooms/RoomSublist.tsx | 3 ++- src/components/views/rooms/RoomTile.tsx | 3 ++- .../settings/tabs/room/AdvancedRoomSettingsTab.tsx | 3 ++- .../views/toasts/VerificationRequestToast.tsx | 2 +- src/components/views/voip/CallView/CallViewHeader.tsx | 3 ++- src/createRoom.ts | 2 +- src/dispatcher/actions.ts | 5 +++++ src/stores/BreadcrumbsStore.ts | 2 +- src/stores/CommunityPrototypeStore.ts | 3 ++- src/stores/GroupFilterOrderStore.js | 3 ++- src/stores/RightPanelStore.ts | 2 +- src/stores/RoomViewStore.tsx | 6 +++--- src/stores/widgets/StopGapWidget.ts | 3 ++- test/CallHandler-test.ts | 2 +- test/stores/RoomViewStore-test.js | 5 +++-- 42 files changed, 81 insertions(+), 58 deletions(-) diff --git a/src/CallHandler.tsx b/src/CallHandler.tsx index 69b00927a9..a68337e2ed 100644 --- a/src/CallHandler.tsx +++ b/src/CallHandler.tsx @@ -925,7 +925,7 @@ export default class CallHandler extends EventEmitter { this.setActiveCallRoomId(payload.room_id); CountlyAnalytics.instance.trackJoinCall(payload.room_id, call.type === CallType.Video, false); dis.dispatch({ - action: "view_room", + action: Action.ViewRoom, room_id: payload.room_id, }); break; @@ -974,7 +974,7 @@ export default class CallHandler extends EventEmitter { const roomId = await ensureDMExists(MatrixClientPeg.get(), nativeUserId); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, }); @@ -1005,7 +1005,7 @@ export default class CallHandler extends EventEmitter { transferee: call, }); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: dmRoomId, should_peek: false, joining: false, diff --git a/src/SlashCommands.tsx b/src/SlashCommands.tsx index 1c7d9d16ed..e9b9160048 100644 --- a/src/SlashCommands.tsx +++ b/src/SlashCommands.tsx @@ -528,7 +528,7 @@ export const Commands = [ } dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_alias: roomAlias, auto_join: true, _type: "slash_command", // instrumentation @@ -538,7 +538,7 @@ export const Commands = [ const [roomId, ...viaServers] = params; dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, opts: { // These are passed down to the js-sdk's /join call @@ -569,7 +569,7 @@ export const Commands = [ const eventId = permalinkParts.eventId; const dispatch = { - action: 'view_room', + action: Action.ViewRoom, auto_join: true, _type: "slash_command", // instrumentation }; @@ -1047,7 +1047,7 @@ export const Commands = [ const roomId = await ensureDMExists(MatrixClientPeg.get(), userId); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, }); })()); @@ -1069,7 +1069,7 @@ export const Commands = [ const cli = MatrixClientPeg.get(); const roomId = await ensureDMExists(cli, userId); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, }); if (msg) { diff --git a/src/TextForEvent.tsx b/src/TextForEvent.tsx index de34dc0735..112e6d6227 100644 --- a/src/TextForEvent.tsx +++ b/src/TextForEvent.tsx @@ -495,7 +495,7 @@ function textForPowerEvent(event: MatrixEvent): () => string | null { const onPinnedOrUnpinnedMessageClick = (messageId: string, roomId: string): void => { defaultDispatcher.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: messageId, highlighted: true, room_id: roomId, diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index 298fa0a4b6..c6aea695c9 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -175,7 +175,7 @@ class FeaturedRoom extends React.Component { e.stopPropagation(); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_alias: this.props.summaryInfo.profile.canonical_alias, room_id: this.props.summaryInfo.room_id, }); diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index c82bfd8bd6..a7d386eacf 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -676,7 +676,7 @@ export default class MatrixChat extends React.PureComponent { case 'view_user_info': this.viewUser(payload.userId, payload.subAction); break; - case 'view_room': { + case Action.ViewRoom: { // Takes either a room ID or room alias: if switching to a room the client is already // known to be in (eg. user clicks on a room in the recents panel), supply the ID // If the user is clicking on a room in the context of the alias being presented @@ -1124,7 +1124,7 @@ export default class MatrixChat extends React.PureComponent { if (dmRooms.length > 0) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: dmRooms[0], }); } else { @@ -1378,7 +1378,7 @@ export default class MatrixChat extends React.PureComponent { private viewLastRoom() { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: localStorage.getItem('mx_last_room_id'), }); } @@ -1793,7 +1793,7 @@ export default class MatrixChat extends React.PureComponent { } const payload = { - action: 'view_room', + action: Action.ViewRoom, event_id: eventId, via_servers: via, // If an event ID is given in the URL hash, notify RoomViewStore to mark @@ -1849,7 +1849,7 @@ export default class MatrixChat extends React.PureComponent { onAliasClick(event: MouseEvent, alias: string) { event.preventDefault(); - dis.dispatch({ action: 'view_room', room_alias: alias }); + dis.dispatch({ action: Action.ViewRoom, room_alias: alias }); } onUserClick(event: MouseEvent, userId: string) { diff --git a/src/components/structures/RightPanel.tsx b/src/components/structures/RightPanel.tsx index 440ef65ceb..4da9e7f084 100644 --- a/src/components/structures/RightPanel.tsx +++ b/src/components/structures/RightPanel.tsx @@ -200,7 +200,7 @@ export default class RightPanel extends React.Component { }; private onAction = (payload: ActionPayload) => { - const isChangingRoom = payload.action === 'view_room' && payload.room_id !== this.props.room.roomId; + const isChangingRoom = payload.action === Action.ViewRoom && payload.room_id !== this.props.room.roomId; const isViewingThread = this.state.phase === RightPanelPhases.ThreadView; if (isChangingRoom && isViewingThread) { dispatchShowThreadsPanelEvent(); diff --git a/src/components/structures/RoomDirectory.tsx b/src/components/structures/RoomDirectory.tsx index 9c5a97578c..2f82e81ae0 100644 --- a/src/components/structures/RoomDirectory.tsx +++ b/src/components/structures/RoomDirectory.tsx @@ -49,6 +49,7 @@ import { ActionPayload } from "../../dispatcher/payloads"; import { getDisplayAliasForAliasSet } from "../../Rooms"; import { logger } from "matrix-js-sdk/src/logger"; +import { Action } from "../../dispatcher/actions"; const MAX_NAME_LENGTH = 80; const MAX_TOPIC_LENGTH = 800; @@ -493,7 +494,7 @@ export default class RoomDirectory extends React.Component { private showRoom(room: IPublicRoomsChunkRoom, roomAlias?: string, autoJoin = false, shouldPeek = false) { this.onFinished(); const payload: ActionPayload = { - action: 'view_room', + action: Action.ViewRoom, auto_join: autoJoin, should_peek: shouldPeek, _type: "room_directory", // instrumentation diff --git a/src/components/structures/RoomSearch.tsx b/src/components/structures/RoomSearch.tsx index 23862ec3c6..a6161c7d0d 100644 --- a/src/components/structures/RoomSearch.tsx +++ b/src/components/structures/RoomSearch.tsx @@ -94,7 +94,7 @@ export default class RoomSearch extends React.PureComponent { }; private onAction = (payload: ActionPayload) => { - if (payload.action === 'view_room' && payload.clear_search) { + if (payload.action === Action.ViewRoom && payload.clear_search) { this.clearInput(); } else if (payload.action === 'focus_room_filter' && this.inputRef.current) { this.inputRef.current.focus(); diff --git a/src/components/structures/RoomView.tsx b/src/components/structures/RoomView.tsx index bfd89937b8..962a646e3f 100644 --- a/src/components/structures/RoomView.tsx +++ b/src/components/structures/RoomView.tsx @@ -745,7 +745,7 @@ export class RoomView extends React.Component { private onUserScroll = () => { if (this.state.initialEventId && this.state.isInitialEventHighlighted) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: this.state.room.roomId, event_id: this.state.initialEventId, highlighted: false, @@ -854,7 +854,7 @@ export class RoomView extends React.Component { setImmediate(() => { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, deferred_action: payload, }); @@ -1236,7 +1236,7 @@ export class RoomView extends React.Component { dis.dispatch({ action: 'do_after_sync_prepared', deferred_action: { - action: 'view_room', + action: Action.ViewRoom, room_id: this.getRoomId(), }, }); @@ -1612,7 +1612,7 @@ export class RoomView extends React.Component { // an event will take care of both clearing the URL fragment and // jumping to the bottom dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: this.state.room.roomId, }); } else { diff --git a/src/components/structures/SearchBox.tsx b/src/components/structures/SearchBox.tsx index 82fe689022..2101d4dfd5 100644 --- a/src/components/structures/SearchBox.tsx +++ b/src/components/structures/SearchBox.tsx @@ -22,6 +22,7 @@ import { throttle } from 'lodash'; import AccessibleButton from '../../components/views/elements/AccessibleButton'; import classNames from 'classnames'; import { replaceableComponent } from "../../utils/replaceableComponent"; +import { Action } from '../../dispatcher/actions'; interface IProps { onSearch?: (query: string) => void; @@ -77,7 +78,7 @@ export default class SearchBox extends React.Component { if (!this.props.enableRoomSearchFocus) return; switch (payload.action) { - case 'view_room': + case Action.ViewRoom: if (this.search.current && payload.clear_search) { this.clearSearch(); } diff --git a/src/components/structures/ThreadView.tsx b/src/components/structures/ThreadView.tsx index 758bf912a6..0671b9c7fd 100644 --- a/src/components/structures/ThreadView.tsx +++ b/src/components/structures/ThreadView.tsx @@ -175,7 +175,7 @@ export default class ThreadView extends React.Component { private onScroll = (): void => { if (this.props.initialEvent && this.props.initialEventHighlighted) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: this.props.room.roomId, event_id: this.props.initialEvent?.getId(), highlighted: false, diff --git a/src/components/structures/TimelinePanel.tsx b/src/components/structures/TimelinePanel.tsx index aa5fda2f28..f1b67c4f87 100644 --- a/src/components/structures/TimelinePanel.tsx +++ b/src/components/structures/TimelinePanel.tsx @@ -32,6 +32,7 @@ import RoomContext from "../../contexts/RoomContext"; import UserActivity from "../../UserActivity"; import Modal from "../../Modal"; import dis from "../../dispatcher/dispatcher"; +import { Action } from '../../dispatcher/actions'; import { Key } from '../../Keyboard'; import Timer from '../../utils/Timer'; import shouldHideEvent from '../../shouldHideEvent'; @@ -1135,7 +1136,7 @@ class TimelinePanel extends React.Component { onFinished = () => { // go via the dispatcher so that the URL is updated dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: this.props.timelineSet.room.roomId, }); }; diff --git a/src/components/structures/UserMenu.tsx b/src/components/structures/UserMenu.tsx index 5ffaab7746..0f61bffe85 100644 --- a/src/components/structures/UserMenu.tsx +++ b/src/components/structures/UserMenu.tsx @@ -333,7 +333,7 @@ export default class UserMenu extends React.Component { const chat = CommunityPrototypeStore.instance.getSelectedCommunityGeneralChat(); if (chat) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: chat.roomId, }, true); dis.dispatch({ action: Action.SetRightPanelPhase, phase: RightPanelPhases.RoomMemberList }); diff --git a/src/components/views/context_menus/MessageContextMenu.tsx b/src/components/views/context_menus/MessageContextMenu.tsx index 2b39f9f717..b3a507702e 100644 --- a/src/components/views/context_menus/MessageContextMenu.tsx +++ b/src/components/views/context_menus/MessageContextMenu.tsx @@ -234,7 +234,7 @@ export default class MessageContextMenu extends React.Component private viewInRoom = () => { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: this.props.mxEvent.getId(), highlighted: true, room_id: this.props.mxEvent.getRoomId(), diff --git a/src/components/views/context_menus/SpaceContextMenu.tsx b/src/components/views/context_menus/SpaceContextMenu.tsx index ec626df674..73c5c578d5 100644 --- a/src/components/views/context_menus/SpaceContextMenu.tsx +++ b/src/components/views/context_menus/SpaceContextMenu.tsx @@ -113,7 +113,7 @@ const SpaceContextMenu = ({ space, onFinished, ...props }: IProps) => { ev.stopPropagation(); defaultDispatcher.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: space.roomId, forceTimeline: true, }); diff --git a/src/components/views/context_menus/ThreadListContextMenu.tsx b/src/components/views/context_menus/ThreadListContextMenu.tsx index e01834b03a..25647641cb 100644 --- a/src/components/views/context_menus/ThreadListContextMenu.tsx +++ b/src/components/views/context_menus/ThreadListContextMenu.tsx @@ -18,6 +18,7 @@ import React, { useCallback, useEffect, useState } from "react"; import { MatrixEvent } from "matrix-js-sdk/src"; import { ButtonEvent } from "../elements/AccessibleButton"; import dis from '../../../dispatcher/dispatcher'; +import { Action } from "../../../dispatcher/actions"; import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks"; import { copyPlaintext } from "../../../utils/strings"; import { ChevronFace, ContextMenuTooltipButton } from "../../structures/ContextMenu"; @@ -48,7 +49,7 @@ const ThreadListContextMenu: React.FC = ({ mxEvent, permalinkCreator, on evt.preventDefault(); evt.stopPropagation(); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: mxEvent.getId(), highlighted: true, room_id: mxEvent.getRoomId(), diff --git a/src/components/views/dialogs/CreateCommunityPrototypeDialog.tsx b/src/components/views/dialogs/CreateCommunityPrototypeDialog.tsx index ed48778b1d..b67254838e 100644 --- a/src/components/views/dialogs/CreateCommunityPrototypeDialog.tsx +++ b/src/components/views/dialogs/CreateCommunityPrototypeDialog.tsx @@ -23,6 +23,7 @@ import AccessibleButton from "../elements/AccessibleButton"; import { MatrixClientPeg } from "../../../MatrixClientPeg"; import InfoTooltip from "../elements/InfoTooltip"; import dis from "../../../dispatcher/dispatcher"; +import { Action } from '../../../dispatcher/actions'; import { showCommunityRoomInviteDialog } from "../../../RoomInvite"; import GroupStore from "../../../stores/GroupStore"; import { replaceableComponent } from "../../../utils/replaceableComponent"; @@ -100,7 +101,7 @@ export default class CreateCommunityPrototypeDialog extends React.PureComponent< // Force the group store to update as it might have missed the general chat await GroupStore.refreshGroupRooms(result.group_id); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: result.room_id, }); showCommunityRoomInviteDialog(result.room_id, this.state.name); diff --git a/src/components/views/dialogs/InviteDialog.tsx b/src/components/views/dialogs/InviteDialog.tsx index d22c891b4b..4f28ff5ebd 100644 --- a/src/components/views/dialogs/InviteDialog.tsx +++ b/src/components/views/dialogs/InviteDialog.tsx @@ -677,7 +677,7 @@ export default class InviteDialog extends React.PureComponent { // matrix.to, but also for it to enable routing within Element when clicked. ev.preventDefault(); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: this.props.mxEvent.getId(), highlighted: true, room_id: this.props.mxEvent.getRoomId(), diff --git a/src/components/views/messages/RoomCreate.tsx b/src/components/views/messages/RoomCreate.tsx index c846ba5632..49743ad9c8 100644 --- a/src/components/views/messages/RoomCreate.tsx +++ b/src/components/views/messages/RoomCreate.tsx @@ -18,6 +18,7 @@ limitations under the License. import React from 'react'; import dis from '../../../dispatcher/dispatcher'; +import { Action } from '../../../dispatcher/actions'; import { RoomPermalinkCreator } from '../../../utils/permalinks/Permalinks'; import { _t } from '../../../languageHandler'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; @@ -38,7 +39,7 @@ export default class RoomCreate extends React.Component { const predecessor = this.props.mxEvent.getContent()['predecessor']; dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: predecessor['event_id'], highlighted: true, room_id: predecessor['room_id'], diff --git a/src/components/views/right_panel/UserInfo.tsx b/src/components/views/right_panel/UserInfo.tsx index cb3e9949a8..8c7b29777e 100644 --- a/src/components/views/right_panel/UserInfo.tsx +++ b/src/components/views/right_panel/UserInfo.tsx @@ -126,7 +126,7 @@ async function openDMForUser(matrixClient: MatrixClient, userId: string) { if (lastActiveRoom) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: lastActiveRoom.roomId, }); return; @@ -368,7 +368,7 @@ const UserOptionsSection: React.FC<{ const onReadReceiptButton = function() { const room = cli.getRoom(member.roomId); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, highlighted: true, event_id: room.getEventReadUpTo(member.userId), room_id: member.roomId, diff --git a/src/components/views/rooms/EventTile.tsx b/src/components/views/rooms/EventTile.tsx index 0d17276c22..3ca0dafcfe 100644 --- a/src/components/views/rooms/EventTile.tsx +++ b/src/components/views/rooms/EventTile.tsx @@ -919,7 +919,7 @@ export default class EventTile extends React.Component { // matrix.to, but also for it to enable routing within Element when clicked. e.preventDefault(); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: this.props.mxEvent.getId(), highlighted: true, room_id: this.props.mxEvent.getRoomId(), diff --git a/src/components/views/rooms/MessageComposer.tsx b/src/components/views/rooms/MessageComposer.tsx index f625389da5..a666a9b26a 100644 --- a/src/components/views/rooms/MessageComposer.tsx +++ b/src/components/views/rooms/MessageComposer.tsx @@ -380,7 +380,7 @@ export default class MessageComposer extends React.Component { const viaServers = [this.state.tombstone.getSender().split(':').slice(1).join(':')]; dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, highlighted: true, event_id: createEventId, room_id: replacementRoomId, diff --git a/src/components/views/rooms/PinnedEventTile.tsx b/src/components/views/rooms/PinnedEventTile.tsx index 250efc1278..f60f5ab541 100644 --- a/src/components/views/rooms/PinnedEventTile.tsx +++ b/src/components/views/rooms/PinnedEventTile.tsx @@ -20,6 +20,7 @@ import { Room } from "matrix-js-sdk/src/models/room"; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import dis from "../../../dispatcher/dispatcher"; +import { Action } from "../../../dispatcher/actions"; import AccessibleButton from "../elements/AccessibleButton"; import MessageEvent from "../messages/MessageEvent"; import MemberAvatar from "../avatars/MemberAvatar"; @@ -45,7 +46,7 @@ export default class PinnedEventTile extends React.Component { private onTileClicked = () => { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: this.props.event.getId(), highlighted: true, room_id: this.props.event.getRoomId(), diff --git a/src/components/views/rooms/ReplyTile.tsx b/src/components/views/rooms/ReplyTile.tsx index b869979d58..176df6c0a6 100644 --- a/src/components/views/rooms/ReplyTile.tsx +++ b/src/components/views/rooms/ReplyTile.tsx @@ -18,6 +18,7 @@ import React, { createRef } from 'react'; import classNames from 'classnames'; import { _t } from '../../../languageHandler'; import dis from '../../../dispatcher/dispatcher'; +import { Action } from '../../../dispatcher/actions'; import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import { RoomPermalinkCreator } from '../../../utils/permalinks/Permalinks'; import SenderProfile from "../messages/SenderProfile"; @@ -90,7 +91,7 @@ export default class ReplyTile extends React.PureComponent { this.props.toggleExpandedQuote(); } else { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, event_id: this.props.mxEvent.getId(), highlighted: true, room_id: this.props.mxEvent.getRoomId(), diff --git a/src/components/views/rooms/RoomDetailList.tsx b/src/components/views/rooms/RoomDetailList.tsx index 869ab9e8f3..8a2dda4efa 100644 --- a/src/components/views/rooms/RoomDetailList.tsx +++ b/src/components/views/rooms/RoomDetailList.tsx @@ -18,6 +18,7 @@ import React from 'react'; import { Room } from 'matrix-js-sdk/src'; import classNames from 'classnames'; import dis from '../../../dispatcher/dispatcher'; +import { Action } from '../../../dispatcher/actions'; import { _t } from '../../../languageHandler'; import { replaceableComponent } from "../../../utils/replaceableComponent"; @@ -39,7 +40,7 @@ export default class RoomDetailList extends React.Component { private onDetailsClick = (ev: React.MouseEvent, room: Room): void => { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: room.roomId, room_alias: room.getCanonicalAlias() || (room.getAltAliases() || [])[0], }); diff --git a/src/components/views/rooms/RoomList.tsx b/src/components/views/rooms/RoomList.tsx index 1be7eb0747..2725eae978 100644 --- a/src/components/views/rooms/RoomList.tsx +++ b/src/components/views/rooms/RoomList.tsx @@ -297,7 +297,7 @@ export default class RoomList extends React.PureComponent { const room = this.getRoomDelta(currentRoomId, viewRoomDeltaPayload.delta, viewRoomDeltaPayload.unread); if (room) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: room.roomId, show_room_tile: true, // to make sure the room gets scrolled into view }); diff --git a/src/components/views/rooms/RoomSublist.tsx b/src/components/views/rooms/RoomSublist.tsx index 0d2ef25951..fde2355ff3 100644 --- a/src/components/views/rooms/RoomSublist.tsx +++ b/src/components/views/rooms/RoomSublist.tsx @@ -38,6 +38,7 @@ import { ListAlgorithm, SortAlgorithm } from "../../../stores/room-list/algorith import { DefaultTagID, TagID } from "../../../stores/room-list/models"; import dis from "../../../dispatcher/dispatcher"; import defaultDispatcher from "../../../dispatcher/dispatcher"; +import { Action } from "../../../dispatcher/actions"; import NotificationBadge from "./NotificationBadge"; import AccessibleTooltipButton from "../elements/AccessibleTooltipButton"; import { Key } from "../../../Keyboard"; @@ -444,7 +445,7 @@ export default class RoomSublist extends React.Component { if (room) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: room.roomId, show_room_tile: true, // to make sure the room gets scrolled into view }); diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index c6c815b0dc..235dfcc4da 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -22,6 +22,7 @@ import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex"; import AccessibleButton, { ButtonEvent } from "../../views/elements/AccessibleButton"; import dis from '../../../dispatcher/dispatcher'; import defaultDispatcher from '../../../dispatcher/dispatcher'; +import { Action } from "../../../dispatcher/actions"; import { Key } from "../../../Keyboard"; import ActiveRoomObserver from "../../../ActiveRoomObserver"; import { _t } from "../../../languageHandler"; @@ -235,7 +236,7 @@ export default class RoomTile extends React.PureComponent { ev.preventDefault(); ev.stopPropagation(); dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, show_room_tile: true, // make sure the room is visible in the list room_id: this.props.room.roomId, clear_search: (ev && (ev.key === Key.ENTER || ev.key === Key.SPACE)), diff --git a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx index 9322eab711..a2b8166f6c 100644 --- a/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx +++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.tsx @@ -24,6 +24,7 @@ import RoomUpgradeDialog from "../../../dialogs/RoomUpgradeDialog"; import DevtoolsDialog from "../../../dialogs/DevtoolsDialog"; import Modal from "../../../../../Modal"; import dis from "../../../../../dispatcher/dispatcher"; +import { Action } from '../../../../../dispatcher/actions'; import { replaceableComponent } from "../../../../../utils/replaceableComponent"; interface IProps { @@ -89,7 +90,7 @@ export default class AdvancedRoomSettingsTab extends React.Component { const onExpandClick = (roomId: string) => { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, }); }; diff --git a/src/createRoom.ts b/src/createRoom.ts index f4d796cb4b..2c55c131fb 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -259,7 +259,7 @@ export default async function createRoom(opts: IOpts): Promise { // entire thing. if (opts.andView) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, should_peek: false, // Creating a room will have joined us to the room, diff --git a/src/dispatcher/actions.ts b/src/dispatcher/actions.ts index a3214795a8..22ed1bc516 100644 --- a/src/dispatcher/actions.ts +++ b/src/dispatcher/actions.ts @@ -87,6 +87,11 @@ export enum Action { */ UpdateSystemFont = "update_system_font", + /** + * Changes room based on payload parameters. + */ + ViewRoom = "view_room", + /** * Changes room based on room list order and payload parameters. Should be used with ViewRoomDeltaPayload. */ diff --git a/src/stores/BreadcrumbsStore.ts b/src/stores/BreadcrumbsStore.ts index 7c33901ae4..5f93c8fe68 100644 --- a/src/stores/BreadcrumbsStore.ts +++ b/src/stores/BreadcrumbsStore.ts @@ -72,7 +72,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient { } else if (settingUpdatedPayload.settingName === 'breadcrumbs') { await this.updateState({ enabled: SettingsStore.getValue("breadcrumbs", null) }); } - } else if (payload.action === 'view_room') { + } else if (payload.action === Action.ViewRoom) { if (payload.auto_join && !this.matrixClient.getRoom(payload.room_id)) { // Queue the room instead of pushing it immediately. We're probably just // waiting for a room join to complete. diff --git a/src/stores/CommunityPrototypeStore.ts b/src/stores/CommunityPrototypeStore.ts index 6c5ab22c5f..65f091b422 100644 --- a/src/stores/CommunityPrototypeStore.ts +++ b/src/stores/CommunityPrototypeStore.ts @@ -17,6 +17,7 @@ limitations under the License. import { AsyncStoreWithClient } from "./AsyncStoreWithClient"; import defaultDispatcher from "../dispatcher/dispatcher"; import { ActionPayload } from "../dispatcher/payloads"; +import { Action } from "../dispatcher/actions"; import { Room } from "matrix-js-sdk/src/models/room"; import { EffectiveMembership, getEffectiveMembership } from "../utils/membership"; import SettingsStore from "../settings/SettingsStore"; @@ -149,7 +150,7 @@ export class CommunityPrototypeStore extends AsyncStoreWithClient { const chat = this.getGeneralChat(payload.tag); if (chat) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: chat.roomId, }); } diff --git a/src/stores/GroupFilterOrderStore.js b/src/stores/GroupFilterOrderStore.js index 821fbefc4f..f546654951 100644 --- a/src/stores/GroupFilterOrderStore.js +++ b/src/stores/GroupFilterOrderStore.js @@ -16,6 +16,7 @@ limitations under the License. import { Store } from 'flux/utils'; import { EventType } from "matrix-js-sdk/src/@types/event"; import dis from '../dispatcher/dispatcher'; +import { Action } from '../dispatcher/actions'; import GroupStore from './GroupStore'; import Analytics from '../Analytics'; import * as RoomNotifs from "../RoomNotifs"; @@ -54,7 +55,7 @@ class GroupFilterOrderStore extends Store { __onDispatch(payload) { // eslint-disable-line @typescript-eslint/naming-convention switch (payload.action) { // Initialise state after initial sync - case 'view_room': { + case Action.ViewRoom: { const relatedGroupIds = GroupStore.getGroupIdsForRoomId(payload.room_id); this._updateBadges(relatedGroupIds); break; diff --git a/src/stores/RightPanelStore.ts b/src/stores/RightPanelStore.ts index f9e0a578eb..401eada16c 100644 --- a/src/stores/RightPanelStore.ts +++ b/src/stores/RightPanelStore.ts @@ -148,7 +148,7 @@ export default class RightPanelStore extends Store { __onDispatch(payload: ActionPayload) { // eslint-disable-line @typescript-eslint/naming-convention switch (payload.action) { - case 'view_room': + case Action.ViewRoom: if (payload.room_id === this.lastRoomId) break; // skip this transition, probably a permalink // fallthrough case 'view_group': diff --git a/src/stores/RoomViewStore.tsx b/src/stores/RoomViewStore.tsx index edcb0aeff3..58b9c6d764 100644 --- a/src/stores/RoomViewStore.tsx +++ b/src/stores/RoomViewStore.tsx @@ -107,7 +107,7 @@ class RoomViewStore extends Store { // - event_id: '$213456782:matrix.org' // - event_offset: 100 // - highlighted: true - case 'view_room': + case Action.ViewRoom: this.viewRoom(payload); break; // for these events blank out the roomId as we are no longer in the RoomView @@ -158,7 +158,7 @@ class RoomViewStore extends Store { if (payload.event && payload.event.getRoomId() !== this.state.roomId) { dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: payload.event.getRoomId(), replyingToEvent: payload.event, }); @@ -251,7 +251,7 @@ class RoomViewStore extends Store { } dis.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: roomId, event_id: payload.event_id, highlighted: payload.highlighted, diff --git a/src/stores/widgets/StopGapWidget.ts b/src/stores/widgets/StopGapWidget.ts index b08b51a32f..0d26cea144 100644 --- a/src/stores/widgets/StopGapWidget.ts +++ b/src/stores/widgets/StopGapWidget.ts @@ -45,6 +45,7 @@ import { WidgetType } from "../../widgets/WidgetType"; import ActiveWidgetStore from "../ActiveWidgetStore"; import { objectShallowClone } from "../../utils/objects"; import defaultDispatcher from "../../dispatcher/dispatcher"; +import { Action } from "../../dispatcher/actions"; import { ElementWidgetActions, IViewRoomApiRequest } from "./ElementWidgetActions"; import { ModalWidgetStore } from "../ModalWidgetStore"; import ThemeWatcher from "../../settings/watchers/ThemeWatcher"; @@ -291,7 +292,7 @@ export class StopGapWidget extends EventEmitter { // at this point we can change rooms, so do that defaultDispatcher.dispatch({ - action: 'view_room', + action: Action.ViewRoom, room_id: targetRoomId, }); diff --git a/test/CallHandler-test.ts b/test/CallHandler-test.ts index 1a4560ad4a..b1e0214e4f 100644 --- a/test/CallHandler-test.ts +++ b/test/CallHandler-test.ts @@ -178,7 +178,7 @@ describe('CallHandler', () => { number: '01818118181', }, true); - const viewRoomPayload = await untilDispatch('view_room'); + const viewRoomPayload = await untilDispatch(Action.ViewRoom); expect(viewRoomPayload.room_id).toEqual(MAPPED_ROOM_ID); // Check that a call was started diff --git a/test/stores/RoomViewStore-test.js b/test/stores/RoomViewStore-test.js index cb5d7d21f0..a00ac39e87 100644 --- a/test/stores/RoomViewStore-test.js +++ b/test/stores/RoomViewStore-test.js @@ -1,4 +1,5 @@ import RoomViewStore from '../../src/stores/RoomViewStore'; +import { Action } from '../../src/dispatcher/actions'; import { MatrixClientPeg as peg } from '../../src/MatrixClientPeg'; @@ -21,7 +22,7 @@ describe('RoomViewStore', function() { done(); }; - dispatch({ action: 'view_room', room_id: '!randomcharacters:aser.ver' }); + dispatch({ action: Action.ViewRoom, room_id: '!randomcharacters:aser.ver' }); dispatch({ action: 'join_room' }); expect(RoomViewStore.isJoining()).toBe(true); }); @@ -43,6 +44,6 @@ describe('RoomViewStore', function() { done(); }; - dispatch({ action: 'view_room', room_alias: '#somealias2:aser.ver' }); + dispatch({ action: Action.ViewRoom, room_alias: '#somealias2:aser.ver' }); }); });