From 57c360ebf6665ae6da2217c4c58d8875349a88be Mon Sep 17 00:00:00 2001 From: yflory Date: Wed, 19 Feb 2020 17:20:37 +0100 Subject: [PATCH] Refresh access modal when other tabs make changes --- www/common/inner/access.js | 103 +++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/www/common/inner/access.js b/www/common/inner/access.js index 26d945bcc..d1129ca9d 100644 --- a/www/common/inner/access.js +++ b/www/common/inner/access.js @@ -16,6 +16,25 @@ define([ Messages.teams = "Teams"; // XXX Messages.access_noContact = "No other contact to add"; // XXX + var evRedrawAll = Util.mkEvent(); + + // Override metadata values from data + var override = function (data, obj) { + data.owners = obj.owners; + data.expire = obj.expire; + data.pending_owners = obj.pending_owners; + data.mailbox = obj.mailbox; + data.restricted = obj.restricted; + data.allowed = obj.allowed; + }; + var loadMetadata = function (common, data, waitFor, redraw) { + common.getPadMetadata({ + channel: data.channel + }, waitFor(function (md) { + override(data, md); + if (redraw) { evRedrawAll.fire(redraw); } + })); + }; var getOwnersTab = function (common, data, opts, _cb) { var cb = Util.once(Util.mkAsync(_cb)); @@ -293,12 +312,7 @@ define([ redrawAll = function (reload) { nThen(function (waitFor) { if (!reload) { return; } - common.getPadMetadata({ - channel: data.channel - }, waitFor(function (md) { - data.owners = md.owners || []; - data.pending_owners = md.pending_owners || []; - })); + loadMetadata(common, data, waitFor, "owner"); }).nThen(function () { owners = data.owners || []; pending_owners = data.pending_owners || []; @@ -310,13 +324,11 @@ define([ }; redrawAll(); - var handler = sframeChan.on('EV_RT_METADATA', function (md) { - if (!$div1.length) { - return void handler.stop(); - } - data.owners = md.owners || []; - data.pending_owners = md.pending_owners || []; - redrawAll(); + evRedrawAll.reg(function (type) { + if (type === "owner") { return; } + setTimeout(function () { + redrawAll(); + }); }); // Create modal @@ -593,13 +605,7 @@ define([ redrawAll = function (reload) { nThen(function (waitFor) { if (!reload) { return; } - common.getPadMetadata({ - channel: data.channel - }, waitFor(function (md) { - data.owners = md.owners; - data.restricted = md.restricted; - data.allowed = md.allowed; - })); + loadMetadata(common, data, waitFor, "allow"); }).nThen(function () { owners = data.owners || []; restricted = data.restricted || false; @@ -613,14 +619,11 @@ define([ }; redrawAll(); - var handler = sframeChan.on('EV_RT_METADATA', function (md) { - if (!$div1.length) { - return void handler.stop(); - } - data.owners = md.owners || []; - data.restricted = md.restricted; - data.allowed = md.allowed; - redrawAll(); + evRedrawAll.reg(function (type) { + if (type === "allow") { return; } + setTimeout(function () { + redrawAll(); + }); }); cb(void 0, link); @@ -938,28 +941,22 @@ define([ return h('div', content); }; - var redraw = function () { - $div1.empty(); - $div1.append(drawLeft()); + var redraw = function (right) { + if (!right) { + $div1.empty(); + $div1.append(drawLeft()); + } $div2.empty(); $div2.append(drawRight()); }; - var handler = sframeChan.on('EV_RT_METADATA', function (md) { - if (!$div.length) { - handler.stop(); - return; - } - md = JSON.parse(JSON.stringify(md)); - data.owners = md.owners; - data.expire = md.expire; - data.pending_owners = md.pending_owners; - data.mailbox = md.mailbox; - data.restricted = md.restricted; - data.allowed = md.allowed; - redraw(); - }); redraw(); + evRedrawAll.reg(function (ownersOrAllow) { + setTimeout(function () { + redraw(ownersOrAllow); + }); + }); + cb(void 0, $div); }; @@ -989,12 +986,7 @@ define([ channel: opts.channel // optional, fallback to current pad }, waitFor(function (obj) { if (obj && obj.error) { console.error(obj.error); return; } - data.owners = obj.owners; - data.expire = obj.expire; - data.pending_owners = obj.pending_owners; - data.mailbox = obj.mailbox; - data.restricted = obj.restricted; - data.allowed = obj.allowed; + loadMetadata(common, data, waitFor); })); }).nThen(function () { cb(void 0, data); @@ -1075,6 +1067,15 @@ define([ wide: true }); cb (void 0, modal); + + var sframeChan = common.getSframeChannel(); + var handler = sframeChan.on('EV_RT_METADATA', function (md) { + if (!$(modal).length) { + return void handler.stop(); + } + override(data, Util.clone(md)); + evRedrawAll.fire(); + }); }); };