From 06e0919bca7ee4280c6eed58838ca2be10e7b4fb Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Tue, 1 Dec 2015 15:24:53 -0500
Subject: Moved autocomplete components into web/react/components/suggestion

---
 .../suggestion/search_suggestion_list.jsx          | 86 ++++++++++++++++++++++
 1 file changed, 86 insertions(+)
 create mode 100644 web/react/components/suggestion/search_suggestion_list.jsx

(limited to 'web/react/components/suggestion/search_suggestion_list.jsx')

diff --git a/web/react/components/suggestion/search_suggestion_list.jsx b/web/react/components/suggestion/search_suggestion_list.jsx
new file mode 100644
index 000000000..542d28ddd
--- /dev/null
+++ b/web/react/components/suggestion/search_suggestion_list.jsx
@@ -0,0 +1,86 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import Constants from '../../utils/constants.jsx';
+import SuggestionList from './suggestion_list.jsx';
+import * as Utils from '../../utils/utils.jsx';
+
+export default class SearchSuggestionList extends SuggestionList {
+    componentDidUpdate(prevProps, prevState) {
+        if (this.state.items.length > 0 && prevState.items.length === 0) {
+            this.getContent().perfectScrollbar();
+        }
+    }
+
+    getContent() {
+        return $(ReactDOM.findDOMNode(this.refs.popover)).find('.popover-content');
+    }
+
+    renderChannelDivider(type) {
+        let text;
+        if (type === Constants.OPEN_CHANNEL) {
+            text = 'Public ' + Utils.getChannelTerm(type) + 's';
+        } else {
+            text = 'Private ' + Utils.getChannelTerm(type) + 's';
+        }
+
+        return (
+            <div
+                key={type + '-divider'}
+                className='search-autocomplete__divider'
+            >
+                <span>{text}</span>
+            </div>
+        );
+    }
+
+    render() {
+        if (this.state.items.length === 0 || !this.props.show) {
+            return null;
+        }
+
+        const items = [];
+        for (let i = 0; i < this.state.items.length; i++) {
+            const item = this.state.items[i];
+            const term = this.state.terms[i];
+            const isSelection = term === this.state.selection;
+
+            // ReactComponent names need to be upper case when used in JSX
+            const Component = this.state.components[i];
+
+            // temporary hack to add dividers between public and private channels in the search suggestion list
+            if (i === 0 || item.type !== this.state.items[i - 1].type) {
+                if (item.type === Constants.OPEN_CHANNEL) {
+                    items.push(this.renderChannelDivider(Constants.OPEN_CHANNEL));
+                } else if (item.type === Constants.PRIVATE_CHANNEL) {
+                    items.push(this.renderChannelDivider(Constants.PRIVATE_CHANNEL));
+                }
+            }
+
+            items.push(
+                <Component
+                    key={term}
+                    ref={term}
+                    item={item}
+                    isSelection={isSelection}
+                    onClick={this.handleItemClick.bind(this, term)}
+                />
+            );
+        }
+
+        return (
+            <ReactBootstrap.Popover
+                ref='popover'
+                id='search-autocomplete__popover'
+                className='search-help-popover autocomplete visible'
+                placement='bottom'
+            >
+                {items}
+            </ReactBootstrap.Popover>
+        );
+    }
+}
+
+SearchSuggestionList.propTypes = {
+    ...SuggestionList.propTypes
+};
-- 
cgit v1.2.3-1-g7c22

