user_pills: Extract generic functions for typeahead and pill creation.

This refactoring make it easier to use our user pill typeahead logic
in other parts of the app.

Two commits by Yashasvhi squashed together by Tim.
This commit is contained in:
Yashashvi Dave
2018-05-09 17:12:10 +05:30
committed by Tim Abbott
parent 8bf80f699f
commit 958040b1fc
3 changed files with 55 additions and 50 deletions

View File

@@ -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;
};

View File

@@ -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)) {

View File

@@ -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;
}());