import React, {useContext, useState} from "react"; import {ChapterProps, chapterVersions} from "@/lib/models/Chapter"; import {ChapterContext} from "@/context/ChapterContext"; import {BookContext} from "@/context/BookContext"; import System from "@/lib/models/System"; import UserMenu from "@/components/UserMenu"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faGear, faGlobe, faHome} from "@fortawesome/free-solid-svg-icons"; import {SelectBoxProps} from "@/shared/interface"; import {AlertContext} from "@/context/AlertContext"; import {SessionContext} from "@/context/SessionContext"; import Book, {BookListProps} from "@/lib/models/Book"; import Modal from "@/components/Modal"; import BookSetting from "@/components/book/settings/BookSetting"; import SelectBox from "@/components/form/SelectBox"; import {useTranslations} from "next-intl"; import {LangContext, LangContextProps} from "@/context/LangContext"; import CreditCounter from "@/components/CreditMeters"; import QuillSense from "@/lib/models/QuillSense"; export default function ScribeControllerBar() { const {chapter, setChapter} = useContext(ChapterContext); const {book, setBook} = useContext(BookContext); const {errorMessage} = useContext(AlertContext) const {session} = useContext(SessionContext); const t = useTranslations(); const {lang, setLang} = useContext(LangContext) const isGPTEnabled: boolean = QuillSense.isOpenAIEnabled(session); const isGemini: boolean = QuillSense.isOpenAIEnabled(session); const isAnthropic: boolean = QuillSense.isOpenAIEnabled(session); const isSubTierTwo: boolean = QuillSense.getSubLevel(session) >= 2; const hasAccess: boolean = (isGPTEnabled || isAnthropic || isGemini) || isSubTierTwo; const [showSettingPanel, setShowSettingPanel] = useState(false); async function handleChapterVersionChanged(version: number) { try { const response: ChapterProps = await System.authGetQueryToServer(`chapter/whole`, session.accessToken, lang, { bookid: book?.bookId, id: chapter?.chapterId, version: version, }); if (!response) { errorMessage(t("controllerBar.chapterNotFound")); return; } setChapter(response); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t("controllerBar.unknownChapterError")); } } } async function getBook(bookId: string): Promise { try { const response: BookListProps = await System.authGetQueryToServer(`book/basic-information`, session.accessToken, lang, { id: bookId, }); if (!response) { errorMessage(t("controllerBar.bookNotFound")); return; } setBook!!({ bookId: response.id, type: response.type, title: response.title, subTitle: response.subTitle, summary: response.summary, publicationDate: response.desiredReleaseDate, desiredWordCount: response.desiredWordCount, totalWordCount: response.desiredWordCount, }); } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t("controllerBar.unknownBookError")); } } } function handleLanguageChange(language: "fr" | "en"): void { System.setCookie('lang', language, 365); const newLang: "en" | "fr" | null = System.getCookie('lang') as "en" | "fr" | null; if (newLang) { setLang(language); } } return (
{book && ( )} { book && ( ) }
getBook(e.target.value)} data={Book.booksToSelectBox(session.user?.books ?? [])} defaultValue={book?.bookId} placeholder={t("controllerBar.selectBook")}/>
{chapter && (
handleChapterVersionChanged(parseInt(e.target.value))} data={chapterVersions.filter((version: SelectBoxProps): boolean => { return !(version.value === '1' && !hasAccess); }).map((version: SelectBoxProps) => { return { value: version.value.toString(), label: t(version.label) } })} defaultValue={chapter?.chapterContent.version.toString()}/>
)}
{ hasAccess && }
{ showSettingPanel && setShowSettingPanel(false)} onConfirm={() => { }} children={} enableFooter={false} /> }
) }