Source: viewer/loader/FileDropArea.js

import { UiElement } from "../../ui/UiElement.js";
import { LayerTree } from "../../map/LayerTree.js";
import { FileDropTarget } from "../../ui/dnd/FileDropTarget.js";
import { FileBinder } from "../../map/importer/binder/FileBinder.js";

/**
 * Loader for Drag Drop File Based Layers
 * 
 * @author rhess <robin.hess@awi.de>
 */


/**
 * A function that initializes a drag drop area
 * for file based layers
 * 
 * @memberof vef.viewer.loader
 * 
 * @param {object} options
 * @param {Viewer} viewer
 */
export function FileDropArea(options, viewer) {
    const layerTree = viewer.elements[options.targetTree];
    if (!(layerTree instanceof LayerTree)) return;

    let target = viewer.elements[options.dropTarget];
    if (target instanceof UiElement) target = target.getElement();
    if (target instanceof HTMLElement) {
        new FileDropTarget(target).on("drop", (files) => {
            for (let i in files) {
                if (files[i] instanceof File) {
                    FileBinder.loadFileLayer(files[i], options).then(data => {
                        layerTree.addStructuredLayers(data.layers, data.structure, "top");
                    });
                }
            }
        });
    }
}