🏡 index : quine-global/quine-anaconda-webui.git

/*
 * Copyright (C) 2025 Red Hat, Inc.
 * SPDX-License-Identifier: LGPL-2.1-or-later
 */

export const BUGZILLA_BASE_URL = "https://bugzilla.redhat.com";

/**
 * Create a Bugzilla URL for entering a bug report
 * @param {Object} osReleaseData - { product, version }
 * @param {String} component - Bugzilla component (defaults to "anaconda")
 * @returns {String} - The URL for entering a bug report in Bugzilla
 */
export const createBugzillaEnterBug = (osReleaseData, component = "anaconda") => {
    const queryData = {
        component,
        ...osReleaseData,
    };
    const reportURL = new URL(BUGZILLA_BASE_URL);

    reportURL.pathname = "enter_bug.cgi";

    Object.keys(queryData).map(query => reportURL.searchParams.append(query, queryData[query]));

    return reportURL.href;
};

/**
 * Build bug summary from exception
 * @param {Object} exception - Exception object with backendException and/or frontendException
 * @returns {String} - The bug summary
 */
export const buildBugSummary = (exception) => {
    if (!exception) {
        return "";
    }
    const context = exception.backendException?.contextData?.context || exception.frontendException?.contextData?.context || "";
    const contextPrefix = context ? context + " " : "";
    const backendMessage = exception.backendException?.message || "";
    const frontendMessage = exception.frontendException?.message || "";
    const name = (exception.backendException?.name || exception.frontendException?.name)
        ? (exception.backendException?.name || exception.frontendException?.name) + ": "
        : "";
    return contextPrefix + name + backendMessage + frontendMessage;
};

/**
 * Build bug description from user description, stacktrace, and environment info
 * @param {Object} params - { bugDescription, stacktrace, environmentInfo }
 * @returns {String} - The complete bug description
 */
export const buildBugDescription = ({ bugDescription, environmentInfo, stacktrace }) => {
    const sections = [];

    if (bugDescription?.trim()) {
        sections.push(bugDescription.trim());
    }

    if (stacktrace) {
        sections.push(`---[ Frontend Stacktrace ]---\n${stacktrace}`);
    }

    if (environmentInfo) {
        sections.push(environmentInfo);
    }

    return sections.join("\n\n");
};