import {defineStore} from 'pinia' import {useContentStore} from "~/composables/stores/useContentStore.js"; export const formsEndpoint = '/open/workspaces/{workspaceId}/forms' export const useFormsStore = defineStore('forms', () => { const contentStore = useContentStore('slug') const allLoaded = ref(false) const currentPage = ref(1) const loadAll = (workspaceId) => { contentStore.startLoading() return opnFetch(formsEndpoint.replace('{workspaceId}', workspaceId),{query: {page: currentPage.value}}) .then((response) => { if (currentPage.value === 1) { contentStore.resetState() contentStore.save(response.data) } else { contentStore.save(response.data) } if (currentPage.value < response.meta.last_page) { currentPage.value++ loadAll(workspaceId) } else { allLoaded.value = true contentStore.stopLoading() currentPage.value = 1 } }).catch((error) => { contentStore.stopLoading() currentPage.value = 1 throw error }) } const load = (workspaceId, slug) => { contentStore.startLoading() return opnFetch(formsEndpoint.replace('{workspaceId}', workspaceId) + '/' + slug) .finally(() => { contentStore.stopLoading() }) } /** * Load a form from the public API */ const publicLoad = (slug) => { contentStore.startLoading() return useOpnApi('/forms/' + slug) } const publicFetch = (slug) => { contentStore.startLoading() return opnFetch('/forms/' + slug) } const allTags = computed(() => { let tags = [] contentStore.getAll.value.forEach((form) => { if (form.tags && form.tags.length) { if (typeof form.tags === 'string' || form.tags instanceof String ) { tags = tags.concat(form.tags.split(',')) } else if (Array.isArray(form.tags)) { tags = tags.concat(form.tags) } } }) return [...new Set(tags)] }) return { ...contentStore, allLoaded, allTags, publicLoad, publicFetch, loadAll, load, } })