import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faBookMedical, faBookOpen, faFeather, faFileImport, faLayerGroup} from "@fortawesome/free-solid-svg-icons"; import React, {useContext, useEffect, useState} from "react"; import {BookContext} from "@/context/BookContext"; import ScribeChapterComponent from "@/components/leftbar/ScribeChapterComponent"; import PanelHeader from "@/components/PanelHeader"; import {PanelComponent} from "@/lib/models/Editor"; import AddNewBookForm from "@/components/book/AddNewBookForm"; import AddNewSeriesForm from "@/components/series/AddNewSeriesForm"; import ShortStoryGenerator from "@/components/ShortStoryGenerator"; import ImportBookForm from "@/components/book/ImportBookForm"; import {SessionContext} from "@/context/SessionContext"; import {useTranslations} from "next-intl"; import OfflineContext from "@/context/OfflineContext"; export default function ScribeLeftBar() { const {book} = useContext(BookContext); const {session} = useContext(SessionContext); const t = useTranslations(); const [panelHidden, setPanelHidden] = useState(false); const [currentPanel, setCurrentPanel] = useState(); const [showAddNewBook, setShowAddNewBook] = useState(false); const [showAddNewSeries, setShowAddNewSeries] = useState(false); const [showGenerateShortModal, setShowGenerateShortModal] = useState(false) const [showImportBook, setShowImportBook] = useState(false) const {isCurrentlyOffline} = useContext(OfflineContext) const editorComponents: PanelComponent[] = [ { id: 1, title: t("scribeLeftBar.editorComponents.structure.title"), description: t("scribeLeftBar.editorComponents.structure.description"), badge: t("scribeLeftBar.editorComponents.structure.badge"), icon: faBookOpen } /* { id: 2, title: 'Ligne directive', icon: faBookmark, badge: 'LD', description: 'Ligne directrice pour ce chapitre.' }, { id: 3, title: 'Statistique', icon: faChartLine, badge: 'STATS', description: 'Vérification des verbes' }*/ ] const homeComponents: PanelComponent[] = [ { id: 1, title: t("scribeLeftBar.homeComponents.addBook.title"), description: t("scribeLeftBar.homeComponents.addBook.description"), badge: t("scribeLeftBar.homeComponents.addBook.badge"), icon: faBookMedical }, { id: 2, title: t("scribeLeftBar.homeComponents.generateStory.title"), icon: faFeather, badge: t("scribeLeftBar.homeComponents.generateStory.badge"), description: t("scribeLeftBar.homeComponents.generateStory.description") }, { id: 3, title: t("scribeLeftBar.homeComponents.addSeries.title"), icon: faLayerGroup, badge: t("scribeLeftBar.homeComponents.addSeries.badge"), description: t("scribeLeftBar.homeComponents.addSeries.description") }, { id: 4, title: t("scribeLeftBar.homeComponents.importBook.title"), icon: faFileImport, badge: t("scribeLeftBar.homeComponents.importBook.badge"), description: t("scribeLeftBar.homeComponents.importBook.description") }, ] function togglePanel(component: PanelComponent): void { if (panelHidden) { if (currentPanel?.id === component.id) { setPanelHidden(!panelHidden); return; } } else { setPanelHidden(true); } } useEffect(():void => { if (!book){ setCurrentPanel(undefined); setPanelHidden(false); return; } }, [book]); return (
{book ? editorComponents.map(component => ( )) : ( homeComponents .filter((component: PanelComponent): boolean => { // Hide generate story (id: 2) and import book (id: 4) in offline mode (requires server) // Series (id: 3) now has dual logic and works offline if (isCurrentlyOffline() && (component.id === 2 || component.id === 4)) { return false; } return true; }) .map((component: PanelComponent) => ( )) )}
{panelHidden && (
setPanelHidden(!panelHidden)}/> {currentPanel?.id === 1 && ( )}
)} { showAddNewBook && } { showAddNewSeries && } { showGenerateShortModal && setShowGenerateShortModal(false)}/> } { showImportBook && }
) }