'use client'; import { useState } from 'react'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Loader2, Search, X, Link2, ExternalLink } from 'lucide-react'; import Link from 'next/link'; import { useReferences, useAddReference, useRemoveReference, useCorrespondences, } from '@/hooks/use-correspondence'; interface LinkedDoc { uuid: string; correspondenceNumber: string; } interface RefItem { source?: LinkedDoc; target?: LinkedDoc; } interface CorrespondenceRevisionItem { subject: string; correspondence?: { uuid: string; correspondenceNumber: string }; } interface ReferenceSelectorProps { uuid: string; canEdit: boolean; } export function ReferenceSelector({ uuid, canEdit }: ReferenceSelectorProps) { const [searchQuery, setSearchQuery] = useState(''); const [isSearching, setIsSearching] = useState(false); const { data: referencesData, isLoading: isLoadingRefs } = useReferences(uuid); const addMutation = useAddReference(); const removeMutation = useRemoveReference(); const { data: searchResults, isFetching: isSearchFetching } = useCorrespondences( isSearching && searchQuery.trim().length >= 2 ? { search: searchQuery.trim(), limit: 8 } : { search: '', limit: 0 } ); const outgoing: RefItem[] = referencesData?.outgoing ?? []; const incoming: RefItem[] = referencesData?.incoming ?? []; const totalCount = outgoing.length + incoming.length; const searchItems = Array.isArray(searchResults?.data) ? searchResults.data : []; const existingRefUuids = new Set([ ...outgoing.map((r) => r.target?.uuid).filter(Boolean), ...incoming.map((r) => r.source?.uuid).filter(Boolean), ]); const handleAdd = (targetUuid: string) => { addMutation.mutate({ uuid, targetUuid }); setIsSearching(false); setSearchQuery(''); }; const handleRemove = (targetUuid: string) => { removeMutation.mutate({ uuid, targetUuid }); }; const renderRef = (linked: LinkedDoc, direction: 'out' | 'in') => (
No referenced documents
) : (No results found
) : ( searchItems .filter((item: CorrespondenceRevisionItem) => { const itemUuid = item.correspondence?.uuid; return itemUuid && itemUuid !== uuid && !existingRefUuids.has(itemUuid); }) .map((item: CorrespondenceRevisionItem) => ( )) )}