import React from "react"; import { useQuery } from "react-query"; import { ISoftwareInstallResult, ISoftwareInstallResults, } from "interfaces/software"; import softwareAPI from "services/entities/software"; import Modal from "components/Modal"; import Button from "components/buttons/Button"; import Icon from "components/Icon"; import Textarea from "components/Textarea"; import DataError from "components/DataError/DataError"; import Spinner from "components/Spinner/Spinner"; import { INSTALL_DETAILS_STATUS_ICONS, SOFTWARE_INSTALL_OUTPUT_DISPLAY_LABELS, getInstallDetailsStatusPredicate, } from "../constants"; const baseClass = "software-install-details"; const StatusMessage = ({ result: { host_display_name, software_package, software_title, status }, }: { result: ISoftwareInstallResult; }) => { return (
Fleet {getInstallDetailsStatusPredicate(status)} {software_title}{" "} ({software_package}) on {host_display_name} {status === "pending" ? " when it comes online" : ""}.
); }; const Output = ({ displayKey, result, }: { displayKey: keyof typeof SOFTWARE_INSTALL_OUTPUT_DISPLAY_LABELS; result: ISoftwareInstallResult; }) => { return (
{SOFTWARE_INSTALL_OUTPUT_DISPLAY_LABELS[displayKey]}:
); }; export const SoftwareInstallDetails = ({ installUuid, }: { installUuid: string; }) => { const { data: result, isLoading, isError } = useQuery< ISoftwareInstallResults, Error, ISoftwareInstallResult >( ["softwareInstallResults", installUuid], () => { return softwareAPI.getSoftwareInstallResult(installUuid); }, { refetchOnWindowFocus: false, staleTime: 3000, select: (data) => data.results, } ); if (isLoading) { return ; } else if (isError) { return ; } else if (!result) { // FIXME: Find a better solution for this. return ; } return ( <>
{result.status !== "pending" && ( <> {result.pre_install_query_output && ( )} {result.output && } {result.post_install_script_output && ( )} )}
); }; export const SoftwareInstallDetailsModal = ({ installUuid, onCancel, }: { installUuid: string; onCancel: () => void; }) => { return ( <>
); };