import { h, Component } from 'preact'; class WBAccordion extends Component { constructor(...args) { super(...args); this.setupIds(); } setupIds() { this.state.domId = 'accordion-' + uuid.v4(); const { names } = this.props; const { state } = this; state.headerDomIds = names.map(() => ('accordion-' + uuid.v4())); state.collapseDomIds = names.map(() => ('accordion-' + uuid.v4())); state.collapseClass = Array(names.length).fill('collapse'); state.ariaExpanded = Array(names.length).fill(false); state.buttonClass = Array(names.length).fill('btn btn-link collapsed'); state.collapseElements = null; } componentWillReceiveProps(nextProps) { this.props = nextProps; this.setupIds(); } toggle(idx) { const { ariaExpanded, collapseClass, buttonClass } = this.state; const isOpen = ariaExpanded[idx]; for (let i = 0; i < ariaExpanded.length; i++) { ariaExpanded[i] = false; collapseClass[i] = 'collapse'; buttonClass[i] = 'btn btn-link collapsed'; } if (!isOpen) { ariaExpanded[idx] = true; collapseClass[idx] = 'collapse show'; buttonClass[idx] = 'btn btn-link'; } this.setState({ ariaExpanded, collapseClass, buttonClass }); } render({ children, names, cardHeaderClass }, { domId, headerDomIds, collapseDomIds, collapseClass, ariaExpanded, buttonClass }) { return (
{ children.map((_, i) => (

{ children[i] }
)) }
); } }; WBAccordion.defaultProps = { 'cardHeaderClass': 'card-header' }; export default WBAccordion;