react-multi-select-dropdown
Version:
A React Dropdown which shows a list of items which can be multi selcted.
85 lines (78 loc) • 14.4 kB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var DropdownItem = React.createClass({displayName: "DropdownItem",
render : function(){
if(this.props.selected){
return React.createElement("li", {className: "multiselect-item active", onClick: this.props.onSelected},
this.props.item[this.props.display_field]
) ;
}else{
return React.createElement("li", {className: "multiselect-item", onClick: this.props.onSelected},
this.props.item[this.props.display_field]
);
}
}
});
var MultiSelect = React.createClass({displayName: "MultiSelect",
_onItemSelected : function(index){
var selectedItemsIndex = this.state.selected.indexOf(index);
(selectedItemsIndex > -1) ? this.state.selected.splice(selectedItemsIndex,1) : this.state.selected.push(index) ;
this.setState({open:false});
this.forceUpdate();
this.props.onUpdate ? this.props.onUpdate(this.state.selected) :"";
},
_selectAll : function(){
if(this.state.selected.length == this.props.items.length){
this.setState({selected:[]});
}else{
var arr = this.props.items.map(function(i,index){
return index;
});
this.setState({selected :arr });
};
},
getInitialState:function(){
return {open:false,
selected : this.props.selected
};
},
handleClick:function(e){
this.setState({open:true});
self = this;
var documentClickHandler = function(event){
if($(event.target).closest(".multiselect."+self.props.name).length===0){
self.setState({open:false});
$(document).unbind("click."+self.props.name,documentClickHandler);
}
}
$(document).unbind("click."+self.props.name,documentClickHandler).bind("click."+self.props.name,documentClickHandler);
},
componentDidReceiveProps : function(){
this.forceUpdate();
},
render : function(){
var self = this;
var dropdownItems = this.props.items.map(function(item,index){
selected = (self.state.selected.indexOf(index)>-1);
return React.createElement(DropdownItem, {key: index, onSelected: self._onItemSelected.bind(self,index), item: item, display_field: self.props.display_field, selected: selected, index: index})
});
var selectedItems = this.props.items.filter(function(item,index){
return (self.state.selected.indexOf(index)>-1);
});
// var displayText = (selectedItems.length === self.props.items.length ? "All " + self.props.label : ((selectedItems.length > 0) ? (selectedItems.length > 1 ? selectedItems.length +" " +self.props.label : selectedItems[0][self.props.display_field]) : self.props.label));
var displayText = (selectedItems.length === self.props.items.length ? "All " + self.props.label : ((selectedItems.length > 0) ? (selectedItems.length > 1 ? selectedItems.length +" " +self.props.label : selectedItems[0][self.props.display_field]) : self.props.label));
return React.createElement("div", {className: "multiselect "+self.props.name, onClick: self.handleClick},
React.createElement("p", null,
React.createElement("span", null, this.props.children, " "), displayText
),
React.createElement("ul", {className: self.state.open?"multiselect-menu open" :"multiselect-menu close"},
React.createElement("li", {className: "multiselect-item select-all", onClick: self._selectAll},
"Select All"
),
dropdownItems
)
);
}
});
module.exports = MultiSelect;
},{}]},{},[1])
//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9iaGFyZ2F2L0Rlc2t0b3AvcmVhY3QtbXVsdGktc2VsZWN0LWRyb3Bkb3duL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBLElBQUksa0NBQWtDLDRCQUFBO0NBQ3JDLE1BQU0sR0FBRyxVQUFVO0VBQ2xCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7R0FDdEIsT0FBTyxvQkFBQSxJQUFHLEVBQUEsQ0FBQSxDQUFDLFNBQUEsRUFBUyxDQUFDLHlCQUFBLEVBQXlCLENBQUMsT0FBQSxFQUFPLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFZLENBQUEsRUFBQTtNQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBRTtPQUNyQyxDQUFBLEVBQUU7R0FDWCxJQUFJO0dBQ0osUUFBUSxvQkFBQSxJQUFHLEVBQUEsQ0FBQSxDQUFDLFNBQUEsRUFBUyxDQUFDLGtCQUFBLEVBQWtCLENBQUMsT0FBQSxFQUFPLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFZLENBQUEsRUFBQTtNQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBRTtLQUN2QyxDQUFBLENBQUM7R0FDUjtFQUNEO0FBQ0YsQ0FBQyxDQUFDLENBQUM7O0FBRUgsSUFBSSxpQ0FBaUMsMkJBQUE7Q0FDcEMsZUFBZSxHQUFHLFNBQVMsS0FBSyxDQUFDO0VBQ2hDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzVELENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxR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RSxFQUFBLElBQUMsRUFBQTtNQUNGLG9CQUFBLE1BQUssRUFBQSxJQUFDLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUMsR0FBUSxDQUFBLEVBQUMsV0FBWTtLQUM3QyxDQUFBLEVBQUE7SUFDTCxvQkFBQSxJQUFHLEVBQUEsQ0FBQSxDQUFDLFNBQUEsRUFBUyxDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLHdCQUF5QixDQUFFLENBQUEsRUFBQTtJQUNuRixvQkFBQSxJQUFHLEVBQUEsQ0FBQSxDQUFDLFNBQUEsRUFBUyxDQUFDLDZCQUFBLEVBQTZCLENBQUMsT0FBQSxFQUFPLENBQUUsSUFBSSxDQUFDLFVBQVksQ0FBQSxFQUFBO0FBQUEsTUFBQSxZQUFBO0FBQUEsS0FFaEUsQ0FBQSxFQUFBO0lBQ0wsYUFBYztJQUNWLENBQUE7SUFDQyxDQUFBLENBQUM7RUFDVDtBQUNGLENBQUMsQ0FBQyxDQUFDO0FBQ0g7O0NBRUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwidmFyIERyb3Bkb3duSXRlbSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblx0cmVuZGVyIDogZnVuY3Rpb24oKXtcblx0XHRpZih0aGlzLnByb3BzLnNlbGVjdGVkKXtcblx0XHRcdHJldHVybiA8bGkgY2xhc3NOYW1lPVwibXVsdGlzZWxlY3QtaXRlbSBhY3RpdmVcIiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uU2VsZWN0ZWR9PlxuXHRcdFx0XHRcdFx0e3RoaXMucHJvcHMuaXRlbVt0aGlzLnByb3BzLmRpc3BsYXlfZmllbGRdfVxuXHRcdFx0XHRcdCBcdDwvbGk+IDtcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiAgPGxpIGNsYXNzTmFtZT1cIm11bHRpc2VsZWN0LWl0ZW1cIiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uU2VsZWN0ZWR9PlxuXHRcdFx0XHRcdFx0e3RoaXMucHJvcHMuaXRlbVt0aGlzLnByb3BzLmRpc3BsYXlfZmllbGRdfVxuXHRcdFx0XHRcdDwvbGk+O1xuXHRcdH1cblx0fVxufSk7XG5cbnZhciBNdWx0aVNlbGVjdCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcblx0X29uSXRlbVNlbGVjdGVkIDogZnVuY3Rpb24oaW5kZXgpe1xuXHRcdHZhciBzZWxlY3RlZEl0ZW1zSW5kZXggPSB0aGlzLnN0YXRlLnNlbGVjdGVkLmluZGV4T2YoaW5kZXgpO1xuXHRcdChzZWxlY3RlZEl0ZW1zSW5kZXggPiAtMSkgPyB0aGlzLnN0YXRlLnNlbGVjdGVkLnNwbGljZShzZWxlY3RlZEl0ZW1zSW5kZXgsMSkgOiB0aGlzLnN0YXRlLnNlbGVjdGVkLnB1c2goaW5kZXgpIDtcblx0XHR0aGlzLnNldFN0YXRlKHtvcGVuOmZhbHNlfSk7XG5cdFx0dGhpcy5mb3JjZVVwZGF0ZSgpO1xuXHRcdHRoaXMucHJvcHMub25VcGRhdGUgPyB0aGlzLnByb3BzLm9uVXBkYXRlKHRoaXMuc3RhdGUuc2VsZWN0ZWQpIDpcIlwiO1xuXHR9LFxuXHRfc2VsZWN0QWxsIDogZnVuY3Rpb24oKXtcblx0XHRpZih0aGlzLnN0YXRlLnNlbGVjdGVkLmxlbmd0aCA9PSB0aGlzLnByb3BzLml0ZW1zLmxlbmd0aCl7XG5cdFx0XHR0aGlzLnNldFN0YXRlKHtzZWxlY3RlZDpbXX0pO1xuXHRcdH1lbHNle1xuXHRcdFx0dmFyIGFyciA9IHRoaXMucHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uKGksaW5kZXgpe1xuXHRcdFx0XHRyZXR1cm4gaW5kZXg7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuc2V0U3RhdGUoe3NlbGVjdGVkIDphcnIgfSk7XG5cblx0XHR9O1xuXHR9LFxuXHRnZXRJbml0aWFsU3RhdGU6ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4ge29wZW46ZmFsc2UsXG5cdFx0XHRzZWxlY3RlZCA6IHRoaXMucHJvcHMuc2VsZWN0ZWRcblx0XHR9O1xuXHR9LFxuXHRoYW5kbGVDbGljazpmdW5jdGlvbihlKXtcblx0XHR0aGlzLnNldFN0YXRlKHtvcGVuOnRydWV9KTtcblx0XHRzZWxmID0gdGhpcztcblx0XHR2YXIgZG9jdW1lbnRDbGlja0hhbmRsZXIgPSBmdW5jdGlvbihldmVudCl7XG5cdFx0aWYoJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIubXVsdGlzZWxlY3QuXCIrc2VsZi5wcm9wcy5uYW1lKS5sZW5ndGg9PT0wKXtcblx0XHRcdHNlbGYuc2V0U3RhdGUoe29wZW46ZmFsc2V9KTtcblx0XHRcdCQoZG9jdW1lbnQpLnVuYmluZChcImNsaWNrLlwiK3NlbGYucHJvcHMubmFtZSxkb2N1bWVudENsaWNrSGFuZGxlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdCQoZG9jdW1lbnQpLnVuYmluZChcImNsaWNrLlwiK3NlbGYucHJvcHMubmFtZSxkb2N1bWVudENsaWNrSGFuZGxlcikuYmluZChcImNsaWNrLlwiK3NlbGYucHJvcHMubmFtZSxkb2N1bWVudENsaWNrSGFuZGxlcik7XG5cblx0fSxcblx0Y29tcG9uZW50RGlkUmVjZWl2ZVByb3BzIDogZnVuY3Rpb24oKXtcblx0XHR0aGlzLmZvcmNlVXBkYXRlKCk7XG5cdH0sXG5cdHJlbmRlciA6IGZ1bmN0aW9uKCl7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdHZhciBkcm9wZG93bkl0ZW1zID0gdGhpcy5wcm9wcy5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSxpbmRleCl7XG5cdFx0XHRcdHNlbGVjdGVkID0gKHNlbGYuc3RhdGUuc2VsZWN0ZWQuaW5kZXhPZihpbmRleCk+LTEpO1xuXHRcdFx0XHRyZXR1cm4gPERyb3Bkb3duSXRlbSBrZXk9e2luZGV4fSBvblNlbGVjdGVkPXtzZWxmLl9vbkl0ZW1TZWxlY3RlZC5iaW5kKHNlbGYsaW5kZXgpfSBpdGVtPXtpdGVtfSBkaXNwbGF5X2ZpZWxkPXtzZWxmLnByb3BzLmRpc3BsYXlfZmllbGR9IHNlbGVjdGVkPXtzZWxlY3RlZH0gaW5kZXg9e2luZGV4fSAvPlxuXHRcdH0pO1xuXHRcdHZhciBzZWxlY3RlZEl0ZW1zID0gdGhpcy5wcm9wcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24oaXRlbSxpbmRleCl7XG5cdFx0XHRcdHJldHVybiAoc2VsZi5zdGF0ZS5zZWxlY3RlZC5pbmRleE9mKGluZGV4KT4tMSk7XG5cdFx0fSk7XG5cdFx0IC8vIHZhciBkaXNwbGF5VGV4dCA9IChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gc2VsZi5wcm9wcy5pdGVtcy5sZW5ndGggPyBcIkFsbCBcIiArIHNlbGYucHJvcHMubGFiZWwgOiAoKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgPyAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxID8gc2VsZWN0ZWRJdGVtcy5sZW5ndGggK1wiIFwiICtzZWxmLnByb3BzLmxhYmVsIDogc2VsZWN0ZWRJdGVtc1swXVtzZWxmLnByb3BzLmRpc3BsYXlfZmllbGRdKSA6IHNlbGYucHJvcHMubGFiZWwpKTtcblx0XHR2YXIgZGlzcGxheVRleHQgPSAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IHNlbGYucHJvcHMuaXRlbXMubGVuZ3RoID8gXCJBbGwgXCIgKyBzZWxmLnByb3BzLmxhYmVsIDogKChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApID8gKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSA/IHNlbGVjdGVkSXRlbXMubGVuZ3RoICtcIiBcIiArc2VsZi5wcm9wcy5sYWJlbCA6IHNlbGVjdGVkSXRlbXNbMF1bc2VsZi5wcm9wcy5kaXNwbGF5X2ZpZWxkXSkgOiBzZWxmLnByb3BzLmxhYmVsKSk7XG5cdFx0cmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17XCJtdWx0aXNlbGVjdCBcIitzZWxmLnByb3BzLm5hbWV9IG9uQ2xpY2s9e3NlbGYuaGFuZGxlQ2xpY2t9PlxuXHRcdFx0XHRcdDxwPlxuXHRcdFx0XHRcdFx0PHNwYW4+e3RoaXMucHJvcHMuY2hpbGRyZW59IDwvc3Bhbj57ZGlzcGxheVRleHR9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQ8dWwgY2xhc3NOYW1lPXtzZWxmLnN0YXRlLm9wZW4/XCJtdWx0aXNlbGVjdC1tZW51IG9wZW5cIiA6XCJtdWx0aXNlbGVjdC1tZW51IGNsb3NlXCJ9ID5cblx0XHRcdFx0PGxpIGNsYXNzTmFtZT1cIm11bHRpc2VsZWN0LWl0ZW0gc2VsZWN0LWFsbFwiIG9uQ2xpY2s9e3NlbGYuX3NlbGVjdEFsbH0+XG5cdFx0XHRcdFx0XHRTZWxlY3QgQWxsXG5cdFx0XHRcdFx0PC9saT5cblx0XHRcdFx0e2Ryb3Bkb3duSXRlbXN9XG5cdFx0XHRcdDwvdWw+XG5cdFx0XHRcdDwvZGl2Pjtcblx0fVxufSk7XG5cblxuIG1vZHVsZS5leHBvcnRzID0gTXVsdGlTZWxlY3Q7XG4iXX0=