|
|
|
@ -1,35 +1,35 @@
|
|
|
|
|
<template lang="pug">
|
|
|
|
|
q-dialog(ref='dialog', @hide='onDialogHide')
|
|
|
|
|
q-dialog(ref='dialogRef', @hide='onDialogHide')
|
|
|
|
|
q-card(style='min-width: 850px;')
|
|
|
|
|
q-card-section.card-header
|
|
|
|
|
template(v-if='hookId')
|
|
|
|
|
template(v-if='props.hookId')
|
|
|
|
|
q-icon(name='img:/_assets/icons/fluent-pencil-drawing.svg', left, size='sm')
|
|
|
|
|
span {{$t(`admin.webhooks.edit`)}}
|
|
|
|
|
span {{t(`admin.webhooks.edit`)}}
|
|
|
|
|
template(v-else)
|
|
|
|
|
q-icon(name='img:/_assets/icons/fluent-plus-plus.svg', left, size='sm')
|
|
|
|
|
span {{$t(`admin.webhooks.new`)}}
|
|
|
|
|
span {{t(`admin.webhooks.new`)}}
|
|
|
|
|
//- STATE INFO BAR
|
|
|
|
|
q-card-section.flex.items-center.bg-indigo.text-white(v-if='hookId && hook.state === `pending`')
|
|
|
|
|
q-card-section.flex.items-center.bg-indigo.text-white(v-if='props.hookId && state.hook.state === `pending`')
|
|
|
|
|
q-spinner-clock.q-mr-sm(
|
|
|
|
|
color='white'
|
|
|
|
|
size='xs'
|
|
|
|
|
)
|
|
|
|
|
.text-caption {{$t('admin.webhooks.statePendingHint')}}
|
|
|
|
|
q-card-section.flex.items-center.bg-positive.text-white(v-if='hookId && hook.state === `success`')
|
|
|
|
|
.text-caption {{t('admin.webhooks.statePendingHint')}}
|
|
|
|
|
q-card-section.flex.items-center.bg-positive.text-white(v-if='props.hookId && state.hook.state === `success`')
|
|
|
|
|
q-spinner-infinity.q-mr-sm(
|
|
|
|
|
color='white'
|
|
|
|
|
size='xs'
|
|
|
|
|
)
|
|
|
|
|
.text-caption {{$t('admin.webhooks.stateSuccessHint')}}
|
|
|
|
|
q-card-section.bg-negative.text-white(v-if='hookId && hook.state === `error`')
|
|
|
|
|
.text-caption {{t('admin.webhooks.stateSuccessHint')}}
|
|
|
|
|
q-card-section.bg-negative.text-white(v-if='props.hookId && state.hook.state === `error`')
|
|
|
|
|
.flex.items-center
|
|
|
|
|
q-icon.q-mr-sm(
|
|
|
|
|
color='white'
|
|
|
|
|
size='xs'
|
|
|
|
|
name='las la-exclamation-triangle'
|
|
|
|
|
)
|
|
|
|
|
.text-caption {{$t('admin.webhooks.stateErrorExplain')}}
|
|
|
|
|
.text-caption.q-pl-lg.q-ml-xs.text-red-2 {{hook.lastErrorMessage}}
|
|
|
|
|
.text-caption {{t('admin.webhooks.stateErrorExplain')}}
|
|
|
|
|
.text-caption.q-pl-lg.q-ml-xs.text-red-2 {{state.hook.lastErrorMessage}}
|
|
|
|
|
//- FORM
|
|
|
|
|
q-form.q-py-sm(ref='editWebhookForm')
|
|
|
|
|
q-item
|
|
|
|
@ -37,15 +37,12 @@ q-dialog(ref='dialog', @hide='onDialogHide')
|
|
|
|
|
q-item-section
|
|
|
|
|
q-input(
|
|
|
|
|
outlined
|
|
|
|
|
v-model='hook.name'
|
|
|
|
|
v-model='state.hook.name'
|
|
|
|
|
dense
|
|
|
|
|
:rules=`[
|
|
|
|
|
val => val.length > 0 || $t('admin.webhooks.nameMissing'),
|
|
|
|
|
val => /^[^<>"]+$/.test(val) || $t('admin.webhooks.nameInvalidChars')
|
|
|
|
|
]`
|
|
|
|
|
:rules='hookNameValidation'
|
|
|
|
|
hide-bottom-space
|
|
|
|
|
:label='$t(`common.field.name`)'
|
|
|
|
|
:aria-label='$t(`common.field.name`)'
|
|
|
|
|
:label='t(`common.field.name`)'
|
|
|
|
|
:aria-label='t(`common.field.name`)'
|
|
|
|
|
lazy-rules='ondemand'
|
|
|
|
|
autofocus
|
|
|
|
|
)
|
|
|
|
@ -55,7 +52,7 @@ q-dialog(ref='dialog', @hide='onDialogHide')
|
|
|
|
|
q-select(
|
|
|
|
|
outlined
|
|
|
|
|
:options='events'
|
|
|
|
|
v-model='hook.events'
|
|
|
|
|
v-model='state.hook.events'
|
|
|
|
|
multiple
|
|
|
|
|
map-options
|
|
|
|
|
emit-value
|
|
|
|
@ -63,21 +60,18 @@ q-dialog(ref='dialog', @hide='onDialogHide')
|
|
|
|
|
option-label='name'
|
|
|
|
|
options-dense
|
|
|
|
|
dense
|
|
|
|
|
:rules=`[
|
|
|
|
|
val => val.length > 0 || $t('admin.webhooks.eventsMissing')
|
|
|
|
|
]`
|
|
|
|
|
:rules='hookEventsValidation'
|
|
|
|
|
hide-bottom-space
|
|
|
|
|
:label='$t(`admin.webhooks.events`)'
|
|
|
|
|
:aria-label='$t(`admin.webhooks.events`)'
|
|
|
|
|
:label='t(`admin.webhooks.events`)'
|
|
|
|
|
:aria-label='t(`admin.webhooks.events`)'
|
|
|
|
|
lazy-rules='ondemand'
|
|
|
|
|
)
|
|
|
|
|
template(v-slot:selected)
|
|
|
|
|
.text-caption(v-if='hook.events.length > 0') {{$tc(`admin.webhooks.eventsSelected`, hook.events.length, { count: hook.events.length })}}
|
|
|
|
|
span(v-else)
|
|
|
|
|
template(v-slot:option='{ itemProps, itemEvents, opt, selected, toggleOption }')
|
|
|
|
|
.text-caption(v-if='state.hook.events.length > 0') {{t(`admin.webhooks.eventsSelected`, state.hook.events.length, { count: state.hook.events.length })}}
|
|
|
|
|
span(v-else)
|
|
|
|
|
template(v-slot:option='{ itemProps, opt, selected, toggleOption }')
|
|
|
|
|
q-item(
|
|
|
|
|
v-bind='itemProps'
|
|
|
|
|
v-on='itemEvents'
|
|
|
|
|
)
|
|
|
|
|
q-item-section(side)
|
|
|
|
|
q-checkbox(
|
|
|
|
@ -97,19 +91,16 @@ q-dialog(ref='dialog', @hide='onDialogHide')
|
|
|
|
|
q-item
|
|
|
|
|
blueprint-icon.self-start(icon='unknown-status')
|
|
|
|
|
q-item-section
|
|
|
|
|
q-item-label {{$t(`admin.webhooks.url`)}}
|
|
|
|
|
q-item-label(caption) {{$t(`admin.webhooks.urlHint`)}}
|
|
|
|
|
q-item-label {{t(`admin.webhooks.url`)}}
|
|
|
|
|
q-item-label(caption) {{t(`admin.webhooks.urlHint`)}}
|
|
|
|
|
q-input.q-mt-sm(
|
|
|
|
|
outlined
|
|
|
|
|
v-model='hook.url'
|
|
|
|
|
v-model='state.hook.url'
|
|
|
|
|
dense
|
|
|
|
|
:rules=`[
|
|
|
|
|
val => (val.length > 0 && val.startsWith('http')) || $t('admin.webhooks.urlMissing'),
|
|
|
|
|
val => /^[^<>"]+$/.test(val) || $t('admin.webhooks.urlInvalidChars')
|
|
|
|
|
]`
|
|
|
|
|
:rules='hookUrlValidation'
|
|
|
|
|
hide-bottom-space
|
|
|
|
|
placeholder='https://'
|
|
|
|
|
:aria-label='$t(`admin.webhooks.url`)'
|
|
|
|
|
:aria-label='t(`admin.webhooks.url`)'
|
|
|
|
|
lazy-rules='ondemand'
|
|
|
|
|
)
|
|
|
|
|
template(v-slot:prepend)
|
|
|
|
@ -122,105 +113,120 @@ q-dialog(ref='dialog', @hide='onDialogHide')
|
|
|
|
|
q-item(tag='label', v-ripple)
|
|
|
|
|
blueprint-icon(icon='rescan-document')
|
|
|
|
|
q-item-section
|
|
|
|
|
q-item-label {{$t(`admin.webhooks.includeMetadata`)}}
|
|
|
|
|
q-item-label(caption) {{$t(`admin.webhooks.includeMetadataHint`)}}
|
|
|
|
|
q-item-label {{t(`admin.webhooks.includeMetadata`)}}
|
|
|
|
|
q-item-label(caption) {{t(`admin.webhooks.includeMetadataHint`)}}
|
|
|
|
|
q-item-section(avatar)
|
|
|
|
|
q-toggle(
|
|
|
|
|
v-model='hook.includeMetadata'
|
|
|
|
|
v-model='state.hook.includeMetadata'
|
|
|
|
|
color='primary'
|
|
|
|
|
checked-icon='las la-check'
|
|
|
|
|
unchecked-icon='las la-times'
|
|
|
|
|
:aria-label='$t(`admin.webhooks.includeMetadata`)'
|
|
|
|
|
:aria-label='t(`admin.webhooks.includeMetadata`)'
|
|
|
|
|
)
|
|
|
|
|
q-item(tag='label', v-ripple)
|
|
|
|
|
blueprint-icon(icon='select-all')
|
|
|
|
|
q-item-section
|
|
|
|
|
q-item-label {{$t(`admin.webhooks.includeContent`)}}
|
|
|
|
|
q-item-label(caption) {{$t(`admin.webhooks.includeContentHint`)}}
|
|
|
|
|
q-item-label {{t(`admin.webhooks.includeContent`)}}
|
|
|
|
|
q-item-label(caption) {{t(`admin.webhooks.includeContentHint`)}}
|
|
|
|
|
q-item-section(avatar)
|
|
|
|
|
q-toggle(
|
|
|
|
|
v-model='hook.includeContent'
|
|
|
|
|
v-model='state.hook.includeContent'
|
|
|
|
|
color='primary'
|
|
|
|
|
checked-icon='las la-check'
|
|
|
|
|
unchecked-icon='las la-times'
|
|
|
|
|
:aria-label='$t(`admin.webhooks.includeContent`)'
|
|
|
|
|
:aria-label='t(`admin.webhooks.includeContent`)'
|
|
|
|
|
)
|
|
|
|
|
q-item(tag='label', v-ripple)
|
|
|
|
|
blueprint-icon(icon='security-ssl')
|
|
|
|
|
q-item-section
|
|
|
|
|
q-item-label {{$t(`admin.webhooks.acceptUntrusted`)}}
|
|
|
|
|
q-item-label(caption) {{$t(`admin.webhooks.acceptUntrustedHint`)}}
|
|
|
|
|
q-item-label {{t(`admin.webhooks.acceptUntrusted`)}}
|
|
|
|
|
q-item-label(caption) {{t(`admin.webhooks.acceptUntrustedHint`)}}
|
|
|
|
|
q-item-section(avatar)
|
|
|
|
|
q-toggle(
|
|
|
|
|
v-model='hook.acceptUntrusted'
|
|
|
|
|
v-model='state.hook.acceptUntrusted'
|
|
|
|
|
color='primary'
|
|
|
|
|
checked-icon='las la-check'
|
|
|
|
|
unchecked-icon='las la-times'
|
|
|
|
|
:aria-label='$t(`admin.webhooks.acceptUntrusted`)'
|
|
|
|
|
:aria-label='t(`admin.webhooks.acceptUntrusted`)'
|
|
|
|
|
)
|
|
|
|
|
q-item
|
|
|
|
|
blueprint-icon.self-start(icon='fingerprint-scan')
|
|
|
|
|
q-item-section
|
|
|
|
|
q-item-label {{$t(`admin.webhooks.authHeader`)}}
|
|
|
|
|
q-item-label(caption) {{$t(`admin.webhooks.authHeaderHint`)}}
|
|
|
|
|
q-item-label {{t(`admin.webhooks.authHeader`)}}
|
|
|
|
|
q-item-label(caption) {{t(`admin.webhooks.authHeaderHint`)}}
|
|
|
|
|
q-input.q-mt-sm(
|
|
|
|
|
outlined
|
|
|
|
|
v-model='hook.authHeader'
|
|
|
|
|
v-model='state.hook.authHeader'
|
|
|
|
|
dense
|
|
|
|
|
:aria-label='$t(`admin.webhooks.authHeader`)'
|
|
|
|
|
:aria-label='t(`admin.webhooks.authHeader`)'
|
|
|
|
|
)
|
|
|
|
|
q-card-actions.card-actions
|
|
|
|
|
q-space
|
|
|
|
|
q-btn.acrylic-btn(
|
|
|
|
|
flat
|
|
|
|
|
:label='$t(`common.actions.cancel`)'
|
|
|
|
|
:label='t(`common.actions.cancel`)'
|
|
|
|
|
color='grey'
|
|
|
|
|
padding='xs md'
|
|
|
|
|
@click='hide'
|
|
|
|
|
@click='onDialogCancel'
|
|
|
|
|
)
|
|
|
|
|
q-btn(
|
|
|
|
|
v-if='hookId'
|
|
|
|
|
v-if='props.hookId'
|
|
|
|
|
unelevated
|
|
|
|
|
:label='$t(`common.actions.save`)'
|
|
|
|
|
:label='t(`common.actions.save`)'
|
|
|
|
|
color='primary'
|
|
|
|
|
padding='xs md'
|
|
|
|
|
@click='save'
|
|
|
|
|
:loading='loading'
|
|
|
|
|
:loading='state.isLoading'
|
|
|
|
|
)
|
|
|
|
|
q-btn(
|
|
|
|
|
v-else
|
|
|
|
|
unelevated
|
|
|
|
|
:label='$t(`common.actions.create`)'
|
|
|
|
|
:label='t(`common.actions.create`)'
|
|
|
|
|
color='primary'
|
|
|
|
|
padding='xs md'
|
|
|
|
|
@click='create'
|
|
|
|
|
:loading='loading'
|
|
|
|
|
:loading='state.isLoading'
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
q-inner-loading(:showing='loading')
|
|
|
|
|
q-inner-loading(:showing='state.isLoading')
|
|
|
|
|
q-spinner(color='accent', size='lg')
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
<script setup>
|
|
|
|
|
import gql from 'graphql-tag'
|
|
|
|
|
import cloneDeep from 'lodash/cloneDeep'
|
|
|
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
|
import { useDialogPluginComponent, useQuasar } from 'quasar'
|
|
|
|
|
import { computed, onMounted, reactive, ref } from 'vue'
|
|
|
|
|
|
|
|
|
|
import { QSpinnerClock, QSpinnerInfinity } from 'quasar'
|
|
|
|
|
// PROPS
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
QSpinnerClock,
|
|
|
|
|
QSpinnerInfinity
|
|
|
|
|
},
|
|
|
|
|
props: {
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
hookId: {
|
|
|
|
|
type: String,
|
|
|
|
|
default: null
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
emits: ['ok', 'hide'],
|
|
|
|
|
data () {
|
|
|
|
|
return {
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// EMITS
|
|
|
|
|
|
|
|
|
|
defineEmits([
|
|
|
|
|
...useDialogPluginComponent.emits
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
// QUASAR
|
|
|
|
|
|
|
|
|
|
const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()
|
|
|
|
|
const $q = useQuasar()
|
|
|
|
|
|
|
|
|
|
// I18N
|
|
|
|
|
|
|
|
|
|
const { t } = useI18n()
|
|
|
|
|
|
|
|
|
|
// DATA
|
|
|
|
|
|
|
|
|
|
const state = reactive({
|
|
|
|
|
isLoading: false,
|
|
|
|
|
hook: {
|
|
|
|
|
name: '',
|
|
|
|
|
events: [],
|
|
|
|
@ -231,47 +237,52 @@ export default {
|
|
|
|
|
includeContent: false,
|
|
|
|
|
state: 'pending',
|
|
|
|
|
lastErrorMessage: ''
|
|
|
|
|
},
|
|
|
|
|
loading: false
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
events () {
|
|
|
|
|
return [
|
|
|
|
|
{ key: 'page:create', name: this.$t('admin.webhooks.eventCreatePage'), type: this.$t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'page:edit', name: this.$t('admin.webhooks.eventEditPage'), type: this.$t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'page:rename', name: this.$t('admin.webhooks.eventRenamePage'), type: this.$t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'page:delete', name: this.$t('admin.webhooks.eventDeletePage'), type: this.$t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'asset:upload', name: this.$t('admin.webhooks.eventUploadAsset'), type: this.$t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'asset:edit', name: this.$t('admin.webhooks.eventEditAsset'), type: this.$t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'asset:rename', name: this.$t('admin.webhooks.eventRenameAsset'), type: this.$t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'asset:delete', name: this.$t('admin.webhooks.eventDeleteAsset'), type: this.$t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'comment:new', name: this.$t('admin.webhooks.eventNewComment'), type: this.$t('admin.webhooks.typeComment') },
|
|
|
|
|
{ key: 'comment:edit', name: this.$t('admin.webhooks.eventEditComment'), type: this.$t('admin.webhooks.typeComment') },
|
|
|
|
|
{ key: 'comment:delete', name: this.$t('admin.webhooks.eventDeleteComment'), type: this.$t('admin.webhooks.typeComment') },
|
|
|
|
|
{ key: 'user:join', name: this.$t('admin.webhooks.eventUserJoin'), type: this.$t('admin.webhooks.typeUser') },
|
|
|
|
|
{ key: 'user:login', name: this.$t('admin.webhooks.eventUserLogin'), type: this.$t('admin.webhooks.typeUser') },
|
|
|
|
|
{ key: 'user:logout', name: this.$t('admin.webhooks.eventUserLogout'), type: this.$t('admin.webhooks.typeUser') }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// COMPUTED
|
|
|
|
|
|
|
|
|
|
const events = computed(() => ([
|
|
|
|
|
{ key: 'page:create', name: t('admin.webhooks.eventCreatePage'), type: t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'page:edit', name: t('admin.webhooks.eventEditPage'), type: t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'page:rename', name: t('admin.webhooks.eventRenamePage'), type: t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'page:delete', name: t('admin.webhooks.eventDeletePage'), type: t('admin.webhooks.typePage') },
|
|
|
|
|
{ key: 'asset:upload', name: t('admin.webhooks.eventUploadAsset'), type: t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'asset:edit', name: t('admin.webhooks.eventEditAsset'), type: t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'asset:rename', name: t('admin.webhooks.eventRenameAsset'), type: t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'asset:delete', name: t('admin.webhooks.eventDeleteAsset'), type: t('admin.webhooks.typeAsset') },
|
|
|
|
|
{ key: 'comment:new', name: t('admin.webhooks.eventNewComment'), type: t('admin.webhooks.typeComment') },
|
|
|
|
|
{ key: 'comment:edit', name: t('admin.webhooks.eventEditComment'), type: t('admin.webhooks.typeComment') },
|
|
|
|
|
{ key: 'comment:delete', name: t('admin.webhooks.eventDeleteComment'), type: t('admin.webhooks.typeComment') },
|
|
|
|
|
{ key: 'user:join', name: t('admin.webhooks.eventUserJoin'), type: t('admin.webhooks.typeUser') },
|
|
|
|
|
{ key: 'user:login', name: t('admin.webhooks.eventUserLogin'), type: t('admin.webhooks.typeUser') },
|
|
|
|
|
{ key: 'user:logout', name: t('admin.webhooks.eventUserLogout'), type: t('admin.webhooks.typeUser') }
|
|
|
|
|
]))
|
|
|
|
|
|
|
|
|
|
// REFS
|
|
|
|
|
|
|
|
|
|
const editWebhookForm = ref(null)
|
|
|
|
|
|
|
|
|
|
// VALIDATION RULES
|
|
|
|
|
|
|
|
|
|
const hookNameValidation = [
|
|
|
|
|
val => val.length > 0 || t('admin.webhooks.nameMissing'),
|
|
|
|
|
val => /^[^<>"]+$/.test(val) || t('admin.webhooks.nameInvalidChars')
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
show () {
|
|
|
|
|
this.$refs.dialog.show()
|
|
|
|
|
if (this.hookId) {
|
|
|
|
|
this.fetchHook(this.hookId)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
hide () {
|
|
|
|
|
this.$refs.dialog.hide()
|
|
|
|
|
},
|
|
|
|
|
onDialogHide () {
|
|
|
|
|
this.$emit('hide')
|
|
|
|
|
},
|
|
|
|
|
async fetchHook (id) {
|
|
|
|
|
this.loading = true
|
|
|
|
|
const hookEventsValidation = [
|
|
|
|
|
val => val.length > 0 || t('admin.webhooks.eventsMissing')
|
|
|
|
|
]
|
|
|
|
|
const hookUrlValidation = [
|
|
|
|
|
val => (val.length > 0 && val.startsWith('http')) || t('admin.webhooks.urlMissing'),
|
|
|
|
|
val => /^[^<>"]+$/.test(val) || t('admin.webhooks.urlInvalidChars')
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// METHODS
|
|
|
|
|
|
|
|
|
|
async function fetchHook (id) {
|
|
|
|
|
state.isLoading = true
|
|
|
|
|
try {
|
|
|
|
|
const resp = await this.$apollo.query({
|
|
|
|
|
const resp = await APOLLO_CLIENT.query({
|
|
|
|
|
query: gql`
|
|
|
|
|
query getHook (
|
|
|
|
|
$id: UUID!
|
|
|
|
@ -295,27 +306,28 @@ export default {
|
|
|
|
|
variables: { id }
|
|
|
|
|
})
|
|
|
|
|
if (resp?.data?.hookById) {
|
|
|
|
|
this.hook = cloneDeep(resp.data.hookById)
|
|
|
|
|
state.hook = cloneDeep(resp.data.hookById)
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('Failed to fetch webhook configuration.')
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
|
|
|
|
this.$q.notify({
|
|
|
|
|
$q.notify({
|
|
|
|
|
type: 'negative',
|
|
|
|
|
message: err.message
|
|
|
|
|
})
|
|
|
|
|
this.hide()
|
|
|
|
|
onDialogHide()
|
|
|
|
|
}
|
|
|
|
|
this.loading = false
|
|
|
|
|
},
|
|
|
|
|
async create () {
|
|
|
|
|
this.loading = true
|
|
|
|
|
state.isLoading = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function create () {
|
|
|
|
|
state.isLoading = true
|
|
|
|
|
try {
|
|
|
|
|
const isFormValid = await this.$refs.editWebhookForm.validate(true)
|
|
|
|
|
const isFormValid = await editWebhookForm.value.validate(true)
|
|
|
|
|
if (!isFormValid) {
|
|
|
|
|
throw new Error(this.$t('admin.webhooks.createInvalidData'))
|
|
|
|
|
throw new Error(t('admin.webhooks.createInvalidData'))
|
|
|
|
|
}
|
|
|
|
|
const resp = await this.$apollo.mutate({
|
|
|
|
|
const resp = await APOLLO_CLIENT.mutate({
|
|
|
|
|
mutation: gql`
|
|
|
|
|
mutation createHook (
|
|
|
|
|
$name: String!
|
|
|
|
@ -335,41 +347,41 @@ export default {
|
|
|
|
|
acceptUntrusted: $acceptUntrusted
|
|
|
|
|
authHeader: $authHeader
|
|
|
|
|
) {
|
|
|
|
|
status {
|
|
|
|
|
operation {
|
|
|
|
|
succeeded
|
|
|
|
|
message
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
variables: this.hook
|
|
|
|
|
variables: state.hook
|
|
|
|
|
})
|
|
|
|
|
if (resp?.data?.createHook?.status?.succeeded) {
|
|
|
|
|
this.$q.notify({
|
|
|
|
|
if (resp?.data?.createHook?.operation?.succeeded) {
|
|
|
|
|
$q.notify({
|
|
|
|
|
type: 'positive',
|
|
|
|
|
message: this.$t('admin.webhooks.createSuccess')
|
|
|
|
|
message: t('admin.webhooks.createSuccess')
|
|
|
|
|
})
|
|
|
|
|
this.$emit('ok')
|
|
|
|
|
this.hide()
|
|
|
|
|
onDialogOK()
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(resp?.data?.createHook?.status?.message || 'An unexpected error occured.')
|
|
|
|
|
throw new Error(resp?.data?.createHook?.operation?.message || 'An unexpected error occured.')
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
|
|
|
|
this.$q.notify({
|
|
|
|
|
$q.notify({
|
|
|
|
|
type: 'negative',
|
|
|
|
|
message: err.message
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
this.loading = false
|
|
|
|
|
},
|
|
|
|
|
async save () {
|
|
|
|
|
this.loading = true
|
|
|
|
|
state.isLoading = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function save () {
|
|
|
|
|
state.isLoading = true
|
|
|
|
|
try {
|
|
|
|
|
const isFormValid = await this.$refs.editWebhookForm.validate(true)
|
|
|
|
|
const isFormValid = await editWebhookForm.value.validate(true)
|
|
|
|
|
if (!isFormValid) {
|
|
|
|
|
throw new Error(this.$t('admin.webhooks.createInvalidData'))
|
|
|
|
|
throw new Error(t('admin.webhooks.createInvalidData'))
|
|
|
|
|
}
|
|
|
|
|
const resp = await this.$apollo.mutate({
|
|
|
|
|
const resp = await APOLLO_CLIENT.mutate({
|
|
|
|
|
mutation: gql`
|
|
|
|
|
mutation saveHook (
|
|
|
|
|
$id: UUID!
|
|
|
|
@ -379,7 +391,7 @@ export default {
|
|
|
|
|
id: $id
|
|
|
|
|
patch: $patch
|
|
|
|
|
) {
|
|
|
|
|
status {
|
|
|
|
|
operation {
|
|
|
|
|
succeeded
|
|
|
|
|
message
|
|
|
|
|
}
|
|
|
|
@ -387,36 +399,42 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
`,
|
|
|
|
|
variables: {
|
|
|
|
|
id: this.hookId,
|
|
|
|
|
id: props.hookId,
|
|
|
|
|
patch: {
|
|
|
|
|
name: this.hook.name,
|
|
|
|
|
events: this.hook.events,
|
|
|
|
|
url: this.hook.url,
|
|
|
|
|
acceptUntrusted: this.hook.acceptUntrusted,
|
|
|
|
|
authHeader: this.hook.authHeader,
|
|
|
|
|
includeMetadata: this.hook.includeMetadata,
|
|
|
|
|
includeContent: this.hook.includeContent
|
|
|
|
|
name: state.hook.name,
|
|
|
|
|
events: state.hook.events,
|
|
|
|
|
url: state.hook.url,
|
|
|
|
|
acceptUntrusted: state.hook.acceptUntrusted,
|
|
|
|
|
authHeader: state.hook.authHeader,
|
|
|
|
|
includeMetadata: state.hook.includeMetadata,
|
|
|
|
|
includeContent: state.hook.includeContent
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
if (resp?.data?.updateHook?.status?.succeeded) {
|
|
|
|
|
this.$q.notify({
|
|
|
|
|
if (resp?.data?.updateHook?.operation?.succeeded) {
|
|
|
|
|
$q.notify({
|
|
|
|
|
type: 'positive',
|
|
|
|
|
message: this.$t('admin.webhooks.updateSuccess')
|
|
|
|
|
message: t('admin.webhooks.updateSuccess')
|
|
|
|
|
})
|
|
|
|
|
this.$emit('ok')
|
|
|
|
|
this.hide()
|
|
|
|
|
onDialogOK()
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(resp?.data?.updateHook?.status?.message || 'An unexpected error occured.')
|
|
|
|
|
throw new Error(resp?.data?.updateHook?.operation?.message || 'An unexpected error occured.')
|
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
|
|
|
|
this.$q.notify({
|
|
|
|
|
$q.notify({
|
|
|
|
|
type: 'negative',
|
|
|
|
|
message: err.message
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
this.loading = false
|
|
|
|
|
}
|
|
|
|
|
state.isLoading = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MOUNTED
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
if (props.hookId) {
|
|
|
|
|
fetchHook(props.hookId)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|