diff options
| author | AAGaming <aa@mail.catvibers.me> | 2022-08-09 21:52:03 -0400 |
|---|---|---|
| committer | AAGaming <aa@mail.catvibers.me> | 2022-08-09 21:52:03 -0400 |
| commit | 67426af3ef73e788d99b6d2e0c730c270daea273 (patch) | |
| tree | 30c1f4b33e63d38d8d5cc26f26af655f1b5a44ba /frontend/src/components/Toast.tsx | |
| parent | 0dbdb4a143f6e4f2b08c5a38a597d5a1c49a109c (diff) | |
| download | decky-loader-67426af3ef73e788d99b6d2e0c730c270daea273.tar.gz decky-loader-67426af3ef73e788d99b6d2e0c730c270daea273.zip | |
Add api for showing toast notificationsv2.0.4-67426af-pre
Diffstat (limited to 'frontend/src/components/Toast.tsx')
| -rw-r--r-- | frontend/src/components/Toast.tsx | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/frontend/src/components/Toast.tsx b/frontend/src/components/Toast.tsx new file mode 100644 index 00000000..559c37c6 --- /dev/null +++ b/frontend/src/components/Toast.tsx @@ -0,0 +1,54 @@ +import { ToastData, findModule, joinClassNames } from 'decky-frontend-lib'; +import { FunctionComponent } from 'react'; + +interface ToastProps { + toast: { + data: ToastData; + nToastDurationMS: number; + }; +} + +const toastClasses = findModule((mod) => { + if (typeof mod !== 'object') return false; + + if (mod.ToastPlaceholder) { + return true; + } + + return false; +}); + +const templateClasses = findModule((mod) => { + if (typeof mod !== 'object') return false; + + if (mod.ShortTemplate) { + return true; + } + + return false; +}); + +const Toast: FunctionComponent<ToastProps> = ({ toast }) => { + return ( + <div + style={{ '--toast-duration': `${toast.nToastDurationMS}ms` } as React.CSSProperties} + className={joinClassNames(toastClasses.ToastPopup, toastClasses.toastEnter)} + > + <div + onClick={toast.data.onClick} + className={joinClassNames(templateClasses.ShortTemplate, toast.data.className || '')} + > + {toast.data.logo && <div className={templateClasses.StandardLogoDimensions}>{toast.data.logo}</div>} + <div className={joinClassNames(templateClasses.Content, toast.data.contentClassName || '')}> + <div className={templateClasses.Header}> + {toast.data.icon && <div className={templateClasses.Icon}>{toast.data.icon}</div>} + <div className={templateClasses.Title}>{toast.data.title}</div> + </div> + <div className={templateClasses.Body}>{toast.data.body}</div> + </div> + </div> + </div> + ); +}; + +export default Toast; |
