diff --git a/frontend_tests/node_tests/settings_user_groups.js b/frontend_tests/node_tests/settings_user_groups.js index 9074a8635d..d4ab929f43 100644 --- a/frontend_tests/node_tests/settings_user_groups.js +++ b/frontend_tests/node_tests/settings_user_groups.js @@ -118,7 +118,7 @@ run_test('populate_user_groups', () => { return noop; } assert.equal(user_id, 4); - blueslip.set_test_data('warn', 'Unknown user ID 4 in members of user group Mobile'); + blueslip.set_test_data('warn', 'Undefined user in function append_user'); get_person_from_user_id_called = true; }; diff --git a/static/js/settings_user_groups.js b/static/js/settings_user_groups.js index 9cdfdb997d..db5953f34c 100644 --- a/static/js/settings_user_groups.js +++ b/static/js/settings_user_groups.js @@ -38,32 +38,16 @@ exports.populate_user_groups = function () { }, })); var pill_container = $('.pill-container[data-group-pills="' + data.name + '"]'); - var pills = input_pill.create({ - container: pill_container, - create_item_from_text: user_pill.create_item_from_email, - get_text_from_item: user_pill.get_email_from_item, - }); + var pills = user_pill.create_pills(pill_container); function get_pill_user_ids() { return user_pill.get_user_ids(pills); } - function append_user(user) { - user_pill.append_person({ - pill_widget: pills, - person: user, - }); - } - var userg = $('div.user-group[id="' + data.id + '"]'); data.members.keys().forEach(function (user_id) { var user = people.get_person_from_user_id(user_id); - - if (user) { - append_user(user); - } else { - blueslip.warn('Unknown user ID ' + user_id + ' in members of user group ' + data.name); - } + user_pill.append_user(user, pills); }); function update_membership(group_id) { @@ -229,37 +213,9 @@ exports.populate_user_groups = function () { }); var input = pill_container.children('.input'); - (function set_up_typeahead() { - if (!exports.can_edit(data.id)) { - return; - } - input.typeahead({ - items: 5, - fixed: true, - dropup: true, - source: function () { - return user_pill.typeahead_source(pills); - }, - highlighter: function (item) { - return typeahead_helper.render_person(item); - }, - matcher: function (item) { - var query = this.query.toLowerCase(); - return (item.email.toLowerCase().indexOf(query) !== -1 - || item.full_name.toLowerCase().indexOf(query) !== -1); - }, - sorter: function (matches) { - return typeahead_helper.sort_recipientbox_typeahead( - this.query, matches, ""); - }, - updater: function (user) { - append_user(user); - input.focus(); - update_cancel_button(); - }, - stopAdvance: true, - }); - }()); + if (exports.can_edit(data.id)) { + user_pill.set_up_typeahead_on_pills(input, pills, update_cancel_button); + } (function pill_remove() { if (!exports.can_edit(data.id)) { diff --git a/static/js/user_pill.js b/static/js/user_pill.js index 8dae80784c..2d84a752ed 100644 --- a/static/js/user_pill.js +++ b/static/js/user_pill.js @@ -82,6 +82,55 @@ exports.typeahead_source = function (pill_widget) { return items; }; +exports.append_user = function (user, pills) { + if (user) { + exports.append_person({ + pill_widget: pills, + person: user, + }); + } else { + blueslip.warn('Undefined user in function append_user'); + } +}; + +exports.create_pills = function (pill_container) { + var pills = input_pill.create({ + container: pill_container, + create_item_from_text: exports.create_item_from_email, + get_text_from_item: exports.get_email_from_item, + }); + return pills; +}; + +exports.set_up_typeahead_on_pills = function (input, pills, update_func) { + input.typeahead({ + items: 5, + fixed: true, + dropup: true, + source: function () { + return exports.typeahead_source(pills); + }, + highlighter: function (item) { + return typeahead_helper.render_person(item); + }, + matcher: function (item) { + var query = this.query.toLowerCase(); + return (item.email.toLowerCase().indexOf(query) !== -1 + || item.full_name.toLowerCase().indexOf(query) !== -1); + }, + sorter: function (matches) { + return typeahead_helper.sort_recipientbox_typeahead( + this.query, matches, ""); + }, + updater: function (user) { + exports.append_user(user, pills); + input.focus(); + update_func(); + }, + stopAdvance: true, + }); +}; + return exports; }());