import { Plus, RefreshCw } from "lucide-react"; import { toast } from "sonner"; import { authClient } from "@/lib/auth-client"; import { Folder } from "../../../../generated/prisma/browser"; import { createPair } from "@/lib/server/services/pairService"; import { DictWordResponse, DictPhraseResponse, isDictWordResponse, DictWordEntry, } from "./types"; import { DictionaryEntry } from "./DictionaryEntry"; import { useTranslations } from "next-intl"; import { performDictionaryLookup } from "./utils"; interface SearchResultProps { searchResult: DictWordResponse | DictPhraseResponse; searchQuery: string; queryLang: string; definitionLang: string; folders: Folder[]; selectedFolderId: number | null; onFolderSelect: (folderId: number | null) => void; onResultUpdate: (newResult: DictWordResponse | DictPhraseResponse) => void; onSearchingChange: (isSearching: boolean) => void; getNativeName: (code: string) => string; } export function SearchResult({ searchResult, searchQuery, queryLang, definitionLang, folders, selectedFolderId, onFolderSelect, onResultUpdate, onSearchingChange, getNativeName, }: SearchResultProps) { const t = useTranslations("dictionary"); const { data: session } = authClient.useSession(); const handleRelookup = async () => { onSearchingChange(true); const result = await performDictionaryLookup( { text: searchQuery, queryLang: getNativeName(queryLang), definitionLang: getNativeName(definitionLang), forceRelook: true }, t ); if (result.success && result.data) { onResultUpdate(result.data); } onSearchingChange(false); }; const handleSave = () => { if (!session) { toast.error(t("pleaseLogin")); return; } if (!selectedFolderId) { toast.error(t("pleaseCreateFolder")); return; } const entry = searchResult.entries[0]; createPair({ text1: searchResult.standardForm, text2: entry.definition, language1: queryLang, language2: definitionLang, ipa1: isDictWordResponse(searchResult) && (entry as DictWordEntry).ipa ? (entry as DictWordEntry).ipa : undefined, folderId: selectedFolderId, }) .then(() => { const folderName = folders.find(f => f.id === selectedFolderId)?.name || "Unknown"; toast.success(t("savedToFolder", { folderName })); }) .catch(() => { toast.error(t("saveFailed")); }); }; return (
{/* 标题和保存按钮 */}

{searchResult.standardForm}

{session && folders.length > 0 && ( )}
{/* 条目列表 */}
{searchResult.entries.map((entry, index) => (
))}
{/* 重新查询按钮 */}
); }