IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.3KB

  1. import { h, Component } from 'preact';
  2. class WBAccordion extends Component {
  3. constructor(...args) {
  4. super(...args);
  5. this.state.domId = 'accordion-' + uuid.v4();
  6. this.state.headerDomIds = this.props.names.map(() => ('accordion-' + uuid.v4()));
  7. this.state.collapseDomIds = this.props.names.map(() => ('accordion-' + uuid.v4()));
  8. }
  9. render({ children, names, cardHeaderClass }, { domId, headerDomIds, collapseDomIds }) {
  10. return (
  11. <div class="accordion" id={ domId }>
  12. { children.map((_, i) => (
  13. <div class="card">
  14. <div class={ cardHeaderClass} id={ headerDomIds[i] }>
  15. <h2 class="mb-0">
  16. <button class="btn btn-link" type="button" data-toggle="collapse" data-target={ '#' + collapseDomIds[i] } aria-expanded="false" aria-controls={ collapseDomIds[i] }>
  17. { names[i] }
  18. </button>
  19. </h2>
  20. </div>
  21. <div id={ collapseDomIds[i] } class="collapse" aria-labelledby={ headerDomIds[i] } data-parent={ '#' + domId }>
  22. <div class="card-body">
  23. { children[i] }
  24. </div>
  25. </div>
  26. </div>
  27. )) }
  28. </div>
  29. );
  30. }
  31. };
  32. WBAccordion.defaultProps = {
  33. 'cardHeaderClass': 'card-header'
  34. };
  35. export default WBAccordion;