fluid-dnd
Version:
An agnostic drag and drop library to sort all kind of lists. With current support for vue, react and svelte
33 lines (32 loc) • 1.36 kB
JavaScript
import { getScrollElement, isSameNode } from '../utils/GetStyles';
import { containstClasses } from '../utils/dom/classList';
export default class ConfigHandler {
static configs = [];
static addConfig(droppable, config) {
const configs = ConfigHandler.configs.filter((configHandler) => !isSameNode(configHandler.droppable, droppable));
const scroll = getScrollElement(droppable);
configs.push({
droppable,
config,
scroll
});
ConfigHandler.configs = configs;
}
static removeObsoleteConfigs = () => {
const notObsoltete = ConfigHandler.configs.filter(({ droppable }) => document.contains(droppable));
ConfigHandler.configs = notObsoltete;
};
static updateScrolls(currentDroppable, droppableGroupClass) {
for (const configHandler of ConfigHandler.configs) {
const { droppable } = configHandler;
if ((droppableGroupClass && containstClasses(droppable, droppableGroupClass)) ||
isSameNode(currentDroppable, droppable)) {
configHandler.scroll = getScrollElement(droppable);
}
}
}
static getConfig(curerntDroppable) {
const config = ConfigHandler.configs.find(({ droppable }) => isSameNode(curerntDroppable, droppable));
return config;
}
}