Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove old code related to notifications #363

Merged
merged 67 commits into from
Mar 28, 2024
Merged
Changes from 1 commit
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
8a4abe4
Integrations Refactoring - WIP
formsdev Feb 23, 2024
788ddfd
integrations list & edit - WIP
formsdev Feb 28, 2024
2ff62ea
Fix integration store binding issue
JhumanJ Feb 28, 2024
f7bfbbc
integrations refactor - WIP
formsdev Feb 28, 2024
453b56c
Form integration - WIP
formsdev Mar 1, 2024
d43cbe4
Form integration Edit - WIP
formsdev Mar 1, 2024
732fe0f
Merge remote-tracking branch 'origin/main' into integrations-refactoring
formsdev Mar 1, 2024
cbe6708
Integration Refactor - Slack - WIP
formsdev Mar 4, 2024
a53d94b
Integration Refactor - Discord - WIP
formsdev Mar 5, 2024
ad8c8ed
Integration Refactor - Webhook - WIP
formsdev Mar 5, 2024
99ba662
Integration Refactor - Send Submission Confirmation - WIP
formsdev Mar 6, 2024
e57f91c
Integration Refactor - Backend handler - WIP
formsdev Mar 12, 2024
3ef45c9
Form Integration Status field
formsdev Mar 12, 2024
855ea0c
Merge branch 'main' into integrations-refactoring
formsdev Mar 12, 2024
b2e3de7
Integration Refactor - Backend SubmissionConfirmation - WIP
formsdev Mar 12, 2024
31b30b3
IntegrationMigration Command
formsdev Mar 13, 2024
11148df
skip confirmation email test case
formsdev Mar 13, 2024
b7e4029
Small refactoring
JhumanJ Mar 13, 2024
81a197e
FormIntegration status active/inactive
formsdev Mar 14, 2024
d481f94
formIntegrationData to integrationData
formsdev Mar 14, 2024
441b173
Rename file name with Integration suffix for integration realted files
formsdev Mar 14, 2024
ddc8166
Loader on form integrations
formsdev Mar 14, 2024
5d12a1a
WIP
JhumanJ Mar 15, 2024
0e9a3f4
form integration test case
formsdev Mar 15, 2024
8c6fa2e
Merge branch 'main' into integrations-refactoring
formsdev Mar 15, 2024
1dbe3ee
Merge branch 'integrations-refactoring' of https://github.com/JhumanJ…
JhumanJ Mar 19, 2024
d5c5b7a
WIP
JhumanJ Mar 19, 2024
012b894
Added Integration card - working on refactoring
JhumanJ Mar 20, 2024
bc0f75b
change location for IntegrationCard and update package file
formsdev Mar 21, 2024
14caefd
Form Integration Create/Edit in single Modal
formsdev Mar 21, 2024
731f899
Remove integration extra pages
formsdev Mar 21, 2024
61cbd59
crisp_help_page_slug for integration json
formsdev Mar 21, 2024
056b1ad
integration logic as collapse
formsdev Mar 22, 2024
d6eb61f
UI improvements
JhumanJ Mar 22, 2024
c08bc88
Merge master
JhumanJ Mar 23, 2024
c6418e6
WIP
JhumanJ Mar 24, 2024
7cbec8f
Trying to debug vue devtools
JhumanJ Mar 24, 2024
475a83f
WIP for integrations
JhumanJ Mar 25, 2024
38f4a76
getIntegrationHandler change namespace name
formsdev Mar 25, 2024
3b6d009
useForm for integration fields + validation structure
JhumanJ Mar 25, 2024
763e92a
Integration Test case & apply validation rules
formsdev Mar 26, 2024
5ddc1aa
Apply useform changes to integration other files
formsdev Mar 26, 2024
aa66172
validation rules for FormNotificationsMessageActions fields
formsdev Mar 26, 2024
42c22f0
Merge branch 'main' into integrations-refactoring
formsdev Mar 26, 2024
308ceda
Zapier integration as coming soon
formsdev Mar 26, 2024
a805649
Update FormCleaner
formsdev Mar 26, 2024
c0a14ef
set default settings for confirmation integration
formsdev Mar 26, 2024
0bcface
WIP
JhumanJ Mar 26, 2024
9086987
Finish validation for all integrations
JhumanJ Mar 26, 2024
dec59f1
Updated purify, added integration formatData
JhumanJ Mar 26, 2024
78ba679
Fix testcase
formsdev Mar 26, 2024
3c58685
Ran pint; working on integration errors
JhumanJ Mar 26, 2024
7542748
Merge branch 'integrations-refactoring' of https://github.com/JhumanJ…
JhumanJ Mar 26, 2024
0d60794
Handle integration events
JhumanJ Mar 26, 2024
82a0b51
Remove old code related to notifications
formsdev Mar 27, 2024
60896e4
command for Delete Old Integration Events
formsdev Mar 28, 2024
4aebf4c
Display Past Events in Modal
formsdev Mar 28, 2024
7b31368
on Integration event create with status error send email to form creator
formsdev Mar 28, 2024
9abc26b
Polish styling
JhumanJ Mar 28, 2024
f75d28c
Minor improvements
JhumanJ Mar 28, 2024
fc34016
Finish badge and integration status
JhumanJ Mar 28, 2024
8892909
Merge branch 'main' into integrations-refactoring
JhumanJ Mar 28, 2024
6bad74a
Fix tests and add an integration event test
JhumanJ Mar 28, 2024
d42ed16
Merge branch 'integrations-refactoring' of https://github.com/JhumanJ…
JhumanJ Mar 28, 2024
68072af
Merge branch 'integrations-refactoring' into integrations-refactoring…
JhumanJ Mar 28, 2024
b61f02d
Merge changes from integrations
JhumanJ Mar 28, 2024
8ba8c40
Run linters
JhumanJ Mar 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP
  • Loading branch information
JhumanJ committed Mar 19, 2024
commit d5c5b7af43f84efaa67d2dd0c3dc432e13fc1259
12 changes: 6 additions & 6 deletions client/components/open/integrations/DiscordIntegration.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<IntegrationWrapper :service="service" :form="form" v-model="integration">
<IntegrationWrapper :integration="props.integration" :form="form" v-model="integration">
<text-input name="discord_webhook_url" v-model="integration.settings.discord_webhook_url" class="mt-4"
label="Discord webhook url" help="help">
<template #help>
@@ -18,24 +18,24 @@
</template>

<script setup>
import IntegrationWrapper from "./IntegrationWrapper.vue"
import IntegrationWrapper from "./components/IntegrationWrapper.vue"
import FormNotificationsMessageActions from "~/components/open/forms/components/form-components/components/FormNotificationsMessageActions.vue"

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
form: { type: Object, required: true },
integrationData: { type: Object, required: true },
formIntegrationId: { type: Number, required: false, default: null }
});

const alert = useAlert()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
const formIntegrationId = computed(() => parseInt(useRoute().params.id) ?? null)
const integration = ref(props.integrationData)

const save = () => {
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((formIntegrationId.value) ? '/' + formIntegrationId.value : ''), {
method: (formIntegrationId.value) ? 'PUT' : 'POST',
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((props.formIntegrationId) ? '/' + props.formIntegrationId : ''), {
method: (props.formIntegrationId) ? 'PUT' : 'POST',
body: integration.value
}).then(data => {
alert.success(data.message)
15 changes: 7 additions & 8 deletions client/components/open/integrations/EmailIntegration.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<IntegrationWrapper :service="service" :form="form" v-model="integration">
<IntegrationWrapper :integration="props.integration" :form="form" v-model="integration">
<text-input name="notification_reply_to" v-model="integration.settings.notification_reply_to" class="mt-4"
label="Notification Reply To" :help="notifiesHelp" />
<text-area-input name="notification_emails" v-model="integration.settings.notification_emails" class="mt-4"
@@ -13,18 +13,18 @@
</template>

<script setup>
import IntegrationWrapper from './IntegrationWrapper.vue'
import IntegrationWrapper from './components/IntegrationWrapper.vue'

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
form: { type: Object, required: true },
integrationData: { type: Object, required: true }
integrationData: { type: Object, required: true },
formIntegrationId: { type: Number, required: false, default: null }
})

const alert = useAlert()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
const formIntegrationId = computed(() => parseInt(useRoute().params.id) ?? null)
const integration = ref(props.integrationData)

const replayToEmailField = computed(() => {
@@ -43,8 +43,8 @@ const notifiesHelp = computed(() => {
})

const save = () => {
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((formIntegrationId.value) ? '/' + formIntegrationId.value : ''), {
method: (formIntegrationId.value) ? 'PUT' : 'POST',
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((props.formIntegrationId) ? '/' + props.formIntegrationId : ''), {
method: (props.formIntegrationId) ? 'PUT' : 'POST',
body: integration.value
}).then(data => {
alert.success(data.message)
@@ -55,4 +55,3 @@ const save = () => {
})
}
</script>

10 changes: 5 additions & 5 deletions client/components/open/integrations/GoogleSheetsIntegration.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<IntegrationWrapper :service="service" :form="form" v-model="integration">
<IntegrationWrapper :integration="props.integration" :form="form" v-model="integration">
<div class="my-5">
Coming Soon...
</div>
@@ -12,22 +12,22 @@
</template>

<script setup>
import IntegrationWrapper from './IntegrationWrapper.vue'
import IntegrationWrapper from './components/IntegrationWrapper.vue'

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
form: { type: Object, required: true },
integrationData: { type: Object, required: true },
formIntegrationId: { type: Number, required: false, default: null }
});

const alert = useAlert()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
const formIntegrationId = computed(() => parseInt(useRoute().params.id) ?? null)
const integration = ref(props.integrationData)

const save = () => {
console.log("Save clicked!")
alert.warning("Coming Soon...")
}
</script>
</script>
12 changes: 6 additions & 6 deletions client/components/open/integrations/SlackIntegration.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<IntegrationWrapper :service="service" :form="form" v-model="integration">
<IntegrationWrapper :integration="props.integration" :form="form" v-model="integration">
<text-input name="slack_webhook_url" v-model="integration.settings.slack_webhook_url" class="mt-4"
label="Slack webhook url" help="help">
<template #help>
@@ -18,24 +18,24 @@
</template>

<script setup>
import IntegrationWrapper from "./IntegrationWrapper.vue"
import IntegrationWrapper from "./components/IntegrationWrapper.vue"
import FormNotificationsMessageActions from "~/components/open/forms/components/form-components/components/FormNotificationsMessageActions.vue"

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
form: { type: Object, required: true },
integrationData: { type: Object, required: true },
formIntegrationId: { type: Number, required: false, default: null }
});

const alert = useAlert()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
const formIntegrationId = computed(() => parseInt(useRoute().params.id) ?? null)
const integration = ref(props.integrationData)

const save = () => {
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((formIntegrationId.value) ? '/' + formIntegrationId.value : ''), {
method: (formIntegrationId.value) ? 'PUT' : 'POST',
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((props.formIntegrationId) ? '/' + props.formIntegrationId : ''), {
method: (props.formIntegrationId) ? 'PUT' : 'POST',
body: integration.value
}).then(data => {
alert.success(data.message)
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<IntegrationWrapper :service="service" :form="form" v-model="integration">
<IntegrationWrapper :integration="props.integration" :form="form" v-model="integration">
<div class="mt-5">{{ emailSubmissionConfirmationHelp }}</div>

<div v-if="emailSubmissionConfirmationField">
@@ -28,18 +28,18 @@
</template>

<script setup>
import IntegrationWrapper from "./IntegrationWrapper.vue"
import IntegrationWrapper from "./components/IntegrationWrapper.vue"

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
form: { type: Object, required: true },
integrationData: { type: Object, required: true },
formIntegrationId: { type: Number, required: false, default: null }
});

const alert = useAlert()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
const formIntegrationId = computed(() => parseInt(useRoute().params.id) ?? null)
const integration = ref(props.integrationData)

const emailSubmissionConfirmationField = computed(() => {
@@ -58,8 +58,8 @@ const emailSubmissionConfirmationHelp = computed(() => {
})

const save = () => {
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((formIntegrationId.value) ? '/' + formIntegrationId.value : ''), {
method: (formIntegrationId.value) ? 'PUT' : 'POST',
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((props.formIntegrationId) ? '/' + props.formIntegrationId : ''), {
method: (props.formIntegrationId) ? 'PUT' : 'POST',
body: integration.value
}).then(data => {
alert.success(data.message)
12 changes: 6 additions & 6 deletions client/components/open/integrations/WebhookIntegration.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<IntegrationWrapper :service="service" :form="form" v-model="integration">
<IntegrationWrapper :integration="props.integration" :form="form" v-model="integration">
<text-input name="webhook_url" v-model="integration.settings.webhook_url" class="mt-4" label="Webhook url"
help="We will post form submissions to this endpoint" />

@@ -10,23 +10,23 @@
</template>

<script setup>
import IntegrationWrapper from "./IntegrationWrapper.vue"
import IntegrationWrapper from "./components/IntegrationWrapper.vue"

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
form: { type: Object, required: true },
integrationData: { type: Object, required: true },
formIntegrationId: { type: Number, required: false, default: null }
});

const alert = useAlert()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
const formIntegrationId = computed(() => parseInt(useRoute().params.id) ?? null)
const integration = ref(props.integrationData)

const save = () => {
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((formIntegrationId.value) ? '/' + formIntegrationId.value : ''), {
method: (formIntegrationId.value) ? 'PUT' : 'POST',
opnFetch('/open/forms/{formid}/integration'.replace('{formid}', props.form.id) + ((props.formIntegrationId) ? '/' + props.formIntegrationId : ''), {
method: (props.formIntegrationId) ? 'PUT' : 'POST',
body: integration.value
}).then(data => {
alert.success(data.message)
Original file line number Diff line number Diff line change
@@ -2,10 +2,10 @@
<div :class="wrapperClass" :style="inputStyle">
<slot name="title">
<h3 class="font-semibold mt-4 text-xl">
Connect your form to {{ service.name }}
<pro-tag v-if="service?.is_pro === true" />
Setup "{{ integration.name }}"
<pro-tag v-if="integration?.is_pro === true" />
</h3>
<a class="cursor-pointer" @click.prevent="crisp.openHelpdesk()">Need help setting up?</a>
<a class="cursor-pointer" @click.prevent="crisp.openHelpdesk()">Need help with this integration?</a>
</slot>

<slot name="logic">
@@ -49,7 +49,7 @@
import ConditionEditor from '~/components/open/forms/components/form-logic-components/ConditionEditor.client.vue'

const props = defineProps({
service: { type: Object, required: true },
integration: { type: Object, required: true },
modelValue: { required: false },
wrapperClass: { type: String, required: false },
inputStyle: { type: Object, required: false },
1 change: 0 additions & 1 deletion client/composables/stores/useContentStore.js
Original file line number Diff line number Diff line change
@@ -14,7 +14,6 @@ export const useContentStore = (mapKey = 'id') => {
if (Array.isArray(key)) {
return key.map((k) => content.value.get(k)).filter((item) => item !== undefined)
}
console.log(key, content.value)
return content.value.get(key)
}

2 changes: 1 addition & 1 deletion client/pages/forms/[slug]/show/integrations/index.vue
Original file line number Diff line number Diff line change
@@ -93,7 +93,7 @@
<pro-tag v-if="sectionItem?.is_pro === true"/>
</div>
<NuxtLink v-track.new_integration_click="{ name: sectionItemKey }" class="absolute inset-0"
:to="{ name: 'forms-slug-show-integrations-new', query: { 'service': sectionItemKey } }"/>
:to="{ name: 'forms-slug-show-integrations-new', query: { 'integration': sectionItemKey } }"/>
</div>
</div>
</div>
88 changes: 20 additions & 68 deletions client/pages/forms/[slug]/show/integrations/new.vue
Original file line number Diff line number Diff line change
@@ -1,32 +1,9 @@
<template>
<div class="w-full md:w-4/5 lg:w-3/5 md:mx-auto md:max-w-4xl p-4">

<!-- <div v-if="!integration.id" v-for="(section, sectionName) in sectionsList" :key="sectionName" class="my-6">-->
<!-- <h3 class="text-gray-500">-->
<!-- {{ sectionName }}-->
<!-- </h3>-->
<!-- <div class="flex flex-wrap mt-4 gap-6">-->
<!-- <div v-for="(sectionItem, sectionItemKey) in section" :key="sectionItemKey"-->
<!-- class="bg-gray-50 border border-gray-200 group rounded cursor-pointer hover:bg-gray-100 relative p-4 pb-2 items-center justify-center w-[170px] h-[120px] flex flex-col">-->
<!-- <div class="flex justify-center">-->
<!-- <div class="h-10 w-10 text-gray-500 group-hover:text-blue-500 transition-colors flex items-center" v-html="sectionItem.icon"/>-->
<!-- </div>-->
<!-- <div class="flex-grow flex items-center">-->
<!-- <div class="text-gray-400 font-medium mt-2 text-sm text-center">-->
<!-- {{ sectionItem.name }}-->
<!-- </div>-->
<!-- <pro-tag v-if="sectionItem?.is_pro === true"/>-->
<!-- </div>-->
<!-- <NuxtLink v-track.new_integration_click="{ name: sectionItemKey }" class="absolute inset-0"-->
<!-- :to="{ name: 'forms-slug-show-integrations-new', query: { 'service': sectionItemKey } }"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->

<!-- <div class="mb-20" v-else>-->
<!-- <component v-if="integrationProperty.service && integrationProperty.component" :is="integrationProperty.component"-->
<!-- :form="form" :service="integrationProperty.service" :integrationData="integrationData" />-->
<!-- </div>-->
<div class="mb-20">
<component v-if="integration && component" :is="component"
:form="form" :integration="integration" :integrationData="integrationData" />
</div>
</div>
</template>

@@ -47,46 +24,21 @@ useOpnSeoMeta({
const crisp = useCrisp()
const router = useRouter()
const formIntegrationsStore = useFormIntegrationsStore()
// const integrations = computed(() => formIntegrationsStore.integrations)
// const integrationId = computed(() => useRoute().query.service ?? null)
// const integration = computed(() => integrations.value.get(integrationId.value))
// const integrationProperty = computed(() => {
// if (!integration.value || formIntegrationsStore.loading) return {}
// const service = integrations.value.get(integrationId.value) ?? null
// return {
// service,
// serviceKey: integrationId.value,
// component: resolveComponent(service.file_name)
// }
// })

const useIntegration = () => {
const id = ref(null)
const value = computed(() => formIntegrationsStore.getByKey(id.value))
const data = computed(() => {
return {
integration_id: id.value,
status: true,
settings: {},
logic: null
}
})
watch(() => useRoute().query.integration, (newValue) => {
if (!newValue || newValue === id.value) return
id.value = newValue
console.log('id.value', id.value)
console.log(value)
})

onMounted(() => {
// Init value
id.value = useRoute().query.integration
console.log('in')
console.log('id.value', id.value)
console.log(value, value.value)
})
formIntegrationsStore.initIntegrations()
const integrations = computed(() => formIntegrationsStore.integrations)
const integrationId = computed(() => useRoute().query.integration ?? null)
const integration = computed(() => integrations.value.get(integrationId.value))
const component = computed(() => {
if (!integration.value) return null
return resolveComponent(integration.value.file_name)
})
const integrationData = computed(() => {
return {
integration_id: integrationId.value,
status: true,
settings: {},
logic: null
}
})

return { value, data, id }
}
const integration = useIntegration()
</script>