From 628ace4ad57c7d0e48280a33626f926f5e337bd6 Mon Sep 17 00:00:00 2001 From: RKWojs Date: Wed, 10 Dec 2025 11:03:40 +0100 Subject: [PATCH] fix: remove availableContacts state and update contact filtering logic --- src/components/ProjectContactSelector.js | 34 +++++++++++++----------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/components/ProjectContactSelector.js b/src/components/ProjectContactSelector.js index 606d0f9..7c56ff8 100644 --- a/src/components/ProjectContactSelector.js +++ b/src/components/ProjectContactSelector.js @@ -7,7 +7,6 @@ import Badge from "@/components/ui/Badge"; export default function ProjectContactSelector({ projectId, onChange }) { const [contacts, setContacts] = useState([]); const [projectContacts, setProjectContacts] = useState([]); - const [availableContacts, setAvailableContacts] = useState([]); const [showSelector, setShowSelector] = useState(false); const [loading, setLoading] = useState(false); const [searchTerm, setSearchTerm] = useState(""); @@ -37,7 +36,6 @@ export default function ProjectContactSelector({ projectId, onChange }) { if (response.ok) { const data = await response.json(); setProjectContacts(data); - updateAvailableContacts(data); onChange?.(data); } } catch (error) { @@ -45,14 +43,6 @@ export default function ProjectContactSelector({ projectId, onChange }) { } } - function updateAvailableContacts(linkedContacts) { - const linkedIds = linkedContacts.map((c) => c.contact_id); - const available = contacts.filter( - (c) => !linkedIds.includes(c.contact_id) - ); - setAvailableContacts(available); - } - async function handleAddContact(contactId) { setLoading(true); try { @@ -125,14 +115,14 @@ export default function ProjectContactSelector({ projectId, onChange }) { }; const filteredAvailable = searchTerm - ? availableContacts.filter( + ? contacts.filter( (c) => c.name?.toLowerCase().includes(searchTerm.toLowerCase()) || c.phone?.toLowerCase().includes(searchTerm.toLowerCase()) || c.email?.toLowerCase().includes(searchTerm.toLowerCase()) || c.company?.toLowerCase().includes(searchTerm.toLowerCase()) ) - : availableContacts; + : contacts; return (
@@ -246,15 +236,22 @@ export default function ProjectContactSelector({ projectId, onChange }) {

{searchTerm ? "Nie znaleziono kontaktów" - : "Wszystkie kontakty są już dodane"} + : "Brak dostępnych kontaktów"}

) : ( filteredAvailable.map((contact) => { const typeBadge = getContactTypeBadge(contact.contact_type); + const isAlreadyAdded = projectContacts.some( + (pc) => pc.contact_id === contact.contact_id + ); return (
@@ -264,6 +261,11 @@ export default function ProjectContactSelector({ projectId, onChange }) { {typeBadge.label} + {isAlreadyAdded && ( + + Już dodany + + )}
{contact.phone && {contact.phone}} @@ -282,9 +284,9 @@ export default function ProjectContactSelector({ projectId, onChange }) { type="button" size="sm" onClick={() => handleAddContact(contact.contact_id)} - disabled={loading} + disabled={loading || isAlreadyAdded} > - Dodaj + {isAlreadyAdded ? "Dodany" : "Dodaj"}
);