Redraw access modal on metadata change

This commit is contained in:
yflory 2020-03-10 12:20:41 +01:00
parent b9a07ca650
commit 315704a1b8
2 changed files with 50 additions and 33 deletions

View file

@ -60,14 +60,11 @@ define([
var friends = common.getFriends(true); var friends = common.getFriends(true);
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
var priv = common.getMetadataMgr().getPrivateData(); var metadataMgr = common.getMetadataMgr();
var user = common.getMetadataMgr().getUserData();
var edPublic = priv.edPublic;
var channel = data.channel; var channel = data.channel;
var owners = data.owners || []; var owners = data.owners || [];
var pending_owners = data.pending_owners || []; var pending_owners = data.pending_owners || [];
var teams = priv.teams;
var teamsData = Util.tryParse(JSON.stringify(priv.teams)) || {};
var teamOwner = data.teamId; var teamOwner = data.teamId;
opts = opts || {}; opts = opts || {};
@ -83,6 +80,9 @@ define([
// Remove owner column // Remove owner column
var drawRemove = function (pending) { var drawRemove = function (pending) {
var priv = metadataMgr.getPrivateData();
var user = metadataMgr.getUserData();
var _owners = {}; var _owners = {};
var o = (pending ? pending_owners : owners) || []; var o = (pending ? pending_owners : owners) || [];
o.forEach(function (ed) { o.forEach(function (ed) {
@ -93,15 +93,15 @@ define([
return true; return true;
} }
}); });
Object.keys(teams).some(function (id) { Object.keys(priv.teams).some(function (id) {
if (teams[id].edPublic === ed) { if (priv.teams[id].edPublic === ed) {
f = teams[id]; f = priv.teams[id];
f.teamId = id; f.teamId = id;
} }
}); });
if (ed === edPublic) { if (ed === priv.edPublic) {
f = f || user; f = f || user;
if (f.name) { f.edPublic = edPublic; } if (f.name) { f.edPublic = priv.edPublic; }
} }
_owners[ed] = f ? Util.clone(f) : { _owners[ed] = f ? Util.clone(f) : {
displayName: Messages._getKey('owner_unknownUser', [ed]), displayName: Messages._getKey('owner_unknownUser', [ed]),
@ -115,8 +115,10 @@ define([
var $el = $(el); var $el = $(el);
var ed = $el.attr('data-ed'); var ed = $el.attr('data-ed');
if (!ed) { return; } if (!ed) { return; }
if (teamOwner && teams[teamOwner] && teams[teamOwner].edPublic === ed) { me = true; } if (teamOwner && priv.teams[teamOwner] && priv.teams[teamOwner].edPublic === ed) {
if (ed === edPublic && !teamOwner) { me = true; } me = true;
}
if (ed === priv.edPublic && !teamOwner) { me = true; }
nThen(function (waitFor) { nThen(function (waitFor) {
var msg = me ? Messages.owner_removeMeConfirm : Messages.owner_removeConfirm; var msg = me ? Messages.owner_removeMeConfirm : Messages.owner_removeConfirm;
UI.confirm(msg, waitFor(function (yes) { UI.confirm(msg, waitFor(function (yes) {
@ -181,6 +183,9 @@ define([
// Add owners column // Add owners column
var drawAdd = function () { var drawAdd = function () {
var priv = metadataMgr.getPrivateData();
var teamsData = Util.tryParse(JSON.stringify(priv.teams)) || {};
var $div = $(h('div.cp-share-column')); var $div = $(h('div.cp-share-column'));
var _friends = Util.clone(friends); var _friends = Util.clone(friends);
Object.keys(_friends).forEach(function (curve) { Object.keys(_friends).forEach(function (curve) {
@ -228,6 +233,10 @@ define([
}; };
$(addBtn).click(function () { $(addBtn).click(function () {
var priv = metadataMgr.getPrivateData();
var user = metadataMgr.getUserData();
var teamsData = Util.tryParse(JSON.stringify(priv.teams)) || {};
var $div = $div2.find('.cp-share-column'); var $div = $div2.find('.cp-share-column');
// Check selection // Check selection
var $sel = $div.find('.cp-usergrid-user.cp-selected'); var $sel = $div.find('.cp-usergrid-user.cp-selected');
@ -367,22 +376,14 @@ define([
var cb = Util.once(Util.mkAsync(_cb)); var cb = Util.once(Util.mkAsync(_cb));
opts = opts || {}; opts = opts || {};
// XXX reload all this data in the "draw" functions
var friends = common.getFriends(true); var friends = common.getFriends(true);
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
var priv = common.getMetadataMgr().getPrivateData(); var metadataMgr = common.getMetadataMgr();
var user = common.getMetadataMgr().getUserData();
var edPublic = priv.edPublic;
var channel = data.channel; var channel = data.channel;
var owners = data.owners || []; var owners = data.owners || [];
var restricted = data.restricted || false; var restricted = data.restricted || false;
var allowed = data.allowed || []; var allowed = data.allowed || [];
var teams = priv.teams;
var teamsData = Util.tryParse(JSON.stringify(priv.teams)) || {};
var teamOwner = data.teamId; var teamOwner = data.teamId;
var redrawAll = function () {}; var redrawAll = function () {};
@ -411,6 +412,9 @@ define([
// Remove owner column // Remove owner column
var drawRemove = function () { var drawRemove = function () {
var priv = metadataMgr.getPrivateData();
var user = metadataMgr.getUserData();
var _allowed = {}; var _allowed = {};
var all = Util.deduplicateString(owners.concat(allowed)); var all = Util.deduplicateString(owners.concat(allowed));
all.forEach(function (ed) { all.forEach(function (ed) {
@ -421,15 +425,15 @@ define([
return true; return true;
} }
}); });
Object.keys(teams).some(function (id) { Object.keys(priv.teams).some(function (id) {
if (teams[id].edPublic === ed) { if (priv.teams[id].edPublic === ed) {
f = teams[id]; f = priv.teams[id];
f.teamId = id; f.teamId = id;
} }
}); });
if (ed === edPublic) { if (ed === priv.edPublic) {
f = f || user; f = f || user;
if (f.name) { f.edPublic = edPublic; } if (f.name) { f.edPublic = priv.edPublic; }
} }
_allowed[ed] = f ? Util.clone(f) : { _allowed[ed] = f ? Util.clone(f) : {
displayName: Messages._getKey('owner_unknownUser', [ed]), displayName: Messages._getKey('owner_unknownUser', [ed]),
@ -526,6 +530,9 @@ define([
// Add owners column // Add owners column
var drawAdd = function () { var drawAdd = function () {
var priv = metadataMgr.getPrivateData();
var teamsData = Util.tryParse(JSON.stringify(priv.teams)) || {};
var $div = $(h('div.cp-share-column')); var $div = $(h('div.cp-share-column'));
$div.addClass('cp-overlay-container').append(h('div.cp-overlay')); $div.addClass('cp-overlay-container').append(h('div.cp-overlay'));
@ -575,6 +582,10 @@ define([
}; };
$(addBtn).click(function () { $(addBtn).click(function () {
var priv = metadataMgr.getPrivateData();
var user = metadataMgr.getUserData();
var teamsData = Util.tryParse(JSON.stringify(priv.teams)) || {};
var $div = $div2.find('.cp-share-column'); var $div = $div2.find('.cp-share-column');
// Check selection // Check selection
var $sel = $div.find('.cp-usergrid-user.cp-selected'); var $sel = $div.find('.cp-usergrid-user.cp-selected');
@ -723,8 +734,8 @@ define([
var cb = Util.once(Util.mkAsync(_cb)); var cb = Util.once(Util.mkAsync(_cb));
opts = opts || {}; opts = opts || {};
var priv = common.getMetadataMgr().getPrivateData();
var sframeChan = common.getSframeChannel(); var sframeChan = common.getSframeChannel();
var metadataMgr = common.getMetadataMgr();
var $div = $(h('div.cp-share-columns')); var $div = $(h('div.cp-share-columns'));
if (!data) { return void cb(void 0, $div); } if (!data) { return void cb(void 0, $div); }
@ -738,6 +749,8 @@ define([
if (!parsed || !parsed.hashData) { return void console.error("Invalid href"); } if (!parsed || !parsed.hashData) { return void console.error("Invalid href"); }
var drawLeft = function () { var drawLeft = function () {
var priv = metadataMgr.getPrivateData();
var $d = $('<div>'); var $d = $('<div>');
var owned = isOwned(common, data); var owned = isOwned(common, data);
@ -882,6 +895,8 @@ define([
return $d; return $d;
}; };
var drawRight = function () { var drawRight = function () {
var priv = metadataMgr.getPrivateData();
// Owners // Owners
var content = []; var content = [];
var _ownersGrid = getUserList(common, data.owners); var _ownersGrid = getUserList(common, data.owners);
@ -933,7 +948,6 @@ define([
} }
// Mute access requests // Mute access requests
var priv = common.getMetadataMgr().getPrivateData();
var edPublic = priv.edPublic; var edPublic = priv.edPublic;
var owned = isOwned(common, data); var owned = isOwned(common, data);
var canMute = data.mailbox && owned === true && ( var canMute = data.mailbox && owned === true && (
@ -1123,6 +1137,14 @@ define([
override(data, Util.clone(md)); override(data, Util.clone(md));
evRedrawAll.fire(); evRedrawAll.fire();
}); });
var metadataMgr = common.getMetadataMgr();
var f = function () {
if (!$(modal).length) {
return void metadataMgr.off('change', f);
}
evRedrawAll.fire();
};
metadataMgr.onChange(f);
}); });
}; };

View file

@ -1305,11 +1305,6 @@ define([
}).nThen(function () { }).nThen(function () {
// If we are just checking (send === false) and there is a mailbox field, cb state true // If we are just checking (send === false) and there is a mailbox field, cb state true
// If there is no mailbox, we'll have to check if an owner is a friend in the worker // If there is no mailbox, we'll have to check if an owner is a friend in the worker
/* // XXX
if (owner && !send) {
return void cb({state: true});
}
*/
if (!send) { return void cb({state: Boolean(owner)}); } if (!send) { return void cb({state: Boolean(owner)}); }
Cryptpad.padRpc.requestAccess({ Cryptpad.padRpc.requestAccess({