Source: parse.js

/**
 * This file holds the event for parsing a new version.
 * 
 * @module scripts/events/main/parse
 */

import RequestHandler from "../../request_handler.js";
import PageHandler from "../../page_handler.js";
import EventHandler from "../../event_handler.js";

/**
 * Parses and adds a new version.
 * 
 * @function parse_event
 * 
 * @param {HTMLElement} target            - Is the targeted UI element that was clicked.
 * @param {object} args                   - The data attributes of the targeted element.
 * @param {RequestHandler} requestHandler - The handler for HTTP requests.
 * @param {PageHandler} pageHandler       - The handler for UI updates.
 * @param {EventHandler} eventHandler     - The handler for the events.
 */
function parse_event(target, args, requestHandler, pageHandler, eventHandler, selectVersion=false) {

    function callbackAfterFileInput(inputElem) {

        requestHandler.GET("/api/current", [], (resCurr) => {

            if (resCurr.type) {

                requestHandler.POST("/api/parse", [ "False" ], inputElem, (res) => {

                    if (res.type) {
            
                        let newVersionElement = pageHandler.addVersion(res.payload, resCurr.payload);
                        pageHandler.addError(res.message, false);

                        if (selectVersion) {

                            let selectVersionCallback = eventHandler.events[eventHandler.SELECT_VERSION_EVENT_TAG];
                            selectVersionCallback(newVersionElement.children[0], args, requestHandler, pageHandler, eventHandler);

                        }

                    } else {
            
                        pageHandler.addError(res.error);

                    }
            
                });

            } else {

                pageHandler.addError(resCurr.error);

            }

        });

    }

    pageHandler.requestFile((inputElem) => {

        if (inputElem != null && inputElem.files[0] != null) {

            callbackAfterFileInput(inputElem);

        } else {

            pageHandler.addError(eventHandler.ERROR_FORMAT(eventHandler.NOT_A_VALID_FILE_ERROR));
            eventHandler.isHandlingEvent = false;

        }

    });

    if (!selectVersion) eventHandler.isHandlingEvent = false;

}

export default parse_event;