import { Tabs } from "@decky/ui"; import { useEffect, useRef, useState } from "react"; import { FaFileAlt, FaGamepad, FaLayerGroup, FaList, FaTools } from "react-icons/fa"; import { ConfigurationData } from "../config/configSchema"; import { tabStyles } from "../styles"; import { useGameConfiguration } from "../hooks/useGameConfiguration"; import { useInstallationActions } from "../hooks/useInstallationActions"; import { useInstallationStatus } from "../hooks/useLsfgHooks"; import { ConfigFileTab } from "./ConfigFileTab"; import { ConfigurationTab } from "./ConfigurationTab"; import { FlatpaksTab } from "./FlatpaksTab"; import { NowPlayingTab } from "./NowPlayingTab"; import { SetupTab } from "./SetupTab"; const tabIcons = { nowPlaying: , configuration: , flatpak: , configFile: , setup: , }; export function Content() { const { isInstalled, installationStatus, setIsInstalled, setInstallationStatus, losslessScalingInstalled, losslessScalingStatus, steamBranchStatus, checkInstallation, } = useInstallationStatus(); const { config, targets, runningGame, setSelectedAppId, save, enable, resetSelected, resetAll, reload, } = useGameConfiguration(); const { isInstalling, isUninstalling, handleInstall, handleUninstall } = useInstallationActions(); const [tab, setTab] = useState("Setup"); const setupComplete = isInstalled && losslessScalingInstalled && steamBranchStatus?.success === true && steamBranchStatus.installed && !steamBranchStatus.needs_switch; const previousRunningState = useRef<{ appid: string; configured: boolean } | null>(null); useEffect(() => { if (!setupComplete) { setTab("Setup"); return; } setTab((current) => current === "Setup" ? (runningGame?.configured ? "NowPlaying" : "Configuration") : current); }, [runningGame?.configured, setupComplete]); useEffect(() => { if (!setupComplete) return; const current = runningGame ? { appid: runningGame.appid, configured: runningGame.configured } : null; const previous = previousRunningState.current; previousRunningState.current = current; if (current?.appid && (current.appid !== previous?.appid || current.configured !== previous?.configured)) { setTab(current.configured ? "NowPlaying" : "Configuration"); } else if (!current && previous) { setTab((currentTab) => currentTab === "NowPlaying" ? "Configuration" : currentTab); } }, [runningGame?.appid, runningGame?.configured, setupComplete]); useEffect(() => { if (isInstalled) void reload(); }, [isInstalled, reload]); const handleConfigChange = async ( fieldName: keyof ConfigurationData, value: boolean | number | string | string[], ) => { await save({ ...config, [fieldName]: value }); }; const onInstall = () => { void handleInstall(setIsInstalled, setInstallationStatus, reload, checkInstallation); }; const onUninstall = () => { void handleUninstall(setIsInstalled, setInstallationStatus, checkInstallation); }; const setupContent = ( ); const tabs = setupComplete ? [ ...(runningGame?.configured ? [{ id: "NowPlaying", title: tabIcons.nowPlaying, content: ( ), }] : []), { id: "Configuration", title: tabIcons.configuration, content: ( ), }, { id: "Flatpak", title: tabIcons.flatpak, content: }, { id: "ConfigFile", title: tabIcons.configFile, content: }, { id: "Setup", title: tabIcons.setup, content: setupContent }, ] : [ { id: "Setup", title: tabIcons.setup, content: setupContent }, ]; return (
); }