From ec54c7cf6c9f23403eb57ab5a3db1bec5915380f Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Fri, 22 Jan 2016 15:21:41 +0000 Subject: [PATCH 1/2] Match entities based on uid/displayname and include partials/stripping "foo" would now match: - @foobar:matrix.org - User ID matching - Foobar - Display name matching - f (@foo2:matrix.org) - user ID localpart matching - Bar Foo - Word matching --- src/Entities.js | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Entities.js b/src/Entities.js index 47103bfb65..a803d0c71a 100644 --- a/src/Entities.js +++ b/src/Entities.js @@ -17,6 +17,31 @@ limitations under the License. var React = require('react'); var sdk = require('./index'); +function isMatch(query, name, uid) { + query = query.toLowerCase(); + name = name.toLowerCase(); + uid = uid.toLowerCase(); + + // direct prefix matches + if (name.indexOf(query) === 0 || uid.indexOf(query) === 0) { + return true; + } + + // strip @ on uid and try matching again + if (uid.length > 1 && uid.substring(1).indexOf(query) === 0) { + return true; + } + + // split spaces in name and try matching constituient parts + var parts = name.split(" "); + for (var i = 0; i < parts.length; i++) { + if (parts[i].indexOf(query) === 0) { + return true; + } + } + return false; +} + /* * Converts various data models to Entity objects. * @@ -49,7 +74,7 @@ class MemberEntity extends Entity { } matches(queryString) { - return this.model.name.toLowerCase().indexOf(queryString.toLowerCase()) === 0; + return isMatch(queryString, this.model.name, this.model.userId); } } @@ -77,7 +102,7 @@ class UserEntity extends Entity { matches(queryString) { var name = this.model.displayName || this.model.userId; - return name.toLowerCase().indexOf(queryString.toLowerCase()) === 0; + return isMatch(queryString, name, this.model.userId); } } From 2d96f901815e64c75135736b3c0ead90e4416ebc Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Fri, 22 Jan 2016 16:18:23 +0000 Subject: [PATCH 2/2] Review comments --- src/Entities.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Entities.js b/src/Entities.js index a803d0c71a..5a666b1493 100644 --- a/src/Entities.js +++ b/src/Entities.js @@ -28,11 +28,11 @@ function isMatch(query, name, uid) { } // strip @ on uid and try matching again - if (uid.length > 1 && uid.substring(1).indexOf(query) === 0) { + if (uid.length > 1 && uid[0] === "@" && uid.substring(1).indexOf(query) === 0) { return true; } - // split spaces in name and try matching constituient parts + // split spaces in name and try matching constituent parts var parts = name.split(" "); for (var i = 0; i < parts.length; i++) { if (parts[i].indexOf(query) === 0) {