mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-16 21:24:59 +08:00
Wait for deletion of widgets as well addition
We were previously waiting for them to appear which is silly if we were deleting them.
This commit is contained in:
parent
db092c81d3
commit
bb5ae741bc
@ -292,22 +292,30 @@ function inviteUser(event, roomId, userId) {
|
||||
* arrives) or rejects after a timeout
|
||||
*
|
||||
* @param {string} widgetId The ID of the widget to wait for
|
||||
* @param {boolean} add True to wait for the widget to be added,
|
||||
* false to wait for it to be deleted.
|
||||
* @returns {Promise} that resolves when the widget is available
|
||||
*/
|
||||
function waitForUserWidget(widgetId) {
|
||||
function waitForUserWidget(widgetId, add) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const currentAccountDataEvent = MatrixClientPeg.get().getAccountData('m.widgets');
|
||||
if (
|
||||
currentAccountDataEvent &&
|
||||
currentAccountDataEvent.getContent() &&
|
||||
currentAccountDataEvent.getContent()[widgetId] !== undefined
|
||||
) {
|
||||
|
||||
function satisfiesCondition(ev) {
|
||||
if (!ev || !currentAccountDataEvent.getContent()) return false;
|
||||
if (add) {
|
||||
return ev.getContent()[widgetId] !== undefined;
|
||||
} else {
|
||||
return ev.getContent()[widgetId] === undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (satisfiesCondition(currentAccountDataEvent)) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
function onAccountData(ev) {
|
||||
if (ev.getType() === 'm.widgets' && ev.getContent() && ev.getContent()[widgetId] !== undefined) {
|
||||
if (satisfiesCondition(currentAccountDataEvent)) {
|
||||
MatrixClientPeg.get().removeListener('accountData', onAccountData);
|
||||
clearTimeout(timerId);
|
||||
resolve();
|
||||
@ -395,7 +403,7 @@ function setWidget(event, roomId) {
|
||||
// wait for this, the action will complete but if the user is fast enough,
|
||||
// the widget still won't actually be there.
|
||||
client.setAccountData('m.widgets', userWidgets).then(() => {
|
||||
return waitForUserWidget(widgetId);
|
||||
return waitForUserWidget(widgetId, widgetUrl !== null);
|
||||
}).then(() => {
|
||||
sendResponse(event, {
|
||||
success: true,
|
||||
|
Loading…
Reference in New Issue
Block a user