import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { UserPlus, Search, X } from "lucide-react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { Checkbox } from "@/components/ui/checkbox"; export function UserSearchModal({ availableUsers, projectId }: { availableUsers: Array<{ id: string; username: string }>; projectId: string; }) { const [isOpen, setIsOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [selectedUserId, setSelectedUserId] = useState(""); const [canEdit, setCanEdit] = useState(false); const filteredUsers = availableUsers.filter((user) => user.username.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedUserId) return; const formData = new FormData(); formData.append("intent", "addUser"); formData.append("userId", selectedUserId); formData.append("canEdit", canEdit ? "on" : ""); try { const response = await fetch(`/project/${projectId}/settings`, { method: "POST", body: formData }); if (response.ok) { setIsOpen(false); setSelectedUserId(""); setSearchTerm(""); setCanEdit(false); // Reload the page to show updated permissions window.location.reload(); } else { const result = await response.json(); alert(result.error || "Failed to add user"); } } catch (error) { console.error("Error adding user:", error); alert("Failed to add user"); } }; return ( Add User to Project Search for a user to add to this project
setSearchTerm(e.target.value)} className="flex-1" /> {searchTerm && ( )}
{filteredUsers.length > 0 && (
{filteredUsers.map((user) => (
setSelectedUserId(user.id)} >
{user.username}
{selectedUserId === user.id && (
)}
))}
)} {filteredUsers.length === 0 && searchTerm && (
No users found matching "{searchTerm}"
)} {selectedUserId && (
setCanEdit(checked === true)} />
)}
); }