11import { useMutation , useQuery , useQueryClient } from '@tanstack/react-query' ;
22import { useEffect , useMemo , useRef , useState , useCallback } from 'react' ;
33import { defaultUserSettings } from '@zero/server/schemas' ;
4- import { fixNonReadableColors } from '@/lib/email-utils' ;
54import { useTRPC } from '@/providers/query-provider' ;
65import { getBrowserTimezone } from '@/lib/timezones' ;
76import { useSettings } from '@/hooks/use-settings' ;
@@ -107,33 +106,6 @@ export function MailContent({ id, html, senderEmail }: MailContentProps) {
107106 shadowRootRef . current . innerHTML = processedData . html ;
108107 } , [ processedData ] ) ;
109108
110- useEffect ( ( ) => {
111- if ( ! shadowRootRef . current ) return ;
112-
113- const root = shadowRootRef . current ;
114-
115- const applyFix : ( ) => void = ( ) => {
116- const topLevelEls = Array . from ( root . children ) as HTMLElement [ ] ;
117- topLevelEls . forEach ( ( el ) => {
118- try {
119- fixNonReadableColors ( el , {
120- defaultBackground : resolvedTheme === 'dark' ? 'rgb(10,10,10)' : '#ffffff' ,
121- } ) ;
122- } catch ( err ) {
123- console . error ( 'Failed to fix colors in email content:' , err ) ;
124- }
125- } ) ;
126- } ;
127-
128- requestAnimationFrame ( applyFix ) ;
129- } , [ processedData , resolvedTheme ] ) ;
130-
131- useEffect ( ( ) => {
132- if ( isTrustedSender || temporaryImagesEnabled ) {
133- setCspViolation ( false ) ;
134- }
135- } , [ isTrustedSender , temporaryImagesEnabled ] ) ;
136-
137109 const handleImageError = useCallback (
138110 ( e : Event ) => {
139111 const target = e . target as HTMLImageElement ;
@@ -150,7 +122,10 @@ export function MailContent({ id, html, senderEmail }: MailContentProps) {
150122 useEffect ( ( ) => {
151123 if ( ! shadowRootRef . current ) return ;
152124
153- shadowRootRef . current . addEventListener ( 'error' , handleImageError , true ) ;
125+ const root = shadowRootRef . current ;
126+
127+ // Add event listeners for image errors and link clicks
128+ root . addEventListener ( 'error' , handleImageError , true ) ;
154129
155130 const handleClick = ( e : Event ) => {
156131 const target = e . target as HTMLElement ;
@@ -165,13 +140,19 @@ export function MailContent({ id, html, senderEmail }: MailContentProps) {
165140 }
166141 } ;
167142
168- shadowRootRef . current . addEventListener ( 'click' , handleClick ) ;
143+ root . addEventListener ( 'click' , handleClick ) ;
169144
170145 return ( ) => {
171- shadowRootRef . current ? .removeEventListener ( 'error' , handleImageError , true ) ;
172- shadowRootRef . current ? .removeEventListener ( 'click' , handleClick ) ;
146+ root . removeEventListener ( 'error' , handleImageError , true ) ;
147+ root . removeEventListener ( 'click' , handleClick ) ;
173148 } ;
174- } , [ handleImageError , processedData ] ) ;
149+ } , [ processedData , handleImageError ] ) ;
150+
151+ useEffect ( ( ) => {
152+ if ( isTrustedSender || temporaryImagesEnabled ) {
153+ setCspViolation ( false ) ;
154+ }
155+ } , [ isTrustedSender , temporaryImagesEnabled ] ) ;
175156
176157 return (
177158 < >
0 commit comments