openCloseComponent-178191c0.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*!
  2. * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
  4. * v1.0.0-beta.97
  5. */
  6. 'use strict';
  7. const componentToTransitionListeners = new WeakMap();
  8. function transitionStart(event) {
  9. if (event.propertyName === this.openTransitionProp && event.target === this.transitionEl) {
  10. this.open ? this.onBeforeOpen() : this.onBeforeClose();
  11. }
  12. }
  13. function transitionEnd(event) {
  14. if (event.propertyName === this.openTransitionProp && event.target === this.transitionEl) {
  15. this.open ? this.onOpen() : this.onClose();
  16. }
  17. }
  18. /**
  19. * Helper to keep track of transition listeners on setTransitionEl and connectedCallback on OpenCloseComponent components.
  20. *
  21. * @param component
  22. */
  23. function connectOpenCloseComponent(component) {
  24. disconnectOpenCloseComponent(component);
  25. if (component.transitionEl) {
  26. const boundOnTransitionStart = transitionStart.bind(component);
  27. const boundOnTransitionEnd = transitionEnd.bind(component);
  28. componentToTransitionListeners.set(component, [
  29. component.transitionEl,
  30. boundOnTransitionStart,
  31. boundOnTransitionEnd
  32. ]);
  33. component.transitionEl.addEventListener("transitionstart", boundOnTransitionStart);
  34. component.transitionEl.addEventListener("transitionend", boundOnTransitionEnd);
  35. }
  36. }
  37. /**
  38. * Helper to tear down transition listeners on disconnectedCallback on OpenCloseComponent components.
  39. *
  40. * @param component
  41. */
  42. function disconnectOpenCloseComponent(component) {
  43. if (!componentToTransitionListeners.has(component)) {
  44. return;
  45. }
  46. const [transitionEl, start, end] = componentToTransitionListeners.get(component);
  47. transitionEl.removeEventListener("transitionstart", start);
  48. transitionEl.removeEventListener("transitionend", end);
  49. componentToTransitionListeners.delete(component);
  50. }
  51. exports.connectOpenCloseComponent = connectOpenCloseComponent;
  52. exports.disconnectOpenCloseComponent = disconnectOpenCloseComponent;