import { DialogBody, DialogButton, DialogControlsSection, Field, Focusable, Navigation, ProgressBar, SteamSpinner, } from '@decky/ui'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FaDownload, FaFlask, FaInfo } from 'react-icons/fa'; import { setSetting } from '../../../../utils/settings'; import { UpdateBranch } from '../general/BranchSelect'; interface TestingVersion { id: number; name: string; link: string; head_sha: string; } const getTestingVersions = DeckyBackend.callable<[], TestingVersion[]>('updater/get_testing_versions'); const downloadTestingVersion = DeckyBackend.callable<[pr_id: number, sha: string]>('updater/download_testing_version'); export default function TestingVersionList() { const { t } = useTranslation(); const [testingVersions, setTestingVersions] = useState([]); const [loading, setLoading] = useState(true); const [updateProgress, setUpdateProgress] = useState(null); const [reloading, setReloading] = useState(false); useEffect(() => { (async () => { setTestingVersions(await getTestingVersions()); setLoading(false); })(); }, []); useEffect(() => { const a = DeckyBackend.addEventListener('updater/update_download_percentage', (percentage) => { setUpdateProgress(percentage); }); const b = DeckyBackend.addEventListener('updater/finish_download', () => { setReloading(true); }); return () => { DeckyBackend.removeEventListener('updater/update_download_percentage', a); DeckyBackend.removeEventListener('updater/finish_download', b); }; }, []); if (loading) { return ( <> {t('Testing.loading')} ); } if (testingVersions.length === 0) { return (

No open PRs found

); } return ( {updateProgress !== null && }

{t('Testing.header')}

    {testingVersions.map((version) => { return (
  • {version.name} {'#' + version.id} } > { const downloadToast = DeckyPluginLoader.toaster.toast({ title: t('Testing.start_download_toast', { id: version.id }), body: null, icon: , }); try { await downloadTestingVersion(version.id, version.head_sha); downloadToast.dismiss(); } catch (e) { if (e instanceof Error) { DeckyPluginLoader.toaster.toast({ title: t('Testing.error'), body: `${e.name}: ${e.message}`, icon: , }); } } setSetting('branch', UpdateBranch.Testing); }} >
    {t('Testing.download')}
    Navigation.NavigateToExternalWeb(version.link)} >
  • ); })}
); }