summaryrefslogtreecommitdiff
path: root/src/components/SetupTab.tsx
blob: 0095a7bf1fe0514fa9d78f19c3e8d4ac1959579f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import { ButtonItem, Field, PanelSection, PanelSectionRow } from "@decky/ui";
import { type FlatpakExtensionStatus, type SteamBranchStatus } from "../api/lsfgApi";
import t from "../i18n/i18n";

interface SetupTabProps {
  isInstalled: boolean;
  installationStatus: string;
  losslessScalingInstalled: boolean;
  losslessScalingStatus: string;
  flatpakStatus: FlatpakExtensionStatus | null;
  steamBranchStatus: SteamBranchStatus | null;
  isInstalling: boolean;
  isUninstalling: boolean;
  isRepairingFlatpak: boolean;
  onInstall: () => void;
  onUninstall: () => void;
  onRepairFlatpak: () => void;
}

export function SetupTab(props: SetupTabProps) {
  const {
    isInstalled,
    installationStatus,
    losslessScalingInstalled,
    losslessScalingStatus,
    flatpakStatus,
    steamBranchStatus,
    isInstalling,
    isUninstalling,
    isRepairingFlatpak,
    onInstall,
    onUninstall,
    onRepairFlatpak,
  } = props;
  const losslessScalingAppInstalled = losslessScalingInstalled || steamBranchStatus?.installed === true;
  const buttonLabel = isInstalling
    ? t("INSTALL_INSTALLING", "Installing...")
    : isUninstalling
      ? t("INSTALL_UNINSTALLING", "Uninstalling...")
      : isInstalled
        ? t("INSTALL_UNINSTALL_BTN", "Uninstall LSFG-VK")
        : t("INSTALL_INSTALL_BTN", "Install LSFG-VK");

  return (
    <PanelSection title="Setup">
      <PanelSectionRow>
        <Field
          label="Lossless Scaling"
          description={losslessScalingAppInstalled ? "Installed" : losslessScalingStatus || "Not installed"}
        />
      </PanelSectionRow>
      <PanelSectionRow>
        <Field label="LSFG-VK" description={installationStatus} />
      </PanelSectionRow>
      <PanelSectionRow>
        <Field
          label="Flatpak support"
          description={
            !flatpakStatus
              ? "Status unavailable"
              : !flatpakStatus.available
                ? "Flatpak is not available"
                : flatpakStatus.ready
                  ? "Configured for 23.08, 24.08, and 25.08"
                  : flatpakStatus.error || "Needs repair"
          }
        />
      </PanelSectionRow>
      {flatpakStatus?.available && !flatpakStatus.ready && (
        <PanelSectionRow>
          <ButtonItem
            layout="below"
            onClick={onRepairFlatpak}
            disabled={isRepairingFlatpak || isInstalling || isUninstalling}
          >
            {isRepairingFlatpak ? "Repairing Flatpak support..." : "Repair Flatpak support"}
          </ButtonItem>
        </PanelSectionRow>
      )}
      {steamBranchStatus?.installed && (
        <PanelSectionRow>
          <Field
            label="Steam branch"
            description={`${steamBranchStatus.current_branch || "public"}${steamBranchStatus.needs_switch ? ` - ${steamBranchStatus.message}` : ""}`}
          />
        </PanelSectionRow>
      )}
      <PanelSectionRow>
        <ButtonItem
          layout="below"
          onClick={isInstalled ? onUninstall : onInstall}
          disabled={isInstalling || isUninstalling}
        >
          {buttonLabel}
        </ButtonItem>
      </PanelSectionRow>
    </PanelSection>
  );
}