reblend-ui
Version:
Utilities for creating robust overlay components
74 lines (73 loc) • 1.67 kB
JavaScript
;
exports.__esModule = true;
exports.default = mergeOptionsWithPopperConfig;
exports.toModifierArray = toModifierArray;
exports.toModifierMap = toModifierMap;
function toModifierMap(modifiers) {
const result = {};
if (!Array.isArray(modifiers)) {
return modifiers || result;
}
modifiers?.forEach(m => {
result[m.name] = m;
});
return result;
}
function toModifierArray(map = {}) {
if (Array.isArray(map)) return map;
return Object.keys(map).map(k => {
map[k].name = k;
return map[k];
});
}
function mergeOptionsWithPopperConfig({
enabled,
enableEvents,
placement,
flip,
offset,
fixed,
containerPadding,
arrowElement,
popperConfig = {}
}) {
const modifiers = toModifierMap(popperConfig.modifiers);
return {
...popperConfig,
placement,
enabled,
strategy: fixed ? 'fixed' : popperConfig.strategy,
modifiers: toModifierArray({
...modifiers,
eventListeners: {
enabled: enableEvents,
options: modifiers.eventListeners?.options
},
preventOverflow: {
...modifiers.preventOverflow,
options: containerPadding ? {
padding: containerPadding,
...modifiers.preventOverflow?.options
} : modifiers.preventOverflow?.options
},
offset: {
options: {
offset,
...modifiers.offset?.options
}
},
arrow: {
...modifiers.arrow,
enabled: !!arrowElement,
options: {
...modifiers.arrow?.options,
element: arrowElement
}
},
flip: {
enabled: !!flip,
...modifiers.flip
}
})
};
}