Skip to content

Commit 930a8f2

Browse files
committed
Implemented ability to edit an alert from the alert details page
1 parent 4fc1c5f commit 930a8f2

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed

x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_details.test.tsx

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,17 @@
66
import * as React from 'react';
77
import uuid from 'uuid';
88
import { shallow } from 'enzyme';
9+
import { FormattedMessage } from '@kbn/i18n/react';
910
import { AlertDetails } from './alert_details';
1011
import { Alert, ActionType } from '../../../../types';
11-
import { EuiTitle, EuiBadge, EuiFlexItem, EuiSwitch, EuiBetaBadge } from '@elastic/eui';
12+
import {
13+
EuiTitle,
14+
EuiBadge,
15+
EuiFlexItem,
16+
EuiSwitch,
17+
EuiBetaBadge,
18+
EuiButtonEmpty,
19+
} from '@elastic/eui';
1220
import { times, random } from 'lodash';
1321
import { i18n } from '@kbn/i18n';
1422
import { ViewInApp } from './view_in_app';
@@ -232,6 +240,31 @@ describe('alert_details', () => {
232240
).containsMatchingElement(<ViewInApp alert={alert} />)
233241
).toBeTruthy();
234242
});
243+
244+
it('links to the Edit flyout', () => {
245+
const alert = mockAlert();
246+
247+
const alertType = {
248+
id: '.noop',
249+
name: 'No Op',
250+
actionGroups: [{ id: 'default', name: 'Default' }],
251+
actionVariables: { context: [], state: [] },
252+
defaultActionGroupId: 'default',
253+
};
254+
255+
expect(
256+
shallow(
257+
<AlertDetails alert={alert} alertType={alertType} actionTypes={[]} {...mockAlertApis} />
258+
).containsMatchingElement(
259+
<EuiButtonEmpty disabled={true} iconType="pencil">
260+
<FormattedMessage
261+
id="xpack.triggersActionsUI.sections.alertDetails.editAlertButtonLabel"
262+
defaultMessage="Edit"
263+
/>
264+
</EuiButtonEmpty>
265+
)
266+
).toBeTruthy();
267+
});
235268
});
236269
});
237270

x-pack/plugins/triggers_actions_ui/public/application/sections/alert_details/components/alert_details.tsx

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import React, { useState } from 'react';
7+
import React, { useState, Fragment } from 'react';
88
import { indexBy } from 'lodash';
99
import {
1010
EuiPageBody,
@@ -21,6 +21,7 @@ import {
2121
EuiCallOut,
2222
EuiSpacer,
2323
EuiBetaBadge,
24+
EuiButtonEmpty,
2425
} from '@elastic/eui';
2526
import { FormattedMessage } from '@kbn/i18n/react';
2627
import { i18n } from '@kbn/i18n';
@@ -34,6 +35,8 @@ import {
3435
import { AlertInstancesRouteWithApi } from './alert_instances_route';
3536
import { ViewInApp } from './view_in_app';
3637
import { PLUGIN } from '../../../constants/plugin';
38+
import { AlertEdit } from '../../alert_form';
39+
import { AlertsContextProvider } from '../../../context/alerts_context';
3740

3841
type AlertDetailsProps = {
3942
alert: Alert;
@@ -52,7 +55,17 @@ export const AlertDetails: React.FunctionComponent<AlertDetailsProps> = ({
5255
muteAlert,
5356
requestRefresh,
5457
}) => {
55-
const { capabilities } = useAppDependencies();
58+
const {
59+
http,
60+
toastNotifications,
61+
capabilities,
62+
alertTypeRegistry,
63+
actionTypeRegistry,
64+
uiSettings,
65+
docLinks,
66+
charts,
67+
dataPlugin,
68+
} = useAppDependencies();
5669

5770
const canSave = hasSaveAlertsCapability(capabilities);
5871

@@ -61,6 +74,7 @@ export const AlertDetails: React.FunctionComponent<AlertDetailsProps> = ({
6174

6275
const [isEnabled, setIsEnabled] = useState<boolean>(alert.enabled);
6376
const [isMuted, setIsMuted] = useState<boolean>(alert.muteAll);
77+
const [editFlyoutVisible, setEditFlyoutVisibility] = useState<boolean>(false);
6478

6579
return (
6680
<EuiPage>
@@ -90,6 +104,40 @@ export const AlertDetails: React.FunctionComponent<AlertDetailsProps> = ({
90104
</EuiPageContentHeaderSection>
91105
<EuiPageContentHeaderSection>
92106
<EuiFlexGroup responsive={false} gutterSize="xs">
107+
{canSave ? (
108+
<EuiFlexItem grow={false}>
109+
<Fragment>
110+
{' '}
111+
<EuiButtonEmpty
112+
iconType="pencil"
113+
onClick={() => setEditFlyoutVisibility(true)}
114+
>
115+
<FormattedMessage
116+
id="xpack.triggersActionsUI.sections.alertDetails.editAlertButtonLabel"
117+
defaultMessage="Edit"
118+
/>
119+
</EuiButtonEmpty>
120+
<AlertsContextProvider
121+
value={{
122+
http,
123+
actionTypeRegistry,
124+
alertTypeRegistry,
125+
toastNotifications,
126+
uiSettings,
127+
docLinks,
128+
charts,
129+
dataFieldsFormats: dataPlugin.fieldFormats,
130+
}}
131+
>
132+
<AlertEdit
133+
initialAlert={alert}
134+
editFlyoutVisible={editFlyoutVisible}
135+
setEditFlyoutVisibility={setEditFlyoutVisibility}
136+
/>
137+
</AlertsContextProvider>
138+
</Fragment>
139+
</EuiFlexItem>
140+
) : null}
93141
<EuiFlexItem grow={false}>
94142
<ViewInApp alert={alert} />
95143
</EuiFlexItem>

0 commit comments

Comments
 (0)