From 791f39abcc3c72841fc5dc3ac385ea71764f65a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= <simon.bra.ag@gmail.com> Date: Wed, 5 May 2021 08:31:07 +0200 Subject: [PATCH] Initial support for persistent collapsed states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com> --- src/components/views/spaces/SpaceTreeLevel.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/views/spaces/SpaceTreeLevel.tsx b/src/components/views/spaces/SpaceTreeLevel.tsx index 6825d84013..6e00eac725 100644 --- a/src/components/views/spaces/SpaceTreeLevel.tsx +++ b/src/components/views/spaces/SpaceTreeLevel.tsx @@ -48,6 +48,8 @@ import {EventType} from "matrix-js-sdk/src/@types/event"; import {StaticNotificationState} from "../../../stores/notifications/StaticNotificationState"; import {NotificationColor} from "../../../stores/notifications/NotificationColor"; +const getSpaceCollapsedKey = (space: Room) => `mx_space_collapsed_${space.roomId}`; + interface IItemProps { space?: Room; activeSpaces: Room[]; @@ -68,8 +70,12 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> { constructor(props) { super(props); + // XXX: localStorage doesn't allow booleans + // default to collapsed for root items + const collapsed = localStorage.getItem(getSpaceCollapsedKey(props.space)) === "true" || !props.isNested; + this.state = { - collapsed: !props.isNested, // default to collapsed for root items + collapsed: collapsed, contextMenuPosition: null, }; } @@ -78,7 +84,10 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> { if (this.props.onExpand && this.state.collapsed) { this.props.onExpand(); } - this.setState({collapsed: !this.state.collapsed}); + const newCollapsedState = !this.state.collapsed; + // XXX: localStorage doesn't allow booleans + localStorage.setItem(getSpaceCollapsedKey(this.props.space), newCollapsedState.toString()); + this.setState({collapsed: newCollapsedState}); // don't bubble up so encapsulating button for space // doesn't get triggered evt.stopPropagation();