From a397f333d7374ecadc16005999509743219af5a6 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Sat, 16 Mar 2019 16:02:38 -0600 Subject: [PATCH] Discard old sticker picker when the URL changes Fixes https://github.com/vector-im/riot-web/issues/7547 --- src/components/views/rooms/Stickerpicker.js | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/Stickerpicker.js b/src/components/views/rooms/Stickerpicker.js index 2970a296ba..9d8912954c 100644 --- a/src/components/views/rooms/Stickerpicker.js +++ b/src/components/views/rooms/Stickerpicker.js @@ -25,6 +25,7 @@ import dis from '../../../dispatcher'; import AccessibleButton from '../elements/AccessibleButton'; import WidgetUtils from '../../../utils/WidgetUtils'; import ActiveWidgetStore from '../../../stores/ActiveWidgetStore'; +import PersistedElement from "../elements/PersistedElement"; const widgetType = 'm.stickerpicker'; @@ -32,6 +33,9 @@ const widgetType = 'm.stickerpicker'; // above it, so it needs a greater z-index than the ContextMenu const STICKERPICKER_Z_INDEX = 5000; +// Key to store the widget's AppTile under in PersistedElement +const PERSISTED_ELEMENT_KEY = "stickerPicker"; + export default class Stickerpicker extends React.Component { constructor(props) { super(props); @@ -126,6 +130,23 @@ export default class Stickerpicker extends React.Component { _updateWidget() { const stickerpickerWidget = WidgetUtils.getStickerpickerWidgets()[0]; + + const currentWidget = this.state.stickerpickerWidget; + let currentUrl = null; + if (currentWidget && currentWidget.content && currentWidget.content.url) { + currentUrl = currentWidget.content.url; + } + + let newUrl = null; + if (stickerpickerWidget && stickerpickerWidget.content && stickerpickerWidget.content.url) { + newUrl = stickerpickerWidget.content.url; + } + + if (newUrl !== currentUrl) { + // Destroy the existing frame so a new one can be created + PersistedElement.destroyElement(PERSISTED_ELEMENT_KEY); + } + this.setState({ stickerpickerWidget, widgetId: stickerpickerWidget ? stickerpickerWidget.id : null, @@ -211,7 +232,7 @@ export default class Stickerpicker extends React.Component { width: this.popoverWidth, }} > - +