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.

50 lines
1.6KB

  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. // console.log('WBAccordion() : domId=' + this.state.domId);
  9. }
  10. /* componentDidMount() {
  11. console.log('WBAccordion.componentDidMount()');
  12. }
  13. componentWillReceiveProps(nextProps) {
  14. console.log('WBAccordion.componentWillReceiveProps()');
  15. } */
  16. render({ children, names, cardHeaderClass }, { domId, headerDomIds, collapseDomIds }) {
  17. return (
  18. <div class="accordion" id={ domId }>
  19. { children.map((_, i) => (
  20. <div class="card">
  21. <div class={ cardHeaderClass} id={ headerDomIds[i] }>
  22. <h2 class="mb-0">
  23. <button class="btn btn-link" type="button" data-toggle="collapse" data-target={ '#' + collapseDomIds[i] } aria-expanded="false" aria-controls={ collapseDomIds[i] }>
  24. { names[i] }
  25. </button>
  26. </h2>
  27. </div>
  28. <div id={ collapseDomIds[i] } class="collapse" aria-labelledby={ headerDomIds[i] } data-parent={ '#' + domId }>
  29. <div class="card-body">
  30. { children[i] }
  31. </div>
  32. </div>
  33. </div>
  34. )) }
  35. </div>
  36. );
  37. }
  38. };
  39. WBAccordion.defaultProps = {
  40. 'cardHeaderClass': 'card-header'
  41. };
  42. export default WBAccordion;