'use client' import React, {ChangeEvent, forwardRef, useContext, useEffect, useImperativeHandle, useState} from "react"; import {BookContext} from "@/context/BookContext"; import {SessionContext} from "@/context/SessionContext"; import {AlertContext} from "@/context/AlertContext"; import {LangContext} from "@/context/LangContext"; import System from "@/lib/models/System"; import {QuillSenseSettingsProps} from "@/lib/models/QuillSenseSettings"; import {useTranslations} from "next-intl"; import ToggleSwitch from "@/components/form/ToggleSwitch"; import TexteAreaInput from "@/components/form/TexteAreaInput"; import InputField from "@/components/form/InputField"; import {faMagicWandSparkles, faToggleOn} from "@fortawesome/free-solid-svg-icons"; const QuillSenseSetting = forwardRef(function QuillSenseSetting(props, ref) { const t = useTranslations(); const {book, setBook} = useContext(BookContext); const {session} = useContext(SessionContext); const {errorMessage, successMessage} = useContext(AlertContext); const {lang} = useContext(LangContext); const [quillsenseEnabled, setQuillsenseEnabled] = useState(true); const [advancedPrompt, setAdvancedPrompt] = useState(''); const [isLoading, setIsLoading] = useState(true); useImperativeHandle(ref, () => ({ handleSave })); useEffect((): void => { if (book?.bookId) { fetchQuillSenseSettings(); } }, [book?.bookId]); async function fetchQuillSenseSettings(): Promise { try { setIsLoading(true); const settings: QuillSenseSettingsProps = await System.authGetQueryToServer( 'book/quillsense-settings', session.accessToken, lang, {bookId: book?.bookId} ); setQuillsenseEnabled(settings.quillsenseEnabled); setAdvancedPrompt(settings.advancedPrompt ?? ''); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } } finally { setIsLoading(false); } } async function handleSave(): Promise { try { const updateResult: boolean = await System.authPutToServer( 'book/quillsense-settings', { bookId: book?.bookId, quillsenseEnabled: quillsenseEnabled, advancedPrompt: advancedPrompt }, session.accessToken, lang ); if (updateResult) { successMessage(t('quillSenseSetting.successSave')); // Mettre a jour le contexte du livre if (setBook && book) { setBook({...book, quillsenseEnabled: quillsenseEnabled}); } } else { errorMessage(t('quillSenseSetting.errorSave')); } } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } } } if (isLoading) { return (
); } return (
setQuillsenseEnabled(checked)} /> } />

{t('quillSenseSetting.enableDescription')}

): void => setAdvancedPrompt(e.target.value)} placeholder={t('quillSenseSetting.advancedPromptPlaceholder')} /> } />

{t('quillSenseSetting.advancedPromptHint')}

); }); export default QuillSenseSetting;