From 19fc0d9a96609f94b3f22179a63ee7139742992e Mon Sep 17 00:00:00 2001 From: Keith Grant Date: Thu, 20 Aug 2020 10:08:03 -0700 Subject: [PATCH] reset notification messages to defaults when switching to new type --- .../shared/CustomMessagesSubForm.jsx | 65 ++++++++++++------- .../shared/NotificationTemplateForm.jsx | 5 +- .../shared/TypeInputsSubForm.jsx | 6 +- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/awx/ui_next/src/screens/NotificationTemplate/shared/CustomMessagesSubForm.jsx b/awx/ui_next/src/screens/NotificationTemplate/shared/CustomMessagesSubForm.jsx index 8bca667b82..9387a84a39 100644 --- a/awx/ui_next/src/screens/NotificationTemplate/shared/CustomMessagesSubForm.jsx +++ b/awx/ui_next/src/screens/NotificationTemplate/shared/CustomMessagesSubForm.jsx @@ -1,40 +1,59 @@ import 'styled-components/macro'; -import React from 'react'; +import React, { useEffect, useRef } from 'react'; import { withI18n } from '@lingui/react'; import { t } from '@lingui/macro'; -import { useField } from 'formik'; +import { useField, useFormikContext } from 'formik'; +import { Switch, Text } from '@patternfly/react-core'; import { - FormGroup, - Title, - Switch, - Text, - TextVariants, -} from '@patternfly/react-core'; -import { - FormColumnLayout, FormFullWidthLayout, SubFormLayout, } from '../../../components/FormLayout'; -import FormField, { - PasswordField, - CheckboxField, - FieldTooltip, -} from '../../../components/FormField'; -import AnsibleSelect from '../../../components/AnsibleSelect'; import { CodeMirrorField } from '../../../components/CodeMirrorInput'; -import { - combine, - required, - requiredEmail, - url, -} from '../../../util/validators'; -import { NotificationType } from '../../../types'; function CustomMessagesSubForm({ defaultMessages, type, i18n }) { const [useCustomField, , useCustomHelpers] = useField('useCustomMessages'); const showMessages = type !== 'webhook'; const showBodies = ['email', 'pagerduty', 'webhook'].includes(type); + const { setFieldValue } = useFormikContext(); + const mountedRef = useRef(null); + useEffect( + function resetToDefaultMessages() { + if (!mountedRef.current) { + mountedRef.current = true; + return; + } + const defs = defaultMessages[type]; + + const resetFields = (name, defaults) => { + setFieldValue(`${name}.message`, defaults.message || ''); + setFieldValue(`${name}.body`, defaults.body || ''); + }; + + resetFields('messages.started', defs.started); + resetFields('messages.success', defs.success); + resetFields('messages.error', defs.error); + resetFields( + 'messages.workflow_approval.approved', + defs.workflow_approval.approved + ); + resetFields( + 'messages.workflow_approval.denied', + defs.workflow_approval.denied + ); + resetFields( + 'messages.workflow_approval.running', + defs.workflow_approval.running + ); + resetFields( + 'messages.workflow_approval.timed_out', + defs.workflow_approval.timed_out + ); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [type, setFieldValue] + ); + return ( <> (
- + @@ -187,7 +187,7 @@ function GrafanaFields({ i18n }) { label={i18n._(t`Tags for the annotation (optional)`)} name="notification_configuration.annotation_tags" type="textarea" - rows="3" + rows={3} tooltip={i18n._(t`Enter one Annotation Tag per line, without commas.`)} />