diff options
| author | AAGaming <aagaming@riseup.net> | 2024-07-28 18:19:55 -0400 |
|---|---|---|
| committer | AAGaming <aagaming@riseup.net> | 2024-08-03 14:04:20 -0400 |
| commit | 4cf80595ad61107a4edb2041e63983329f23ccb7 (patch) | |
| tree | f6353008999c12f0ee49e3647a54c47275c79c73 /frontend/src/plugin-loader.tsx | |
| parent | 4c23549748e71c061ea2fc1f8fa9262f15018cfc (diff) | |
| download | decky-loader-4cf80595ad61107a4edb2041e63983329f23ccb7.tar.gz decky-loader-4cf80595ad61107a4edb2041e63983329f23ccb7.zip | |
feat(toaster):add support for dismissing toasts and new indicator
Diffstat (limited to 'frontend/src/plugin-loader.tsx')
| -rw-r--r-- | frontend/src/plugin-loader.tsx | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/frontend/src/plugin-loader.tsx b/frontend/src/plugin-loader.tsx index f9032909..b1af76fc 100644 --- a/frontend/src/plugin-loader.tsx +++ b/frontend/src/plugin-loader.tsx @@ -1,16 +1,17 @@ +import { ToastNotification } from '@decky/api'; import { ModalRoot, + Navigation, PanelSection, PanelSectionRow, QuickAccessTab, - Router, findSP, quickAccessMenuClasses, showModal, sleep, } from '@decky/ui'; import { FC, lazy } from 'react'; -import { FaExclamationCircle, FaPlug } from 'react-icons/fa'; +import { FaDownload, FaExclamationCircle, FaPlug } from 'react-icons/fa'; import DeckyIcon from './components/DeckyIcon'; import { DeckyState, DeckyStateContextProvider, UserInfo, useDeckyState } from './components/DeckyState'; @@ -80,6 +81,9 @@ class PluginLoader extends Logger { // stores a list of plugin names which requested to be reloaded private pluginReloadQueue: { name: string; version?: string }[] = []; + private loaderUpdateToast?: ToastNotification; + private pluginUpdateToast?: ToastNotification; + constructor() { super(PluginLoader.name); @@ -174,10 +178,6 @@ class PluginLoader extends Logger { >('loader/get_plugins'); private async loadPlugins() { - // wait for SP window to exist before loading plugins - while (!findSP()) { - await sleep(100); - } const plugins = await this.getPluginsFromBackend(); const pluginLoadPromises = []; const loadStart = performance.now(); @@ -210,7 +210,8 @@ class PluginLoader extends Logger { if (versionInfo?.remote && versionInfo?.remote?.tag_name != versionInfo?.current) { this.deckyState.setHasLoaderUpdate(true); if (this.notificationService.shouldNotify('deckyUpdates')) { - this.toaster.toast({ + this.loaderUpdateToast && this.loaderUpdateToast.dismiss(); + this.loaderUpdateToast = this.toaster.toast({ title: <TranslationHelper transClass={TranslationClass.PLUGIN_LOADER} transText="decky_title" />, body: ( <TranslationHelper @@ -219,8 +220,9 @@ class PluginLoader extends Logger { i18nArgs={{ tag_name: versionInfo?.remote?.tag_name }} /> ), - icon: <DeckyIcon />, - onClick: () => Router.Navigate('/decky/settings'), + logo: <DeckyIcon />, + icon: <FaDownload />, + onClick: () => Navigation.Navigate('/decky/settings'), }); } } @@ -239,7 +241,8 @@ class PluginLoader extends Logger { public async notifyPluginUpdates() { const updates = await this.checkPluginUpdates(); if (updates?.size > 0 && this.notificationService.shouldNotify('pluginUpdates')) { - this.toaster.toast({ + this.pluginUpdateToast && this.pluginUpdateToast.dismiss(); + this.pluginUpdateToast = this.toaster.toast({ title: <TranslationHelper transClass={TranslationClass.PLUGIN_LOADER} transText="decky_title" />, body: ( <TranslationHelper @@ -248,8 +251,9 @@ class PluginLoader extends Logger { i18nArgs={{ count: updates.size }} /> ), - icon: <DeckyIcon />, - onClick: () => Router.Navigate('/decky/settings/plugins'), + logo: <DeckyIcon />, + icon: <FaDownload />, + onClick: () => Navigation.Navigate('/decky/settings/plugins'), }); } } |
