diff --git a/frontend/src/components/MessagesPage.tsx b/frontend/src/components/MessagesPage.tsx index 8e07f32..36a9e4c 100644 --- a/frontend/src/components/MessagesPage.tsx +++ b/frontend/src/components/MessagesPage.tsx @@ -8,6 +8,9 @@ export default function MessagesPage() { const [dateTo, setDateTo] = useState(""); const [unreadOnly, setUnreadOnly] = useState(false); const [expanded, setExpanded] = useState(null); + const [addingId, setAddingId] = useState(null); + const [addName, setAddName] = useState(""); + const [addEmail, setAddEmail] = useState(""); const qc = useQueryClient(); const { data, isLoading, error } = useQuery({ @@ -23,9 +26,26 @@ export default function MessagesPage() { mutationFn: (id: number) => api.deleteMessage(id), onSuccess: () => qc.invalidateQueries({ queryKey: ["messages"] }), }); + const addContact = useMutation({ + mutationFn: (data: { name: string; number?: string; email?: string | null }) => api.createContact(data), + onSuccess: () => { + qc.invalidateQueries({ queryKey: ["contacts"] }); + qc.invalidateQueries({ queryKey: ["messages"] }); + setAddingId(null); + setAddName(""); + setAddEmail(""); + }, + }); const onSubmit = (e: React.FormEvent) => e.preventDefault(); + const startAdd = (m: { id: number; contact_name?: string; callerid?: string }) => { + const num = (m.callerid || "").replace(/[^\d+]/g, ""); + setAddName(m.contact_name || ""); + setAddEmail(""); + setAddingId(m.id); + }; + return ( <>
@@ -48,6 +68,7 @@ export default function MessagesPage() { const whoRaw = m.contact_name || m.callerid || "Unknown caller"; const num = (m.callerid || "").replace(/[^\d+]/g, ""); const showAdd = !m.contact_name && num; + const isAdding = addingId === m.id; return (
@@ -74,7 +95,7 @@ export default function MessagesPage() { ) : null} {m.numbers?.length ? (
- 📞 Callback:{" "} + 📞 Callback:{" "} {m.numbers.map((n: string) => { const digits = n.replace(/[^\d+]/g, ""); return {n}; @@ -88,13 +109,16 @@ export default function MessagesPage() { {m.has_audio && Download} - {showAdd && ( - + {showAdd && !isAdding && ( + + )} + {isAdding && ( + { e.preventDefault(); if (!addName.trim()) return; addContact.mutate({ name: addName.trim(), number: num, email: addEmail.trim() || null }); }}> + setAddName(e.target.value)} placeholder="Name" required style={{ flex: 1, minWidth: 120 }} /> + setAddEmail(e.target.value)} placeholder="Email" type="email" style={{ flex: 1, minWidth: 140 }} /> + + + )}