import { useState } from 'react'; import { useCurrentStateAndParams } from '@uirouter/react'; import { Terminal as TerminalIcon } from 'lucide-react'; import { baseHref } from '@/portainer/helpers/pathHelper'; import { TerminalTooltip } from '@/react/components/TerminalTooltip'; import { PageHeader } from '@@/PageHeader'; import { Widget, WidgetBody } from '@@/Widget'; import { Icon } from '@@/Icon'; import { Button } from '@@/buttons'; import { Input } from '@@/form-components/Input'; import { Terminal, isLinuxTerminalCommand, LINUX_SHELL_INIT_COMMANDS, } from '@@/Terminal/Terminal'; import type { ShellState } from '@@/Terminal/Terminal'; export function ConsoleView() { const { params: { endpointId: environmentId, container, name: appName, namespace, pod: podID, }, } = useCurrentStateAndParams(); const [command, setCommand] = useState('/bin/sh'); const [connect, setConnect] = useState(false); const [shellState, setShellState] = useState('idle'); const breadcrumbs = [ { label: 'Namespaces', link: 'kubernetes.resourcePools' }, { label: namespace, link: 'kubernetes.resourcePools.resourcePool', linkParams: { id: namespace }, }, { label: 'Applications', link: 'kubernetes.applications' }, { label: appName, link: 'kubernetes.applications.application', linkParams: { name: appName, namespace }, }, 'Pods', podID, 'Containers', container, 'Console', ]; return ( <>
Console
setCommand(e.target.value)} id="consoleCommand" disabled={connect} // eslint-disable-next-line jsx-a11y/no-autofocus autoFocus data-cy="console-command-input" />
); function handleConnect() { setConnect(true); } function handleDisconnect() { setConnect(false); } function handleStateChange(state: ShellState) { if (state === 'disconnected') { setConnect(false); } setShellState(state); } function buildUrl() { const params: Record = { endpointId: environmentId, namespace, podName: podID, containerName: container, command, }; const queryParams = Object.keys(params) .map((k) => `${k}=${params[k]}`) .join('&'); let url = `${ window.location.origin }${baseHref()}api/websocket/pod?${queryParams}`; if (url.indexOf('https') > -1) { url = url.replace('https://', 'wss://'); } else { url = url.replace('http://', 'ws://'); } return url; } }