diff --git a/src/TabComplete.js b/src/TabComplete.js
index be1520c5cd..7e5a02c7ea 100644
--- a/src/TabComplete.js
+++ b/src/TabComplete.js
@@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
+var Entry = require("./TabCompleteEntries").Entry;
const DELAY_TIME_MS = 500;
const KEY_TAB = 9;
@@ -40,7 +41,7 @@ class TabComplete {
}
/**
- * @param {TabComplete.Entry[]} completeList
+ * @param {Entry[]} completeList
*/
setCompletionList(completeList) {
this.list = completeList;
@@ -74,7 +75,7 @@ class TabComplete {
/**
* @param {Number} numAheadToPeek Return *up to* this many elements.
- * @return {TabComplete.Entry[]}
+ * @return {Entry[]}
*/
peek(numAheadToPeek) {
if (this.matchedList.length === 0) {
@@ -227,7 +228,7 @@ class TabComplete {
this.isFirstWord = group.length === this.originalText.length;
this.matchedList = [
- new TabComplete.Entry(group) // first entry is always the original partial
+ new Entry(group) // first entry is always the original partial
];
// find matching entries in the set of entries given to us
@@ -247,10 +248,4 @@ class TabComplete {
}
};
-TabComplete.Entry = function(text, imgUrl) {
- this.text = text;
- this.imgUrl = imgUrl;
-};
-
-
module.exports = TabComplete;
diff --git a/src/TabCompleteEntries.js b/src/TabCompleteEntries.js
new file mode 100644
index 0000000000..00af3473c8
--- /dev/null
+++ b/src/TabCompleteEntries.js
@@ -0,0 +1,65 @@
+/*
+Copyright 2015 OpenMarket Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+var React = require("react");
+var sdk = require("./index");
+
+class Entry {
+ constructor(text) {
+ this.text = text;
+ }
+
+ /**
+ * @return {string} The text to display in this entry.
+ */
+ getText() {
+ return this.text;
+ }
+
+ /**
+ * @return {ReactClass} Raw JSX
+ */
+ getImageJsx() {
+ return null;
+ }
+
+ /**
+ * @return {?string} The unique key= prop for React dedupe
+ */
+ getKey() {
+ return null;
+ }
+}
+
+class MemberEntry extends Entry {
+ constructor(member) {
+ super(member.name || member.userId);
+ this.member = member;
+ }
+
+ getImageJsx() {
+ var MemberAvatar = sdk.getComponent("views.avatars.MemberAvatar");
+ return (
+