From b79b94527965965aa27a88701e511f828542804b Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Wed, 14 Jun 2023 15:16:59 +0000 Subject: [PATCH 1/2] fix(site): resize terminal when warning is dismissed --- .vscode/settings.json | 8 +-- site/src/pages/TerminalPage/TerminalPage.tsx | 68 +++++++++++++------ .../pages/TerminalPage/TerminalPageAlert.tsx | 1 + 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8375c7848ab52..1ae5f3419f969 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -212,11 +212,5 @@ // We often use a version of TypeScript that's ahead of the version shipped // with VS Code. "typescript.tsdk": "./site/node_modules/typescript/lib", - "grammarly.selectors": [ - { - "language": "markdown", - "scheme": "file", - "pattern": "docs/contributing/frontend.md" - } - ] + "prettier.prettierPath": "./node_modules/prettier" } diff --git a/site/src/pages/TerminalPage/TerminalPage.tsx b/site/src/pages/TerminalPage/TerminalPage.tsx index ccf035d55e7b9..0c0e1ab97212f 100644 --- a/site/src/pages/TerminalPage/TerminalPage.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.tsx @@ -17,7 +17,7 @@ import { terminalMachine } from "../../xServices/terminal/terminalXService" import { useProxy } from "contexts/ProxyContext" import Box from "@mui/material/Box" import { useDashboard } from "components/Dashboard/DashboardProvider" -import { Region } from "api/typesGenerated" +import { Region, WorkspaceAgent } from "api/typesGenerated" import { getLatencyColor } from "utils/latency" import Popover from "@mui/material/Popover" import { ProxyStatusLatency } from "components/ProxyStatusLatency/ProxyStatusLatency" @@ -29,6 +29,46 @@ export const Language = { websocketErrorMessagePrefix: "WebSocket failed: ", } +const useTerminalWarning = ({ + agent, + fitAddon, +}: { + agent?: WorkspaceAgent + fitAddon: FitAddon | null +}) => { + const lifecycleState = agent?.lifecycle_state + const [startupWarning, setStartupWarning] = useState< + TerminalPageAlertType | undefined + >(undefined) + const shouldDisplayWarning = startupWarning !== undefined + + useEffect(() => { + if (lifecycleState === "start_error") { + setStartupWarning("error") + } else if (lifecycleState === "starting") { + setStartupWarning("starting") + } else { + setStartupWarning((prev) => { + if (prev === "starting") { + return "success" + } + return undefined + }) + } + }, [lifecycleState]) + + // Resize the terminal when the warning toggles + useEffect(() => { + if (fitAddon) { + fitAddon.fit() + } + }, [shouldDisplayWarning, fitAddon]) + + return { + startupWarning, + } +} + const TerminalPage: FC = () => { const navigate = useNavigate() const styles = useStyles() @@ -50,7 +90,7 @@ const TerminalPage: FC = () => { context: { agentName: workspaceNameParts?.[1], reconnection: reconnectionToken, - workspaceName: workspaceNameParts?.[0], + workspaceName: workspaceNameParts?.[0] as string, username: username, command: command, baseURL: proxy.preferredPathAppURL, @@ -77,32 +117,16 @@ const TerminalPage: FC = () => { websocketError, } = terminalState.context const reloading = useReloading(isDisconnected) - const lifecycleState = workspaceAgent?.lifecycle_state - const [startupWarning, setStartupWarning] = useState< - TerminalPageAlertType | undefined - >(undefined) - - useEffect(() => { - if (lifecycleState === "start_error") { - setStartupWarning("error") - } else if (lifecycleState === "starting") { - setStartupWarning("starting") - } else { - setStartupWarning((prev) => { - if (prev === "starting") { - return "success" - } - return undefined - }) - } - }, [lifecycleState]) - const dashboard = useDashboard() const proxyContext = useProxy() const selectedProxy = proxyContext.proxy.proxy const latency = selectedProxy ? proxyContext.proxyLatencies[selectedProxy.id] : undefined + const { startupWarning } = useTerminalWarning({ + agent: workspaceAgent, + fitAddon, + }) // handleWebLink handles opening of URLs in the terminal! const handleWebLink = useCallback( diff --git a/site/src/pages/TerminalPage/TerminalPageAlert.tsx b/site/src/pages/TerminalPage/TerminalPageAlert.tsx index 3816ff60a92ae..0cca5cb3a8097 100644 --- a/site/src/pages/TerminalPage/TerminalPageAlert.tsx +++ b/site/src/pages/TerminalPage/TerminalPageAlert.tsx @@ -91,6 +91,7 @@ export default ({ alertType }: { alertType: TerminalPageAlertType }) => { return ( Date: Wed, 14 Jun 2023 15:19:03 +0000 Subject: [PATCH 2/2] Remove change --- site/src/pages/TerminalPage/TerminalPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/TerminalPage/TerminalPage.tsx b/site/src/pages/TerminalPage/TerminalPage.tsx index 0c0e1ab97212f..4d0b45f6c791c 100644 --- a/site/src/pages/TerminalPage/TerminalPage.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.tsx @@ -90,7 +90,7 @@ const TerminalPage: FC = () => { context: { agentName: workspaceNameParts?.[1], reconnection: reconnectionToken, - workspaceName: workspaceNameParts?.[0] as string, + workspaceName: workspaceNameParts?.[0], username: username, command: command, baseURL: proxy.preferredPathAppURL,