import React, {JSX, useContext, useState} from "react"; import {SessionContext} from "@/context/SessionContext"; import {AlertContext} from "@/context/AlertContext"; import {AISynonyms, SynonymAI, SynonymsAIResponse} from "@/lib/models/QuillSense"; import System from "@/lib/models/System"; import {faExchangeAlt, faLock, faSearch} from "@fortawesome/free-solid-svg-icons"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {useTranslations} from "next-intl"; import {LangContext, LangContextProps} from "@/context/LangContext"; import SearchInputWithSelect from "@/components/form/SearchInputWithSelect"; import {AIUsageContext, AIUsageContextProps} from "@/context/AIUsageContext"; export default function Synonyms({hasKey}: { hasKey: boolean }): JSX.Element { const t = useTranslations(); const {session} = useContext(SessionContext); const {lang} = useContext(LangContext); const {errorMessage} = useContext(AlertContext); const {setTotalCredits, setTotalPrice} = useContext(AIUsageContext); const [type, setType] = useState('synonymes') const [wordToCheck, setWordToCheck] = useState('') const [inProgress, setInProgress] = useState(false); const [aiResponse, setAiResponse] = useState(null) async function handleSearch(): Promise { if (wordToCheck.trim() === '') { errorMessage(t("synonyms.enterWordError")); return; } setInProgress(true); try { const response: AISynonyms = await System.authPostToServer(`quillsense/synonyms`, { word: wordToCheck, type: type }, session.accessToken, lang); if (!response) { errorMessage(t("synonyms.errorNoResponse")); return; } if (response.useYourKey) { setTotalPrice((prevState: number): number => prevState + response.totalPrice) } else { setTotalCredits(response.totalPrice) } setAiResponse(response.data); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t("synonyms.errorUnknown")); } } finally { setInProgress(false); } } if (!hasKey) { return (

Accès requis

Un abonnement de niveau de base de QuillSense ou une clé API OpenAI est requis pour activer le dictionnaire intelligent.

); } return (

{t("synonyms.heading")}

{t("synonyms.subheading")}

) => { if (e.key === 'Enter') { handleSearch(); } }} />
{inProgress && (

{t("synonyms.loading")}

)} {!inProgress && aiResponse && aiResponse.words.length > 0 && (

{type === 'synonymes' ? t("synonyms.resultSynonyms", {word: wordToCheck}) : t("synonyms.resultAntonyms", {word: wordToCheck})}

{aiResponse.words.map((item: SynonymAI, index: number) => (
{item.word}
{item.context}
))}
)} {!inProgress && (!aiResponse || aiResponse.words.length === 0) && (

{type === 'synonymes' ? t("synonyms.emptySynonymsTitle") : t("synonyms.emptyAntonymsTitle")}

{type === 'synonymes' ? t("synonyms.emptySynonymsDescription") : t("synonyms.emptyAntonymsDescription")}

)}
); }