|
1 | 1 | import { useState, useEffect, useCallback, useMemo } from 'react'; |
2 | | -import { useSearchParams } from 'react-router-dom'; |
| 2 | +import { useSearchParams, useNavigate } from 'react-router-dom'; |
3 | 3 | import { useAuth } from '@/context/AuthContext'; |
4 | 4 | import { apiFetch } from '@/lib/api'; |
5 | 5 | import { Button } from '@/components/ui/button'; |
6 | 6 | import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'; |
7 | | -import { Trash2, RefreshCw, MailOpen, Mail, Search, KeyRound, Loader2 } from 'lucide-react'; |
| 7 | +import { Trash2, RefreshCw, MailOpen, Mail, Search, KeyRound, Loader2, Send } from 'lucide-react'; |
8 | 8 | import { formatDistanceToNow } from 'date-fns'; |
9 | 9 | import toast from 'react-hot-toast'; |
10 | 10 | import { cn } from '@/lib/utils'; |
@@ -32,6 +32,7 @@ interface EmailDetail extends EmailSummary { |
32 | 32 |
|
33 | 33 | export default function Mailbox() { |
34 | 34 | const { user } = useAuth(); |
| 35 | + const navigate = useNavigate(); |
35 | 36 | const [searchParams] = useSearchParams(); |
36 | 37 | const queryMailbox = searchParams.get('mailbox'); |
37 | 38 |
|
@@ -137,6 +138,16 @@ export default function Mailbox() { |
137 | 138 | } |
138 | 139 | }; |
139 | 140 |
|
| 141 | + const handleReply = (email: EmailDetail) => { |
| 142 | + navigate('/compose', { |
| 143 | + state: { |
| 144 | + to: email.sender, |
| 145 | + subject: email.subject.startsWith('Re:') ? email.subject : `Re: ${email.subject}`, |
| 146 | + body: `\n\n\n--- Original Message ---\nFrom: ${email.sender}\nDate: ${new Date(email.received_at).toLocaleString()}\nSubject: ${email.subject}\n\n` |
| 147 | + } |
| 148 | + }); |
| 149 | + }; |
| 150 | + |
140 | 151 | return ( |
141 | 152 | <div className="h-[calc(100vh-4rem)] flex flex-col md:flex-row p-4 gap-4"> |
142 | 153 | {/* Email List */} |
@@ -262,6 +273,12 @@ export default function Mailbox() { |
262 | 273 | </div> |
263 | 274 | </div> |
264 | 275 | <div className="flex items-center gap-2"> |
| 276 | + <Button variant="outline" size="sm" onClick={() => handleReply(selectedEmail)}> |
| 277 | + <div className="flex items-center"> |
| 278 | + <span className="mr-2">Reply</span> |
| 279 | + <Send className="h-3 w-3" /> |
| 280 | + </div> |
| 281 | + </Button> |
265 | 282 | {selectedEmail.download && ( |
266 | 283 | <Button variant="outline" size="sm" asChild> |
267 | 284 | <a href={selectedEmail.download} download>Download EML</a> |
|
0 commit comments