import { IBlockData, SbMode } from "@schlechtenburg/core"; import { IPage } from "./pages"; export const useEditor = () => { const { currentPage, currentPageId, setCurrentPageId, } = useCurrentPage(); const { removePage, updatePage, pages, } = usePages(); const mode = useState('mode', () => SbMode.View); const draft = useState|null>('draft', () => null); const setMode = (newMode: SbMode) => { mode.value = newMode; }; const updateDraft = (newDraft: IBlockData) => { draft.value = newDraft; } const edit = (block: IBlockData) => { draft.value = block; mode.value = SbMode.Edit; updateDraft(currentPage.value?.attributes?.block!); }; const save = async () => { if (currentPageId.value === 'draft') { const { data, error } = await useAsyncGql( 'createPage', { data: { title: currentPage.value?.attributes?.title, slug: currentPage.value?.attributes?.slug, block: currentPage.value?.attributes?.block, parent: currentPage.value?.attributes?.parent?.data?.id, publishedAt: (new Date()).toISOString(), }} ); if (error.value) { console.error('Error creating page!'); console.error('error:', error.value); console.error('data:', data.value); return; } setMode(SbMode.View); updatePage(data.value?.createPage?.data?.attributes?.block); updateDraft(data.value?.createPage?.data?.attributes?.block); navigateTo(getPagePath(data.value?.createPage?.data! as IPage, pages.value)); return; } else { const { data, error } = await useAsyncGql( 'updatePage', { id: currentPage.value?.id || '', data: { block: draft.value! }, }, ); if (error.value) { console.error('Error updating page!'); console.error('error:', error.value); console.error('data:', data.value); return; } setMode(SbMode.View); updatePage(data.value?.updatePage?.data?.attributes?.block); updateDraft(data.value?.updatePage?.data?.attributes?.block); } }; const cancel = () => { setMode(SbMode.View); if (currentPageId.value === 'draft') { setCurrentPageId(currentPage.value?.attributes?.parent?.data?.id || null); removePage('draft'); } }; return { mode, setMode, edit, cancel, save, draft, updateDraft, }; };