/** * WordPress dependencies. */ const { apiFetch, components: { Popover, }, element: { Component, Fragment, createElement, }, i18n: { __, }, url: { addQueryArgs, }, } = wp; class AutoCompleter extends Component { constructor() { super( ...arguments ); this.state = { search: '', items: [], error: '', }; this.searchItemName = this.searchItemName.bind( this ); this.selectItemName = this.selectItemName.bind( this ); } searchItemName( value ) { const { search } = this.state; const { component, objectQueryArgs } = this.props; this.setState( { search: value } ); if ( value.length < search.length ) { this.setState( { items: [] } ); } let path= '/buddypress/v1/' + component; let queryArgs = {}; if ( value ) { queryArgs.search = encodeURIComponent( value ); } if ( objectQueryArgs ) { queryArgs = Object.assign( queryArgs, objectQueryArgs ); } apiFetch( { path: addQueryArgs( path, queryArgs ) } ).then( items => { this.setState( { items: items } ); }, error => { this.setState( { error: error.message } ); } ); } selectItemName( event, itemID ) { const { onSelectItem } = this.props; event.preventDefault(); this.setState( { search: '', items: [], error: '', } ); return onSelectItem( { itemID: itemID } ); } render() { const { search, items } = this.state; let { ariaLabel, placeholder, useAvatar, slugValue } = this.props; let itemsList; if ( ! ariaLabel ) { ariaLabel = __( 'Item\'s name', 'buddypress' ); } if ( ! placeholder ) { placeholder = __( 'Enter Item\'s name hereā€¦', 'buddypress' ); } if ( items.length ) { itemsList = items.map( ( item ) => { return ( ); } ); } return ( this.searchItemName( event.target.value ) } /> { 0 !== items.length &&
{ itemsList }
}
); } } export default AutoCompleter;