11import { useMutation , useQuery } from '@tanstack/react-query' ;
22import { useNavigate } from '@tanstack/react-router' ;
33import { useEditor } from '@tiptap/react' ;
4- import { createQuotedHtml , type Participant , participantToString } from 'bordly-backend/utils/shared' ;
4+ import { createQuotedHtml , type Participant , participantToString , replyEmailFields } from 'bordly-backend/utils/shared' ;
55import { ALargeSmall , Paperclip , Send , Trash } from 'lucide-react' ;
66import { useEffect , useMemo , useRef , useState } from 'react' ;
77import { useDropzone } from 'react-dropzone' ;
@@ -72,13 +72,12 @@ export const EmailDraftCard = ({
7272} ) => {
7373 const navigate = useNavigate ( ) ;
7474 const { queryClient, trpc } = useRouteContext ( ) ;
75+ const [ subject , setSubject ] = useState ( emailDraft ?. subject || boardCard . subject ) ;
7576 const [ from , setFrom ] = useState ( emailDraft ? participantToString ( emailDraft . from ) : '' ) ;
7677 const [ to , setTo ] = useState ( emailDraft ? participantsToString ( emailDraft . to ) : '' ) ;
7778 const [ cc , setCc ] = useState ( emailDraft ? participantsToString ( emailDraft . cc ) : '' ) ;
7879 const [ bcc , setBcc ] = useState ( emailDraft ? participantsToString ( emailDraft . bcc ) : '' ) ;
7980
80- const noMessages = boardCard . emailMessageCount === 0 ;
81-
8281 // Set default "From" address using loaded email addresses
8382 const { data : emailAddressesData } = useQuery ( {
8483 ...trpc . senderEmailAddress . getAddressesForBoardMember . queryOptions ( {
@@ -98,36 +97,15 @@ export const EmailDraftCard = ({
9897 return prevFrom ;
9998 } ) ;
10099 } else {
101- // Set from
102- const emailParticipantEmails = new Set < string > ( [
103- ...( replyToEmailMessage ? [ replyToEmailMessage . from . email ] : [ ] ) ,
104- ...( replyToEmailMessage ?. to ?. map ( ( p ) => p . email ) ?? [ ] ) ,
105- ...( replyToEmailMessage ?. cc ?. map ( ( p ) => p . email ) ?? [ ] ) ,
106- ...( replyToEmailMessage ?. bcc ?. map ( ( p ) => p . email ) ?? [ ] ) ,
107- ] ) ;
108- const fromEmailAddress =
109- fromEmailAddresses . find ( ( addr ) => emailParticipantEmails . has ( addr . email ) ) ||
110- fromEmailAddresses . find ( ( addr ) => addr . isDefault ) ||
111- fromEmailAddresses [ 0 ] ;
112- setFrom ( participantToString ( fromEmailAddress as Participant ) ) ;
113-
114100 if ( replyToEmailMessage ) {
115- const sent = replyToEmailMessage ! . from . email === fromEmailAddress . email ;
116- // Set to
117- setTo (
118- sent
119- ? participantsToString ( replyToEmailMessage . to )
120- : replyToEmailMessage . replyTo
121- ? participantToString ( replyToEmailMessage . replyTo )
122- : participantToString ( replyToEmailMessage . from ) ,
123- ) ;
124- // Set cc
125- setCc (
126- participantsToString ( [
127- ...( sent ? [ ] : ( replyToEmailMessage . to ?. filter ( ( p ) => p . email !== fromEmailAddress . email ) ?? [ ] ) ) ,
128- ...( replyToEmailMessage . cc ?. filter ( ( p ) => p . email !== fromEmailAddress . email ) ?? [ ] ) ,
129- ] ) ,
130- ) ;
101+ const replyFields = replyEmailFields ( {
102+ replyToMessage : replyToEmailMessage ,
103+ senderEmailAddresses : fromEmailAddresses ,
104+ } ) ;
105+ setSubject ( replyFields . subject ) ;
106+ setFrom ( participantToString ( replyFields . from ) ) ;
107+ setTo ( participantsToString ( replyFields . to ) ) ;
108+ setCc ( participantsToString ( replyFields . cc ) ) ;
131109 }
132110 }
133111 } , [ emailDraft , replyToEmailMessage , fromEmailAddresses ] ) ;
@@ -158,7 +136,7 @@ export const EmailDraftCard = ({
158136 onExecute : ( params ) => {
159137 removeEmailDraftData ( { trpc, queryClient, params } ) ;
160138 removeBoardCardEmailDraftData ( { trpc, queryClient, params } ) ;
161- if ( noMessages ) {
139+ if ( boardCard . emailMessageCount === 0 ) {
162140 removeBoardCardData ( { trpc, queryClient, params } ) ;
163141 navigate ( { to : ROUTES . BOARD . replace ( '$boardId' , boardId ) } ) ;
164142 }
@@ -245,7 +223,7 @@ export const EmailDraftCard = ({
245223 emailDraftUpsertMutation . mutate ( {
246224 boardId,
247225 boardCardId,
248- subject : noMessages ? boardCard . subject : `Re: ${ boardCard . subject } ` ,
226+ subject,
249227 bodyHtml : `${ editor . getHTML ( ) } ${ quotedHtml } ` ,
250228 from : from . trim ( ) ,
251229 to : to ? parseParticipantsInput ( to ) : undefined ,
@@ -274,7 +252,7 @@ export const EmailDraftCard = ({
274252 emailDraftSendMutation . mutate ( {
275253 boardId,
276254 boardCardId,
277- subject : noMessages ? boardCard . subject : `Re: ${ boardCard . subject } ` ,
255+ subject,
278256 bodyHtml : `${ editor . getHTML ( ) } ${ quotedHtml } ` ,
279257 from : from . trim ( ) ,
280258 to : to ? parseParticipantsInput ( to ) : undefined ,
0 commit comments