From c76b273fae2d200c24d718cdc34237a45802b266 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Fri, 11 Jan 2019 18:24:06 -0600 Subject: [PATCH] Update RoomTiles on custom status change --- src/components/views/rooms/RoomTile.js | 8 ++++- src/settings/Settings.js | 2 ++ .../controllers/CustomStatusController.js | 29 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/settings/controllers/CustomStatusController.js diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js index 95073b7be8..8778340601 100644 --- a/src/components/views/rooms/RoomTile.js +++ b/src/components/views/rooms/RoomTile.js @@ -112,7 +112,13 @@ module.exports = React.createClass({ this.setState({ notificationCount: this.props.room.getUnreadNotificationCount(), }); - break; + break; + // RoomTiles are one of the few components that may show custom status and + // also remain on screen while in Settings toggling the feature. This ensures + // you can clearly see the status hide and show when toggling the feature. + case 'feature_custom_status_changed': + this.forceUpdate(); + break; } }, diff --git a/src/settings/Settings.js b/src/settings/Settings.js index f64e999a32..836e906b6e 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -22,6 +22,7 @@ import { NotificationsEnabledController, } from "./controllers/NotificationControllers"; import LazyLoadingController from "./controllers/LazyLoadingController"; +import CustomStatusController from "./controllers/CustomStatusController"; // These are just a bunch of helper arrays to avoid copy/pasting a bunch of times const LEVELS_ROOM_SETTINGS = ['device', 'room-device', 'room-account', 'account', 'config']; @@ -88,6 +89,7 @@ export const SETTINGS = { displayName: _td("Custom user status messages"), supportedLevels: LEVELS_FEATURE, default: false, + controller: new CustomStatusController(), }, "feature_lazyloading": { isFeature: true, diff --git a/src/settings/controllers/CustomStatusController.js b/src/settings/controllers/CustomStatusController.js new file mode 100644 index 0000000000..183947972b --- /dev/null +++ b/src/settings/controllers/CustomStatusController.js @@ -0,0 +1,29 @@ +/* +Copyright 2019 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import SettingController from "./SettingController"; +import dis from "../../dispatcher"; + +export default class CustomStatusController extends SettingController { + onChange(level, roomId, newValue) { + // Dispatch setting change so that some components that are still visible when the + // Settings page is open (such as RoomTiles) can reflect the change. + dis.dispatch({ + action: "feature_custom_status_changed", + value: newValue, + }); + } +}