{"version":3,"file":"EditNotificationChannel.8d541edf5aaa7f03dcc4.js","mappings":"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","sources":["webpack://grafana/./public/app/core/components/connectWithCleanUp.tsx","webpack://grafana/./public/app/features/alerting/EditNotificationChannelPage.tsx","webpack://grafana/./public/app/features/alerting/components/OptionElement.tsx","webpack://grafana/./public/app/features/alerting/components/NotificationChannelOptions.tsx","webpack://grafana/./public/app/features/alerting/components/BasicSettings.tsx","webpack://grafana/./public/app/features/alerting/components/ChannelSettings.tsx","webpack://grafana/./public/app/features/alerting/components/NotificationSettings.tsx","webpack://grafana/./public/app/features/alerting/components/NotificationChannelForm.tsx","webpack://grafana/./public/app/features/alerting/state/actions.ts","webpack://grafana/./public/app/features/alerting/utils/notificationChannels.ts"],"sourcesContent":["import hoistNonReactStatics from 'hoist-non-react-statics';\nimport React, { ComponentType, FunctionComponent, useEffect } from 'react';\nimport { connect, MapDispatchToPropsParam, MapStateToPropsParam, useDispatch } from 'react-redux';\n\nimport { cleanUpAction, StateSelector } from '../actions/cleanUp';\n\nexport const connectWithCleanUp =\n <\n TStateProps extends {} = {},\n TDispatchProps = {},\n TOwnProps = {},\n State = {},\n TSelector extends object = {},\n Statics = {}\n >(\n mapStateToProps: MapStateToPropsParam,\n mapDispatchToProps: MapDispatchToPropsParam,\n stateSelector: StateSelector\n ) =>\n (Component: ComponentType) => {\n const ConnectedComponent = connect(\n mapStateToProps,\n mapDispatchToProps\n // @ts-ignore\n )(Component);\n\n const ConnectedComponentWithCleanUp: FunctionComponent = (props) => {\n const dispatch = useDispatch();\n useEffect(() => {\n return function cleanUp() {\n dispatch(cleanUpAction({ stateSelector }));\n };\n }, [dispatch]);\n // @ts-ignore\n return ;\n };\n\n ConnectedComponentWithCleanUp.displayName = `ConnectWithCleanUp(${ConnectedComponent.displayName})`;\n hoistNonReactStatics(ConnectedComponentWithCleanUp, Component);\n type Hoisted = typeof ConnectedComponentWithCleanUp & Statics;\n\n return ConnectedComponentWithCleanUp as Hoisted;\n };\n","import React, { PureComponent } from 'react';\nimport { MapDispatchToProps, MapStateToProps } from 'react-redux';\n\nimport { NavModel } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Form, Spinner } from '@grafana/ui';\nimport Page from 'app/core/components/Page/Page';\nimport { connectWithCleanUp } from 'app/core/components/connectWithCleanUp';\nimport { GrafanaRouteComponentProps } from 'app/core/navigation/types';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { NotificationChannelType, NotificationChannelDTO, StoreState } from 'app/types';\n\nimport { NotificationChannelForm } from './components/NotificationChannelForm';\nimport { loadNotificationChannel, testNotificationChannel, updateNotificationChannel } from './state/actions';\nimport { resetSecureField } from './state/reducers';\nimport { mapChannelsToSelectableValue, transformSubmitData, transformTestData } from './utils/notificationChannels';\n\ninterface OwnProps extends GrafanaRouteComponentProps<{ id: string }> {}\n\ninterface ConnectedProps {\n navModel: NavModel;\n notificationChannel: any;\n notificationChannelTypes: NotificationChannelType[];\n}\n\ninterface DispatchProps {\n loadNotificationChannel: typeof loadNotificationChannel;\n testNotificationChannel: typeof testNotificationChannel;\n updateNotificationChannel: typeof updateNotificationChannel;\n resetSecureField: typeof resetSecureField;\n}\n\ntype Props = OwnProps & ConnectedProps & DispatchProps;\n\nexport class EditNotificationChannelPage extends PureComponent {\n componentDidMount() {\n this.props.loadNotificationChannel(parseInt(this.props.match.params.id, 10));\n }\n\n onSubmit = (formData: NotificationChannelDTO) => {\n const { notificationChannel } = this.props;\n\n this.props.updateNotificationChannel({\n /*\n Some settings which lives in a collapsed section will not be registered since\n the section will not be rendered if a user doesn't expand it. Therefore we need to\n merge the initialData with any changes from the form.\n */\n ...transformSubmitData({\n ...notificationChannel,\n ...formData,\n settings: { ...notificationChannel.settings, ...formData.settings },\n }),\n id: notificationChannel.id,\n });\n };\n\n onTestChannel = (formData: NotificationChannelDTO) => {\n const { notificationChannel } = this.props;\n /*\n Same as submit\n */\n this.props.testNotificationChannel(\n transformTestData({\n ...notificationChannel,\n ...formData,\n settings: { ...notificationChannel.settings, ...formData.settings },\n })\n );\n };\n\n render() {\n const { navModel, notificationChannel, notificationChannelTypes } = this.props;\n\n return (\n \n \n

Edit notification channel

\n {notificationChannel && notificationChannel.id > 0 ? (\n n.value === notificationChannel.type),\n }}\n >\n {({ control, errors, getValues, register, watch }) => {\n const selectedChannel = notificationChannelTypes.find((c) => c.value === getValues().type.value);\n\n return (\n \n );\n }}\n \n ) : (\n
\n Loading notification channel\n \n
\n )}\n
\n
\n );\n }\n}\n\nconst mapStateToProps: MapStateToProps = (state) => {\n return {\n navModel: getNavModel(state.navIndex, 'channels'),\n notificationChannel: state.notificationChannel.notificationChannel,\n notificationChannelTypes: state.notificationChannel.notificationChannelTypes,\n };\n};\n\nconst mapDispatchToProps: MapDispatchToProps = {\n loadNotificationChannel,\n testNotificationChannel,\n updateNotificationChannel,\n resetSecureField,\n};\n\nexport default connectWithCleanUp(\n mapStateToProps,\n mapDispatchToProps,\n (state) => state.notificationChannel\n)(EditNotificationChannelPage);\n","import React, { FC } from 'react';\n\nimport { FormAPI, Input, InputControl, Select, TextArea } from '@grafana/ui';\n\nimport { NotificationChannelOption } from '../../../types';\n\ninterface Props extends Pick, 'register' | 'control'> {\n option: NotificationChannelOption;\n invalid?: boolean;\n}\n\nexport const OptionElement: FC = ({ control, option, register, invalid }) => {\n const modelValue = option.secure ? `secureSettings.${option.propertyName}` : `settings.${option.propertyName}`;\n switch (option.element) {\n case 'input':\n return (\n (option.validationRule !== '' ? validateOption(v, option.validationRule) : true),\n })}\n invalid={invalid}\n type={option.inputType}\n placeholder={option.placeholder}\n />\n );\n\n case 'select':\n return (\n (\n \n \n \n \n \n \n )}\n \n );\n};\n","import { css } from '@emotion/css';\nimport React, { FC, useEffect } from 'react';\n\nimport { GrafanaTheme, SelectableValue } from '@grafana/data';\nimport { Button, FormAPI, HorizontalGroup, stylesFactory, useTheme, Spinner } from '@grafana/ui';\nimport config from 'app/core/config';\n\nimport { NotificationChannelType, NotificationChannelDTO, NotificationChannelSecureFields } from '../../../types';\n\nimport { BasicSettings } from './BasicSettings';\nimport { ChannelSettings } from './ChannelSettings';\nimport { NotificationSettings } from './NotificationSettings';\n\ninterface Props\n extends Pick, 'control' | 'errors' | 'register' | 'watch' | 'getValues'> {\n selectableChannels: Array>;\n selectedChannel?: NotificationChannelType;\n imageRendererAvailable: boolean;\n secureFields: NotificationChannelSecureFields;\n resetSecureField: (key: string) => void;\n onTestChannel: (data: NotificationChannelDTO) => void;\n}\n\nexport interface NotificationSettingsProps\n extends Pick, 'control' | 'errors' | 'register'> {\n currentFormValues: NotificationChannelDTO;\n}\n\nexport const NotificationChannelForm: FC = ({\n control,\n errors,\n selectedChannel,\n selectableChannels,\n register,\n watch,\n getValues,\n imageRendererAvailable,\n onTestChannel,\n resetSecureField,\n secureFields,\n}) => {\n const styles = getStyles(useTheme());\n\n useEffect(() => {\n /*\n Find fields that have dependencies on other fields and removes duplicates.\n Needs to be prefixed with settings.\n */\n const fieldsToWatch =\n new Set(\n selectedChannel?.options\n .filter((o) => o.showWhen.field)\n .map((option) => {\n return `settings.${option.showWhen.field}`;\n })\n ) || [];\n watch(['type', 'sendReminder', 'uploadImage', ...fieldsToWatch]);\n }, [selectedChannel?.options, watch]);\n\n const currentFormValues = getValues();\n\n if (!selectedChannel) {\n return ;\n }\n\n return (\n
\n
\n \n
\n {/* If there are no non-required fields, don't render this section*/}\n {selectedChannel.options.filter((o) => !o.required).length > 0 && (\n
\n \n
\n )}\n
\n \n
\n
\n \n \n \n \n \n \n \n
\n
\n );\n};\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n return {\n formContainer: css``,\n formItem: css`\n flex-grow: 1;\n padding-top: ${theme.spacing.md};\n `,\n formButtons: css`\n padding-top: ${theme.spacing.xl};\n `,\n };\n});\n","import { getBackendSrv, locationService } from '@grafana/runtime';\nimport { notifyApp } from 'app/core/actions';\nimport { createErrorNotification, createSuccessNotification } from 'app/core/copy/appNotification';\nimport { AlertRuleDTO, NotifierDTO, ThunkResult } from 'app/types';\n\nimport { loadAlertRules, loadedAlertRules, notificationChannelLoaded, setNotificationChannels } from './reducers';\n\nexport function getAlertRulesAsync(options: { state: string }): ThunkResult {\n return async (dispatch) => {\n dispatch(loadAlertRules());\n const rules: AlertRuleDTO[] = await getBackendSrv().get('/api/alerts', options);\n dispatch(loadedAlertRules(rules));\n };\n}\n\nexport function togglePauseAlertRule(id: number, options: { paused: boolean }): ThunkResult {\n return async (dispatch) => {\n await getBackendSrv().post(`/api/alerts/${id}/pause`, options);\n const stateFilter = locationService.getSearchObject().state || 'all';\n dispatch(getAlertRulesAsync({ state: stateFilter.toString() }));\n };\n}\n\nexport function createNotificationChannel(data: any): ThunkResult> {\n return async (dispatch) => {\n try {\n await getBackendSrv().post(`/api/alert-notifications`, data);\n dispatch(notifyApp(createSuccessNotification('Notification created')));\n locationService.push('/alerting/notifications');\n } catch (error) {\n dispatch(notifyApp(createErrorNotification(error.data.error)));\n }\n };\n}\n\nexport function updateNotificationChannel(data: any): ThunkResult {\n return async (dispatch) => {\n try {\n await getBackendSrv().put(`/api/alert-notifications/${data.id}`, data);\n dispatch(notifyApp(createSuccessNotification('Notification updated')));\n } catch (error) {\n dispatch(notifyApp(createErrorNotification(error.data.error)));\n }\n };\n}\n\nexport function testNotificationChannel(data: any): ThunkResult {\n return async (dispatch, getState) => {\n const channel = getState().notificationChannel.notificationChannel;\n await getBackendSrv().post('/api/alert-notifications/test', { id: channel.id, ...data });\n };\n}\n\nexport function loadNotificationTypes(): ThunkResult {\n return async (dispatch) => {\n const alertNotifiers: NotifierDTO[] = await getBackendSrv().get(`/api/alert-notifiers`);\n\n const notificationTypes = alertNotifiers.sort((o1, o2) => {\n if (o1.name > o2.name) {\n return 1;\n }\n return -1;\n });\n\n dispatch(setNotificationChannels(notificationTypes));\n };\n}\n\nexport function loadNotificationChannel(id: number): ThunkResult {\n return async (dispatch) => {\n await dispatch(loadNotificationTypes());\n const notificationChannel = await getBackendSrv().get(`/api/alert-notifications/${id}`);\n dispatch(notificationChannelLoaded(notificationChannel));\n };\n}\n","import memoizeOne from 'memoize-one';\n\nimport { SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { NotificationChannelDTO, NotificationChannelType } from 'app/types';\n\nexport const defaultValues: NotificationChannelDTO = {\n id: -1,\n name: '',\n type: { value: 'email', label: 'Email' },\n sendReminder: false,\n disableResolveMessage: false,\n frequency: '15m',\n settings: {\n uploadImage: config.rendererAvailable,\n autoResolve: true,\n httpMethod: 'POST',\n severity: 'critical',\n },\n secureSettings: {},\n secureFields: {},\n isDefault: false,\n};\n\nexport const mapChannelsToSelectableValue = memoizeOne(\n (notificationChannels: NotificationChannelType[], includeDescription: boolean): Array> => {\n return notificationChannels.map((channel) => {\n if (includeDescription) {\n return {\n value: channel.value,\n label: channel.label,\n description: channel.description,\n };\n }\n return {\n value: channel.value,\n label: channel.label,\n };\n });\n }\n);\n\nexport const transformSubmitData = (formData: NotificationChannelDTO) => {\n /*\n Some settings can be options in a select, in order to not save a SelectableValue\n we need to use check if it is a SelectableValue and use its value.\n */\n const settings = Object.fromEntries(\n Object.entries(formData.settings).map(([key, value]) => {\n return [key, value && value.hasOwnProperty('value') ? value.value : value];\n })\n );\n\n return {\n ...defaultValues,\n ...formData,\n frequency: formData.frequency === '' ? defaultValues.frequency : formData.frequency,\n type: formData.type.value,\n settings: { ...defaultValues.settings, ...settings },\n secureSettings: { ...formData.secureSettings },\n };\n};\n\nexport const transformTestData = (formData: NotificationChannelDTO) => {\n return {\n name: formData.name,\n type: formData.type.value,\n frequency: formData.frequency ?? defaultValues.frequency,\n settings: { ...Object.assign(defaultValues.settings, formData.settings) },\n secureSettings: { ...formData.secureSettings },\n };\n};\n"],"names":["connectWithCleanUp","mapStateToProps","mapDispatchToProps","stateSelector","Component","ConnectedComponent","connect","ConnectedComponentWithCleanUp","props","dispatch","useDispatch","useEffect","cleanUpAction","displayName","hoistNonReactStatics","EditNotificationChannelPage","PureComponent","formData","notificationChannel","this","updateNotificationChannel","transformSubmitData","settings","id","testNotificationChannel","transformTestData","componentDidMount","loadNotificationChannel","parseInt","match","params","render","navModel","notificationChannelTypes","className","Form","maxWidth","onSubmit","defaultValues","type","find","n","value","control","errors","getValues","register","watch","selectedChannel","c","selectableChannels","mapChannelsToSelectableValue","imageRendererAvailable","config","onTestChannel","resetSecureField","secureFields","Spinner","state","getNavModel","navIndex","OptionElement","option","invalid","modelValue","secure","propertyName","element","Input","required","validate","v","validationRule","validateOption","inputType","placeholder","InputControl","name","field","Select","options","selectOptions","undefined","TextArea","console","error","RegExp","test","NotificationChannelOptions","currentFormValues","selectedChannelOptions","onResetSecureField","map","index","key","label","selectedOptionValue","showWhen","is","Field","Checkbox","description","message","readOnly","suffix","Button","onClick","fill","size","BasicSettings","channels","rules","filter","o","ChannelSettings","CollapsableSection","heading","isOpen","info","Alert","severity","title","NotificationSettings","uploadImage","InfoBox","sendReminder","width","NotificationChannelForm","styles","getStyles","useTheme","fieldsToWatch","Set","formContainer","formItem","length","formButtons","HorizontalGroup","variant","href","stylesFactory","theme","css","spacing","md","xl","getAlertRulesAsync","async","loadAlertRules","getBackendSrv","get","loadedAlertRules","togglePauseAlertRule","post","locationService","toString","createNotificationChannel","data","notifyApp","createSuccessNotification","createErrorNotification","put","getState","channel","loadNotificationTypes","notificationTypes","sort","o1","o2","setNotificationChannels","notificationChannelLoaded","disableResolveMessage","frequency","autoResolve","httpMethod","secureSettings","isDefault","memoizeOne","notificationChannels","includeDescription","Object","fromEntries","entries","hasOwnProperty","assign"],"sourceRoot":""}