|
|
|
@ -4,11 +4,6 @@ import { MetaInj } from '~/context'
|
|
|
|
|
import { extractSdkResponseErrorMsg, fieldRequiredValidator } from '~/utils' |
|
|
|
|
import { inject, reactive, useApi, useNuxtApp } from '#imports' |
|
|
|
|
|
|
|
|
|
interface Option { |
|
|
|
|
label: string |
|
|
|
|
value: string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const emit = defineEmits(['backToList', 'editOrAdd']) |
|
|
|
|
|
|
|
|
|
const { $e } = useNuxtApp() |
|
|
|
@ -205,21 +200,27 @@ const validators = computed(() => {
|
|
|
|
|
}) |
|
|
|
|
const { validate, validateInfos } = useForm(hook, validators) |
|
|
|
|
|
|
|
|
|
function onNotTypeChange() { |
|
|
|
|
hook.notification.payload = {} as any |
|
|
|
|
function onNotTypeChange(reset = false) { |
|
|
|
|
if (reset) { |
|
|
|
|
hook.notification.payload = {} as Record<string, any> |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (hook.notification.type === 'Slack') { |
|
|
|
|
slackChannels.value = (apps && apps?.Slack && apps.Slack.parsedInput) || [] |
|
|
|
|
slackChannels.value = (apps.value && apps.value.Slack && apps.Slack.parsedInput) || [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (hook.notification.type === 'Microsoft Teams') { |
|
|
|
|
teamsChannels.value = (apps && apps['Microsoft Teams'] && apps['Microsoft Teams'].parsedInput) || [] |
|
|
|
|
teamsChannels.value = (apps.value && apps.value['Microsoft Teams'] && apps.value['Microsoft Teams'].parsedInput) || [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (hook.notification.type === 'Discord') { |
|
|
|
|
discordChannels.value = (apps && apps.Discord && apps.Discord.parsedInput) || [] |
|
|
|
|
discordChannels.value = (apps.value && apps.value.Discord && apps.value.Discord.parsedInput) || [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (hook.notification.type === 'Mattermost') { |
|
|
|
|
mattermostChannels.value = (apps && apps.Mattermost && apps.Mattermost.parsedInput) || [] |
|
|
|
|
mattermostChannels.value = (apps.value && apps.value.Mattermost && apps.value.Mattermost.parsedInput) || [] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (hook.notification.type === 'URL') { |
|
|
|
|
hook.notification.payload.body = '{{ json data }}' |
|
|
|
|
hook.notification.payload.parameters = [{}] |
|
|
|
@ -228,10 +229,6 @@ function onNotTypeChange() {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function filterOption(input: string, option: Option) { |
|
|
|
|
return option.value.toUpperCase().includes(input.toUpperCase()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function setHook(newHook: any) { |
|
|
|
|
Object.assign(hook, { |
|
|
|
|
...newHook, |
|
|
|
@ -301,6 +298,8 @@ async function loadPluginList() {
|
|
|
|
|
if (hook.event && hook.operation) { |
|
|
|
|
hook.eventOperation = `${hook.event} ${hook.operation}` |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onNotTypeChange() |
|
|
|
|
} catch (e: any) { |
|
|
|
|
message.error(await extractSdkResponseErrorMsg(e)) |
|
|
|
|
} |
|
|
|
@ -383,8 +382,8 @@ watch(
|
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
|
loadPluginList() |
|
|
|
|
onMounted(async () => { |
|
|
|
|
await loadPluginList() |
|
|
|
|
}) |
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
@ -439,7 +438,7 @@ onMounted(() => {
|
|
|
|
|
v-model:value="hook.notification.type" |
|
|
|
|
size="large" |
|
|
|
|
:placeholder="$t('general.notification')" |
|
|
|
|
@change="onNotTypeChange" |
|
|
|
|
@change="onNotTypeChange(true)" |
|
|
|
|
> |
|
|
|
|
<a-select-option v-for="(notificationOption, i) in notificationList" :key="i" :value="notificationOption.type"> |
|
|
|
|
<div class="flex items-center"> |
|
|
|
@ -505,12 +504,12 @@ onMounted(() => {
|
|
|
|
|
<a-row v-if="hook.notification.type === 'Slack'" type="flex"> |
|
|
|
|
<a-col :span="24"> |
|
|
|
|
<a-form-item v-bind="validateInfos['notification.channels']"> |
|
|
|
|
<a-auto-complete |
|
|
|
|
v-model:value="hook.notification.payload.channels" |
|
|
|
|
size="large" |
|
|
|
|
:options="slackChannels" |
|
|
|
|
<WebhookChannelMultiSelect |
|
|
|
|
v-if="slackChannels.length > 0" |
|
|
|
|
v-model="hook.notification.payload.channels" |
|
|
|
|
:selected-channel-list="hook.notification.payload.channels" |
|
|
|
|
:available-channel-list="slackChannels" |
|
|
|
|
placeholder="Select Slack channels" |
|
|
|
|
:filter-option="filterOption" |
|
|
|
|
/> |
|
|
|
|
</a-form-item> |
|
|
|
|
</a-col> |
|
|
|
@ -519,12 +518,12 @@ onMounted(() => {
|
|
|
|
|
<a-row v-if="hook.notification.type === 'Microsoft Teams'" type="flex"> |
|
|
|
|
<a-col :span="24"> |
|
|
|
|
<a-form-item v-bind="validateInfos['notification.channels']"> |
|
|
|
|
<a-auto-complete |
|
|
|
|
v-model:value="hook.notification.payload.channels" |
|
|
|
|
size="large" |
|
|
|
|
:options="teamsChannels" |
|
|
|
|
<WebhookChannelMultiSelect |
|
|
|
|
v-if="teamsChannels.length > 0" |
|
|
|
|
v-model="hook.notification.payload.channels" |
|
|
|
|
:selected-channel-list="hook.notification.payload.channels" |
|
|
|
|
:available-channel-list="teamsChannels" |
|
|
|
|
placeholder="Select Microsoft Teams channels" |
|
|
|
|
:filter-option="filterOption" |
|
|
|
|
/> |
|
|
|
|
</a-form-item> |
|
|
|
|
</a-col> |
|
|
|
@ -533,12 +532,12 @@ onMounted(() => {
|
|
|
|
|
<a-row v-if="hook.notification.type === 'Discord'" type="flex"> |
|
|
|
|
<a-col :span="24"> |
|
|
|
|
<a-form-item v-bind="validateInfos['notification.channels']"> |
|
|
|
|
<a-auto-complete |
|
|
|
|
v-model:value="hook.notification.payload.channels" |
|
|
|
|
size="large" |
|
|
|
|
:options="discordChannels" |
|
|
|
|
<WebhookChannelMultiSelect |
|
|
|
|
v-if="discordChannels.length > 0" |
|
|
|
|
v-model="hook.notification.payload.channels" |
|
|
|
|
:selected-channel-list="hook.notification.payload.channels" |
|
|
|
|
:available-channel-list="discordChannels" |
|
|
|
|
placeholder="Select Discord channels" |
|
|
|
|
:filter-option="filterOption" |
|
|
|
|
/> |
|
|
|
|
</a-form-item> |
|
|
|
|
</a-col> |
|
|
|
@ -547,12 +546,12 @@ onMounted(() => {
|
|
|
|
|
<a-row v-if="hook.notification.type === 'Mattermost'" type="flex"> |
|
|
|
|
<a-col :span="24"> |
|
|
|
|
<a-form-item v-bind="validateInfos['notification.channels']"> |
|
|
|
|
<a-auto-complete |
|
|
|
|
v-model:value="hook.notification.payload.channels" |
|
|
|
|
size="large" |
|
|
|
|
:options="mattermostChannels" |
|
|
|
|
<WebhookChannelMultiSelect |
|
|
|
|
v-if="mattermostChannels.length > 0" |
|
|
|
|
v-model="hook.notification.payload.channels" |
|
|
|
|
:selected-channel-list="hook.notification.payload.channels" |
|
|
|
|
:available-channel-list="mattermostChannels" |
|
|
|
|
placeholder="Select Mattermost channels" |
|
|
|
|
:filter-option="filterOption" |
|
|
|
|
/> |
|
|
|
|
</a-form-item> |
|
|
|
|
</a-col> |
|
|
|
|