fix(row-action-menu): avoid duplicate key 'edit' when consumer supplies custom action #1458
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Prevents React key collisions in
MRT_RowActionMenu
when a consumer supplies a custom action withkey="edit"
whileenableEditing
also injects the built-in Edit action. If a custom"edit"
exists, the built-in one is skipped.Problem
When
enableEditing
is on (witheditDisplayMode
of"modal"
or"row"
),MRT_RowActionMenu
adds an Edit action withkey="edit"
. If the consumer also returns an item withkey="edit"
fromrenderRowActionMenuItems
, React warns and may misbehave:Reproduction (before)
Result: React duplicate key warning and potentially duplicated/omitted children.
Fix (after)
Before creating the built-in Edit action, check the items returned by
renderRowActionMenuItems
for an element withkey === 'edit'
. If present, do not add the internal Edit action.Impact
"edit"
is provided.rowActionMenuItems
; negligible overhead.Manual Verification
Enable editing with
editDisplayMode="row"
or"modal"
.Return a custom action with
key="edit"
fromrenderRowActionMenuItems
.Confirm:
Remove the custom
"edit"
action and confirm the built-in Edit still renders as before.Notes
isValidElement
to safely access.key
onReactNode
s.Checklist
MRT_RowActionMenu