From 94bdedd25b7b6544fe80c822f2358ec1b7ff08c0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 12 Sep 2019 14:07:46 +0200 Subject: [PATCH] show breadcrumbs only after having joined at least 10 rooms --- src/components/views/rooms/RoomBreadcrumbs.js | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/components/views/rooms/RoomBreadcrumbs.js b/src/components/views/rooms/RoomBreadcrumbs.js index 02cad908b6..6f180ff4a5 100644 --- a/src/components/views/rooms/RoomBreadcrumbs.js +++ b/src/components/views/rooms/RoomBreadcrumbs.js @@ -33,7 +33,7 @@ const MAX_ROOMS = 20; export default class RoomBreadcrumbs extends React.Component { constructor(props) { super(props); - this.state = {rooms: []}; + this.state = {rooms: [], enabled: false}; this.onAction = this.onAction.bind(this); this._dispatcherRef = null; @@ -47,10 +47,13 @@ export default class RoomBreadcrumbs extends React.Component { this._settingWatchRef = SettingsStore.watchSetting("breadcrumb_rooms", null, this.onBreadcrumbsChanged); + this.setState({enabled: this._shouldEnable()}); + MatrixClientPeg.get().on("Room.myMembership", this.onMyMembership); MatrixClientPeg.get().on("Room.receipt", this.onRoomReceipt); MatrixClientPeg.get().on("Room.timeline", this.onRoomTimeline); MatrixClientPeg.get().on("Event.decrypted", this.onEventDecrypted); + MatrixClientPeg.get().on("Room", this.onRoomMembershipChanged); } componentWillUnmount() { @@ -64,6 +67,7 @@ export default class RoomBreadcrumbs extends React.Component { client.removeListener("Room.receipt", this.onRoomReceipt); client.removeListener("Room.timeline", this.onRoomTimeline); client.removeListener("Event.decrypted", this.onEventDecrypted); + client.removeListener("Room", this.onRoomMembershipChanged); } } @@ -104,6 +108,7 @@ export default class RoomBreadcrumbs extends React.Component { this.setState({rooms}); } } + this.onRoomMembershipChanged(); }; onRoomReceipt = (event, room) => { @@ -143,6 +148,20 @@ export default class RoomBreadcrumbs extends React.Component { this._loadRoomIds(value); }; + onRoomMembershipChanged = () => { + if (!this.state.enabled && this._shouldEnable()) { + this.setState({enabled: true}); + } + } + + _shouldEnable() { + const client = MatrixClientPeg.get(); + const joinedRoomCount = client.getRooms().reduce((count, r) => { + return count + (r.getMyMembership() === "join" ? 1 : 0); + }, 0); + return joinedRoomCount >= 10; + } + _loadRoomIds(roomIds) { if (!roomIds || roomIds.length <= 0) return; // Skip updates with no rooms @@ -283,7 +302,7 @@ export default class RoomBreadcrumbs extends React.Component { // check for collapsed here and not at parent so we keep rooms in our state // when collapsing and expanding - if (this.props.collapsed) { + if (this.props.collapsed || !this.state.enabled) { return null; }