Source: map/importer/ImporterWindow.js

import { TabGroup } from "../../ui/TabGroup.js";
import { Window } from "../../ui/Window.js";
import { DwsUi } from "./ui/DwsUi.js";
import { ServiceUi } from "./ui/ServiceUi.js";
import { CatalogUi } from "./ui/CatalogUi.js";
import { FileUi } from "./ui/FileUi.js";
import { StaUi } from "./ui/StaUi.js";
import "./ImporterWindow.css";

export { ImporterWindow };

/**
 * Tool for importing layers from different sources
 * 
 * @memberof vef.map.importer
 */
class ImporterWindow extends Window {

    constructor(target, options) {
        super(target, {
            draggable: true,
            title: "Data Importer",
            width: "500px",
            responsive: true
        });

        this.events["add_layers"] = [];
        this.events["show_info"] = [];
        this.options_ = Object.assign({
            "catalog": {},
            "service": {},
            "file": {},
            "dws": {},
            "sta": {}
        }, options || {});

        this.importers_ = [];
        this.tabGroup_ = new TabGroup();

        this.getElement().classList.add("importer-window");
        this.setContent(this.tabGroup_.getElement());
        this.initImporters_();
    }

    initImporters_() {
        const importers = {
            "service": ServiceUi,
            "dws": DwsUi,
            "catalog": CatalogUi,
            "file": FileUi,
            "sta": StaUi
        };

        for (let i in this.options_) {
            if (i in importers) {
                this.addImporter_(new importers[i](null, this.options_[i]));
            }
        }
    }

    addImporter_(importer) {
        this.importers_.push(importer);
        this.tabGroup_.addGroup(importer.title, importer.getElement());

        importer.on("add_layers", (layers) => {
            this.fire("add_layers", layers);
        });

        if ("show_info" in importer.events) {
            importer.on("show_info", layer => {
                this.fire("show_info", layer);
            });
        }

        if ("close" in importer.events) {
            importer.on("close", () => this.close());
        }
    }

}