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}