import * as React from 'react'; import type { IInstanceMultiOutputLog } from '../../InstanceReader'; import { InstanceReader } from '../../InstanceReader'; import type { IInstance } from '../../../domain'; import type { IModalComponentProps } from '../../../presentation'; import { ModalBody, ModalFooter, ModalHeader, useData } from '../../../presentation'; import { Spinner } from '../../../widgets'; import './ConsoleOutputModal.less'; export interface IConsoleOutputModalProps extends IModalComponentProps { instance: IInstance; usesMultiOutput: boolean; } export const ConsoleOutputModal = ({ dismissModal, instance, usesMultiOutput }: IConsoleOutputModalProps) => { const logContainerEnd = React.useRef(null); const getConsoleOutput = () => { return InstanceReader.getConsoleOutput(instance.account, instance.region, instance.id, instance.provider); }; const { result: consoleOutputResponse, status, error, refresh: refreshLogs } = useData(getConsoleOutput, null, []); const consoleOutput = consoleOutputResponse?.output; const [selectedLog, setSelectedLog] = React.useState( (consoleOutputResponse?.output || [])[0] as IInstanceMultiOutputLog, ); const loading = status === 'PENDING'; const jumpToEnd = () => { logContainerEnd.current.scrollIntoView({ behavior: 'smooth' }); }; return ( <> Console Output: {instance.id}
{loading && (
)} {usesMultiOutput && !loading && Boolean(consoleOutput?.length) && (
{((consoleOutput as IInstanceMultiOutputLog[]) || []).map((log: IInstanceMultiOutputLog) => (
  • setSelectedLog(log)} ng-repeat="log in vm.consoleOutput" > {log.name}
))} {selectedLog &&
{selectedLog?.output}
}
)} {!usesMultiOutput && !loading && Boolean(consoleOutput?.length) && (
{consoleOutput}
)} {error && (

An error occurred trying to load console output. Please try again later.

Exception:

{error.data.body}
)}
{consoleOutput && ( )} {consoleOutput && ( )} } /> ); };