From 1b877f2b7c08322e9cfda1de7d29456ec6764fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 11 May 2021 11:16:14 +0200 Subject: [PATCH] Make SpaceTreeLevelLayoutStore into a singleton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/components/views/spaces/SpaceTreeLevel.tsx | 4 ++-- src/stores/SpaceTreeLevelLayoutStore.ts | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index 52508e6320..f799cb02ba 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -69,7 +69,7 @@ export class SpaceItem extends React.PureComponent { constructor(props) { super(props); - const collapsed = SpaceTreeLevelLayoutStore.getSpaceCollapsedState( + const collapsed = SpaceTreeLevelLayoutStore.instance.getSpaceCollapsedState( props.space.roomId, this.props.parents, !props.isNested, @@ -88,7 +88,7 @@ export class SpaceItem extends React.PureComponent { } const newCollapsedState = !this.state.collapsed; - SpaceTreeLevelLayoutStore.setSpaceCollapsedState( + SpaceTreeLevelLayoutStore.instance.setSpaceCollapsedState( this.props.space.roomId, this.props.parents, newCollapsedState, diff --git a/src/stores/SpaceTreeLevelLayoutStore.ts b/src/stores/SpaceTreeLevelLayoutStore.ts index 1250fee0b7..424e9f4012 100644 --- a/src/stores/SpaceTreeLevelLayoutStore.ts +++ b/src/stores/SpaceTreeLevelLayoutStore.ts @@ -26,12 +26,21 @@ const getSpaceCollapsedKey = (roomId: string, parents: Set): string => { }; export default class SpaceTreeLevelLayoutStore { - public static setSpaceCollapsedState(roomId: string, parents: Set, collapsed: boolean) { + private static internalInstance: SpaceTreeLevelLayoutStore; + + public static get instance(): SpaceTreeLevelLayoutStore { + if (!SpaceTreeLevelLayoutStore.internalInstance) { + SpaceTreeLevelLayoutStore.internalInstance = new SpaceTreeLevelLayoutStore(); + } + return SpaceTreeLevelLayoutStore.internalInstance; + } + + public setSpaceCollapsedState(roomId: string, parents: Set, collapsed: boolean) { // XXX: localStorage doesn't allow booleans localStorage.setItem(getSpaceCollapsedKey(roomId, parents), collapsed.toString()); } - public static getSpaceCollapsedState(roomId: string, parents: Set, fallback: boolean): boolean { + public getSpaceCollapsedState(roomId: string, parents: Set, fallback: boolean): boolean { const collapsedLocalStorage = localStorage.getItem(getSpaceCollapsedKey(roomId, parents)); // XXX: localStorage doesn't allow booleans return collapsedLocalStorage ? collapsedLocalStorage === "true" : fallback;