import { Form, notification } from 'antd'; import createSlackApi from 'api/channels/createSlack'; import ROUTES from 'constants/routes'; import FormAlertChannels from 'container/FormAlertChannels'; import history from 'lib/history'; import React, { useCallback, useState } from 'react'; import { ChannelType, SlackChannel } from './config'; function CreateAlertChannels({ preType = 'slack', }: CreateAlertChannelsProps): JSX.Element { const [formInstance] = Form.useForm(); const [selectedConfig, setSelectedConfig] = useState>({ text: ` {{ range .Alerts -}} *Alert:* {{ .Annotations.title }}{{ if .Labels.severity }} - {{ .Labels.severity }}{{ end }} *Description:* {{ .Annotations.description }} *Details:* {{ range .Labels.SortedPairs }} • *{{ .Name }}:* {{ .Value }} {{ end }} {{ end }}`, title: `[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }} {{- if gt (len .CommonLabels) (len .GroupLabels) -}} {{" "}}( {{- with .CommonLabels.Remove .GroupLabels.Names }} {{- range $index, $label := .SortedPairs -}} {{ if $index }}, {{ end }} {{- $label.Name }}="{{ $label.Value -}}" {{- end }} {{- end -}} ) {{- end }}`, }); const [savingState, setSavingState] = useState(false); const [notifications, NotificationElement] = notification.useNotification(); const [type, setType] = useState(preType); const onTypeChangeHandler = useCallback((value: string) => { setType(value as ChannelType); }, []); const onTestHandler = useCallback(() => { console.log('test'); }, []); const onSlackHandler = useCallback(async () => { try { setSavingState(true); const response = await createSlackApi({ api_url: selectedConfig?.api_url || '', channel: selectedConfig?.channel || '', name: selectedConfig?.name || '', send_resolved: true, text: selectedConfig?.text || '', title: selectedConfig?.title || '', }); if (response.statusCode === 200) { notifications.success({ message: 'Success', description: 'Successfully created the channel', }); setTimeout(() => { history.replace(ROUTES.SETTINGS); }, 2000); } else { notifications.error({ message: 'Error', description: response.error || 'Error while creating the channel', }); } setSavingState(false); } catch (error) { setSavingState(false); } }, [notifications, selectedConfig]); const onSaveHandler = useCallback( async (value: ChannelType) => { if (value === 'slack') { onSlackHandler(); } }, [onSlackHandler], ); return ( ); } interface CreateAlertChannelsProps { preType?: ChannelType; } CreateAlertChannels.defaultProps = { preType: undefined, }; export default CreateAlertChannels;