New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Security Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all #182007
[Security Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all #182007
Conversation
Pinging @elastic/response-ops (Team:ResponseOps) |
Pinging @elastic/security-threat-hunting-investigations (Team:Threat Hunting:Investigations) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks for fixing it!
@@ -90,7 +92,9 @@ const addItemsToInitialPanel = ({ | |||
}) => { | |||
if (panels.length > 0) { | |||
if (panels[0].items) { | |||
panels[0].items.push(...items); | |||
panels[0].items = [...panels[0].items, ...items].filter( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe we could add a comment for curious engineers to understand this logic in future
💚 Build Succeeded
Metrics [docs]Async chunks
To update your PR or re-run it, just comment with: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the fix @kqualters-elastic! Code review only. LGTM!
hook calls a function that mutates this array directly, which causes duplicate items to appear in the alert context menu.
Ideally, the helper function should not mutate the original array and return a new array with the new items added.
The test case added below will currently fail on main/8.14.
What do you mean by that?
Thanks @cnasikas
That's exactly what I've changed essentially, [...].filter() vs push().
This is just if someone who is reviewing wanted to see the bug, the test passes in this branch with [...].filter() but fails on main when the array is mutated with push() |
…g added by bulk actions select all (elastic#182007) ## Summary Related issue: elastic#181972 When the useBulkActions hook in the alerts table is used with the optionally defined at registration time hook useBulkActionsConfig, and that hook returns a stable array, the hook calls a function that mutates this array directly, which causes duplicate items to appear in the alert context menu. This is due to the useBulkActions hook using the bulk actions state via context, and so runs every time a user selects a row/all rows. Doing this via filter might not be the most performant way, but in order to have everything referentially stable, I think the arguments to useBulkActions/useBulkUntrackActions should be changed a bit, but that can be a discussion for another time. The test case added below will currently fail on main/8.14. Before: ![bulk_actions_with_dupe](https://github.com/elastic/kibana/assets/56408403/7f730bb9-fcb2-4a8e-93f8-3e08523e3a34) After: ![bulk_actions_no_dupe](https://github.com/elastic/kibana/assets/56408403/01f76c6b-59fb-459f-8950-1fc1fe8dfe12) ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios (cherry picked from commit 8a1d295)
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
…ms being added by bulk actions select all (#182007) (#182109) # Backport This will backport the following commits from `main` to `8.14`: - [[Security Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all (#182007)](#182007) <!--- Backport version: 9.4.3 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Kevin Qualters","email":"56408403+kqualters-elastic@users.noreply.github.com"},"sourceCommit":{"committedDate":"2024-04-30T12:11:43Z","message":"[Security Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all (#182007)\n\n## Summary\r\n\r\nRelated issue: #181972\r\n\r\nWhen the useBulkActions hook in the alerts table is used with the\r\noptionally defined at registration time hook useBulkActionsConfig, and\r\nthat hook returns a stable array, the hook calls a function that mutates\r\nthis array directly, which causes duplicate items to appear in the alert\r\ncontext menu. This is due to the useBulkActions hook using the bulk\r\nactions state via context, and so runs every time a user selects a\r\nrow/all rows. Doing this via filter might not be the most performant\r\nway, but in order to have everything referentially stable, I think the\r\narguments to useBulkActions/useBulkUntrackActions should be changed a\r\nbit, but that can be a discussion for another time. The test case added\r\nbelow will currently fail on main/8.14.\r\n\r\nBefore:\r\n\r\n![bulk_actions_with_dupe](https://github.com/elastic/kibana/assets/56408403/7f730bb9-fcb2-4a8e-93f8-3e08523e3a34)\r\n\r\n\r\nAfter:\r\n\r\n![bulk_actions_no_dupe](https://github.com/elastic/kibana/assets/56408403/01f76c6b-59fb-459f-8950-1fc1fe8dfe12)\r\n\r\n\r\n### Checklist\r\n\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":"8a1d2950fa16f8cb50a21cb793640a290b54032c","branchLabelMapping":{"^v8.15.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","Team:ResponseOps","Team:Threat Hunting:Investigations","v8.14.0","v8.15.0"],"title":"[Security Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all","number":182007,"url":"#182007 Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all (#182007)\n\n## Summary\r\n\r\nRelated issue: #181972\r\n\r\nWhen the useBulkActions hook in the alerts table is used with the\r\noptionally defined at registration time hook useBulkActionsConfig, and\r\nthat hook returns a stable array, the hook calls a function that mutates\r\nthis array directly, which causes duplicate items to appear in the alert\r\ncontext menu. This is due to the useBulkActions hook using the bulk\r\nactions state via context, and so runs every time a user selects a\r\nrow/all rows. Doing this via filter might not be the most performant\r\nway, but in order to have everything referentially stable, I think the\r\narguments to useBulkActions/useBulkUntrackActions should be changed a\r\nbit, but that can be a discussion for another time. The test case added\r\nbelow will currently fail on main/8.14.\r\n\r\nBefore:\r\n\r\n![bulk_actions_with_dupe](https://github.com/elastic/kibana/assets/56408403/7f730bb9-fcb2-4a8e-93f8-3e08523e3a34)\r\n\r\n\r\nAfter:\r\n\r\n![bulk_actions_no_dupe](https://github.com/elastic/kibana/assets/56408403/01f76c6b-59fb-459f-8950-1fc1fe8dfe12)\r\n\r\n\r\n### Checklist\r\n\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":"8a1d2950fa16f8cb50a21cb793640a290b54032c"}},"sourceBranch":"main","suggestedTargetBranches":["8.14"],"targetPullRequestStates":[{"branch":"8.14","label":"v8.14.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v8.15.0","branchLabelMappingKey":"^v8.15.0$","isSourceBranch":true,"state":"MERGED","url":"#182007 Solution] [Alerts Table] [RAC] Prevent duplicate items being added by bulk actions select all (#182007)\n\n## Summary\r\n\r\nRelated issue: #181972\r\n\r\nWhen the useBulkActions hook in the alerts table is used with the\r\noptionally defined at registration time hook useBulkActionsConfig, and\r\nthat hook returns a stable array, the hook calls a function that mutates\r\nthis array directly, which causes duplicate items to appear in the alert\r\ncontext menu. This is due to the useBulkActions hook using the bulk\r\nactions state via context, and so runs every time a user selects a\r\nrow/all rows. Doing this via filter might not be the most performant\r\nway, but in order to have everything referentially stable, I think the\r\narguments to useBulkActions/useBulkUntrackActions should be changed a\r\nbit, but that can be a discussion for another time. The test case added\r\nbelow will currently fail on main/8.14.\r\n\r\nBefore:\r\n\r\n![bulk_actions_with_dupe](https://github.com/elastic/kibana/assets/56408403/7f730bb9-fcb2-4a8e-93f8-3e08523e3a34)\r\n\r\n\r\nAfter:\r\n\r\n![bulk_actions_no_dupe](https://github.com/elastic/kibana/assets/56408403/01f76c6b-59fb-459f-8950-1fc1fe8dfe12)\r\n\r\n\r\n### Checklist\r\n\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":"8a1d2950fa16f8cb50a21cb793640a290b54032c"}}]}] BACKPORT--> Co-authored-by: Kevin Qualters <56408403+kqualters-elastic@users.noreply.github.com>
…g added by bulk actions select all (elastic#182007) ## Summary Related issue: elastic#181972 When the useBulkActions hook in the alerts table is used with the optionally defined at registration time hook useBulkActionsConfig, and that hook returns a stable array, the hook calls a function that mutates this array directly, which causes duplicate items to appear in the alert context menu. This is due to the useBulkActions hook using the bulk actions state via context, and so runs every time a user selects a row/all rows. Doing this via filter might not be the most performant way, but in order to have everything referentially stable, I think the arguments to useBulkActions/useBulkUntrackActions should be changed a bit, but that can be a discussion for another time. The test case added below will currently fail on main/8.14. Before: ![bulk_actions_with_dupe](https://github.com/elastic/kibana/assets/56408403/7f730bb9-fcb2-4a8e-93f8-3e08523e3a34) After: ![bulk_actions_no_dupe](https://github.com/elastic/kibana/assets/56408403/01f76c6b-59fb-459f-8950-1fc1fe8dfe12) ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
Summary
Related issue: #181972
When the useBulkActions hook in the alerts table is used with the optionally defined at registration time hook useBulkActionsConfig, and that hook returns a stable array, the hook calls a function that mutates this array directly, which causes duplicate items to appear in the alert context menu. This is due to the useBulkActions hook using the bulk actions state via context, and so runs every time a user selects a row/all rows. Doing this via filter might not be the most performant way, but in order to have everything referentially stable, I think the arguments to useBulkActions/useBulkUntrackActions should be changed a bit, but that can be a discussion for another time. The test case added below will currently fail on main/8.14.
Before:
After:
Checklist