import Logger from "common/logger"; import {React} from "modules"; import Title from "./title"; import Divider from "../divider"; import Switch from "./components/switch"; import Dropdown from "./components/dropdown"; import Number from "./components/number"; import Item from "./components/item"; const baseClassName = "bd-settings-group"; export default class Group extends React.Component { constructor(props) { super(props); if (this.props.button && this.props.collapsible) { const original = this.props.button.onClick; this.props.button.onClick = (event) => { event.stopPropagation(); original(...arguments); }; } if (!this.props.hasOwnProperty("shown")) this.props.shown = true; this.container = React.createRef(); this.state = { collapsed: this.props.collapsible && !this.props.shown }; this.onChange = this.onChange.bind(this); this.toggleCollapse = this.toggleCollapse.bind(this); } toggleCollapse() { const container = this.container.current; const timeout = this.state.collapsed ? 300 : 1; container.style.setProperty("height", container.scrollHeight + "px"); container.classList.add("animating"); this.setState({collapsed: !this.state.collapsed}, () => setTimeout(() => { container.style.setProperty("height", ""); container.classList.remove("animating"); }, timeout)); if (this.props.onDrawerToggle) this.props.onDrawerToggle(this.state.collapsed); } onChange(id, value) { if (!this.props.onChange) return; if (this.props.id) this.props.onChange(this.props.id, id, value); else this.props.onChange(id, value); this.forceUpdate(); } render() { const {settings} = this.props; const collapseClass = this.props.collapsible ? `collapsible ${this.state.collapsed ? "collapsed" : "expanded"}` : ""; const groupClass = `${baseClassName} ${collapseClass}`; return