GuidedSetupManualEmailNotification.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <!-- Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ -->
  2. <script setup lang="ts">
  3. import { useRouter } from 'vue-router'
  4. import Form from '#shared/components/Form/Form.vue'
  5. import type { FormSubmitData } from '#shared/components/Form/types.ts'
  6. import { EnumFormUpdaterId } from '#shared/graphql/types.ts'
  7. import MutationHandler from '#shared/server/apollo/handler/MutationHandler.ts'
  8. import { useDebouncedLoading } from '#shared/composables/useDebouncedLoading.ts'
  9. import { useChannelEmailValidateConfigurationOutboundMutation } from '#desktop/entities/channel-email/graphql/mutations/channelEmailValidateConfigurationOutbound.api.ts'
  10. import { useChannelEmailSetNotificationConfigurationMutation } from '#desktop/entities/channel-email/graphql/mutations/channelEmailSetNotificationConfiguration.api.ts'
  11. import { useSSLVerificationWarningHandler } from '#desktop/form/composables/useSSLVerificationWarningHandler.ts'
  12. import { useEmailOutboundForm } from '#desktop/entities/channel-email/composables/useEmailOutboundForm.ts'
  13. import type { EmailNotificationData } from '#desktop/entities/channel-email/types/email-notification.ts'
  14. import GuidedSetupActionFooter from '../../components/GuidedSetupActionFooter.vue'
  15. import GuidedSetupStatusMessage from '../../components/GuidedSetupStatusMessage.vue'
  16. import { useSystemSetup } from '../../composables/useSystemSetup.ts'
  17. import { emailBeforeRouteEnterGuard } from '../../router/guards/emailBeforeRouteEnterGuard.ts'
  18. defineOptions({
  19. beforeRouteEnter: emailBeforeRouteEnterGuard,
  20. })
  21. const router = useRouter()
  22. const { setTitle } = useSystemSetup()
  23. setTitle(__('Email Notification'))
  24. const {
  25. formEmailOutbound,
  26. emailOutboundSchema,
  27. emailOutboundFormChangeFields,
  28. emailOutboundFormOnChanged,
  29. } = useEmailOutboundForm()
  30. const emailNotificationSchema = [
  31. // For now this is hidden, but should be changeable at some point: https://github.com/zammad/zammad/issues/3343
  32. {
  33. name: 'notification_sender',
  34. label: __('Notification Sender'),
  35. type: 'hidden',
  36. },
  37. ...emailOutboundSchema,
  38. ]
  39. const { loading, debouncedLoading } = useDebouncedLoading()
  40. const probeEmailNotification = async (data: EmailNotificationData) => {
  41. loading.value = true
  42. const validationConfigurationOutbound = new MutationHandler(
  43. useChannelEmailValidateConfigurationOutboundMutation(),
  44. )
  45. const setNotificationConfiguration = new MutationHandler(
  46. useChannelEmailSetNotificationConfigurationMutation(),
  47. )
  48. const emailOutboundData = {
  49. adapter: data.adapter,
  50. host: data.host,
  51. port: Number(data.port),
  52. user: data.user,
  53. password: data.password,
  54. sslVerify: data.sslVerify,
  55. }
  56. return validationConfigurationOutbound
  57. .send({
  58. outboundConfiguration: emailOutboundData,
  59. emailAddress: data.notification_sender,
  60. })
  61. .then(async () => {
  62. const result = await setNotificationConfiguration.send({
  63. outboundConfiguration: emailOutboundData,
  64. })
  65. if (result?.channelEmailSetNotificationConfiguration?.success) {
  66. router.push('/guided-setup/manual/channels')
  67. }
  68. })
  69. .finally(async () => {
  70. loading.value = false
  71. })
  72. }
  73. </script>
  74. <template>
  75. <GuidedSetupStatusMessage
  76. v-if="debouncedLoading"
  77. :message="__('Verifying and saving your configuration…')"
  78. />
  79. <div v-show="!debouncedLoading" class="flex flex-col gap-2.5">
  80. <Form
  81. id="email-notification-setup"
  82. ref="formEmailOutbound"
  83. data-test-id="email-notification-setup"
  84. form-class="mb-2.5"
  85. :flatten-form-groups="['outbound']"
  86. :form-updater-id="
  87. EnumFormUpdaterId.FormUpdaterUpdaterGuidedSetupEmailNotification
  88. "
  89. :schema="emailNotificationSchema"
  90. :handlers="[useSSLVerificationWarningHandler()]"
  91. :change-fields="emailOutboundFormChangeFields"
  92. @changed="emailOutboundFormOnChanged"
  93. @submit="
  94. probeEmailNotification($event as FormSubmitData<EmailNotificationData>)
  95. "
  96. />
  97. <GuidedSetupActionFooter
  98. go-back-route="/guided-setup/manual/system-information"
  99. skip-route="/guided-setup/manual/channels"
  100. :form="formEmailOutbound"
  101. :submit-button-text="__('Save and Continue')"
  102. />
  103. </div>
  104. </template>