2015-07-15 12:30:11 +08:00
|
|
|
import Dropdown from 'flarum/components/Dropdown';
|
|
|
|
import icon from 'flarum/helpers/icon';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The `SelectDropdown` component is the same as a `Dropdown`, except the toggle
|
|
|
|
* button's label is set as the label of the first child which has a truthy
|
|
|
|
* `active` prop.
|
2015-07-31 18:46:47 +08:00
|
|
|
*
|
|
|
|
* ### Props
|
|
|
|
*
|
|
|
|
* - `caretIcon`
|
|
|
|
* - `defaultLabel`
|
2015-07-15 12:30:11 +08:00
|
|
|
*/
|
|
|
|
export default class SelectDropdown extends Dropdown {
|
|
|
|
static initProps(props) {
|
2015-08-04 10:12:24 +08:00
|
|
|
props.caretIcon = typeof props.caretIcon !== 'undefined' ? props.caretIcon : 'sort';
|
|
|
|
|
2015-07-15 12:30:11 +08:00
|
|
|
super.initProps(props);
|
|
|
|
|
2015-07-17 13:17:49 +08:00
|
|
|
props.className += ' Dropdown--select';
|
2015-07-15 12:30:11 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
getButtonContent() {
|
|
|
|
const activeChild = this.props.children.filter(child => child.props.active)[0];
|
2015-07-31 18:46:47 +08:00
|
|
|
let label = activeChild && activeChild.props.children || this.props.defaultLabel;
|
2015-07-17 13:17:49 +08:00
|
|
|
|
|
|
|
if (label instanceof Array) label = label[0];
|
2015-07-15 12:30:11 +08:00
|
|
|
|
|
|
|
return [
|
2015-08-05 08:20:57 +08:00
|
|
|
<span className="Button-label">{label}</span>,
|
2015-07-31 18:46:47 +08:00
|
|
|
icon(this.props.caretIcon, {className: 'Button-caret'})
|
2015-07-15 12:30:11 +08:00
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|