From 22556f49052ecac5660f4f9261dfd527e6efe655 Mon Sep 17 00:00:00 2001 From: Rares Mardare Date: Mon, 8 Jul 2024 15:18:06 +0300 Subject: [PATCH] Webhook form - changed Forward all (#4622) # What this PR does - added validation for `Data` field, backend seems to be a bit clumsy on validating that field - Changed `Fordwar All` / `Customise data` to be more straightforward for the user ## Which issue(s) this PR closes Closes https://github.com/grafana/oncall/issues/4412 --- .../OutgoingWebhookForm.tsx | 4 + .../OutgoingWebhookFormFields.tsx | 128 +++++++++++------- 2 files changed, 82 insertions(+), 50 deletions(-) diff --git a/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookForm.tsx b/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookForm.tsx index 8dc52c59..d323aa0f 100644 --- a/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookForm.tsx +++ b/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookForm.tsx @@ -78,6 +78,10 @@ function prepareForSave(rawData: Partial, selectedPreset: delete data[field]; }); + if (data.forward_all) { + data.data = null; + } + return data; } diff --git a/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookFormFields.tsx b/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookFormFields.tsx index c493acb6..02042de8 100644 --- a/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookFormFields.tsx +++ b/grafana-plugin/src/containers/OutgoingWebhookForm/OutgoingWebhookFormFields.tsx @@ -1,12 +1,13 @@ import React from 'react'; import { SelectableValue } from '@grafana/data'; -import { Button, Field, Input, Select, Switch, useStyles2 } from '@grafana/ui'; +import { Button, Field, Input, RadioButtonList, Select, Switch, useStyles2 } from '@grafana/ui'; import Emoji from 'react-emoji-render'; import { Controller, useFormContext } from 'react-hook-form'; import { MonacoEditor } from 'components/MonacoEditor/MonacoEditor'; import { MONACO_EDITABLE_CONFIG } from 'components/MonacoEditor/MonacoEditor.config'; +import { RenderConditionally } from 'components/RenderConditionally/RenderConditionally'; import { GSelect } from 'containers/GSelect/GSelect'; import { Labels } from 'containers/Labels/Labels'; import { AlertReceiveChannelHelper } from 'models/alert_receive_channel/alert_receive_channel.helpers'; @@ -29,6 +30,21 @@ interface OutgoingWebhookFormFieldsProps { onTemplateEditClick: (params: TemplateParams) => void; } +const FORWARD = 'forward'; +const CUSTOMIZE = 'customise'; +const FORWARD_RADIO_OPTIONS = [ + { + label: 'Forward whole payload data', + value: FORWARD, + boolean: true, + }, + { + label: 'Customise forwarded data', + value: CUSTOMIZE, + boolean: false, + }, +]; + export const OutgoingWebhookFormFields = ({ preset, hasLabelsFeature, @@ -42,7 +58,6 @@ export const OutgoingWebhookFormFields = ({ } = useFormContext(); const forwardAll = watch(WebhookFormFieldName.ForwardAll); - const styles = useStyles2(getStyles); const controls = ( @@ -175,6 +190,7 @@ export const OutgoingWebhookFormFields = ({ /> )} ( @@ -299,55 +315,67 @@ export const OutgoingWebhookFormFields = ({ )} /> - ( - - - - )} - /> - ( - -
-
- -
-
-
- )} - /> + )} + /> + + + ( + ( + +
+
+ +
+
+
+ )} + /> + )} + /> +
);