Skip to content

Commit

Permalink
[8.x] [Security Solution][Expandable flyout] Introducing Flyout histo…
Browse files Browse the repository at this point in the history
…ry in document flyout (#184970) (#203702)

# Backport

This will backport the following commits from `main` to `8.x`:
- [[Security Solution][Expandable flyout] Introducing Flyout history in
document flyout
(#184970)](#184970)

<!--- Backport version: 8.9.8 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT
[{"author":{"name":"christineweng","email":"[email protected]"},"sourceCommit":{"committedDate":"2024-12-10T21:43:28Z","message":"[Security
Solution][Expandable flyout] Introducing Flyout history in document
flyout (#184970)\n\n## Summary\r\n\r\nThis PR introduced flyout history
in expandable flyouts to keep tracked\r\nof previously opened flyouts.
The history button is available when\r\nfeature flag
`newExpandableFlyoutNavigationEnabled` is enabled.\r\n\r\nFlag is
currently default `False` \r\n\r\n### Changes
in\r\n[kbn-expandable-flyout](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout)\r\npackage\r\n\r\n-
When `openFlyout` is called, the **right** panel will be appended
to\r\nthe `history` slice in redux.\r\n- History can be accessed via
`useExpandableFlyoutHistory`
API\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/081d6d6f-3c10-40f0-8882-73bc8c275e68)\r\n\r\n\r\n###
Changes to expandable flyouts in security solution\r\n\r\n- When feature
flag is on, opening more than 1 flyout will show a\r\nhistory icon.
Currently max at 10 entries\r\n- When user clicks a flyout from the
history, it does not add on top on\r\nhistory, instead the position will
be moved up. There is no
duplicate\r\nentries.\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/3bc68519-5eea-4fb7-9386-f6688b28b525)\r\n\r\n**To
illustrate how ordering works:**\r\n-> History: [host1, user1,
alert1]\r\n-> clicks alert1 \r\n-> History: [alert1, host1, user1]
\r\nKeep in mind this is slightly different in the actual
implementation, as\r\nwe do not display the current entry (i.e. alert1
in this example)\r\n\r\n### Other changes in order to support flyout
history\r\n- Added a preview panel for network. Previously we reused the
panel for\r\nboth network flyout and network preview. A dedicated
network preview\r\nwith out history is now available\r\n- Replaced
`openRightPanel` with `openFlyout` in applicable places\r\n- Added
`isPreview` and `isPreviewMode` checks in EA flyouts\r\n\r\n## How to
test\r\n- Enable feature flag
`newExpandableFlyoutNavigationEnabled`\r\n\r\n<details>\r\n<summary>✅
Alerts page</summary>\r\nAvailable for alert, host, user, rule name and
ip's\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/e74a6444-763f-4e18-8370-f6c0c83e0d4c\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>✅
Explore pages (event table)</summary>\r\nAvailable for events, host,
user, rule name and
ip's\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/d2b9f0b9-a788-4174-bc80-8ac9c51fb16a\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>✅
Cases</summary>\r\nNote: the rule and entity link still go to a page,
this will be\r\naddressed in a separate
PR\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/fa7a5c86-d1e3-4dad-80ed-405c52efc486\"\r\n/>\r\n</details>\r\n\r\n\r\n<details>\r\n<summary>✅
Discover in severless</summary>\r\n- enable
`discover.experimental.enabledProfiles:\r\n['security-root-profile']`\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/ebd5de5d-1ed3-42ad-bb6f-1beccdc48e62\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>❌
Disabled in alert preview
</summary>\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/53e82ded-0db8-4639-afa1-c5cf224cf193\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>❌
Disabled in preview mode
</summary>\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/a12b741f-2558-4fb5-852f-282af6e10f93\"\r\n/>\r\n</details>\r\n\r\n\r\n##
WIP\r\n- [x] Investigate performance with process history\r\n- [ ] Final
ui of the entries - pending UIUX team\r\n\r\n\r\n### Checklist\r\n\r\n-
[x] Any text added follows [EUI's
writing\r\nguidelines](https://elastic.github.io/eui/#/guidelines/writing),
uses\r\nsentence case text and includes
[i18n\r\nsupport](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)\r\n-
[x]\r\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\r\nwas
added for features that require explanation or tutorials\r\n- [x] [Unit
or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios","sha":"5b6887dd3df7e92dce72bf58ff80e999d501a721","branchLabelMapping":{"^v9.0.0$":"main","^v8.18.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["backport","v9.0.0","Team:Threat
Hunting","release_note:feature","Team:Threat
Hunting:Investigations","v8.18.0"],"number":184970,"url":"https://github.com/elastic/kibana/pull/184970","mergeCommit":{"message":"[Security
Solution][Expandable flyout] Introducing Flyout history in document
flyout (#184970)\n\n## Summary\r\n\r\nThis PR introduced flyout history
in expandable flyouts to keep tracked\r\nof previously opened flyouts.
The history button is available when\r\nfeature flag
`newExpandableFlyoutNavigationEnabled` is enabled.\r\n\r\nFlag is
currently default `False` \r\n\r\n### Changes
in\r\n[kbn-expandable-flyout](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout)\r\npackage\r\n\r\n-
When `openFlyout` is called, the **right** panel will be appended
to\r\nthe `history` slice in redux.\r\n- History can be accessed via
`useExpandableFlyoutHistory`
API\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/081d6d6f-3c10-40f0-8882-73bc8c275e68)\r\n\r\n\r\n###
Changes to expandable flyouts in security solution\r\n\r\n- When feature
flag is on, opening more than 1 flyout will show a\r\nhistory icon.
Currently max at 10 entries\r\n- When user clicks a flyout from the
history, it does not add on top on\r\nhistory, instead the position will
be moved up. There is no
duplicate\r\nentries.\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/3bc68519-5eea-4fb7-9386-f6688b28b525)\r\n\r\n**To
illustrate how ordering works:**\r\n-> History: [host1, user1,
alert1]\r\n-> clicks alert1 \r\n-> History: [alert1, host1, user1]
\r\nKeep in mind this is slightly different in the actual
implementation, as\r\nwe do not display the current entry (i.e. alert1
in this example)\r\n\r\n### Other changes in order to support flyout
history\r\n- Added a preview panel for network. Previously we reused the
panel for\r\nboth network flyout and network preview. A dedicated
network preview\r\nwith out history is now available\r\n- Replaced
`openRightPanel` with `openFlyout` in applicable places\r\n- Added
`isPreview` and `isPreviewMode` checks in EA flyouts\r\n\r\n## How to
test\r\n- Enable feature flag
`newExpandableFlyoutNavigationEnabled`\r\n\r\n<details>\r\n<summary>✅
Alerts page</summary>\r\nAvailable for alert, host, user, rule name and
ip's\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/e74a6444-763f-4e18-8370-f6c0c83e0d4c\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>✅
Explore pages (event table)</summary>\r\nAvailable for events, host,
user, rule name and
ip's\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/d2b9f0b9-a788-4174-bc80-8ac9c51fb16a\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>✅
Cases</summary>\r\nNote: the rule and entity link still go to a page,
this will be\r\naddressed in a separate
PR\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/fa7a5c86-d1e3-4dad-80ed-405c52efc486\"\r\n/>\r\n</details>\r\n\r\n\r\n<details>\r\n<summary>✅
Discover in severless</summary>\r\n- enable
`discover.experimental.enabledProfiles:\r\n['security-root-profile']`\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/ebd5de5d-1ed3-42ad-bb6f-1beccdc48e62\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>❌
Disabled in alert preview
</summary>\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/53e82ded-0db8-4639-afa1-c5cf224cf193\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>❌
Disabled in preview mode
</summary>\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/a12b741f-2558-4fb5-852f-282af6e10f93\"\r\n/>\r\n</details>\r\n\r\n\r\n##
WIP\r\n- [x] Investigate performance with process history\r\n- [ ] Final
ui of the entries - pending UIUX team\r\n\r\n\r\n### Checklist\r\n\r\n-
[x] Any text added follows [EUI's
writing\r\nguidelines](https://elastic.github.io/eui/#/guidelines/writing),
uses\r\nsentence case text and includes
[i18n\r\nsupport](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)\r\n-
[x]\r\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\r\nwas
added for features that require explanation or tutorials\r\n- [x] [Unit
or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios","sha":"5b6887dd3df7e92dce72bf58ff80e999d501a721"}},"sourceBranch":"main","suggestedTargetBranches":["8.x"],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","labelRegex":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/184970","number":184970,"mergeCommit":{"message":"[Security
Solution][Expandable flyout] Introducing Flyout history in document
flyout (#184970)\n\n## Summary\r\n\r\nThis PR introduced flyout history
in expandable flyouts to keep tracked\r\nof previously opened flyouts.
The history button is available when\r\nfeature flag
`newExpandableFlyoutNavigationEnabled` is enabled.\r\n\r\nFlag is
currently default `False` \r\n\r\n### Changes
in\r\n[kbn-expandable-flyout](https://github.com/elastic/kibana/tree/main/packages/kbn-expandable-flyout)\r\npackage\r\n\r\n-
When `openFlyout` is called, the **right** panel will be appended
to\r\nthe `history` slice in redux.\r\n- History can be accessed via
`useExpandableFlyoutHistory`
API\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/081d6d6f-3c10-40f0-8882-73bc8c275e68)\r\n\r\n\r\n###
Changes to expandable flyouts in security solution\r\n\r\n- When feature
flag is on, opening more than 1 flyout will show a\r\nhistory icon.
Currently max at 10 entries\r\n- When user clicks a flyout from the
history, it does not add on top on\r\nhistory, instead the position will
be moved up. There is no
duplicate\r\nentries.\r\n\r\n\r\n![image](https://github.com/user-attachments/assets/3bc68519-5eea-4fb7-9386-f6688b28b525)\r\n\r\n**To
illustrate how ordering works:**\r\n-> History: [host1, user1,
alert1]\r\n-> clicks alert1 \r\n-> History: [alert1, host1, user1]
\r\nKeep in mind this is slightly different in the actual
implementation, as\r\nwe do not display the current entry (i.e. alert1
in this example)\r\n\r\n### Other changes in order to support flyout
history\r\n- Added a preview panel for network. Previously we reused the
panel for\r\nboth network flyout and network preview. A dedicated
network preview\r\nwith out history is now available\r\n- Replaced
`openRightPanel` with `openFlyout` in applicable places\r\n- Added
`isPreview` and `isPreviewMode` checks in EA flyouts\r\n\r\n## How to
test\r\n- Enable feature flag
`newExpandableFlyoutNavigationEnabled`\r\n\r\n<details>\r\n<summary>✅
Alerts page</summary>\r\nAvailable for alert, host, user, rule name and
ip's\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/e74a6444-763f-4e18-8370-f6c0c83e0d4c\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>✅
Explore pages (event table)</summary>\r\nAvailable for events, host,
user, rule name and
ip's\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/d2b9f0b9-a788-4174-bc80-8ac9c51fb16a\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>✅
Cases</summary>\r\nNote: the rule and entity link still go to a page,
this will be\r\naddressed in a separate
PR\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/fa7a5c86-d1e3-4dad-80ed-405c52efc486\"\r\n/>\r\n</details>\r\n\r\n\r\n<details>\r\n<summary>✅
Discover in severless</summary>\r\n- enable
`discover.experimental.enabledProfiles:\r\n['security-root-profile']`\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/ebd5de5d-1ed3-42ad-bb6f-1beccdc48e62\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>❌
Disabled in alert preview
</summary>\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/53e82ded-0db8-4639-afa1-c5cf224cf193\"\r\n/>\r\n</details>\r\n\r\n<details>\r\n<summary>❌
Disabled in preview mode
</summary>\r\n<img\r\nsrc=\"https://github.com/user-attachments/assets/a12b741f-2558-4fb5-852f-282af6e10f93\"\r\n/>\r\n</details>\r\n\r\n\r\n##
WIP\r\n- [x] Investigate performance with process history\r\n- [ ] Final
ui of the entries - pending UIUX team\r\n\r\n\r\n### Checklist\r\n\r\n-
[x] Any text added follows [EUI's
writing\r\nguidelines](https://elastic.github.io/eui/#/guidelines/writing),
uses\r\nsentence case text and includes
[i18n\r\nsupport](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)\r\n-
[x]\r\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\r\nwas
added for features that require explanation or tutorials\r\n- [x] [Unit
or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios","sha":"5b6887dd3df7e92dce72bf58ff80e999d501a721"}},{"branch":"8.x","label":"v8.18.0","labelRegex":"^v8.18.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->
  • Loading branch information
christineweng authored Dec 11, 2024
1 parent cf8499e commit c4658e7
Show file tree
Hide file tree
Showing 56 changed files with 1,320 additions and 206 deletions.
2 changes: 2 additions & 0 deletions packages/kbn-expandable-flyout/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ To control (or mutate) flyout's layout, you can utilize [useExpandableFlyoutApi]

> The expandable flyout propagates the `onClose` callback from the EuiFlyout component. As we recommend having a single instance of the flyout in your application, it's up to the application's code to dispatch the event (through Redux, window events, observable, prop drilling...).
When calling `openFlyout`, the right panel state is automatically appended in the `history` slice in the redux context. To access the flyout's history, you can use the [useExpandableFlyoutHistory](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/hooks/use_expandable_flyout_history.ts) hook.

## Usage

To use the expandable flyout in your plugin, first you need wrap your code with the [context provider](https://github.com/elastic/kibana/blob/main/packages/kbn-expandable-flyout/src/context.tsx) at a high enough level as follows:
Expand Down
1 change: 1 addition & 0 deletions packages/kbn-expandable-flyout/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export { ExpandableFlyout } from './src';

export { useExpandableFlyoutApi } from './src/hooks/use_expandable_flyout_api';
export { useExpandableFlyoutState } from './src/hooks/use_expandable_flyout_state';
export { useExpandableFlyoutHistory } from './src/hooks/use_expandable_flyout_history';

export { type FlyoutPanels as ExpandableFlyoutState } from './src/store/state';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ describe('Container', () => {
},
left: undefined,
preview: undefined,
history: [{ id: 'key' }],
},
},
},
Expand Down Expand Up @@ -85,6 +86,7 @@ describe('Container', () => {
id: 'key',
},
preview: undefined,
history: [],
},
},
},
Expand Down Expand Up @@ -112,6 +114,7 @@ describe('Container', () => {
id: 'key',
},
],
history: [],
},
},
},
Expand All @@ -137,6 +140,7 @@ describe('Container', () => {
},
left: undefined,
preview: undefined,
history: [],
},
},
},
Expand All @@ -163,6 +167,7 @@ describe('Container', () => {
},
left: undefined,
preview: undefined,
history: [],
},
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ describe('PreviewSection', () => {
id: 'key',
},
],
history: [],
},
},
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the "Elastic License
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
* Public License v 1"; you may not use this file except in compliance with, at
* your election, the "Elastic License 2.0", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/

import { REDUX_ID_FOR_MEMORY_STORAGE } from '../constants';
import { useExpandableFlyoutContext } from '../context';
import { selectHistoryById, useSelector } from '../store/redux';

/**
* This hook allows you to access the flyout state, read open right, left and preview panels.
*/
export const useExpandableFlyoutHistory = () => {
const { urlKey } = useExpandableFlyoutContext();
// if no urlKey is provided, we are in memory storage mode and use the reserved word 'memory'
const id = urlKey || REDUX_ID_FOR_MEMORY_STORAGE;
return useSelector(selectHistoryById(id));
};
9 changes: 9 additions & 0 deletions packages/kbn-expandable-flyout/src/index.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ export const Right: Story<void> = () => {
},
left: undefined,
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand Down Expand Up @@ -139,6 +140,7 @@ export const Left: Story<void> = () => {
id: 'left',
},
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand Down Expand Up @@ -171,6 +173,7 @@ export const Preview: Story<void> = () => {
id: 'preview1',
},
],
history: [{ id: 'right' }],
},
},
},
Expand Down Expand Up @@ -206,6 +209,7 @@ export const MultiplePreviews: Story<void> = () => {
id: 'preview2',
},
],
history: [{ id: 'right' }],
},
},
},
Expand All @@ -232,6 +236,7 @@ export const CollapsedPushMode: Story<void> = () => {
},
left: undefined,
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand Down Expand Up @@ -260,6 +265,7 @@ export const ExpandedPushMode: Story<void> = () => {
id: 'left',
},
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand Down Expand Up @@ -288,6 +294,7 @@ export const DisableTypeSelection: Story<void> = () => {
id: 'left',
},
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand Down Expand Up @@ -318,6 +325,7 @@ export const ResetWidths: Story<void> = () => {
id: 'left',
},
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand All @@ -343,6 +351,7 @@ export const DisableResizeWidthSelection: Story<void> = () => {
id: 'left',
},
preview: undefined,
history: [{ id: 'right' }],
},
},
},
Expand Down
1 change: 1 addition & 0 deletions packages/kbn-expandable-flyout/src/index.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ describe('ExpandableFlyout', () => {
},
left: undefined,
preview: undefined,
history: [{ id: 'key' }],
},
},
},
Expand Down
2 changes: 2 additions & 0 deletions packages/kbn-expandable-flyout/src/provider.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ describe('UrlSynchronizer', () => {
right: { id: 'key1' },
left: { id: 'key11' },
preview: undefined,
history: [{ id: 'key1' }],
},
},
needsSync: true,
Expand Down Expand Up @@ -93,6 +94,7 @@ describe('UrlSynchronizer', () => {
right: { id: 'key1' },
left: { id: 'key2' },
preview: undefined,
history: [{ id: 'key1' }],
},
},
needsSync: true,
Expand Down
Loading

0 comments on commit c4658e7

Please sign in to comment.