conditionalSlot-ef852d9d.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 index = require('./index-a0010f96.js');
  8. const observers = require('./observers-5706326b.js');
  9. const observed = new Set();
  10. let mutationObserver;
  11. const observerOptions = { childList: true };
  12. /**
  13. * Helper to set up a conditional slot component on connectedCallback.
  14. *
  15. * @param component
  16. */
  17. function connectConditionalSlotComponent(component) {
  18. if (!mutationObserver) {
  19. mutationObserver = observers.createObserver("mutation", processMutations);
  20. }
  21. mutationObserver.observe(component.el, observerOptions);
  22. }
  23. /**
  24. * Helper to tear down a conditional slot component on disconnectedCallback.
  25. *
  26. * @param component
  27. */
  28. function disconnectConditionalSlotComponent(component) {
  29. observed.delete(component.el);
  30. // we explicitly process queued mutations and disconnect and reconnect
  31. // the observer until MutationObserver gets an `unobserve` method
  32. // see https://github.com/whatwg/dom/issues/126
  33. processMutations(mutationObserver.takeRecords());
  34. mutationObserver.disconnect();
  35. for (const [element] of observed.entries()) {
  36. mutationObserver.observe(element, observerOptions);
  37. }
  38. }
  39. function processMutations(mutations) {
  40. mutations.forEach(({ target }) => {
  41. index.forceUpdate(target);
  42. });
  43. }
  44. exports.connectConditionalSlotComponent = connectConditionalSlotComponent;
  45. exports.disconnectConditionalSlotComponent = disconnectConditionalSlotComponent;