From 3d2fe4cf650c9325547d0786dd16d2f6746905ef Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 18 Oct 2023 20:12:29 +0200 Subject: [PATCH] feat(webhooks): add webhook management form --- src/components/misc/Icon.ts | 2 + .../project/project-settings-dropdown.vue | 6 + src/i18n/lang/en.json | 15 ++ src/modelTypes/IWebhook.ts | 14 ++ src/models/webhook.ts | 25 ++ src/router/index.ts | 9 + src/services/webhook.ts | 29 +++ src/views/project/settings/webhooks.vue | 215 ++++++++++++++++++ 8 files changed, 315 insertions(+) create mode 100644 src/modelTypes/IWebhook.ts create mode 100644 src/models/webhook.ts create mode 100644 src/services/webhook.ts create mode 100644 src/views/project/settings/webhooks.vue diff --git a/src/components/misc/Icon.ts b/src/components/misc/Icon.ts index 57acbc8f5..b3ea6bdc3 100644 --- a/src/components/misc/Icon.ts +++ b/src/components/misc/Icon.ts @@ -8,6 +8,7 @@ import { faArrowUpFromBracket, faBars, faBell, + faBolt, faCalendar, faCheck, faCheckDouble, @@ -144,6 +145,7 @@ library.add(faUsers) library.add(faArrowUpFromBracket) library.add(faX) library.add(faAnglesUp) +library.add(faBolt) // overwriting the wrong types export default FontAwesomeIcon as unknown as FontAwesomeIconFixedTypes \ No newline at end of file diff --git a/src/components/project/project-settings-dropdown.vue b/src/components/project/project-settings-dropdown.vue index 0f237aa2e..5c6e3d561 100644 --- a/src/components/project/project-settings-dropdown.vue +++ b/src/components/project/project-settings-dropdown.vue @@ -72,6 +72,12 @@ @update:model-value="setSubscriptionInStore" type="dropdown" /> + + {{ $t('project.webhooks.title') }} + implements IWebhook { + id = 0 + projectId = 0 + secret = '' + targetUrl = '' + events = [] + createdBy = null + + created: Date + updated: Date + + constructor(data: Partial = {}) { + super() + this.assignData(data) + + this.createdBy = new UserModel(this.createdBy) + + this.created = new Date(this.created) + this.updated = new Date(this.updated) + } +} \ No newline at end of file diff --git a/src/router/index.ts b/src/router/index.ts index d00b6d4c4..ccc0d36e4 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -46,6 +46,7 @@ const ProjectSettingEdit = () => import('@/views/project/settings/edit.vue') const ProjectSettingBackground = () => import('@/views/project/settings/background.vue') const ProjectSettingDuplicate = () => import('@/views/project/settings/duplicate.vue') const ProjectSettingShare = () => import('@/views/project/settings/share.vue') +const ProjectSettingWebhooks = () => import('@/views/project/settings/webhooks.vue') const ProjectSettingDelete = () => import('@/views/project/settings/delete.vue') const ProjectSettingArchive = () => import('@/views/project/settings/archive.vue') @@ -286,6 +287,14 @@ const router = createRouter({ showAsModal: true, }, }, + { + path: '/projects/:projectId/settings/webhooks', + name: 'project.settings.webhooks', + component: ProjectSettingWebhooks, + meta: { + showAsModal: true, + }, + }, { path: '/projects/:projectId/settings/delete', name: 'project.settings.delete', diff --git a/src/services/webhook.ts b/src/services/webhook.ts new file mode 100644 index 000000000..f2830c889 --- /dev/null +++ b/src/services/webhook.ts @@ -0,0 +1,29 @@ +import AbstractService from '@/services/abstractService' +import type {IWebhook} from '@/modelTypes/IWebhook' +import WebhookModel from '@/models/webhook' + +export default class WebhookService extends AbstractService { + constructor() { + super({ + getAll: '/projects/{projectId}/webhooks', + create: '/projects/{projectId}/webhooks', + update: '/projects/{projectId}/webhooks/{id}', + delete: '/projects/{projectId}/webhooks/{id}', + }) + } + + modelFactory(data) { + return new WebhookModel(data) + } + + async getAvailableEvents(): Promise { + const cancel = this.setLoading() + + try { + const response = await this.http.get('/webhooks/events') + return response.data + } finally { + cancel() + } + } +} diff --git a/src/views/project/settings/webhooks.vue b/src/views/project/settings/webhooks.vue new file mode 100644 index 000000000..9b9bf1363 --- /dev/null +++ b/src/views/project/settings/webhooks.vue @@ -0,0 +1,215 @@ + + + + +