From ef3d87f8e8b371d058c535bd348ae0f4617fb02e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Thu, 25 Mar 2021 16:15:41 +0100 Subject: [PATCH 01/17] First implementation of context switching MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/structures/MatrixChat.tsx | 10 +++++++++- src/stores/SpaceStore.tsx | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 689561fd60..9a4e83828c 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -79,7 +79,7 @@ import { CommunityPrototypeStore } from "../../stores/CommunityPrototypeStore"; import DialPadModal from "../views/voip/DialPadModal"; import { showToast as showMobileGuideToast } from '../../toasts/MobileGuideToast'; import { shouldUseLoginForWelcome } from "../../utils/pages"; -import SpaceStore from "../../stores/SpaceStore"; +import SpaceStore, {LAST_VIEWED_ROOMS, LAST_VIEWED_ROOMS_HOME} from "../../stores/SpaceStore"; import SpaceRoomDirectory from "./SpaceRoomDirectory"; import {replaceableComponent} from "../../utils/replaceableComponent"; import RoomListStore from "../../stores/room-list/RoomListStore"; @@ -875,6 +875,14 @@ export default class MatrixChat extends React.PureComponent { private viewRoom(roomInfo: IRoomInfo) { this.focusComposer = true; + // persist last viewed room from a space + const activeSpace = SpaceStore.instance.activeSpace; + const activeSpaceId = activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; + const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; + + lastViewedRooms[activeSpaceId] = roomInfo.room_id; + window.localStorage.setItem(LAST_VIEWED_ROOMS, JSON.stringify(lastViewedRooms)); + if (roomInfo.room_alias) { console.log( `Switching to room alias ${roomInfo.room_alias} at event ` + diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index bcf95a82be..20223cb8a6 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -41,6 +41,10 @@ type SpaceKey = string | symbol; interface IState {} const ACTIVE_SPACE_LS_KEY = "mx_active_space"; +export const LAST_VIEWED_ROOMS = "mx_last_viewed_rooms"; + +// We can't use HOME_SPACE here because JSON.stringify() will ignore any Symbols +export const LAST_VIEWED_ROOMS_HOME = "home_space"; export const HOME_SPACE = Symbol("home-space"); export const SUGGESTED_ROOMS = Symbol("suggested-rooms"); @@ -111,6 +115,18 @@ export class SpaceStoreClass extends AsyncStoreWithClient { this.emit(UPDATE_SELECTED_SPACE, this.activeSpace); this.emit(SUGGESTED_ROOMS, this._suggestedRooms = []); + // view last selected room from space + const spaceId = space?.roomId || LAST_VIEWED_ROOMS_HOME; + const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)); + const roomId = lastViewedRooms[spaceId]; + + if (roomId) { + defaultDispatcher.dispatch({ + action: "view_room", + room_id: roomId, + }); + } // TODO: Handle else + // persist space selected if (space) { window.localStorage.setItem(ACTIVE_SPACE_LS_KEY, space.roomId); From 67dcb3a448b923254cc1516e54be684abec70cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Thu, 25 Mar 2021 20:51:21 +0100 Subject: [PATCH 02/17] If no roomId was saved go to space home MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 20223cb8a6..063256f421 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -125,7 +125,16 @@ export class SpaceStoreClass extends AsyncStoreWithClient { action: "view_room", room_id: roomId, }); - } // TODO: Handle else + } else { + if (space) { + defaultDispatcher.dispatch({ + action: "view_room", + room_id: space.roomId, + }); + } else { + // TODO: Switch to first room in the RoomList + } + } // persist space selected if (space) { From 2dcb60b489e0c53101ab9586f9578277baf2e7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 07:53:07 +0100 Subject: [PATCH 03/17] Move persisting of last viewed into SpaceStore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/structures/MatrixChat.tsx | 10 +--------- src/stores/SpaceStore.tsx | 8 ++++++++ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/structures/MatrixChat.tsx b/src/components/structures/MatrixChat.tsx index 9a4e83828c..689561fd60 100644 --- a/src/components/structures/MatrixChat.tsx +++ b/src/components/structures/MatrixChat.tsx @@ -79,7 +79,7 @@ import { CommunityPrototypeStore } from "../../stores/CommunityPrototypeStore"; import DialPadModal from "../views/voip/DialPadModal"; import { showToast as showMobileGuideToast } from '../../toasts/MobileGuideToast'; import { shouldUseLoginForWelcome } from "../../utils/pages"; -import SpaceStore, {LAST_VIEWED_ROOMS, LAST_VIEWED_ROOMS_HOME} from "../../stores/SpaceStore"; +import SpaceStore from "../../stores/SpaceStore"; import SpaceRoomDirectory from "./SpaceRoomDirectory"; import {replaceableComponent} from "../../utils/replaceableComponent"; import RoomListStore from "../../stores/room-list/RoomListStore"; @@ -875,14 +875,6 @@ export default class MatrixChat extends React.PureComponent { private viewRoom(roomInfo: IRoomInfo) { this.focusComposer = true; - // persist last viewed room from a space - const activeSpace = SpaceStore.instance.activeSpace; - const activeSpaceId = activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; - const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; - - lastViewedRooms[activeSpaceId] = roomInfo.room_id; - window.localStorage.setItem(LAST_VIEWED_ROOMS, JSON.stringify(lastViewedRooms)); - if (roomInfo.room_alias) { console.log( `Switching to room alias ${roomInfo.room_alias} at event ` + diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 063256f421..1f6cbb33b5 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -490,6 +490,14 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if (!SettingsStore.getValue("feature_spaces")) return; switch (payload.action) { case "view_room": { + // persist last viewed room from a space + const activeSpace = SpaceStore.instance.activeSpace; + const activeSpaceId = activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; + const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; + + lastViewedRooms[activeSpaceId] = payload.room_id; + window.localStorage.setItem(LAST_VIEWED_ROOMS, JSON.stringify(lastViewedRooms)); + const room = this.matrixClient?.getRoom(payload.room_id); if (room?.getMyMembership() === "join") { From e39f7caf59993031fe47cd076619f8235195ee8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 07:55:52 +0100 Subject: [PATCH 04/17] Don't export as we don't need to MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 1f6cbb33b5..453cccdc17 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -41,10 +41,10 @@ type SpaceKey = string | symbol; interface IState {} const ACTIVE_SPACE_LS_KEY = "mx_active_space"; -export const LAST_VIEWED_ROOMS = "mx_last_viewed_rooms"; +const LAST_VIEWED_ROOMS = "mx_last_viewed_rooms"; // We can't use HOME_SPACE here because JSON.stringify() will ignore any Symbols -export const LAST_VIEWED_ROOMS_HOME = "home_space"; +const LAST_VIEWED_ROOMS_HOME = "home_space"; export const HOME_SPACE = Symbol("home-space"); export const SUGGESTED_ROOMS = Symbol("suggested-rooms"); From c26da1bce6d1cfec21d8266abb5a8c4d8f44aca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 07:58:09 +0100 Subject: [PATCH 05/17] Use this.activeSpace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 453cccdc17..3d476f7077 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -491,8 +491,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { switch (payload.action) { case "view_room": { // persist last viewed room from a space - const activeSpace = SpaceStore.instance.activeSpace; - const activeSpaceId = activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; + const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; lastViewedRooms[activeSpaceId] = payload.room_id; From efb8c89433a1aee5fea49dfda3c8cc2e82e149cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 08:13:50 +0100 Subject: [PATCH 06/17] Don't save if isSpaceRoom() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 3d476f7077..ef12640438 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -490,15 +490,20 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if (!SettingsStore.getValue("feature_spaces")) return; switch (payload.action) { case "view_room": { - // persist last viewed room from a space - const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; - const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; - - lastViewedRooms[activeSpaceId] = payload.room_id; - window.localStorage.setItem(LAST_VIEWED_ROOMS, JSON.stringify(lastViewedRooms)); - const room = this.matrixClient?.getRoom(payload.room_id); + // persist last viewed room from a space + + // We don't want to save if the room is a + // space room since it can cause problems + if (!room.isSpaceRoom()) { + const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; + const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; + + lastViewedRooms[activeSpaceId] = payload.room_id; + window.localStorage.setItem(LAST_VIEWED_ROOMS, JSON.stringify(lastViewedRooms)); + } + if (room?.getMyMembership() === "join") { if (room.isSpaceRoom()) { this.setActiveSpace(room); From 7e425ce939ef5ddb30f4ae07fb94079536f1daad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 08:15:35 +0100 Subject: [PATCH 07/17] Empty object if nothing saved MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This isn't nice but I'll rework this soon anyway Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index ef12640438..e5cad51240 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -117,7 +117,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // view last selected room from space const spaceId = space?.roomId || LAST_VIEWED_ROOMS_HOME; - const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)); + const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; const roomId = lastViewedRooms[spaceId]; if (roomId) { From 65ef2b845e05ad7648b1b32ddc7dd1617128b069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 08:16:39 +0100 Subject: [PATCH 08/17] Go to /#/home if there is no saved room MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index e5cad51240..1a9df5a9b3 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -132,7 +132,9 @@ export class SpaceStoreClass extends AsyncStoreWithClient { room_id: space.roomId, }); } else { - // TODO: Switch to first room in the RoomList + defaultDispatcher.dispatch({ + action: "view_home_page", + }); } } From f64008e23916fa6b65034dcab7304d69eec43a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 13:39:16 +0100 Subject: [PATCH 09/17] Check if room is defined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sometimes it isn't and that leads to errors. We can't use ? here because we also use ! Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 1a9df5a9b3..f07616aed3 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -498,7 +498,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // We don't want to save if the room is a // space room since it can cause problems - if (!room.isSpaceRoom()) { + if (room && !room.isSpaceRoom()) { const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; From f62e2c0042eb2bb9a76eca417aff46bc0010a4d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 13:44:51 +0100 Subject: [PATCH 10/17] Use compound keys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index f07616aed3..c58340356d 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -117,8 +117,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // view last selected room from space const spaceId = space?.roomId || LAST_VIEWED_ROOMS_HOME; - const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; - const roomId = lastViewedRooms[spaceId]; + const roomId = window.localStorage.getItem(`${LAST_VIEWED_ROOMS}_${spaceId}`); if (roomId) { defaultDispatcher.dispatch({ @@ -500,10 +499,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // space room since it can cause problems if (room && !room.isSpaceRoom()) { const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; - const lastViewedRooms = JSON.parse(window.localStorage.getItem(LAST_VIEWED_ROOMS)) || {}; - - lastViewedRooms[activeSpaceId] = payload.room_id; - window.localStorage.setItem(LAST_VIEWED_ROOMS, JSON.stringify(lastViewedRooms)); + window.localStorage.setItem(`${LAST_VIEWED_ROOMS}_${activeSpaceId}`, payload.room_id); } if (room?.getMyMembership() === "join") { From a707524aade0e1b6a0cf35829af363dbec1f3cd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 13:49:01 +0100 Subject: [PATCH 11/17] Delete comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index c58340356d..2eec2afbb3 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -43,7 +43,6 @@ interface IState {} const ACTIVE_SPACE_LS_KEY = "mx_active_space"; const LAST_VIEWED_ROOMS = "mx_last_viewed_rooms"; -// We can't use HOME_SPACE here because JSON.stringify() will ignore any Symbols const LAST_VIEWED_ROOMS_HOME = "home_space"; export const HOME_SPACE = Symbol("home-space"); From d68afcc4ce278d89d9b9bff0dc0ca7490445a627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Fri, 26 Mar 2021 13:52:41 +0100 Subject: [PATCH 12/17] Use else if MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Maybe it looks a little nicer, I don't know Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 2eec2afbb3..1bf98617a3 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -123,17 +123,15 @@ export class SpaceStoreClass extends AsyncStoreWithClient { action: "view_room", room_id: roomId, }); + } else if (space) { + defaultDispatcher.dispatch({ + action: "view_room", + room_id: space.roomId, + }); } else { - if (space) { - defaultDispatcher.dispatch({ - action: "view_room", - room_id: space.roomId, - }); - } else { - defaultDispatcher.dispatch({ - action: "view_home_page", - }); - } + defaultDispatcher.dispatch({ + action: "view_home_page", + }); } // persist space selected From 08c0f0a67ef2068b64f0028279be7a53d4d82a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 20 Apr 2021 12:18:46 +0200 Subject: [PATCH 13/17] Remove unnecessary check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 3585c803c1..ce174d9538 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -513,9 +513,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // persist last viewed room from a space - // We don't want to save if the room is a - // space room since it can cause problems - if (room && !room.isSpaceRoom()) { + if (room) { const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; window.localStorage.setItem(`${LAST_VIEWED_ROOMS}_${activeSpaceId}`, payload.room_id); } From f9292c364caa2570b351939017f495dc820d43d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 20 Apr 2021 12:25:56 +0200 Subject: [PATCH 14/17] Check if we are joined MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index ce174d9538..615007af20 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -118,7 +118,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { const spaceId = space?.roomId || LAST_VIEWED_ROOMS_HOME; const roomId = window.localStorage.getItem(`${LAST_VIEWED_ROOMS}_${spaceId}`); - if (roomId) { + if (roomId && this.matrixClient.getRoom(roomId).getMyMembership() === "join") { defaultDispatcher.dispatch({ action: "view_room", room_id: roomId, From 1934c4a32f5d9cd9828d36e75fd8dd0900caea59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 20 Apr 2021 12:39:11 +0200 Subject: [PATCH 15/17] Add getLastViewedRoomsStorageKey() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index 615007af20..a7efbafd1e 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -41,7 +41,7 @@ type SpaceKey = string | symbol; interface IState {} const ACTIVE_SPACE_LS_KEY = "mx_active_space"; -const LAST_VIEWED_ROOMS = "mx_last_viewed_rooms"; + const LAST_VIEWED_ROOMS_HOME = "home_space"; @@ -54,6 +54,11 @@ export const UPDATE_SELECTED_SPACE = Symbol("selected-space"); const MAX_SUGGESTED_ROOMS = 20; +const getLastViewedRoomsStorageKey = (spaceId?) => { + if (!spaceId) return null; + return `mx_last_viewed_rooms_${spaceId}`; +} + const partitionSpacesAndRooms = (arr: Room[]): [Room[], Room[]] => { // [spaces, rooms] return arr.reduce((result, room: Room) => { result[room.isSpaceRoom() ? 0 : 1].push(room); @@ -116,7 +121,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // view last selected room from space const spaceId = space?.roomId || LAST_VIEWED_ROOMS_HOME; - const roomId = window.localStorage.getItem(`${LAST_VIEWED_ROOMS}_${spaceId}`); + const roomId = window.localStorage.getItem(getLastViewedRoomsStorageKey(spaceId)); if (roomId && this.matrixClient.getRoom(roomId).getMyMembership() === "join") { defaultDispatcher.dispatch({ @@ -515,7 +520,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { if (room) { const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; - window.localStorage.setItem(`${LAST_VIEWED_ROOMS}_${activeSpaceId}`, payload.room_id); + window.localStorage.setItem(getLastViewedRoomsStorageKey(activeSpaceId), payload.room_id); } if (room?.getMyMembership() === "join") { From d4ca087c2eb6fe342a89cdb7ed7491edb2f7dd25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 20 Apr 2021 13:24:23 +0200 Subject: [PATCH 16/17] Make getLastViewedRoomsStorageKey() make sense MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/stores/SpaceStore.tsx | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index a7efbafd1e..eeecbbeba1 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -42,9 +42,6 @@ interface IState {} const ACTIVE_SPACE_LS_KEY = "mx_active_space"; - -const LAST_VIEWED_ROOMS_HOME = "home_space"; - export const HOME_SPACE = Symbol("home-space"); export const SUGGESTED_ROOMS = Symbol("suggested-rooms"); @@ -54,9 +51,10 @@ export const UPDATE_SELECTED_SPACE = Symbol("selected-space"); const MAX_SUGGESTED_ROOMS = 20; -const getLastViewedRoomsStorageKey = (spaceId?) => { - if (!spaceId) return null; - return `mx_last_viewed_rooms_${spaceId}`; +const getLastViewedRoomsStorageKey = (space?: Room) => { + const lastViewRooms = "mx_last_viewed_rooms"; + const homeSpace = "home_space"; + return `${lastViewRooms}_${space?.roomId || homeSpace}`; } const partitionSpacesAndRooms = (arr: Room[]): [Room[], Room[]] => { // [spaces, rooms] @@ -120,8 +118,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { this.emit(SUGGESTED_ROOMS, this._suggestedRooms = []); // view last selected room from space - const spaceId = space?.roomId || LAST_VIEWED_ROOMS_HOME; - const roomId = window.localStorage.getItem(getLastViewedRoomsStorageKey(spaceId)); + const roomId = window.localStorage.getItem(getLastViewedRoomsStorageKey(this.activeSpace)); if (roomId && this.matrixClient.getRoom(roomId).getMyMembership() === "join") { defaultDispatcher.dispatch({ @@ -517,10 +514,8 @@ export class SpaceStoreClass extends AsyncStoreWithClient { const room = this.matrixClient?.getRoom(payload.room_id); // persist last viewed room from a space - if (room) { - const activeSpaceId = this.activeSpace?.roomId || LAST_VIEWED_ROOMS_HOME; - window.localStorage.setItem(getLastViewedRoomsStorageKey(activeSpaceId), payload.room_id); + window.localStorage.setItem(getLastViewedRoomsStorageKey(this.activeSpace), payload.room_id); } if (room?.getMyMembership() === "join") { From 4344ff909714d6550f38acd28af253bcccef777f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 20 Apr 2021 13:31:50 +0200 Subject: [PATCH 17/17] Update src/stores/SpaceStore.tsx Co-authored-by: Michael Telatynski <7t3chguy@googlemail.com> --- src/stores/SpaceStore.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stores/SpaceStore.tsx b/src/stores/SpaceStore.tsx index eeecbbeba1..290caba9d4 100644 --- a/src/stores/SpaceStore.tsx +++ b/src/stores/SpaceStore.tsx @@ -120,7 +120,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient { // view last selected room from space const roomId = window.localStorage.getItem(getLastViewedRoomsStorageKey(this.activeSpace)); - if (roomId && this.matrixClient.getRoom(roomId).getMyMembership() === "join") { + if (roomId && this.matrixClient?.getRoom(roomId)?.getMyMembership() === "join") { defaultDispatcher.dispatch({ action: "view_room", room_id: roomId,