import { defineStore, acceptHMRUpdate } from "pinia"; import { useLocalStorage } from "@vueuse/core"; export const useDynamicPageStore = defineStore("dynamicPageStore", () => { const currentPage = ref({}); const sectionPublished = ref([]); const componentPublished = ref([]); const setSectionPublished = () => { const exsitsTemplate = ['None'] const contentArr: any = []; currentPage.value.sections && currentPage.value.sections.map((section: any) => { contentArr.push(section.content && typeof section.content === 'string' && JSON.parse(section.content)); return section; }); sectionPublished.value = currentPage.value.sections && currentPage.value.sections.filter( (section: any) => !exsitsTemplate.includes(section.settings?.template) && section.isPublished && !contentArr.flat().some((_section: any) => _section && _section.data && _section.type === "section" && section.id === _section.data) ).sort((a: any, b: any) => a.order - b.order); }; const setComponentPublished = () => { const contentArr: any = []; currentPage.value.sections && currentPage.value.sections.map((section: any) => { contentArr.push(section.content && JSON.parse(section.content) && JSON.parse(section.content)); return section; }); componentPublished.value = currentPage.value.components && currentPage.value.components.filter((section: any) => section.isPublished); }; const setDataQuery = (query: any, componentId: number | string) => { for (const _component of currentPage.value.components && currentPage.value.components) { if (_component.id === componentId) { const currentSetting = { ..._component.settings, dataQuery: query, }; _component.settings = { ...currentSetting, }; break; } } setComponentPublished(); }; async function fetchPageByCode(slug: any) { try { const page = await $fetch(`/api/dynamic-page/get-by-code/${slug}`) currentPage.value = {} currentPage.value = page setSectionPublished(); setComponentPublished(); return { currentPage, sectionPublished, componentPublished } } catch (error: any) {} } return { currentPage, sectionPublished, componentPublished, fetchPageByCode, setSectionPublished, setComponentPublished, setDataQuery, }; }); if (import.meta.hot) { import.meta.hot.accept(acceptHMRUpdate(useDynamicPageStore, import.meta.hot)); }