import {BookHeart, BookOpen, Feather, FileInput, Layers, X} from "lucide-react"; import React, {useContext, useEffect, useState} from "react"; import {BookContext, BookContextProps} from "@/context/BookContext"; import ScribeChapterComponent from "@/components/leftbar/ScribeChapterComponent"; import SectionHeader from "@/components/ui/SectionHeader"; import IconButton from "@/components/ui/IconButton"; import {PanelComponent} from "@/lib/types/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, SessionContextProps} from "@/context/SessionContext"; import {useTranslations} from '@/lib/i18n'; import InsetPanel from "@/components/ui/InsetPanel"; import OfflineContext, {OfflineContextType} from "@/context/OfflineContext"; export default function ScribeLeftBar() { const {book}: BookContextProps = useContext(BookContext); const {session}: SessionContextProps = useContext(SessionContext); const {isCurrentlyOffline}: OfflineContextType = useContext(OfflineContext); 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 editorComponents: PanelComponent[] = [ { id: 1, title: t("scribeLeftBar.editorComponents.structure.title"), description: t("scribeLeftBar.editorComponents.structure.description"), badge: t("scribeLeftBar.editorComponents.structure.badge"), icon: BookOpen } ] const homeComponents: PanelComponent[] = [ { id: 1, title: t("scribeLeftBar.homeComponents.addBook.title"), description: t("scribeLeftBar.homeComponents.addBook.description"), badge: t("scribeLeftBar.homeComponents.addBook.badge"), icon: BookHeart }, { id: 2, title: t("scribeLeftBar.homeComponents.generateStory.title"), icon: Feather, badge: t("scribeLeftBar.homeComponents.generateStory.badge"), description: t("scribeLeftBar.homeComponents.generateStory.description") }, { id: 3, title: t("scribeLeftBar.homeComponents.addSeries.title"), icon: Layers, badge: t("scribeLeftBar.homeComponents.addSeries.badge"), description: t("scribeLeftBar.homeComponents.addSeries.description") }, { id: 4, title: t("scribeLeftBar.homeComponents.importBook.title"), icon: FileInput, 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 => ( { togglePanel(component); setCurrentPanel(component); }} /> )) : ( homeComponents.filter((component: PanelComponent): boolean => { return !(isCurrentlyOffline() && component.id === 2); }).map((component: PanelComponent) => ( { if (component.id === 1) setShowAddNewBook(true); else if (component.id === 2) setShowGenerateShortModal(true); else if (component.id === 3) setShowAddNewSeries(true); else if (component.id === 4) setShowImportBook(true); }} /> )) )}
{panelHidden && (
=> setPanelHidden(!panelHidden)}/>}/>
{currentPanel?.id === 1 && ( )}
)} { showAddNewBook && } { showAddNewSeries && } { showGenerateShortModal && setShowGenerateShortModal(false)}/> } { showImportBook && }
) }