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

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

import {
    getEnvironmentData,
    getEnvironments,
    getGroupData,
    getPackagesKickstarted,
    getPackagesSelection,
} from "../apis/payload_dnf.js";

export const getPayloadEnvironmentsAction = () => {
    return async (dispatch) => {
        const environmentIds = await getEnvironments();

        // Fetch environment data for each environment to get descriptions
        const environmentDataPromises = environmentIds.map(async (envId) => {
            const envData = await getEnvironmentData(envId);
            return {
                description: envData.description,
                id: envId,
                name: envData.name,
            };
        });

        const environments = await Promise.all(environmentDataPromises);

        return dispatch({
            payload: { environments },
            type: "SET_PAYLOAD_ENVIRONMENTS"
        });
    };
};

export const getPayloadPackagesSelectionAction = () => {
    return async (dispatch) => {
        const [selection, packagesKickstarted] = await Promise.all([
            getPackagesSelection(),
            getPackagesKickstarted(),
        ]);

        return dispatch({
            payload: { packagesKickstarted, selection },
            type: "SET_PAYLOAD_SELECTION"
        });
    };
};

export const getPayloadGroupsAction = (environment) => {
    return async (dispatch) => {
        const envData = await getEnvironmentData(environment);

        // Get available groups from environment data
        const optionalGroups = envData["optional-groups"];
        const visibleGroups = envData["visible-groups"];
        const defaultGroups = envData["default-groups"];

        // Combine all groups, removing duplicates
        const allGroups = [...new Set([...optionalGroups, ...visibleGroups])];

        // Fetch group data for each group
        const groupDataPromises = allGroups.map(async (groupId) => {
            const groupData = await getGroupData(groupId);
            return {
                description: groupData.description,
                id: groupId,
                isDefault: defaultGroups.includes(groupId),
                isOptional: optionalGroups.includes(groupId),
                name: groupData.name,
            };
        });

        const groups = await Promise.all(groupDataPromises);

        return dispatch({
            payload: { groups },
            type: "SET_PAYLOAD_GROUPS"
        });
    };
};