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

fix(tooltip): fix potential NPE when setting option with notMerge strategy #20435

Merged
merged 4 commits into from
Oct 23, 2024

Conversation

ktx-abhay
Copy link
Contributor

@ktx-abhay ktx-abhay commented Oct 21, 2024

Brief Information

This pull request is in the type of:

  • bug fixing
  • new feature
  • others

What does this PR do?

Fixed issues

Details

Before: What was the problem?

After: How does it behave after the fixing?

Document Info

One of the following should be checked.

  • This PR doesn't relate to document changes
  • The document should be updated later
  • The document changes have been made in apache/echarts-doc#xxx

Misc

ZRender Changes

  • This PR depends on ZRender changes (ecomfe/zrender#xxx).

Related test cases or examples to use the new APIs

N.A.

Others

Merging options

  • Please squash the commits into a single one when merging.

Other information

Copy link

echarts-bot bot commented Oct 21, 2024

Thanks for your contribution!
The community will review it ASAP. In the meanwhile, please checkout the coding standard and Wiki about How to make a pull request.

⚠️ MISSING DOCUMENT INFO: Please make sure one of the document options are checked in this PR's description. Search "Document Info" in the description of this PR. This should be done either by the author or the reviewers of the PR.

Copy link
Contributor

github-actions bot commented Oct 22, 2024

The changes brought by this PR can be previewed at: https://echarts.apache.org/examples/editor?version=PR-20435@50b715b

@@ -461,15 +461,15 @@ class TooltipHTMLContent {

getSize() {
const el = this.el;
return [el.offsetWidth, el.offsetHeight];
return [el?.offsetWidth, el?.offsetHeight];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We try to avoid ?. in ECharts. Write explictly the expected value when el is not defined. Should it be something like el ? [el.offsetWidth, el.offsetHeight] : [0, 0] or what?

Copy link
Contributor Author

@ktx-abhay ktx-abhay Oct 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another reason is that ECharts will be eventually transpiled to ES3, and the optional chaining operator ?. will be polyfilled to:

return [el === null || el === void 0 ? void 0 : el.offsetWidth, el === null || el === void 0 ? void 0 : el.offsetHeight];

It causes an unexpected increment in code size, which ECharts tries to avoid until we target ECharts to ES2020.

src/component/tooltip/TooltipHTMLContent.ts Outdated Show resolved Hide resolved
Ovilia
Ovilia previously approved these changes Oct 22, 2024
Ovilia
Ovilia previously approved these changes Oct 22, 2024
@Ovilia
Copy link
Contributor

Ovilia commented Oct 22, 2024

We sincerely appreciate your valuable contributions! We are currently running a special promotion for users who submit a Pull Request between September 25, 2024, and December 31, 2024. Eligible participants will receive a two-year enterprise membership to Baidu Comate (Please note that in order to register Comate, you need to have a phone number in China due to local regulations), valued at 2000 RMB (approximately 285 USD).

To learn more about this product, please visit https://comate.baidu.com/. If you are interested in this offer, kindly send an email with the link to your Pull Request along with your Comate username and email address to ovilia@apache.org to claim your membership.

Thank you once again for your support!

}

moveTo(zrX: number, zrY: number) {
const styleCoord = this._styleCoord;
makeStyleCoord(styleCoord, this._zr, this._container, zrX, zrY);

if (styleCoord[0] != null && styleCoord[1] != null) {
const style = this.el.style;
const style: any = this.el ? (this.el.style || {}) : {};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Falling el.style back to {} makes no sense. It just circumvents those errors and causes unnecessary invoking. I would suggest:

moveTo(zrX: number, zrY: number) {
  if (!this.el) {
    return;
  }
  // ...
}

@plainheart plainheart changed the title fix: Cannot read properties of null (reading 'offsetWidth') when using notMerge fix(tooltip): fix potential NPE when setting option with notMerge strategy Oct 23, 2024
@plainheart plainheart merged commit ecebf65 into apache:master Oct 23, 2024
2 checks passed
Copy link

echarts-bot bot commented Oct 23, 2024

Congratulations! Your PR has been merged. Thanks for your contribution! 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug] Cannot read properties of null (reading 'offsetWidth') when using notMerge
3 participants