@esri/calcite-components
Version:
Web Components for Esri's Calcite Design System.
59 lines (55 loc) • 2.01 kB
JavaScript
/*!
* All material copyright ESRI, All Rights Reserved, unless otherwise specified.
* See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
* v1.5.0-next.4
*/
;
const index = require('./index-55f8a3b7.js');
const observers = require('./observers-83b3999d.js');
const observed = new Set();
let mutationObserver;
const observerOptions = { childList: true };
/**
* Helper to set up a conditional slot component on connectedCallback.
*
* @param component
* @deprecated Use `onSlotchange` event with `slotChangeHasAssignedElement` DOM utility instead.
*
* ```
* <slot onSlotchange={(event) => this.mySlotHasElement = slotChangeHasAssignedElement(event)} />}
* ```
*/
function connectConditionalSlotComponent(component) {
if (!mutationObserver) {
mutationObserver = observers.createObserver("mutation", processMutations);
}
mutationObserver.observe(component.el, observerOptions);
}
/**
* Helper to tear down a conditional slot component on disconnectedCallback.
*
* @param component
* @deprecated Use `onSlotchange` event with `slotChangeHasAssignedElement` DOM utility instead.
*
* ```
* <slot onSlotchange={(event) => this.mySlotHasElement = slotChangeHasAssignedElement(event)} />}
* ```
*/
function disconnectConditionalSlotComponent(component) {
observed.delete(component.el);
// we explicitly process queued mutations and disconnect and reconnect
// the observer until MutationObserver gets an `unobserve` method
// see https://github.com/whatwg/dom/issues/126
processMutations(mutationObserver.takeRecords());
mutationObserver.disconnect();
for (const [element] of observed.entries()) {
mutationObserver.observe(element, observerOptions);
}
}
function processMutations(mutations) {
mutations.forEach(({ target }) => {
index.forceUpdate(target);
});
}
exports.connectConditionalSlotComponent = connectConditionalSlotComponent;
exports.disconnectConditionalSlotComponent = disconnectConditionalSlotComponent;