Files
JiboSDK/lib/atom-react/components/jibo-combo-box.js
2026-03-22 03:21:45 +02:00

1 line
2.2 KiB
JavaScript

"use strict";var t=function(t){return t&&t.__esModule?t["default"]:t},e=t(require("react")),$=t(require("jquery")),s=e.createClass({displayName:"List",getInitialState:function(){return{hoveredElement:void 0}},onMouseOver:function(t){this.state.hoveredElement=t,this.setState(this.state)},onMouseOut:function(){this.state.hoveredElement=void 0,this.setState(this.state)},onClick:function(t){this.props.onSelect(t)},render:function(){var t=this,s=[];return this.props.data.forEach(function(i,n){var o="list-item";i===t.state.hoveredElement&&(o+=" selected");var r={},l=null;"string"==typeof i.label?(r={marginLeft:5},l=i.label):l=i.label(),s.push(e.createElement("li",{key:n,className:o,onMouseOver:t.onMouseOver.bind(t,i),onMouseOut:t.onMouseOut.bind(t,i),onClick:t.onClick.bind(t,i)},e.createElement("span",{style:r},l)))}),e.createElement("ul",{className:"list-group"},s)}});module.exports=e.createClass({displayName:"jibo-combo-box",getInitialState:function(){return{clickHandler:this.clickHandler.bind(this),current:this.props.init}},render:function(){var t=null;if(this.state.current.display)if("function"==typeof this.state.current.display)t=this.state.current.display();else{var s=null;s=this.props.titleDisplay?this.props.titleDisplay:this.state.current.display,t="\xa0\xa0"+s,t=[e.createElement("i",{className:"fa fa-caret-down",style:{fontSize:20}}),t]}var i="combo-box btn";return this.props.hideButton&&(i="combo-box"),e.createElement("div",null,e.createElement("div",{ref:"button",className:i,onClick:this.onClick},t))},removeList:function(){$(document).off("click",this.state.clickHandler),this.node.remove(),this.node=null},onSelect:function(t){this.state.current=t,this.setState(this.state),this.props.keepFocusAfterClick||this.removeList(),this.props.onSelected(t)},clickHandler:function(t){0===$(t.target).closest(this.node).length&&this.removeList()},onClick:function(t){if(t.preventDefault(),t.stopPropagation(),this.node)this.removeList();else{var i=e.findDOMNode(this.refs.button),n=i.getBoundingClientRect();this.node=$("<div />").addClass("combo-box-list").css({left:n.left+"px",top:n.bottom+"px"}).appendTo(document.body),$(document).on("click",this.state.clickHandler),e.render(e.createElement(s,{data:this.props.data,onSelect:this.onSelect}),this.node[0])}}});