stem-core
Version:
Frontend and core-library framework
66 lines (55 loc) • 1.87 kB
JSX
import {UI} from "../UIBase";
import {Button} from "./Button";
import {SimpleStyledElement} from "../Bootstrap3";
import {Orientation} from "../Constants";
import {registerStyle} from "../style/Theme";
import {ButtonGroupStyle, RadioButtonGroupStyle} from "./ButtonStyle";
class ButtonGroup extends SimpleStyledElement {
getDefaultOptions() {
return {
orientation: Orientation.HORIZONTAL,
};
}
extraNodeAttributes(attr) {
attr.addClass(this.styleSheet.Orientation(this.options.orientation));
}
}
class RadioButtonGroup extends SimpleStyledElement {
setOptions(options) {
super.setOptions(options);
this.index = this.options.index || 0;
}
extraNodeAttributes(attr) {
attr.addClass(this.styleSheet.DEFAULT);
}
render() {
this.buttons = [];
for (let i = 0; i < this.options.givenOptions.length; i += 1) {
this.buttons.push(
<Button key={i} onClick={() => {this.setIndex(i);}} size={this.getSize()}
label={this.options.givenOptions[i].toString()} level={this.getLevel()}
className={this.index === i ? "active" : ""}/>);
}
return this.buttons;
}
getIndex() {
return this.index;
}
getValue() {
return this.options.givenOptions[this.index];
}
setIndex(index) {
this.dispatch("setIndex", {
index: index,
oldIndex: this.index,
value: this.options.givenOptions[index],
oldValue: this.options.givenOptions[this.index]
});
this.buttons[this.index].removeClass("active");
this.index = index;
this.buttons[this.index].addClass("active");
}
}
export {ButtonGroup, RadioButtonGroup};