Skip to content
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

Remove react/no-array-index-key comments #3273

Open
marcalexiei opened this issue Jan 24, 2023 · 8 comments · May be fixed by gptkrsh/LinkFree#509 or gptkrsh/LinkFree#520
Open

Remove react/no-array-index-key comments #3273

marcalexiei opened this issue Jan 24, 2023 · 8 comments · May be fixed by gptkrsh/LinkFree#509 or gptkrsh/LinkFree#520
Labels
bug General bug label good first issue Issues with this label are great for first time contributors refactor PRs that refactor existing code

Comments

@marcalexiei
Copy link
Contributor

Follow to discussion in #3270

For every eslint-disable-next-line react/no-array-index-key we should find a valid string or number instead of using an index

@nikolasrieble nikolasrieble added refactor PRs that refactor existing code bug General bug label labels Jan 24, 2023
@ckifer ckifer added the good first issue Issues with this label are great for first time contributors label Aug 30, 2023
nikolasrieble pushed a commit that referenced this issue Nov 27, 2023
…3997)

## Description
- [x] use values in keys in-place-of indexes in `polar/Pie` and
`cartesian/Bar` components

## Related Issue
[3273](#3273)

## Motivation and Context
- contribute to the repo

## How Has This Been Tested?
- [x] all existing unit tests pass (_no new `duplicate key` errors are
present as a result_)

## Types of changes
- [x] Technical Cleanup 

## Checklist:
- [x] My code follows the code style of this project.
- [x] All new and existing tests passed.
ckifer pushed a commit that referenced this issue Nov 29, 2023
## Description
Set the `key` property on several components, removing the `index` and
the eslint-ignore comments.

## Related Issue
[3273](#3273)

## Motivation and Context
Contribute without breaking anything

## How Has This Been Tested?
- [x] all existing unit tests pass

## Types of changes
- [x] code cleanup

## Checklist:
- [x] My code follows the code style of this project.
- [x] All new and existing tests passed
- ~~My change requires a change to the documentation.~~
- ~~I have updated the documentation accordingly.~~
- ~~I have added tests to cover my changes.~~
- ~~I have added a storybook story or extended an existing story to show
my changes~~
@ckifer
Copy link
Member

ckifer commented Nov 30, 2023

After changing some of these lint warnings there are quite a few instances of this throwing non-unique key warnings as shown in #4004

pie sectors, legend items, tooltip items (anything that has been changed recently).

It seems storybook swallows these errors so its easier to identify them in the storybook. CC @imagineLife

ckifer pushed a commit that referenced this issue Dec 1, 2023
## Description
In pursuit of removing all `no-array-index-key` lint-skipping instances,
some keys are more complicate to set, particularly
- Labels
- Tooltips
- Pie segments

## Related Issue
[4004](#4004)  
[3273](#3273)  

## Motivation and Context
_Remove immediately-discovered console warnings based on demo charts_.  

## How Has This Been Tested?
- [x] manual usage of demo charts
- [x] unit tests are still passing

## Types of changes

- [x] "Bug" fix (non-breaking change which fixes an issue)

## Checklist:
- [x] My code follows the code style of this project.
- [x] All new and existing tests passed.
renovate bot added a commit to SAP/ui5-webcomponents-react that referenced this issue Jan 10, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [recharts](https://togithub.com/recharts/recharts) | [`2.10.3` ->
`2.10.4`](https://renovatebot.com/diffs/npm/recharts/2.10.3/2.10.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.10.3/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.10.3/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>recharts/recharts (recharts)</summary>

###
[`v2.10.4`](https://togithub.com/recharts/recharts/releases/tag/v2.10.4)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.10.3...v2.10.4)

#### What's Changed

Fix some older bugs annoying bugs, TS typings, update to the storybook
theme, and more

##### Fix

- `ResponsiveContainer`: fix `ref.current.current` without breaking
users using current implementation by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#4008
- closes
[recharts/recharts#3718
- `Brush`: Allow Brush to be controlled with start and end index via
state by [@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4034
- closes
[recharts/recharts#2404
- `Legend`: TypeScript - Add the dataKey type to legend props by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#4035
- closes
[recharts/recharts#2909
- `Pie`: TypeScript - added `payload` to `PieSectorDataItem` type by
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) in
[recharts/recharts#4030
- `Pie`: unique sector keys fix by
[@&#8203;imagineLife](https://togithub.com/imagineLife) in
[recharts/recharts#4009
closes
[recharts/recharts#3273
- `RadialBar`: allow className to be passed to Radial Bar background by
[@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4027
- closes
[recharts/recharts#4011

##### Storybook

- Storybook: Added Legend component story! by
[@&#8203;AnujSharma141](https://togithub.com/AnujSharma141) in
[recharts/recharts#4039
- Storybook: add controlled brush storybook entry by
[@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4032
- Storybook: Custom Storybook theme for Recharts brand by
[@&#8203;csdiehl](https://togithub.com/csdiehl) in
[recharts/recharts#4016

#### New Contributors

- [@&#8203;csdiehl](https://togithub.com/csdiehl) made their first
contribution in
[recharts/recharts#4016
- [@&#8203;AnujSharma141](https://togithub.com/AnujSharma141) made their
first contribution in
[recharts/recharts#4039

**Full Changelog**:
recharts/recharts@v2.10.3...v2.10.4

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/SAP/ui5-webcomponents-react).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@BuddhikaGeasman
Copy link

@ckifer If this is not resolved yet. Any chance I could take it?

@ckifer
Copy link
Member

ckifer commented Jan 19, 2024

@BuddhikaGeasman there was a recent report of an issue in the latest comments here #4004

If you can find the error mentioned there that would be more important than removing these lint ignores. I actually think removing these ignores is impossible without re-thinking some things. Any time we use data to try and address these there are duplicate key errors

(But yes, any contributions are welcome of course!)

@DrJShoff
Copy link

This error also appears in scatter chart when dots are drawn on top of each other. This causes duplications of dots if the chart is resized or the data updated as the chart can't keep track of all dots as they have the same key.

@imagineLife
Copy link
Contributor

imagineLife commented Jan 27, 2024

Perhaps components that render chartable items should have (more) required unique props.

Uniquely Identify Items

One recurring error in duplicate keys is revealed when 2 chartable items (pie slices, dots on a scatter, bars, could be more) have the same cartable "data": x values, y values, etc.

One idea to tackle this seems to be set more required props for renderable elements: something like a "name", or "id". There does not seem to be enough required props that an be leveraged for a unique key when iterating over data to render.

Another idea could be to add a required prop called uniqueId (or key or something) where developers who use recharges must bring-their-own key to recharts. This approach would perhaps be a bit more “breaking”. Recharts, as the library, would “pass along” the key provided by the developer to the charting rendering. The benefit here would be that recharts stops “caring about" the key the way it is currently trying to.

@ckifer
Copy link
Member

ckifer commented Jan 28, 2024

Imo we should only put this burden on the consumer if they are iterating through things themselves. If we iterate, we need to be the ones who ensure keys are unique.

set more required props for renderable elements

The consumer shouldn't have to have more data in their data in order to render a chart without errors

developers who use recharts must bring-their-own key to recharts

This doesn't work because that key will be the same for every element of every component giving us the same problem we currently have

Not really sure of a great way - we can hash the whole object but that has the same chances of collision. We can generate a UUID based of the object but same thing, we can use a UUID but that negates the purpose...

@imagineLife
Copy link
Contributor

hey @ckifer thanks for the detailed reply! 😄

I do think iterating over items is such a normal practice for react developers that "passing along" the unique-key react "problem" along to the developer could work out one way or another. I do also get that recharts is doing the mapping, not consumers explicitly - it would be nice (&/or expected?!) if recharts could handle the mapping without the index - based on the data &/or some other uniquely-identifying prop(s) per element.
(I also happen to know that other react-charting libs use the index too, so at least recharts is not alone here 😵)

@ckifer
Copy link
Member

ckifer commented Jan 31, 2024

I agree and users can do mapping themselves in some components using Cell.

I guess what I want to drive home is that we need tests that protect against these errors before we can make changes like this. Not that I don't want to or we shouldn't, but we need a guarantee for all valid cases that the key we create is actually unique

renovate bot added a commit to specfy/specfy that referenced this issue Feb 21, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [recharts](https://togithub.com/recharts/recharts) | [`2.9.3` ->
`2.12.1`](https://renovatebot.com/diffs/npm/recharts/2.9.3/2.12.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.9.3/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.9.3/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>recharts/recharts (recharts)</summary>

###
[`v2.12.1`](https://togithub.com/recharts/recharts/releases/tag/v2.12.1)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.12.0...v2.12.1)

#### What's Changed

Unintentional regression broke panoramic/compact Brush in 2.11.0 and
2.12.0, backport the fix to 2.x as we work on 3.x

##### Fix

- fix: compact render should read from context, fixes brush panorama by
[@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4194
fixes
[recharts/recharts#4193

**Full Changelog**:
recharts/recharts@v2.12.0...v2.12.1

###
[`v2.12.0`](https://togithub.com/recharts/recharts/releases/tag/v2.12.0)

[Compare
Source](https://togithub.com/recharts/recharts/compare/36c14c63d271d05b701e1d32ac931de0fd30b360...v2.12.0)

#### What's Changed

Bug fixes and a few small new features.

Releasing 2.12.0 to create a "clean slate" as contributors are
discussing next moves for recharts.

We will try to focus on upgrades, architectural changes, and
long-pending breaking changes so we can release a recharts v3. This will
not be a large major version, or one hard to upgrade to, but rather a
major version bump to prevent us from breaking people with library
upgrades, large refactors, etc. Feature parity should hold. Thanks!

#### Features

- `Bar`: Accept a callback function for `minPointSize` so it can be
determined by data by [@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4099
closes
[recharts/recharts#2819
- `Accessibility`: Enable screen reader support with accessibilityLayer
and default tooltip by
[@&#8203;julianna-langston](https://togithub.com/julianna-langston) in
[recharts/recharts#4077

#### Fix

- `Bar`: `activeBar` should not be true by default, fixes a breaking
change from 2.9.0 by [@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4139
- fixes
[recharts/recharts#4103
and
[recharts/recharts#4101
- `Scatter`: fix non-unique key errors by
[@&#8203;imagineLife](https://togithub.com/imagineLife) in
[recharts/recharts#4087
- fixes
[recharts/recharts#4151
and
[recharts/recharts#4060
- `Pie`: fix non-unique key errors by
[@&#8203;imagineLife](https://togithub.com/imagineLife) in
[recharts/recharts#4106
- `Tooltip`: fix bug that caused throttled tooltip to stay active when
moving mouse quickly by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#4100
fixes
[recharts/recharts#4093

#### Chore

- Cleanup, tests, and refactoring work. Thanks
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek)
- Upgrade react smooth, remove `translateStyle`, remove prop-types as a
peerDep
- **NOTE**: animations will no longer have browser prefixes on them.
Browsers have good support for this
(https://caniuse.com/?search=transforms)
-   Upgrade dev dependencies
    -   Upgrade TypeScript to 4.9.5 (no definition changes from upgrade)

#### Storybook

-   New storybook stories and doc updates

#### New Contributors

- [@&#8203;TRFielder](https://togithub.com/TRFielder) made their first
contribution in
[recharts/recharts#4088

**Full Changelog**:
recharts/recharts@v2.11...v2.12.0

###
[`v2.11.0`](https://togithub.com/recharts/recharts/compare/v2.10.4...36c14c63d271d05b701e1d32ac931de0fd30b360)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.10.4...36c14c63d271d05b701e1d32ac931de0fd30b360)

###
[`v2.10.4`](https://togithub.com/recharts/recharts/releases/tag/v2.10.4)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.10.3...v2.10.4)

#### What's Changed

Fix some older bugs annoying bugs, TS typings, update to the storybook
theme, and more

##### Fix

- `ResponsiveContainer`: fix `ref.current.current` without breaking
users using current implementation by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#4008
- closes
[recharts/recharts#3718
- `Brush`: Allow Brush to be controlled with start and end index via
state by [@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4034
- closes
[recharts/recharts#2404
- `Legend`: TypeScript - Add the dataKey type to legend props by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#4035
- closes
[recharts/recharts#2909
- `Pie`: TypeScript - added `payload` to `PieSectorDataItem` type by
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) in
[recharts/recharts#4030
- `Pie`: unique sector keys fix by
[@&#8203;imagineLife](https://togithub.com/imagineLife) in
[recharts/recharts#4009
closes
[recharts/recharts#3273
- `RadialBar`: allow className to be passed to Radial Bar background by
[@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4027
- closes
[recharts/recharts#4011

##### Storybook

- Storybook: Added Legend component story! by
[@&#8203;AnujSharma141](https://togithub.com/AnujSharma141) in
[recharts/recharts#4039
- Storybook: add controlled brush storybook entry by
[@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#4032
- Storybook: Custom Storybook theme for Recharts brand by
[@&#8203;csdiehl](https://togithub.com/csdiehl) in
[recharts/recharts#4016

#### New Contributors

- [@&#8203;csdiehl](https://togithub.com/csdiehl) made their first
contribution in
[recharts/recharts#4016
- [@&#8203;AnujSharma141](https://togithub.com/AnujSharma141) made their
first contribution in
[recharts/recharts#4039

**Full Changelog**:
recharts/recharts@v2.10.3...v2.10.4

###
[`v2.10.3`](https://togithub.com/recharts/recharts/releases/tag/v2.10.3)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.10.2...v2.10.3)

#### What's Changed

- Fix non-unique react `key` bug(s) by
[@&#8203;imagineLife](https://togithub.com/imagineLife) in
[recharts/recharts#4006
- closes
[recharts/recharts#4004

#### New Contributors

- [@&#8203;hkmarques](https://togithub.com/hkmarques) made their first
contribution in
[recharts/recharts#4002

**Full Changelog**:
recharts/recharts@v2.10.2...v2.10.3

###
[`v2.10.2`](https://togithub.com/recharts/recharts/releases/tag/v2.10.2)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.10.1...v2.10.2)

#### What's Changed

Patch some bugs from 2.9 / 2.10

##### Fix

- `Tooltip`: Fix tooltip rendering crash when activeItem is undefined by
[@&#8203;tran-simon](https://togithub.com/tran-simon) in
[recharts/recharts#3982
- `Cursor`: should no longer show gray background on hover where there
was none previously
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#3992
- `Tooltip`: show tooltip when `data` prop is on individual cartesian
component by [@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo)
in
[recharts/recharts#3988
- `LabelList` - TypeScript: LabelList offset prop issue by
[@&#8203;ckifer](https://togithub.com/ckifer) in
[recharts/recharts#3999

##### Accessibility

- `Brush`: set default aria-label and allow value override by
[@&#8203;enriquetamames-cpi](https://togithub.com/enriquetamames-cpi) in
[recharts/recharts#3950

##### Refactor / Cleanup

- Removing some eslint errors for "no array index key" by
[@&#8203;imagineLife](https://togithub.com/imagineLife)

#### New Contributors

- [@&#8203;tran-simon](https://togithub.com/tran-simon) made their first
contribution in
[recharts/recharts#3982
- [@&#8203;enriquetamames-cpi](https://togithub.com/enriquetamames-cpi)
made their first contribution in
[recharts/recharts#3950

**Full Changelog**:
recharts/recharts@v2.10.1...v2.10.2

###
[`v2.10.1`](https://togithub.com/recharts/recharts/releases/tag/v2.10.1):
Patch: Do not include types from test folder

[Compare
Source](https://togithub.com/recharts/recharts/compare/15328ec11b78968c847b43b646767b7b0c0d9e36...v2.10.1)

Fixes
[recharts/recharts#3978

**Full Changelog**:
recharts/recharts@v2.10...v2.10.1

###
[`v2.10.0`](https://togithub.com/recharts/recharts/compare/v2.9.3...15328ec11b78968c847b43b646767b7b0c0d9e36)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.9.3...15328ec11b78968c847b43b646767b7b0c0d9e36)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 4pm every weekday" in timezone
Europe/Paris, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/specfy/specfy).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44MS4zIiwidXBkYXRlZEluVmVyIjoiMzcuMjAwLjAiLCJ0YXJnZXRCcmFuY2giOiJjaG9yZS9yZW5vdmF0ZUJhc2VCcmFuY2gifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug General bug label good first issue Issues with this label are great for first time contributors refactor PRs that refactor existing code
Projects
None yet
6 participants