72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
import {defineStore} from 'pinia'
|
|
import {useContentStore} from "~/composables/stores/useContentStore.js";
|
|
import integrationsList from '~/data/forms/integrations.json'
|
|
|
|
export const formIntegrationsEndpoint = '/open/forms/{formid}/integrations'
|
|
|
|
export const useFormIntegrationsStore = defineStore('form_integrations', () => {
|
|
|
|
const contentStore = useContentStore()
|
|
const integrations = ref(new Map)
|
|
|
|
const availableIntegrations = computed(() => {
|
|
const user = useAuthStore().user
|
|
if (!user) return integrations.value
|
|
|
|
const enrichedIntegrations = new Map()
|
|
for (const [key, integration] of integrations.value.entries()) {
|
|
enrichedIntegrations.set(key, {
|
|
...integration,
|
|
id: key,
|
|
requires_subscription: !user.is_subscribed && integration.is_pro
|
|
})
|
|
}
|
|
|
|
return enrichedIntegrations
|
|
})
|
|
|
|
const integrationsBySection = computed(() => {
|
|
const groupedObject = {};
|
|
for (const [key, integration] of availableIntegrations.value.entries()) {
|
|
const sectionName = integration.section_name;
|
|
if (!groupedObject[sectionName]) {
|
|
groupedObject[sectionName] = {};
|
|
}
|
|
groupedObject[sectionName][key] = integration
|
|
}
|
|
return groupedObject;
|
|
})
|
|
|
|
const fetchFormIntegrations = (formId) => {
|
|
contentStore.resetState()
|
|
contentStore.startLoading()
|
|
return useOpnApi(formIntegrationsEndpoint.replace('{formid}', formId)).then((response) => {
|
|
contentStore.save(response.data.value)
|
|
contentStore.stopLoading()
|
|
})
|
|
}
|
|
|
|
const getAllByFormId = (formId) => {
|
|
return contentStore.getAll.value.filter((item) => {
|
|
return (item.form_id) ? item.form_id === formId : false
|
|
})
|
|
}
|
|
|
|
const initIntegrations = () => {
|
|
if (integrations.value.size === 0) {
|
|
integrations.value = new Map(Object.entries(integrationsList))
|
|
}
|
|
}
|
|
|
|
initIntegrations()
|
|
|
|
return {
|
|
...contentStore,
|
|
initIntegrations,
|
|
availableIntegrations,
|
|
integrationsBySection,
|
|
fetchFormIntegrations,
|
|
getAllByFormId,
|
|
}
|
|
})
|