Wenn ich in die Benutzereinstellungen gehe, wird die E-Mail-Signatur nicht angezeigt, obwohl eine gespeichert ist und mir in der verarbeitenden Ansicht beim E-Mail-Senden angezeigt wird.
Wenn ich in die Benutzereinstellungen gehe, wird die E-Mail-Signatur nicht angezeigt, obwohl eine gespeichert ist und mir in der verarbeitenden Ansicht beim E-Mail-Senden angezeigt wird.
Race Condition zwischen API-Aufruf und TipTap-Initialisierung.
In MailSettingsTab (UserSettingsPage.tsx) lädt ein useEffect beim Mount sofort die Einstellungen per API. Gleichzeitig rendert WysiwygEditor solange null, bis TipTap fertig initialisiert ist (if (!editor) return null). Da setLoading(false) erst im .finally()-Block ausgeführt wird, wurde editorRef.current?.setContent() im .then()-Block aufgerufen – zu einem Zeitpunkt, an dem der Editor noch gar nicht gemountet war. Der Aufruf scheiterte lautlos via ?..
Im E-Mail-Dialog (InboxDetailPage) tritt das Problem nicht auf, weil der Editor dort erst bei einer Benutzeraktion (Modal öffnen) eingeblendet wird und TipTap bis dahin bereits initialisiert ist.
Lösung
WysiwygEditor.tsx: Neue Prop initialContent?: string hinzugefügt. TipTap wird direkt mit dem übergebenen HTML-Inhalt initialisiert.
UserSettingsPage.tsx: Signatur wird nun in State gespeichert (setSignatureHtml) statt über den Ref gesetzt. Da die Komponente während des Ladens null zurückgibt, mountet der Editor erst nach Abschluss des API-Calls – und erhält die Signatur dann sauber als initialContent-Prop.
## Ursache
Race Condition zwischen API-Aufruf und TipTap-Initialisierung.
In `MailSettingsTab` (`UserSettingsPage.tsx`) lädt ein `useEffect` beim Mount sofort die Einstellungen per API. Gleichzeitig rendert `WysiwygEditor` solange `null`, bis TipTap fertig initialisiert ist (`if (!editor) return null`). Da `setLoading(false)` erst im `.finally()`-Block ausgeführt wird, wurde `editorRef.current?.setContent()` im `.then()`-Block aufgerufen – zu einem Zeitpunkt, an dem der Editor noch gar nicht gemountet war. Der Aufruf scheiterte lautlos via `?.`.
Im E-Mail-Dialog (`InboxDetailPage`) tritt das Problem nicht auf, weil der Editor dort erst bei einer Benutzeraktion (Modal öffnen) eingeblendet wird und TipTap bis dahin bereits initialisiert ist.
## Lösung
**`WysiwygEditor.tsx`:** Neue Prop `initialContent?: string` hinzugefügt. TipTap wird direkt mit dem übergebenen HTML-Inhalt initialisiert.
**`UserSettingsPage.tsx`:** Signatur wird nun in State gespeichert (`setSignatureHtml`) statt über den Ref gesetzt. Da die Komponente während des Ladens `null` zurückgibt, mountet der Editor erst nach Abschluss des API-Calls – und erhält die Signatur dann sauber als `initialContent`-Prop.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Wenn ich in die Benutzereinstellungen gehe, wird die E-Mail-Signatur nicht angezeigt, obwohl eine gespeichert ist und mir in der verarbeitenden Ansicht beim E-Mail-Senden angezeigt wird.
Ursache
Race Condition zwischen API-Aufruf und TipTap-Initialisierung.
In
MailSettingsTab(UserSettingsPage.tsx) lädt einuseEffectbeim Mount sofort die Einstellungen per API. Gleichzeitig rendertWysiwygEditorsolangenull, bis TipTap fertig initialisiert ist (if (!editor) return null). DasetLoading(false)erst im.finally()-Block ausgeführt wird, wurdeeditorRef.current?.setContent()im.then()-Block aufgerufen – zu einem Zeitpunkt, an dem der Editor noch gar nicht gemountet war. Der Aufruf scheiterte lautlos via?..Im E-Mail-Dialog (
InboxDetailPage) tritt das Problem nicht auf, weil der Editor dort erst bei einer Benutzeraktion (Modal öffnen) eingeblendet wird und TipTap bis dahin bereits initialisiert ist.Lösung
WysiwygEditor.tsx: Neue PropinitialContent?: stringhinzugefügt. TipTap wird direkt mit dem übergebenen HTML-Inhalt initialisiert.UserSettingsPage.tsx: Signatur wird nun in State gespeichert (setSignatureHtml) statt über den Ref gesetzt. Da die Komponente während des Ladensnullzurückgibt, mountet der Editor erst nach Abschluss des API-Calls – und erhält die Signatur dann sauber alsinitialContent-Prop.