import { useEffect } from "react";
import { Text, View } from "react-native";
import { useTranslation } from "react-i18next";
import { StyleSheet } from "react-native-unistyles";
import { useAppSettings } from "../hooks/use-settings";
import { resolveTerminalRendererSelection } from "../terminal/native-renderer/terminal-renderer-capability";
import NativeGridTerminalEmulator from "./terminal-emulator-native-grid.native";
import WebViewTerminalEmulator from "./terminal-emulator-webview.native";
import type { TerminalEmulatorProps } from "./terminal-emulator-contract";
export type { TerminalEmulatorHandle } from "./terminal-emulator-contract";
function UnsupportedNativeTerminal({ streamKey, onRendererReadyChange }: TerminalEmulatorProps) {
const { t } = useTranslation();
useEffect(() => {
onRendererReadyChange?.({ streamKey, isReady: false });
}, [onRendererReadyChange, streamKey]);
return (
{t("workspace.terminal.updateHost")}
);
}
export default function TerminalEmulator(props: TerminalEmulatorProps) {
const { settings } = useAppSettings();
const { useLegacyTerminalRenderer } = settings;
const rendererSelection = resolveTerminalRendererSelection({
useLegacyTerminalRenderer,
supportsTerminalInputModeReplay: props.supportsTerminalInputModeReplay,
});
if (rendererSelection === "update-host") {
return ;
}
const Renderer =
rendererSelection === "webview" ? WebViewTerminalEmulator : NativeGridTerminalEmulator;
return ;
}
const styles = StyleSheet.create((theme) => ({
unsupportedContainer: {
flex: 1,
alignItems: "center",
justifyContent: "center",
padding: 24,
},
unsupportedText: {
color: theme.colors.foregroundMuted,
textAlign: "center",
},
}));