import { Image } from "expo-image"; import { t } from "i18next"; import React, { useMemo } from "react"; import { Alert, ScrollView, View } from "react-native"; import { useMMKVString } from "react-native-mmkv"; import { Text } from "@/components/common/Text"; import { useScaledTVTypography } from "@/constants/TVTypography"; import type { SavedServer } from "@/utils/secureCredentials"; import { TVAddIcon } from "./TVAddIcon"; import { TVServerIcon } from "./TVServerIcon"; interface TVServerSelectionScreenProps { onServerSelect: (server: SavedServer) => void; onAddServer: () => void; onDeleteServer: (server: SavedServer) => void; disabled?: boolean; } export const TVServerSelectionScreen: React.FC< TVServerSelectionScreenProps > = ({ onServerSelect, onAddServer, onDeleteServer, disabled = false }) => { const typography = useScaledTVTypography(); const [_previousServers] = useMMKVString("previousServers"); const previousServers = useMemo(() => { try { return JSON.parse(_previousServers || "[]") as SavedServer[]; } catch { return []; } }, [_previousServers]); const hasServers = previousServers.length > 0; const handleDeleteServer = (server: SavedServer) => { Alert.alert( t("server.remove_server"), t("server.remove_server_description", { server: server.name || server.address, }), [ { text: t("common.cancel"), style: "cancel" }, { text: t("common.delete"), style: "destructive", onPress: () => onDeleteServer(server), }, ], ); }; return ( {/* Logo */} {/* Title */} Streamyfin {hasServers ? t("server.select_your_server") : t("server.add_server_to_get_started")} {/* Server Icons Grid */} {previousServers.map((server, index) => ( onServerSelect(server)} onLongPress={() => handleDeleteServer(server)} hasTVPreferredFocus={index === 0} disabled={disabled} /> ))} {/* Add Server Button */} ); };