import { Link } from "@tanstack/react-router"; import { useEffect, useState } from "react"; import { useGlobalItem, useGlobalItems, useLinkItem, useUnlinkItem, } from "../hooks/useGlobalItems"; import { GearImage } from "./GearImage"; interface LinkToGlobalItemProps { itemId: number; linkedGlobalItemId?: number | null; } export function LinkToGlobalItem({ itemId, linkedGlobalItemId, }: LinkToGlobalItemProps) { const [isOpen, setIsOpen] = useState(false); const [searchInput, setSearchInput] = useState(""); const [debouncedQuery, setDebouncedQuery] = useState(""); const linkItem = useLinkItem(); const unlinkItem = useUnlinkItem(); const { data: linkedItem } = useGlobalItem(linkedGlobalItemId ?? null); const { data: searchResults, isLoading: isSearching } = useGlobalItems( isOpen && debouncedQuery ? debouncedQuery : undefined, ); useEffect(() => { const timer = setTimeout(() => { setDebouncedQuery(searchInput); }, 300); return () => clearTimeout(timer); }, [searchInput]); function handleLink(globalItemId: number) { linkItem.mutate( { itemId, globalItemId }, { onSuccess: () => { setIsOpen(false); setSearchInput(""); setDebouncedQuery(""); }, }, ); } function handleUnlink() { unlinkItem.mutate(itemId); } // Already linked state if (linkedGlobalItemId && linkedItem) { return (