Notification & Integrations refactoring (#346)
* Integrations Refactoring - WIP * integrations list & edit - WIP * Fix integration store binding issue * integrations refactor - WIP * Form integration - WIP * Form integration Edit - WIP * Integration Refactor - Slack - WIP * Integration Refactor - Discord - WIP * Integration Refactor - Webhook - WIP * Integration Refactor - Send Submission Confirmation - WIP * Integration Refactor - Backend handler - WIP * Form Integration Status field * Integration Refactor - Backend SubmissionConfirmation - WIP * IntegrationMigration Command * skip confirmation email test case * Small refactoring * FormIntegration status active/inactive * formIntegrationData to integrationData * Rename file name with Integration suffix for integration realted files * Loader on form integrations * WIP * form integration test case * WIP * Added Integration card - working on refactoring * change location for IntegrationCard and update package file * Form Integration Create/Edit in single Modal * Remove integration extra pages * crisp_help_page_slug for integration json * integration logic as collapse * UI improvements * WIP * Trying to debug vue devtools * WIP for integrations * getIntegrationHandler change namespace name * useForm for integration fields + validation structure * Integration Test case & apply validation rules * Apply useform changes to integration other files * validation rules for FormNotificationsMessageActions fields * Zapier integration as coming soon * Update FormCleaner * set default settings for confirmation integration * WIP * Finish validation for all integrations * Updated purify, added integration formatData * Fix testcase * Ran pint; working on integration errors * Handle integration events * command for Delete Old Integration Events * Display Past Events in Modal * on Integration event create with status error send email to form creator * Polish styling * Minor improvements * Finish badge and integration status * Fix tests and add an integration event test * Lint --------- Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
71
client/stores/form_integrations.js
vendored
Normal file
71
client/stores/form_integrations.js
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
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,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user