Source: viewer/loader/DASFLoader.js

import { Window } from '../../ui/Window.js';
import { DASFForm } from "../../data/dasf/DASFForm.js";
import { responseHandlerRegistry } from '../../data/dasf/responseHandlerRegistry.js';

/**
 * A function that creates the DASF loader form
 * 
 * @memberof vef.viewer.loader
 * 
 * @param {object} options 
 * @param {Viewer} viewer 
 */
export function DASFLoader(options, viewer) {

    const element = new DASFForm(null, {});
    viewer.addElement(options.id, element);

    import('@dasf/dasf-messaging').then(mod => {
        const dasfConnection = new mod.DASFConnection(new mod.WebsocketUrlBuilder(options.websocketUrl, options.topic));

        element.on("invalid", e => console.log(e));
        element.on("submit", (data) => {
            const plotWindow = new Window(null, {
                width: "500px",
                height: "unset",
                open: true,
                center: true,
                title: "Data Analytics Software Framework"
            });
            plotWindow.setContent("Request submitted...")

            dasfConnection.sendRequest(
                data).then(
                (response) => {
                    var responseHandler;
                    if (response.response_type) {
                        responseHandler = responseHandlerRegistry[response.response_type];
                        responseHandler(response, plotWindow);
                    } else {
                        responseHandler = responseHandlerRegistry.default;
                        responseHandler(response, plotWindow);
                    }
                }
            ).catch(
                (error) => {
                    const responseHandler = responseHandlerRegistry.default;
                    responseHandler(error, plotWindow);
                }
            )
        });

        dasfConnection.getApiInfo().then(
            (api_info) => {
                element.initForm(api_info.functions.map((info) => info.rpcSchema));
            }
        )
    
    });
}