<template> <Modal :tiny="true"> <div class="webhook__test-title">{{ $t('testWebhookModal.title') }}</div> <Error :error="error" /> <div v-if="isLoading" class="loading"></div> <div v-else-if="!error.visible"> <div v-if="!!request" class="control"> <div class="control__label"> {{ $t('webhook.request') }} </div> <div class="control__elements"> <div class="webhook__code-container"> <pre class="webhook__code webhook__code--small" ><code>{{ request }}</code></pre> </div> </div> </div> <div v-if="!!response" class="control"> <div class="control__label"> {{ $t('webhook.response') }} </div> <div class="control__elements"> <div class="webhook__code-container"> <pre class="webhook__code webhook__code--small" ><code>{{ response }}</code></pre> </div> </div> </div> <div class="webhook__test-state" :class="{ 'webhook__test-state--ok': ok, 'webhook__test-state--error': !ok, }" > {{ statusDescription }} </div> </div> <div v-if="!isLoading" class="actions margin-bottom-0"> <a @click="hide()">{{ $t('action.cancel') }}</a> <div class="align-right"> <Button type="secondary" @click="makeCall(lastTableId, lastEventType, lastWebhookValues)" > {{ $t('action.retry') }} </Button> </div> </div> </Modal> </template> <script> import modal from '@baserow/modules/core/mixins/modal' import error from '@baserow/modules/core/mixins/error' import { ResponseErrorMessage } from '@baserow/modules/core/plugins/clientHandler' import WebhookService from '@baserow/modules/database/services/webhook' export default { name: 'TestWebhookModal', mixins: [modal, error], data() { return { lastTableId: null, lastEventType: null, lastWebhookValues: null, request: null, response: null, statusCode: null, isLoading: false, } }, computed: { ok() { const status = this.statusCode return status !== null && status >= 200 && status <= 299 }, statusDescription() { if (this.statusCode === null) { return this.$t('testWebhookModal.unreachable') } else if (this.ok) { return `${this.statusCode} ${this.$t('webhook.status.statusOK')}` } else { return `${this.statusCode} ${this.$t('webhook.status.statusNotOK')}` } }, }, methods: { show(tableId, eventType, webhookValues, ...args) { this.getRootModal().show(...args) this.makeCall(tableId, eventType, webhookValues) }, async makeCall(tableId, eventType, webhookValues) { this.lastTableId = tableId this.lastEventType = eventType this.lastWebhookValues = webhookValues this.isLoading = true this.hideError() webhookValues.event_type = eventType try { const { data } = await WebhookService(this.$client).testCall( tableId, webhookValues ) this.request = data.request this.response = data.response this.statusCode = data.status_code } catch (e) { this.handleError(e, 'webhook', null, { url: { invalid_url: new ResponseErrorMessage( this.$t('webhook.form.invalidURLTitle'), this.$t('webhook.form.invalidURLDescription') ), }, }) } this.isLoading = false }, }, } </script>