import { IBlockData } from "@schlechtenburg/core"; export interface IPage { id?: string|null; attributes?: { title?: string; block?: IBlockData|null; slug?: string; parent?: { data?: { id?: string|null; }; }; }; } export const usePages = () => { const pages = useState('pages', () => []); const getPage = (id:string) => pages.value.find(p => p.id === id); const setPages = (newPages: IPage[] = []) => { pages.value = newPages; }; const updatePage = (page: Partial) => { const existing = pages.value.find(p => p.id === page.id); if (!existing) { console.warn('Could not update page because it was not found in the store', page); return; } setPages([ ...pages.value.filter(p => p.id !== page.id), { id: existing.id, attributes: { ...existing.attributes, ...page.attributes, }, }, ]); }; const removePage = (id: string) => { setPages(pages.value.filter(p => p.id !== id)); }; const insertPage = (page: IPage) => { setPages([ ...pages.value, page, ]); }; const fetchPages = async () => { const { data, error } = await useAsyncGql('pages'); setPages(data.value?.pages?.data as IPage[]); } return { pages, setPages, getPage, fetchPages, insertPage, updatePage, removePage, }; }; export const useCurrentPage = () => { const { pages, insertPage } = usePages(); const currentPageId = useState('currentPageId', () => null); const setCurrentPage = (newPage: IPage|null) => { if (!newPage || !newPage.id) { currentPageId.value = null; return; } if (!pages.value.find(p => p.id === newPage.id)) { insertPage(newPage); } currentPageId.value = newPage.id; }; const setCurrentPageId = (newPageId: string|null) => { currentPageId.value = newPageId; }; const currentPage = computed(() => pages.value.find(p => p.id === currentPageId.value)); return { currentPage, setCurrentPage, currentPageId, setCurrentPageId, }; };