import { ButtonItem, Field, PanelSection, PanelSectionRow, Spinner } from "@decky/ui"; import { useEffect, useState } from "react"; import { RiArrowDownSFill, RiArrowUpSFill } from "react-icons/ri"; import { getDebugFileContents, type DebugFileContent, type DebugFileContentsResult } from "../api/lsfgApi"; import t from "../i18n/i18n"; function usePersistentCollapsed(key: string) { const [collapsed, setCollapsed] = useState(() => { try { return localStorage.getItem(key) !== "false"; } catch { return true; } }); useEffect(() => { try { localStorage.setItem(key, String(collapsed)); } catch { // Persisting the view preference is optional. } }, [collapsed, key]); return [collapsed, () => setCollapsed((value) => !value)] as const; } function DebugFileSection({ file }: { file: DebugFileContent }) { const [collapsed, toggleCollapsed] = usePersistentCollapsed(`lsfg-debug-file-${file.id}-collapsed-v1`); const status = file.exists ? "Present" : "Not present"; return ( <>
{collapsed ? : }
{!collapsed && ( {file.exists && file.content !== null && file.content !== undefined ? (
              {file.content}
            
) : ( )}
)} ); } export function ConfigFileTab() { const [result, setResult] = useState(null); useEffect(() => { getDebugFileContents().then(setResult).catch((error) => { setResult({ success: false, error: String(error) }); }); }, []); if (!result) { return ( ); } return ( <> {result.error && ( )} {result.success && result.files?.map((file) => ( ))} ); }