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
Fix tooltip rendering crash when activeItem is undefined #3982
Conversation
activeItem != null && | ||
(isFunnel(graphicalItem, activeItem) || | ||
isPie(graphicalItem, activeItem) || | ||
isScatter(graphicalItem, activeItem)) |
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.
instead of doing it this way could we add the check in each is..
function?
That way this is never an issue elsewhere that those typeguards are used.
so for example
export function isScatter(graphicalItem: GraphicalItem, _item: unknown): _item is ScatterItem {
return Boolean(_item) && 'points' in graphicalItem.props;
}
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.
Done
I opted for _item != null && ...
instead of Boolean(_item)
so that it does not fail if _item
is 0 or ''
I know that currently _item should be an object, but in case we change it in the future it's better if we only check for null or undefined
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.
cool, makes sense
8176735
to
79c33a5
Compare
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 the contribution
<!--- Provide a general summary of your changes in the Title above --> ## Description Sometimes, the tooltip rendering would crash when the window has been resized > TypeError: Cannot read properties of undefined (reading 'payload') This is due to a mistake in `getItemByXY` in `generateCategoricalChart.tsx`. https://github.com/recharts/recharts/blob/0d5326a8cdcad34a3b9d7c0644abbb645ddffe87/src/chart/generateCategoricalChart.tsx#L2250-L2252 https://github.com/recharts/recharts/blob/7fb227dae542c3d3093506e6d80a2c2c366f9a26/src/util/ActiveShapeUtils.tsx#L142-L152 `isFunnel`, `isPie` and `isScatter` do not check if `activeItem` is defined, so it might cast it as a defined `FunnelItem`/`PieItem`/`ScatterItem` even if `activeItem` is undefined <!--- Describe your changes in detail --> I've added a nullcheck for activeItem ## Related Issue recharts#3981 <!--- This project only accepts pull requests related to open issues --> <!--- If suggesting a new feature or change, please discuss it in an issue first --> <!--- If fixing a bug, there should be an issue describing it with steps to reproduce --> <!--- Please link to the issue here: --> ## Motivation and Context <!--- Why is this change required? What problem does it solve? --> This fixes a crash ## How Has This Been Tested? <!--- Please describe in detail how you tested your changes. --> <!--- Include details of your testing environment, and the tests you ran to --> <!--- see how your change affects other areas of the code, etc. --> I manually checked that the crash doesn't happen anymore ## Screenshots (if appropriate): <img width="1040" alt="image" src="https://github.com/recharts/recharts/assets/8755930/9c5eaf0d-0bf4-486d-94fb-ae77b0ba8878"> ## Types of changes <!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) ## Checklist: <!--- Go over all the following points, and put an `x` in all the boxes that apply. --> <!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> - [x] My code follows the code style of this project. - [x] My change requires a change to the documentation. - [x] I have updated the documentation accordingly. - [x] I have added tests to cover my changes. - [x] I have added a storybook story or extended an existing story to show my changes - [x] All new and existing tests passed.
[![Mend Renovate logo banner](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.1` -> `2.10.2`](https://renovatebot.com/diffs/npm/recharts/2.10.1/2.10.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.10.1/2.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.10.1/2.10.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>recharts/recharts (recharts)</summary> ### [`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 [@​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 [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#3992 - `Tooltip`: show tooltip when `data` prop is on individual cartesian component by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#3988 - `LabelList` - TypeScript: LabelList offset prop issue by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#3999 ##### Accessibility - `Brush`: set default aria-label and allow value override by [@​enriquetamames-cpi](https://togithub.com/enriquetamames-cpi) in [recharts/recharts#3950 ##### Refactor / Cleanup - Removing some eslint errors for "no array index key" by [@​imagineLife](https://togithub.com/imagineLife) #### New Contributors - [@​tran-simon](https://togithub.com/tran-simon) made their first contribution in [recharts/recharts#3982 - [@​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 </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:eyJjcmVhdGVkSW5WZXIiOiIzNy41OS44IiwidXBkYXRlZEluVmVyIjoiMzcuNTkuOCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![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 [@​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 [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4099 closes [recharts/recharts#2819 - `Accessibility`: Enable screen reader support with accessibilityLayer and default tooltip by [@​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 [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4139 - fixes [recharts/recharts#4103 and [recharts/recharts#4101 - `Scatter`: fix non-unique key errors by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4087 - fixes [recharts/recharts#4151 and [recharts/recharts#4060 - `Pie`: fix non-unique key errors by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4106 - `Tooltip`: fix bug that caused throttled tooltip to stay active when moving mouse quickly by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4100 fixes [recharts/recharts#4093 #### Chore - Cleanup, tests, and refactoring work. Thanks [@​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 - [@​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 [@​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 [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4034 - closes [recharts/recharts#2404 - `Legend`: TypeScript - Add the dataKey type to legend props by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4035 - closes [recharts/recharts#2909 - `Pie`: TypeScript - added `payload` to `PieSectorDataItem` type by [@​PavelVanecek](https://togithub.com/PavelVanecek) in [recharts/recharts#4030 - `Pie`: unique sector keys fix by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4009 closes [recharts/recharts#3273 - `RadialBar`: allow className to be passed to Radial Bar background by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4027 - closes [recharts/recharts#4011 ##### Storybook - Storybook: Added Legend component story! by [@​AnujSharma141](https://togithub.com/AnujSharma141) in [recharts/recharts#4039 - Storybook: add controlled brush storybook entry by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4032 - Storybook: Custom Storybook theme for Recharts brand by [@​csdiehl](https://togithub.com/csdiehl) in [recharts/recharts#4016 #### New Contributors - [@​csdiehl](https://togithub.com/csdiehl) made their first contribution in [recharts/recharts#4016 - [@​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 [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4006 - closes [recharts/recharts#4004 #### New Contributors - [@​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 [@​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 [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#3992 - `Tooltip`: show tooltip when `data` prop is on individual cartesian component by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#3988 - `LabelList` - TypeScript: LabelList offset prop issue by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#3999 ##### Accessibility - `Brush`: set default aria-label and allow value override by [@​enriquetamames-cpi](https://togithub.com/enriquetamames-cpi) in [recharts/recharts#3950 ##### Refactor / Cleanup - Removing some eslint errors for "no array index key" by [@​imagineLife](https://togithub.com/imagineLife) #### New Contributors - [@​tran-simon](https://togithub.com/tran-simon) made their first contribution in [recharts/recharts#3982 - [@​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>
Description
Sometimes, the tooltip rendering would crash when the window has been resized
This is due to a mistake in
getItemByXY
ingenerateCategoricalChart.tsx
.recharts/src/chart/generateCategoricalChart.tsx
Lines 2250 to 2252 in 0d5326a
recharts/src/util/ActiveShapeUtils.tsx
Lines 142 to 152 in 7fb227d
isFunnel
,isPie
andisScatter
do not check ifactiveItem
is defined, so it might cast it as a definedFunnelItem
/PieItem
/ScatterItem
even ifactiveItem
is undefinedI've added a nullcheck for activeItem
Related Issue
#3981
Motivation and Context
This fixes a crash
How Has This Been Tested?
I manually checked that the crash doesn't happen anymore
Screenshots (if appropriate):
Types of changes
Checklist: