diff --git a/web/src/components/UserSearch.tsx b/web/src/components/UserSearch.tsx deleted file mode 100644 index 553d826..0000000 --- a/web/src/components/UserSearch.tsx +++ /dev/null @@ -1,198 +0,0 @@ -import React, { useState, useMemo } from "react"; -import { useQuery } from "@tanstack/react-query"; -import { listMembers } from "../api/members"; - -interface UserSearchProps { - onSelect: (user: { id: string; display_name: string; email: string }, bandId: string) => void; - bandId: string; - currentMemberId: string; - excludedIds?: string[]; -} - -interface User { - id: string; - display_name: string; - email: string; -} - -/** - * Component for searching and selecting users to invite to a band - * - Search by name or email - * - Show existing band members marked - * - Handles selection - */ -export function UserSearch({ onSelect, bandId, currentMemberId, excludedIds = [] }: UserSearchProps) { - const [searchTerm, setSearchTerm] = useState(""); - - // Fetch all members for searching - const { data: allMembers, isLoading, isError } = useQuery({ - queryKey: ["members"], - queryFn: () => listMembers(bandId), - }); - - // Filter members based on search - const filteredMembers = useMemo(() => { - if (!allMembers) return []; - - const lowerSearch = searchTerm.toLowerCase(); - return allMembers.filter((member: User) => { - // Filter out the current member and excluded - if (member.id === currentMemberId) return false; - if (excludedIds.includes(member.id)) return false; - - // Search by display name or email - return ( - member.display_name?.toLowerCase().includes(lowerSearch) || - member.email?.toLowerCase().includes(lowerSearch) - ); - }); - }, [allMembers, searchTerm, currentMemberId, excludedIds]); - - if (isLoading) { - return ( -
Loading members...
-Error loading members
-- {searchTerm ? "No users found. Try a different search." : "No members found."} -
- ) : ( -