diff options
| author | AAGaming <aa@mail.catvibers.me> | 2022-10-24 19:14:56 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-24 16:14:56 -0700 |
| commit | 84c3b039c385ad872bb0f22eba7a3d2cd4a5ea10 (patch) | |
| tree | 20b13066c6256cc6ca1beac085094c7964226a37 /frontend/src/components/DeckyToaster.tsx | |
| parent | 2e6b3834da357c7e81821ce60bad36f54dd9fa6e (diff) | |
| download | decky-loader-84c3b039c385ad872bb0f22eba7a3d2cd4a5ea10.tar.gz decky-loader-84c3b039c385ad872bb0f22eba7a3d2cd4a5ea10.zip | |
preview 10/21/2022 fixes (#234)
* initial fixes: everything working except toasts and patch notes
* tabshook changes, disable toaster for now
* prettier
* oops
* implement custom toaster because I am tired of Valve's shit
also fix QAM not injecting sometimes
* remove extra logging
* add findSP, fix patch notes, fix vscode screwup
* fix patch notes
* show error when plugin frontends fail to load
* add get_tab_lambda
* add css and has_element helpers to Tab
* small modals fixup
* Don't forceUpdate QuickAccess on stable
* add routes prop used to get tabs component
* add more dev utils to DFL global
Diffstat (limited to 'frontend/src/components/DeckyToaster.tsx')
| -rw-r--r-- | frontend/src/components/DeckyToaster.tsx | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/frontend/src/components/DeckyToaster.tsx b/frontend/src/components/DeckyToaster.tsx new file mode 100644 index 00000000..eaee75eb --- /dev/null +++ b/frontend/src/components/DeckyToaster.tsx @@ -0,0 +1,54 @@ +import { ToastData, joinClassNames } from 'decky-frontend-lib'; +import { FC, useEffect, useState } from 'react'; +import { ReactElement } from 'react-markdown/lib/react-markdown'; + +import { useDeckyToasterState } from './DeckyToasterState'; +import Toast, { toastClasses } from './Toast'; + +interface DeckyToasterProps {} + +interface RenderedToast { + component: ReactElement; + data: ToastData; +} + +const DeckyToaster: FC<DeckyToasterProps> = () => { + const { toasts, removeToast } = useDeckyToasterState(); + const [renderedToast, setRenderedToast] = useState<RenderedToast | null>(null); + console.log(toasts); + if (toasts.size > 0) { + const [activeToast] = toasts; + if (!renderedToast || activeToast != renderedToast.data) { + // TODO play toast sound + console.log('rendering toast', activeToast); + setRenderedToast({ component: <Toast key={Math.random()} toast={activeToast} />, data: activeToast }); + } + } else { + if (renderedToast) setRenderedToast(null); + } + useEffect(() => { + // not actually node but TS is shit + let interval: NodeJS.Timer | null; + if (renderedToast) { + interval = setTimeout(() => { + interval = null; + console.log('clear toast', renderedToast.data); + removeToast(renderedToast.data); + }, (renderedToast.data.duration || 5e3) + 1000); + console.log('set int', interval); + } + return () => { + if (interval) { + console.log('clearing int', interval); + clearTimeout(interval); + } + }; + }, [renderedToast]); + return ( + <div className={joinClassNames('deckyToaster', toastClasses.ToastPlaceholder)}> + {renderedToast && renderedToast.component} + </div> + ); +}; + +export default DeckyToaster; |
