(js) Fix mdContactChips in preferencs module
By keeping the same array reference throughout the auto-completion, we fix the ng-click on a list item. It also avoids constant redraws of the list.
This commit is contained in:
parent
b017cb1711
commit
9222bf80ef
|
@ -457,7 +457,7 @@
|
||||||
md-contact-email="c_email"
|
md-contact-email="c_email"
|
||||||
md-require-match="md-require-match"
|
md-require-match="md-require-match"
|
||||||
filter-selected="false"
|
filter-selected="false"
|
||||||
placeholder="Add"><!-- users --></md-contact-chips>
|
label:placeholder="Add"><!-- users --></md-contact-chips>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,9 +17,10 @@
|
||||||
* @desc The factory we'll use to register with Angular.
|
* @desc The factory we'll use to register with Angular.
|
||||||
* @return the User constructor
|
* @return the User constructor
|
||||||
*/
|
*/
|
||||||
User.factory = ['$q', 'sgSettings', 'Resource', 'Gravatar', function($q, Settings, Resource, Gravatar) {
|
User.factory = ['$q', '$log', 'sgSettings', 'Resource', 'Gravatar', function($q, $log, Settings, Resource, Gravatar) {
|
||||||
angular.extend(User, {
|
angular.extend(User, {
|
||||||
$q: $q,
|
$q: $q,
|
||||||
|
$log: $log,
|
||||||
$$resource: new Resource(Settings.activeUser.folderURL, Settings.activeUser),
|
$$resource: new Resource(Settings.activeUser.folderURL, Settings.activeUser),
|
||||||
$gravatar: Gravatar
|
$gravatar: Gravatar
|
||||||
});
|
});
|
||||||
|
@ -44,23 +45,44 @@
|
||||||
param = {search: search};
|
param = {search: search};
|
||||||
|
|
||||||
if (!search) {
|
if (!search) {
|
||||||
|
// No query specified
|
||||||
User.$users = [];
|
User.$users = [];
|
||||||
deferred.resolve(User.$users);
|
deferred.resolve(User.$users);
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
}
|
}
|
||||||
if (angular.isUndefined(User.$users)) {
|
if (angular.isUndefined(User.$users)) {
|
||||||
|
// First session query
|
||||||
User.$users = [];
|
User.$users = [];
|
||||||
}
|
}
|
||||||
|
else if (User.$query == search) {
|
||||||
|
// Query hasn't changed
|
||||||
|
deferred.resolve(User.$users);
|
||||||
|
return deferred.promise;
|
||||||
|
}
|
||||||
|
User.$query = search;
|
||||||
|
|
||||||
User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {
|
User.$$resource.fetch(null, 'usersSearch', param).then(function(response) {
|
||||||
var results = [];
|
var index, user;
|
||||||
|
// Add new users matching the search query
|
||||||
angular.forEach(response.users, function(data) {
|
angular.forEach(response.users, function(data) {
|
||||||
console.debug(JSON.stringify(data, undefined, 2));
|
if (!_.find(User.$users, function(user) {
|
||||||
var user = new User(data);
|
return user.uid == data.uid;
|
||||||
results.push(user);
|
})) {
|
||||||
|
var user = new User(data),
|
||||||
|
index = _.sortedIndex(User.$users, user, '$$shortFormat');
|
||||||
|
User.$users.splice(index, 0, user);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
User.$users = results;
|
// Remove users that no longer match the search query
|
||||||
deferred.resolve(results);
|
for (index = User.$users.length - 1; index >= 0; index--) {
|
||||||
|
user = User.$users[index];
|
||||||
|
if (!_.find(response.users, function(data) {
|
||||||
|
return user.uid == data.uid;
|
||||||
|
})) {
|
||||||
|
User.$users.splice(index, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deferred.resolve(User.$users);
|
||||||
}, deferred.reject);
|
}, deferred.reject);
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
|
|
Loading…
Reference in a new issue