summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAAGaming <aa@mail.catvibers.me>2022-09-05 14:28:52 -0400
committerAAGaming <aa@mail.catvibers.me>2022-09-05 14:28:52 -0400
commit591c58330c75770bf829aaa9ea96dd6125b73ab7 (patch)
treeb19331cb60c3c79f2a1e0f3b82557738289e0bf0
parent501145a210d8d8a222d86b420ba8538474ff7723 (diff)
downloaddecky-loader-591c58330c75770bf829aaa9ea96dd6125b73ab7.tar.gz
decky-loader-591c58330c75770bf829aaa9ea96dd6125b73ab7.zip
fix(toaster): fix toasts rendering multiple times
-rw-r--r--frontend/src/toaster.tsx20
1 files changed, 17 insertions, 3 deletions
diff --git a/frontend/src/toaster.tsx b/frontend/src/toaster.tsx
index b0c8671a..3a922bfc 100644
--- a/frontend/src/toaster.tsx
+++ b/frontend/src/toaster.tsx
@@ -1,4 +1,5 @@
import { Patch, ToastData, afterPatch, findInReactTree, findModuleChild, sleep } from 'decky-frontend-lib';
+import { ReactNode } from 'react';
import Toast from './components/Toast';
import Logger from './logger';
@@ -43,13 +44,26 @@ class Toaster extends Logger {
}
this.node = instance.return.return;
+ let toast: any;
+ let renderedToast: ReactNode = null;
this.node.stateNode.render = (...args: any[]) => {
const ret = this.node.stateNode.__proto__.render.call(this.node.stateNode, ...args);
if (ret) {
this.instanceRetPatch = afterPatch(ret, 'type', (_: any, ret: any) => {
- if (ret?.props?.children[1]?.children?.props?.notification?.decky) {
- const toast = ret.props.children[1].children.props.notification;
- ret.props.children[1].children.type = () => <Toast toast={toast} />;
+ if (ret?.props?.children[1]?.children?.props) {
+ const currentToast = ret.props.children[1].children.props.notification;
+ if (currentToast?.decky) {
+ if (currentToast == toast) {
+ ret.props.children[1].children = renderedToast;
+ } else {
+ toast = currentToast;
+ renderedToast = <Toast toast={toast} />;
+ ret.props.children[1].children = renderedToast;
+ }
+ } else {
+ toast = null;
+ renderedToast = null;
+ }
}
return ret;
});