diff --git a/web/src/framework/strings/stringTypes.ts b/web/src/framework/strings/stringTypes.ts
index b795ea622..f2512891a 100644
--- a/web/src/framework/strings/stringTypes.ts
+++ b/web/src/framework/strings/stringTypes.ts
@@ -123,6 +123,7 @@ export interface StringsMap {
ok: string
on: string
onDate: string
+ oneMustBeSelected: string
open: string
optional: string
optionalExtendedDescription: string
@@ -207,10 +208,14 @@ export interface StringsMap {
viewCommitDetails: string
viewed: string
webhook: string
+ webhookBranchCreated: string
+ webhookBranchDeleted: string
+ webhookBranchUpdated: string
webhookDeleted: string
webhookDetails: string
webhookEventsLabel: string
webhookListingContent: string
+ webhookUpdated: string
webhooks: string
write: string
yourBranches: string
diff --git a/web/src/i18n/strings.en.yaml b/web/src/i18n/strings.en.yaml
index ec5e296d8..94b86eac2 100644
--- a/web/src/i18n/strings.en.yaml
+++ b/web/src/i18n/strings.en.yaml
@@ -214,3 +214,8 @@ webhookDeleted: Webhook deleted.
failedToDeleteWebhook: Failed to delete Webhook. Please try again.
webhookDetails: Webhook Details
updateWebhook: Update Webhook
+webhookUpdated: Webhook updated successfully.
+oneMustBeSelected: At least one event must be selected
+webhookBranchCreated: Branch created
+webhookBranchUpdated: Branch updated
+webhookBranchDeleted: Branch deleted
diff --git a/web/src/pages/WebhookDetails/WebhookDetails.tsx b/web/src/pages/WebhookDetails/WebhookDetails.tsx
index 3a4922c5f..e47271019 100644
--- a/web/src/pages/WebhookDetails/WebhookDetails.tsx
+++ b/web/src/pages/WebhookDetails/WebhookDetails.tsx
@@ -6,10 +6,12 @@ import type { OpenapiWebhookType } from 'services/code'
import { useStrings } from 'framework/strings'
import { RepositoryPageHeader } from 'components/RepositoryPageHeader/RepositoryPageHeader'
import { WehookForm } from 'pages/WebhookNew/WehookForm'
+import { useAppContext } from 'AppContext'
export default function WebhookDetails() {
const { getString } = useStrings()
- const { repoMetadata, error, loading, webhookId } = useGetRepositoryMetadata()
+ const { routes } = useAppContext()
+ const { repoMetadata, error, loading, webhookId, refetch: refreshMetadata } = useGetRepositoryMetadata()
const {
data,
loading: webhookLoading,
@@ -26,13 +28,19 @@ export default function WebhookDetails() {
repoMetadata={repoMetadata}
title={getString('webhookDetails')}
dataTooltipId="webhookDetails"
+ extraBreadcrumbLinks={
+ repoMetadata && [
+ {
+ label: getString('webhooks'),
+ url: routes.toCODEWebhooks({ repoPath: repoMetadata.path as string })
+ }
+ ]
+ }
/>
{
- refetchWebhook()
- }}>
+ retryOnError={() => (repoMetadata ? refetchWebhook() : refreshMetadata())}>
{repoMetadata && data && }
diff --git a/web/src/pages/WebhookNew/WehookForm.tsx b/web/src/pages/WebhookNew/WehookForm.tsx
index 2b8b934c4..9345427ed 100644
--- a/web/src/pages/WebhookNew/WehookForm.tsx
+++ b/web/src/pages/WebhookNew/WehookForm.tsx
@@ -30,7 +30,8 @@ enum WebhookEventType {
}
enum WebhookIndividualEvent {
- BRANCH_PUSHED = 'branch_pushed',
+ BRANCH_CREATED = 'branch_created',
+ BRANCH_UPDATED = 'branch_updated',
BRANCH_DELETED = 'branch_deleted'
}
@@ -40,8 +41,9 @@ interface FormData {
enabled: boolean
secure: boolean
events: WebhookEventType
- branchPush: boolean
- branchDeletion: boolean
+ branchCreated: boolean
+ branchUpdated: boolean
+ branchDeleted: boolean
}
interface WebHookFormProps extends Pick {
@@ -52,7 +54,7 @@ interface WebHookFormProps extends Pick {
export function WehookForm({ repoMetadata, isEdit, webhook }: WebHookFormProps) {
const history = useHistory()
const { getString } = useStrings()
- const { showError } = useToaster()
+ const { showError, showSuccess } = useToaster()
const { routes } = useAppContext()
const { mutate, loading } = useMutate({
verb: isEdit ? 'PATCH' : 'POST',
@@ -68,8 +70,9 @@ export function WehookForm({ repoMetadata, isEdit, webhook }: WebHookFormProps)
secret: isEdit ? '***' : '',
enabled: webhook ? (webhook?.enabled as boolean) : true,
secure: webhook?.insecure === false || false,
- branchPush: webhook?.triggers?.includes(WebhookIndividualEvent.BRANCH_PUSHED) || false,
- branchDeletion: webhook?.triggers?.includes(WebhookIndividualEvent.BRANCH_DELETED) || false,
+ branchCreated: webhook?.triggers?.includes(WebhookIndividualEvent.BRANCH_CREATED) || false,
+ branchUpdated: webhook?.triggers?.includes(WebhookIndividualEvent.BRANCH_UPDATED) || false,
+ branchDeleted: webhook?.triggers?.includes(WebhookIndividualEvent.BRANCH_DELETED) || false,
events: WebhookEventType.INDIVIDUAL
}}
formName="create-webhook-form"
@@ -83,16 +86,20 @@ export function WehookForm({ repoMetadata, isEdit, webhook }: WebHookFormProps)
onSubmit={formData => {
const triggers: OpenapiWebhookTrigger[] = []
- if (formData.branchPush) {
- triggers.push(WebhookIndividualEvent.BRANCH_PUSHED)
+ if (formData.branchCreated) {
+ triggers.push(WebhookIndividualEvent.BRANCH_CREATED)
}
- if (formData.branchDeletion) {
+ if (formData.branchUpdated) {
+ triggers.push(WebhookIndividualEvent.BRANCH_UPDATED)
+ }
+
+ if (formData.branchDeleted) {
triggers.push(WebhookIndividualEvent.BRANCH_DELETED)
}
if (!triggers.length) {
- return showError('At least one event must be selected')
+ return showError(getString('oneMustBeSelected'))
}
const data: OpenapiUpdateWebhookRequest = {
@@ -105,12 +112,21 @@ export function WehookForm({ repoMetadata, isEdit, webhook }: WebHookFormProps)
mutate(data)
.then((response: OpenapiWebhookType) => {
- history.push(
- routes.toCODEWebhookDetails({
- repoPath: repoMetadata.path as string,
- webhookId: String(response.id)
- })
- )
+ if (isEdit) {
+ showSuccess(getString('webhookUpdated'))
+ history.push(
+ routes.toCODEWebhooks({
+ repoPath: repoMetadata.path as string
+ })
+ )
+ } else {
+ history.push(
+ routes.toCODEWebhookDetails({
+ repoPath: repoMetadata.path as string,
+ webhookId: String(response.id)
+ })
+ )
+ }
})
.catch(exception => {
showError(getErrorMessage(exception))
@@ -152,8 +168,21 @@ export function WehookForm({ repoMetadata, isEdit, webhook }: WebHookFormProps)
) : null}