2022-12-28 18:46:51 +00:00
|
|
|
import { IBlockData, SbMode } from "@schlechtenburg/core";
|
2022-12-29 02:47:45 +00:00
|
|
|
import { IPage } from "./pages";
|
2022-12-28 18:46:51 +00:00
|
|
|
|
|
|
|
export const useEditor = () => {
|
2022-12-29 02:47:45 +00:00
|
|
|
const {
|
|
|
|
currentPage,
|
|
|
|
currentPageId,
|
|
|
|
setCurrentPageId,
|
|
|
|
} = useCurrentPage();
|
|
|
|
|
|
|
|
const {
|
|
|
|
removePage,
|
|
|
|
updatePage,
|
|
|
|
pages,
|
|
|
|
} = usePages();
|
|
|
|
|
2022-12-28 18:46:51 +00:00
|
|
|
const mode = useState<SbMode>('mode', () => SbMode.View);
|
|
|
|
const draft = useState<IBlockData<any>|null>('draft', () => null);
|
|
|
|
|
|
|
|
const setMode = (newMode: SbMode) => {
|
|
|
|
mode.value = newMode;
|
|
|
|
};
|
|
|
|
|
|
|
|
const updateDraft = (newDraft: IBlockData<any>) => {
|
|
|
|
draft.value = newDraft;
|
|
|
|
}
|
|
|
|
|
|
|
|
const edit = (block: IBlockData<any>) => {
|
|
|
|
draft.value = block;
|
|
|
|
mode.value = SbMode.Edit;
|
2022-12-29 02:47:45 +00:00
|
|
|
updateDraft(currentPage.value?.attributes?.block!);
|
2022-12-28 18:46:51 +00:00
|
|
|
};
|
2022-12-29 02:47:45 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
2022-12-28 18:46:51 +00:00
|
|
|
};
|
2022-12-29 02:47:45 +00:00
|
|
|
|
2022-12-28 18:46:51 +00:00
|
|
|
const cancel = () => {
|
2022-12-29 02:47:45 +00:00
|
|
|
setMode(SbMode.View);
|
|
|
|
if (currentPageId.value === 'draft') {
|
|
|
|
setCurrentPageId(currentPage.value?.attributes?.parent?.data?.id || null);
|
|
|
|
removePage('draft');
|
|
|
|
}
|
2022-12-28 18:46:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
return {
|
|
|
|
mode,
|
|
|
|
setMode,
|
|
|
|
|
|
|
|
edit,
|
|
|
|
cancel,
|
|
|
|
save,
|
|
|
|
|
|
|
|
draft,
|
|
|
|
updateDraft,
|
|
|
|
};
|
|
|
|
};
|