Spaces:
Sleeping
Sleeping
Download frontend/src/hooks/useEmailQueue.js from habib-analyst/email-agent-api: direct link, hf CLI and curl.
- Browser
- Download file 1.69 kB
-
https://huggingface.co/spaces/habib-analyst/email-agent-api/resolve/main/frontend/src/hooks/useEmailQueue.js
- Command line
-
hf download hf://spaces/habib-analyst/email-agent-api/frontend/src/hooks/useEmailQueue.js
-
curl -L -o useEmailQueue.js https://huggingface.co/spaces/habib-analyst/email-agent-api/resolve/main/frontend/src/hooks/useEmailQueue.js
1.69 kB
| import { useState, useCallback } from "react"; | |
| export function useEmailQueue() { | |
| const [queue, setQueue] = useState([]); | |
| const [currentIndex, setCurrentIndex] = useState(0); | |
| const [stats, setStats] = useState({ | |
| queued: 0, | |
| researching: 0, | |
| generated: 0, | |
| approved: 0, | |
| sent: 0, | |
| skipped: 0, | |
| failed: 0, | |
| }); | |
| const initQueue = useCallback((recipientList) => { | |
| const items = recipientList | |
| .filter((p) => p.trim()) | |
| .map((p, i) => ({ | |
| index: i, | |
| input: p.trim(), | |
| status: "queued", | |
| contactData: null, | |
| emailContent: null, | |
| htmlBody: null, | |
| error: null, | |
| })); | |
| setQueue(items); | |
| setCurrentIndex(0); | |
| setStats({ ...stats, queued: items.length }); | |
| return items; | |
| }, []); | |
| const updateItem = useCallback((index, updates) => { | |
| setQueue((prev) => | |
| prev.map((item) => | |
| item.index === index ? { ...item, ...updates } : item | |
| ) | |
| ); | |
| }, []); | |
| const nextItem = useCallback(() => { | |
| setCurrentIndex((prev) => { | |
| const next = prev + 1; | |
| return next < queue.length ? next : prev; | |
| }); | |
| }, [queue.length]); | |
| const currentItem = queue[currentIndex] || null; | |
| const recalcStats = useCallback(() => { | |
| const s = { | |
| queued: 0, | |
| researching: 0, | |
| generated: 0, | |
| approved: 0, | |
| sent: 0, | |
| skipped: 0, | |
| failed: 0, | |
| }; | |
| queue.forEach((item) => { | |
| if (s[item.status] !== undefined) s[item.status]++; | |
| }); | |
| setStats(s); | |
| }, [queue]); | |
| return { | |
| queue, | |
| currentIndex, | |
| currentItem, | |
| stats, | |
| initQueue, | |
| updateItem, | |
| nextItem, | |
| setCurrentIndex, | |
| recalcStats, | |
| }; | |
| } | |