diff options
| author | Kurt Himebauch <136133082+xXJSONDeruloXx@users.noreply.github.com> | 2025-07-29 07:53:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-29 10:53:45 -0400 |
| commit | 0b5e71fe916e92ef9ecf7de91ca43371c4bd6d25 (patch) | |
| tree | 30793600da162d9d8fcc63cddeebb1e5a0b058cb /src/components/FGModInstallerSection.tsx | |
| parent | 526e4e590bb0125f7f7a08e214986afec73e7439 (diff) | |
| download | Decky-Framegen-0b5e71fe916e92ef9ecf7de91ca43371c4bd6d25.tar.gz Decky-Framegen-0b5e71fe916e92ef9ecf7de91ca43371c4bd6d25.zip | |
wording and layout tweaks (#125)v0.11.8
* wording and layout tweaks
* red in remove button
* reorganize frontend components
* fix ld preload permissions issue for decky 3.1.10
* bump ver
Diffstat (limited to 'src/components/FGModInstallerSection.tsx')
| -rw-r--r-- | src/components/FGModInstallerSection.tsx | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/src/components/FGModInstallerSection.tsx b/src/components/FGModInstallerSection.tsx deleted file mode 100644 index b82e749..0000000 --- a/src/components/FGModInstallerSection.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { useState, useEffect } from "react"; -import { PanelSection, PanelSectionRow, ButtonItem } from "@decky/ui"; -import { runInstallFGMod, runUninstallFGMod } from "../api"; -import { OperationResult } from "./ResultDisplay"; -import { SmartClipboardButton } from "./SmartClipboardButton"; -import { createAutoCleanupTimer } from "../utils"; -import { TIMEOUTS, MESSAGES, STYLES } from "../utils/constants"; -import optiScalerImage from "../../assets/optiscaler.png"; - -interface FGModInstallerSectionProps { - pathExists: boolean | null; - setPathExists: (exists: boolean | null) => void; -} - -export function FGModInstallerSection({ pathExists, setPathExists }: FGModInstallerSectionProps) { - const [installing, setInstalling] = useState(false); - const [uninstalling, setUninstalling] = useState(false); - const [installResult, setInstallResult] = useState<OperationResult | null>(null); - const [uninstallResult, setUninstallResult] = useState<OperationResult | null>(null); - - useEffect(() => { - if (installResult) { - return createAutoCleanupTimer(() => setInstallResult(null), TIMEOUTS.resultDisplay); - } - return () => {}; // Ensure a cleanup function is always returned - }, [installResult]); - - useEffect(() => { - if (uninstallResult) { - return createAutoCleanupTimer(() => setUninstallResult(null), TIMEOUTS.resultDisplay); - } - return () => {}; // Ensure a cleanup function is always returned - }, [uninstallResult]); - - const handleInstallClick = async () => { - try { - setInstalling(true); - const result = await runInstallFGMod(); - setInstallResult(result); - if (result.status === "success") { - setPathExists(true); - } - } catch (e) { - console.error(e); - } finally { - setInstalling(false); - } - }; - - const handleUninstallClick = async () => { - try { - setUninstalling(true); - const result = await runUninstallFGMod(); - setUninstallResult(result); - if (result.status === "success") { - setPathExists(false); - } - } catch (e) { - console.error(e); - } finally { - setUninstalling(false); - } - }; - - return ( - <PanelSection> - {pathExists === false ? ( - <PanelSectionRow> - <div style={STYLES.statusNotInstalled}> - {MESSAGES.modNotInstalled} - </div> - </PanelSectionRow> - ) : null} - - {pathExists === false ? ( - <PanelSectionRow> - <ButtonItem layout="below" onClick={handleInstallClick} disabled={installing}> - {installing ? MESSAGES.installing : MESSAGES.installButton} - </ButtonItem> - </PanelSectionRow> - ) : null} - - {pathExists === true ? ( - <PanelSectionRow> - <ButtonItem layout="below" onClick={handleUninstallClick} disabled={uninstalling}> - {uninstalling ? MESSAGES.uninstalling : MESSAGES.uninstallButton} - </ButtonItem> - </PanelSectionRow> - ) : null} - - {pathExists === true ? ( - <PanelSectionRow> - <div style={{ - display: 'flex', - justifyContent: 'center', - marginBottom: '16px' - }}> - <img - src={optiScalerImage} - alt="OptiScaler" - style={{ - maxWidth: '100%', - height: 'auto', - borderRadius: '8px' - }} - /> - </div> - </PanelSectionRow> - ) : null} - - {pathExists === true ? ( - <PanelSectionRow> - <div style={STYLES.instructionCard}> - <div style={{ fontWeight: 'bold', marginBottom: '8px', color: 'var(--decky-accent-text)' }}> - {MESSAGES.instructionTitle} - </div> - <div style={{ whiteSpace: 'pre-line' }}> - {MESSAGES.instructionText} - </div> - </div> - </PanelSectionRow> - ) : null} - - {pathExists === true ? ( - <SmartClipboardButton - command="~/fgmod/fgmod %command%" - buttonText="Copy Patch Command" - /> - ) : null} - - {pathExists === true ? ( - <SmartClipboardButton - command="~/fgmod/fgmod-uninstaller.sh %command%" - buttonText="Copy Unpatch Command" - /> - ) : null} - </PanelSection> - ); -} |
