conditionalSlot-ba5cd797.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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.82
  5. */
  6. 'use strict';
  7. const index = require('./index-5c65e149.js');
  8. const observers = require('./observers-d9fdf006.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. function connectConditionalSlotComponent(component) {
  16. if (!mutationObserver) {
  17. mutationObserver = observers.createObserver("mutation", processMutations);
  18. }
  19. mutationObserver.observe(component.el, observerOptions);
  20. }
  21. /**
  22. * Helper to tear down a conditional slot component on disconnectedCallback.
  23. */
  24. function disconnectConditionalSlotComponent(component) {
  25. observed.delete(component.el);
  26. // we explicitly process queued mutations and disconnect and reconnect
  27. // the observer until MutationObserver gets an `unobserve` method
  28. // see https://github.com/whatwg/dom/issues/126
  29. processMutations(mutationObserver.takeRecords());
  30. mutationObserver.disconnect();
  31. for (const [element] of observed.entries()) {
  32. mutationObserver.observe(element, observerOptions);
  33. }
  34. }
  35. function processMutations(mutations) {
  36. mutations.forEach(({ target }) => {
  37. index.forceUpdate(target);
  38. });
  39. }
  40. exports.connectConditionalSlotComponent = connectConditionalSlotComponent;
  41. exports.disconnectConditionalSlotComponent = disconnectConditionalSlotComponent;