import {ChapterContext} from "@/context/ChapterContext"; import {EditorContext} from "@/context/EditorContext"; import {useContext, useEffect, useState} from "react"; import {Editor} from "@tiptap/react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faBook, faChartSimple, faHeart, faSheetPlastic} from "@fortawesome/free-solid-svg-icons"; import {SessionContext} from "@/context/SessionContext"; import {useTranslations} from "next-intl"; import {AlertContext} from "@/context/AlertContext"; import {BookContext} from "@/context/BookContext"; export default function ScribeFooterBar() { const t = useTranslations(); const {chapter} = useContext(ChapterContext); const {book} = useContext(BookContext); const editor: Editor | null = useContext(EditorContext).editor; const {session} = useContext(SessionContext); const {errorMessage} = useContext(AlertContext) const [wordsCount, setWordsCount] = useState(0); useEffect((): void => { getWordCount(); }, [editor?.state.doc.textContent]); function getWordCount(): void { if (editor) { try { const content: string = editor?.state.doc.textContent; const texteNormalise: string = content .replace(/'/g, ' ') .replace(/-/g, ' ') .replace(/\s+/g, ' ') .trim(); const mots: string[] = texteNormalise.split(' '); const wordCount: number = mots.filter( (mot: string): boolean => mot.length > 0, ).length; setWordsCount(wordCount); } catch (e: unknown) { if (e instanceof Error) { errorMessage(t('errors.wordCountError') + ` (${e.message})`); } else { errorMessage(t('errors.wordCountError')); } } } } return (
{chapter && ( {chapter.chapterOrder < 0 ? t('scribeFooterBar.sheet') : `${chapter.chapterOrder}.`} )} { chapter?.title || book?.title || ( <> {t('scribeFooterBar.madeWith')} )}
{ chapter || book ? (
{t('scribeFooterBar.words')}: {wordsCount}
{Math.ceil(wordsCount / 300)}
) : (
{t('scribeFooterBar.books')}: {session.user?.books?.length}
) }
) }