user_groups: Handle add/remove members events.

This fixes the real-time sync for the user groups membership data
structure to work like these work in the rest of Zulip; now, edits
made in one browser are immediately and correctly reflected in other
browsers.
This commit is contained in:
Tim Abbott
2018-03-04 08:39:54 -08:00
parent 0147826042
commit aed8cc9062
4 changed files with 19 additions and 24 deletions

View File

@@ -508,19 +508,6 @@ set_global('people', {
assert.equal(opts.data.delete, '[4]');
(function test_post_success() {
var user_group_remove_called = false;
var user_group_add_called = false;
user_groups.remove = function (data) {
assert.equal(data.name, 'Mobile');
assert.equal(data.id, 1);
user_group_remove_called = true;
};
user_groups.add = function (data) {
assert.equal(data.name, 'Mobile');
assert.equal(data.id, 1);
assert.deepEqual(data.members, [2, 31]);
user_group_add_called = true;
};
fake_this.text(i18n.t('fake-text'));
fake_this.delay = function (time) {
assert.equal(time, 200);
@@ -535,8 +522,6 @@ set_global('people', {
};
opts.success();
assert(save_btn_fade_out_called);
assert(user_group_remove_called);
assert(user_group_add_called);
assert.equal(fake_this.html(), '<i class="fa fa-check" aria-hidden="true"></i>');
assert.equal(fake_this.text(), 'translated: Saved!');
}());

View File

@@ -370,10 +370,13 @@ exports.dispatch_normal_event = function dispatch_normal_event(event) {
case 'user_group':
if (event.op === 'add') {
user_groups.add(event.group);
settings_user_groups.reload();
} else if (event.op === 'add_members') {
user_groups.add_members(event.group_id, event.user_ids);
} else if (event.op === 'remove_members') {
user_groups.remove_members(event.group_id, event.user_ids);
}
settings_user_groups.reload();
break;
}
};

View File

@@ -122,13 +122,6 @@ exports.populate_user_groups = function () {
delete: JSON.stringify(removed),
},
success: function () {
original_group = _.reject(original_group, function (e) {
return removed.includes(e);
});
original_group = original_group.concat(added);
group_data.members = original_group;
user_groups.remove(group_data);
user_groups.add(group_data);
btn.text(i18n.t("Saved!")).delay(200).fadeOut(function () {
$(this).html('<i class="fa fa-check" aria-hidden="true"></i>');
});

View File

@@ -49,6 +49,20 @@ exports.is_member_of = function (user_group_id, user_id) {
return user_group.members.has(user_id);
};
exports.add_members = function (user_group_id, user_ids) {
var user_group = user_group_by_id_dict.get(user_group_id);
_.each(user_ids, function (user_id) {
user_group.members.set(user_id, true);
});
};
exports.remove_members = function (user_group_id, user_ids) {
var user_group = user_group_by_id_dict.get(user_group_id);
_.each(user_ids, function (user_id) {
user_group.members.del(user_id);
});
};
exports.initialize = function () {
_.each(page_params.realm_user_groups, function (user_group) {
exports.add(user_group);