@sveltestrap/sveltestrap
Version:
Bootstrap components for Svelte
53 lines (45 loc) • 1.27 kB
JavaScript
import { createPopper } from '@popperjs/core';
// Code derived from https://github.com/bryanmylee/svelte-popperjs/blob/master/src/index.ts
export function createPopperActions(initOptions) {
let contentNode;
let options = initOptions;
let popperInstance = null;
let referenceNode;
const initPopper = () => {
if (referenceNode && contentNode) {
popperInstance = createPopper(referenceNode, contentNode, options);
}
};
const deinitPopper = () => {
if (popperInstance) {
popperInstance.destroy();
popperInstance = null;
}
};
const referenceAction = (node) => {
referenceNode = node;
initPopper();
return {
destroy() {
deinitPopper();
}
};
};
const contentAction = (node, contentOptions) => {
contentNode = node;
options = Object.assign(Object.assign({}, initOptions), contentOptions);
initPopper();
return {
update(newContentOptions) {
options = Object.assign(Object.assign({}, initOptions), newContentOptions);
if (popperInstance && options) {
popperInstance.setOptions(options);
}
},
destroy() {
deinitPopper();
}
};
};
return [referenceAction, contentAction, () => popperInstance];
}