From d11d9cbbf777c33c67a4ec05342bff3c9cdffacb Mon Sep 17 00:00:00 2001
From: Diego Sampaio <chinello@gmail.com>
Date: Fri, 1 Jul 2016 16:12:18 -0300
Subject: [PATCH] Add autocomplete feature to livechat user management

---
 .../client/views/app/livechatUsers.html       |  4 +-
 .../client/views/app/livechatUsers.js         | 44 +++++++++++++++++++
 2 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/packages/rocketchat-livechat/client/views/app/livechatUsers.html b/packages/rocketchat-livechat/client/views/app/livechatUsers.html
index 87edaf05998..ae99fd5ef78 100644
--- a/packages/rocketchat-livechat/client/views/app/livechatUsers.html
+++ b/packages/rocketchat-livechat/client/views/app/livechatUsers.html
@@ -2,7 +2,7 @@
 	<h2>{{_ "Livechat_managers"}}</h2>
 	<form id="form-manager" class="inline">
 		<label>{{_ "Add_manager"}}</label>
-		<input type="text" name="username" placeholder="{{_ "Enter_a_username"}}">
+		{{> inputAutocomplete settings=managerAutocompleteSettings name="username" class="search" placeholder=(_ "Search_by_username") autocomplete="off"}}
 		<button name="add" class="button primary">{{_ "Add"}}</button>
 	</form>
 	<div class="list">
@@ -36,7 +36,7 @@
 	<h2>{{_ "Livechat_agents"}}</h2>
 	<form id="form-agent" class="inline">
 		<label>{{_ "Add_agent"}}</label>
-		<input type="text" name="username" placeholder="{{_ "Enter_a_username"}}">
+		{{> inputAutocomplete settings=agentAutocompleteSettings name="username" class="search" placeholder=(_ "Search_by_username") autocomplete="off"}}
 		<button name="add" class="button primary">{{_ "Add"}}</button>
 	</form>
 	<div class="list">
diff --git a/packages/rocketchat-livechat/client/views/app/livechatUsers.js b/packages/rocketchat-livechat/client/views/app/livechatUsers.js
index 2977a908528..f15a654a084 100644
--- a/packages/rocketchat-livechat/client/views/app/livechatUsers.js
+++ b/packages/rocketchat-livechat/client/views/app/livechatUsers.js
@@ -15,6 +15,50 @@ Template.livechatUsers.helpers({
 		if (this.emails && this.emails.length > 0) {
 			return this.emails[0].address;
 		}
+	},
+	agentAutocompleteSettings() {
+		return {
+			limit: 10,
+			// inputDelay: 300
+			rules: [{
+				// @TODO maybe change this 'collection' and/or template
+				collection: 'UserAndRoom',
+				subscription: 'userAutocomplete',
+				field: 'username',
+				template: Template.userSearch,
+				noMatchTemplate: Template.userSearchEmpty,
+				matchAll: true,
+				filter: {
+					exceptions: _.map(AgentUsers.find({}, { fields: { username: 1 } }).fetch(), user => { return user.username; })
+				},
+				selector(match) {
+					return { username: match };
+				},
+				sort: 'username'
+			}]
+		};
+	},
+	managerAutocompleteSettings() {
+		return {
+			limit: 10,
+			// inputDelay: 300
+			rules: [{
+				// @TODO maybe change this 'collection' and/or template
+				collection: 'UserAndRoom',
+				subscription: 'userAutocomplete',
+				field: 'username',
+				template: Template.userSearch,
+				noMatchTemplate: Template.userSearchEmpty,
+				matchAll: true,
+				filter: {
+					exceptions: _.map(ManagerUsers.find({}, { fields: { username: 1 } }).fetch(), user => { return user.username; })
+				},
+				selector(match) {
+					return { username: match };
+				},
+				sort: 'username'
+			}]
+		};
 	}
 });
 
-- 
GitLab