Files
speckle-server/packages/frontend-2/components/feedback/Dialog.vue
T
andrewwallacespeckle e224613c70 feat(fe2): Add forum message to feedback dialog (#3327)
* Update feedback dialog with forum message

* Adjust leading of forum message
2024-10-18 11:33:16 +01:00

88 lines
2.3 KiB
Vue

<template>
<LayoutDialog
v-model:open="isOpen"
title="Give us feedback"
:buttons="dialogButtons"
:on-submit="onSubmit"
max-width="md"
>
<div class="flex flex-col gap-2">
<p class="text-body-xs text-foreground font-medium">
How can we improve Speckle? If you have a feature request, please also share how
you would use it and why it's important to you
</p>
<FormTextArea
v-model="feedback"
:rules="[isRequired]"
name="feedback"
label="Feedback"
color="foundation"
/>
<p class="text-body-xs !leading-4">
Need help? For support, head over to our
<FormButton to="https://speckle.community/" target="_blank" link text>
community forum
</FormButton>
where we can chat and solve problems together.
</p>
</div>
</LayoutDialog>
</template>
<script setup lang="ts">
import type { LayoutDialogButton } from '@speckle/ui-components'
import { useForm } from 'vee-validate'
import { useMixpanel } from '~/lib/core/composables/mp'
import { useZapier } from '~/lib/core/composables/zapier'
import { useGlobalToast, ToastNotificationType } from '~~/lib/common/composables/toast'
import { isRequired } from '~/lib/common/helpers/validation'
import { useActiveUser } from '~~/lib/auth/composables/activeUser'
type FormValues = { feedback: string }
const isOpen = defineModel<boolean>('open', { required: true })
const { activeUser: user } = useActiveUser()
const mixpanel = useMixpanel()
const { sendWebhook } = useZapier()
const { triggerNotification } = useGlobalToast()
const { handleSubmit } = useForm<FormValues>()
const feedback = ref('')
const dialogButtons = computed((): LayoutDialogButton[] => [
{
text: 'Send',
props: { color: 'primary' },
submit: true,
id: 'sendFeedback'
}
])
const onSubmit = handleSubmit(async () => {
if (!feedback.value) return
isOpen.value = false
triggerNotification({
type: ToastNotificationType.Success,
title: 'Thank you for your feedback!'
})
mixpanel.track('Feedback Sent', {
message: feedback.value
})
await sendWebhook('https://hooks.zapier.com/hooks/catch/12120532/2m4okri/', {
userId: user.value?.id ?? '',
feedback: feedback.value
})
})
watch(isOpen, (newVal) => {
if (newVal) {
feedback.value = ''
}
})
</script>