3 lines
2.8 KiB
JavaScript
3 lines
2.8 KiB
JavaScript
|
|
var SelectSearch;export default window.SelectSearch=SelectSearch=class extends React.Component{constructor(e){var t,s,a,i,n,c,r;if(super(e),({placeholder:n,canCreateNew:t}=e),r=null,this.data=e.data,null!=e.id)for(a=0,i=(c=this.data).length;a<i;a++)if((s=c[a]).id===e.id){r=s;break}t=null!=e.canCreateNew?e.canCreateNew:e.canCreateNew=!1,this.state={selected:r,placeholder:n,canCreateNew:t,search:!1,selectedIndex:0,itemCount:0},this.cancel=this.cancel.bind(this),this.search=this.search.bind(this),this.onKey=this.onKey.bind(this),this.renderItem=this.renderItem.bind(this),this.input=null}cancel(){if(this.setState({search:!1,selected:null}),this.input)return this.input.value=""}getSelected(){return this.state.selected}search(e){var t;if(null!=e)switch(e.key){case"ArrowUp":case"ArrowDown":return!1}return""===(t=this.input.value)&&(t=!1),this.setState({search:t,selectedIndex:0})}setValue(e){return"-"===e.id?(e=null,this.cancel()):this.setState({search:!1,selected:e})}getNewItem(){return{id:"new",showTitle:"Создать «"+this.state.search+"»",title:this.state.search}}onKey(e){switch(e.key){case"Escape":return this.cancel();case"Enter":return this.setValue(this.items[this.state.selectedIndex]);case"ArrowUp":return e.preventDefault(),this.setState({selectedIndex:Math.max(0,this.state.selectedIndex-1)}),!1;case"ArrowDown":return e.preventDefault(),this.setState({selectedIndex:Math.min(this.itemCount-1,this.state.selectedIndex+1)}),!1}}renderItem(e,t=0){var s,a;return t=parseInt(t),a=null,e.title.toLowerCase().indexOf(this.state.search.toLowerCase())>-1&&(s=["search_select_li",t===this.state.selectedIndex?"selected":""].join(" "),a=React.createElement("div",{className:s,onClick:this.setValue.bind(this,e)},e.showTitle?e.showTitle:e.title)),a}render(){var e,t,s,a,i,n,c,r;if(({selected:c,canCreateNew:t}=this.state),n=[],this.items=[],this.state.search){if("function"==typeof(s=this.data)&&(s=s()),Array.isArray(s))for(a in s)r=s[a],(i=this.renderItem(r,this.items.length))&&(this.items.push(r),n.push(i));t&&(e=this.getNewItem(),this.items.push(e),n.push(this.renderItem(e,n.length))),this.itemCount=n.length}return React.createElement("div",{className:["select_search",this.state.search?"focus":""].join(" "),onKeyDown:this.onKey},React.createElement(BackgroundFocus,{visible:!1!==this.state.search,onClick:this.cancel}),React.createElement("div",{className:"select_search_content"},null!=c?React.createElement("div",null,c.title,React.createElement("button",{type:"button",onClick:this.cancel},"x")):React.createElement("input",{onKeyUp:this.search,ref:e=>this.input=e,placeholder:this.state.placeholder}),this.state.search?React.createElement("div",{className:["select_search_elements"].join(" ")},n,0===n.length||t&&1===n.length?React.createElement("div",{class:"not_found"},"Не найдено «"+this.state.search+"»"):null):null))}};
|
|||
|
|
//# sourceMappingURL=SelectSearch.min.js.map
|