11import React from 'react' ;
2+ import ReactCSSTransitionGroup from 'react-addons-css-transition-group' ;
23
34import { getCompletions } from '../../../autocomplete/Autocompleter' ;
45
@@ -11,8 +12,11 @@ export default class Autocomplete extends React.Component {
1112 }
1213
1314 componentWillReceiveProps ( props , state ) {
15+ if ( props . query == this . props . query ) return ;
16+
1417 getCompletions ( props . query ) . map ( completionResult => {
1518 try {
19+ console . log ( `${ completionResult . provider . getName ( ) } : ${ JSON . stringify ( completionResult . completions ) } ` ) ;
1620 completionResult . completions . then ( completions => {
1721 let i = this . state . completions . findIndex (
1822 completion => completion . provider === completionResult . provider
@@ -23,15 +27,16 @@ export default class Autocomplete extends React.Component {
2327 let newCompletions = Object . assign ( [ ] , this . state . completions ) ;
2428 completionResult . completions = completions ;
2529 newCompletions [ i ] = completionResult ;
26- console . log ( newCompletions ) ;
30+ // console.log(newCompletions);
2731 this . setState ( {
2832 completions : newCompletions
2933 } ) ;
3034 } , err => {
31-
35+ console . error ( err ) ;
3236 } ) ;
3337 } catch ( e ) {
3438 // An error in one provider shouldn't mess up the rest.
39+ console . error ( e ) ;
3540 }
3641 } ) ;
3742 }
@@ -42,23 +47,19 @@ export default class Autocomplete extends React.Component {
4247
4348 const position = pinElement . getBoundingClientRect ( ) ;
4449
45- const style = {
46- position : 'fixed' ,
47- border : '1px solid gray' ,
48- background : 'white' ,
49- borderRadius : '4px'
50- } ;
5150
52- this . props . pinTo . forEach ( direction => {
53- style [ direction ] = position [ direction ] ;
54- } ) ;
5551
5652 const renderedCompletions = this . state . completions . map ( ( completionResult , i ) => {
57- console . log ( completionResult ) ;
53+ // console.log(completionResult);
5854 let completions = completionResult . completions . map ( ( completion , i ) => {
55+ let Component = completion . component ;
56+ if ( Component ) {
57+ return Component ;
58+ }
59+
5960 return (
60- < div key = { i } class = "mx_Autocomplete_Completion" >
61- < strong > { completion . title } </ strong >
61+ < div key = { i } className = "mx_Autocomplete_Completion" >
62+ < span > { completion . title } </ span >
6263 < em > { completion . subtitle } </ em >
6364 < span style = { { color : 'gray' , float : 'right' } } > { completion . description } </ span >
6465 </ div >
@@ -67,16 +68,20 @@ export default class Autocomplete extends React.Component {
6768
6869
6970 return completions . length > 0 ? (
70- < div key = { i } class = "mx_Autocomplete_ProviderSection" >
71- < strong > { completionResult . provider . getName ( ) } </ strong >
72- { completions }
71+ < div key = { i } className = "mx_Autocomplete_ProviderSection" >
72+ < span className = "mx_Autocomplete_provider_name" > { completionResult . provider . getName ( ) } </ span >
73+ < ReactCSSTransitionGroup transitionName = "autocomplete" transitionEnterTimeout = { 300 } transitionLeaveTimeout = { 300 } >
74+ { completions }
75+ </ ReactCSSTransitionGroup >
7376 </ div >
7477 ) : null ;
7578 } ) ;
7679
7780 return (
78- < div className = "mx_Autocomplete" style = { style } >
79- { renderedCompletions }
81+ < div className = "mx_Autocomplete" >
82+ < ReactCSSTransitionGroup transitionName = "autocomplete" transitionEnterTimeout = { 300 } transitionLeaveTimeout = { 300 } >
83+ { renderedCompletions }
84+ </ ReactCSSTransitionGroup >
8085 </ div >
8186 ) ;
8287 }
0 commit comments