import { ContentEditable } from "@common/components/ContentEditable"; import { highlight } from "@common/highlight"; import { useAppState, type Tab } from "../contexts/state"; import styles from '../assets/editor.module.css'; import { useMemo } from "preact/hooks"; import clsx from "clsx"; import { CharacterEditor } from "./character-editor"; import { LocationEditor } from "./location-editor"; import { ChaptersEditor } from "./chapters-editor"; import { LoreEditor } from "./lore-editor"; import { useInputCallback } from "@common/hooks/useInputCallback"; const TABS: { id: Tab; label: string }[] = [ { id: "story", label: "Story" }, { id: "chapters", label: "Chapters" }, { id: "lore", label: "Lore" }, { id: "characters", label: "Characters" }, { id: "locations", label: "Locations" }, ]; export const Editor = () => { const { currentStory, dispatch } = useAppState(); const handleInput = useInputCallback((text: string) => { if (!currentStory) return; dispatch({ type: 'EDIT_STORY', id: currentStory.id, text, }); }, [currentStory?.id]); const handleTabChange = (tab: Tab) => { if (!currentStory) return; dispatch({ type: 'SET_CURRENT_TAB', id: currentStory.id, tab, }); }; const storyValue = useMemo(() => currentStory ? highlight(currentStory.text) : '', [currentStory?.text]); if (!currentStory) { return
; } return (
{currentStory.title}
{currentStory.currentTab === "story" && ( )} {currentStory.currentTab === "lore" && ( )} {currentStory.currentTab === "characters" && ( )} {currentStory.currentTab === "locations" && ( )} {currentStory.currentTab === "chapters" && ( )}
{TABS.map((tab) => ( ))}
); };