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 chat-link in end of line displays tooltip over text and not on link #29134

Merged
merged 8 commits into from
Oct 12, 2023
Merged

fix chat-link in end of line displays tooltip over text and not on link #29134

merged 8 commits into from
Oct 12, 2023

Conversation

teneeto
Copy link
Contributor

@teneeto teneeto commented Oct 10, 2023

Details

This PR seeks to address the reviews of a previously authored and closed PR
Referencing the leading solution #27817 (comment)

Add a new prop to Tooltip called shouldUseMultilinePositioning. This enables a new algorithm for finding the bounding box target for the tooltip. In the case where the target has wrapped onto multiple lines (e.g. it is a link in a chat window) then the link has multiple bounding boxes, and we want to show the tooltip against the one that the user is hovering over.

As part of this, extend Hoverable to pass the Event to its onHoverIn / onHoverOut callbacks.

Enable this new algorithm from BaseAnchorForCommentsOnly, which is the base class for links that show up in chat.

Fixed Issues

$ #27585
PROPOSAL: #27585

Tests

Referencing the leading solution #27817 (comment)

Action Performed:

On a platform with a mouse (i.e. not mobile):

Open the app
Open any report
Type in some text and at the end of line, add link with long text eg: Test test test test test test test test test test
Send the text, text should have text and link in first line and link should be continued in second line too. Adjust the window size to force the text to wrap if necessary.
Hover on link and observe that tooltip is displayed over text
Expected Result:
App should display tooltip over link on hover. The tooltip should appear over the same section of the link that the user is hovering over.

  • Verify that no errors appear in the JS console

Offline tests

QA Steps

  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android / native
    • Android / Chrome
    • iOS / native
    • iOS / Safari
    • MacOS / Chrome / Safari
    • MacOS / Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
Screen.Recording.2023-10-10.at.01.14.37.mov
Mobile Web - Chrome
Mobile Web - Safari
Desktop
iOS
Android

src/components/Tooltip/index.js Outdated Show resolved Hide resolved
src/components/Tooltip/index.js Outdated Show resolved Hide resolved
src/components/Tooltip/index.js Outdated Show resolved Hide resolved
@pecanoro pecanoro requested a review from a team October 10, 2023 09:02
@melvin-bot melvin-bot bot requested review from Li357 and removed request for a team October 10, 2023 09:03
@melvin-bot

This comment was marked as off-topic.

@pecanoro pecanoro requested review from pecanoro and s77rt and removed request for Li357 October 10, 2023 09:07
src/components/Tooltip/index.js Outdated Show resolved Hide resolved
src/components/Hoverable/index.js Outdated Show resolved Hide resolved
src/components/Tooltip/index.js Outdated Show resolved Hide resolved
@teneeto teneeto marked this pull request as ready for review October 11, 2023 08:41
@teneeto teneeto requested a review from a team as a code owner October 11, 2023 08:41
@melvin-bot melvin-bot bot removed the request for review from a team October 11, 2023 08:41
@melvin-bot
Copy link

melvin-bot bot commented Oct 11, 2023

@ Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@teneeto
Copy link
Contributor Author

teneeto commented Oct 11, 2023

Recheck

src/components/Tooltip/BaseTooltip.js Outdated Show resolved Hide resolved
src/components/Hoverable/index.js Outdated Show resolved Hide resolved
@teneeto
Copy link
Contributor Author

teneeto commented Oct 11, 2023

@s77rt It's all resolved, you can recheck. Thanks.

@s77rt
Copy link
Contributor

s77rt commented Oct 11, 2023

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified tests pass on all platforms & I tested again on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
  • I verified proper code patterns were followed (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
    • I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
    • I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
    • I verified the JSDocs style guidelines (in STYLE.md) were followed
  • If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • I verified that this PR follows the guidelines as stated in the Review Guidelines
  • I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
  • If a new component is created I verified that:
    • A similar component doesn't exist in the codebase
    • All props are defined accurately and each prop has a /** comment above it */
    • The file is named correctly
    • The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • The only data being stored in the state is data necessary for rendering and nothing else
    • For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
    • Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
    • All JSX used for rendering exists in the render method
    • The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
  • If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
  • If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
  • If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
  • If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
  • If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
  • If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
web.mov
Mobile Web - Chrome
Mobile Web - Safari
Desktop
desktop.mov
iOS
Android

@melvin-bot
Copy link

melvin-bot bot commented Oct 11, 2023

🎯 @s77rt, thanks for reviewing and testing this PR! 🎉

An E/App issue has been created to issue payment here: #29397.

@s77rt
Copy link
Contributor

s77rt commented Oct 11, 2023

@teneeto Thanks!

@pecanoro pecanoro merged commit 9699988 into Expensify:main Oct 12, 2023
12 checks passed
@OSBotify
Copy link
Contributor

✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

@github-actions github-actions bot added the DeployBlockerCash This issue or pull request should block deployment label Oct 12, 2023
@github-actions
Copy link
Contributor

Performance Comparison Report 📊

Significant Changes To Duration

Name Duration
App start TTI 1176.143 ms → 1253.176 ms (+77.032 ms, +6.5%) 🔴
App start runJsBundle 792.099 ms → 852.275 ms (+60.176 ms, +7.6%) 🔴
Show details
Name Duration
App start TTI Baseline
Mean: 1176.143 ms
Stdev: 40.986 ms (3.5%)
Runs: 1102.0262310002 1102.4277570005506 1111.3088559992611 1111.464168999344 1112.4847219996154 1113.3480319995433 1119.4084200002253 1121.8397410009056 1123.229295000434 1123.3712140005082 1127.4697820004076 1128.4758819993585 1130.2481280006468 1133.2375980000943 1134.6738380007446 1135.270115999505 1138.6936019994318 1140.2048460002989 1141.229251999408 1141.7332969997078 1142.8987690005451 1143.8797169998288 1144.4938980005682 1147.5631060004234 1147.9213100001216 1148.04610699974 1148.3425179999322 1150.100556999445 1153.763422999531 1154.3029340002686 1156.5000069998205 1157.2359209991992 1159.3710229992867 1159.7495349999517 1160.3695149999112 1160.713960999623 1161.2744500003755 1161.5350819993764 1164.0653159990907 1164.0878769997507 1164.165256999433 1164.5114910006523 1166.3019929993898 1166.6763289999217 1167.2357609998435 1167.6863119993359 1167.7096629999578 1170.2838889993727 1171.7724990006536 1174.7193849999458 1175.3075990006328 1176.3591360002756 1177.7842999994755 1178.3657680004835 1182.9969260003418 1184.3327949997038 1185.1215259991586 1185.8128169998527 1187.3661310002208 1188.4238889999688 1191.1722950004041 1192.951425999403 1194.0717399995774 1194.4483209997416 1196.618143999949 1197.841378999874 1201.292514000088 1203.6027130000293 1203.6962410006672 1205.1833909992129 1205.667649999261 1207.3604489993304 1209.4801369998604 1212.5748529992998 1213.9020729996264 1215.4071839991957 1217.6223959997296 1225.3367609996349 1227.072288999334 1227.5137750003487 1231.6954379994422 1234.8759930003434 1235.9038389995694 1236.2207249999046 1239.142703000456 1240.6829989999533 1245.5057159997523 1255.3609849996865 1256.5662290006876 1265.8390989992768 1269.52942099981 1269.7548999991268

Current
Mean: 1253.176 ms
Stdev: 46.447 ms (3.7%)
Runs: 1146.22327000089 1165.9836880005896 1179.7267829999328 1180.835572000593 1180.838377000764 1183.8931840006262 1184.2496029995382 1184.541732000187 1184.8740229997784 1192.6744679994881 1197.1604779995978 1197.989523999393 1198.7303589992225 1202.7900169994682 1203.065163999796 1204.639414999634 1204.9397880006582 1208.1449849996716 1208.8314120005816 1213.5409399997443 1213.6453280001879 1214.9718769993633 1215.430168999359 1216.3029919993132 1221.8732760008425 1223.195613000542 1224.732899999246 1226.2006490007043 1227.0487719997764 1229.1574450004846 1230.2448900006711 1230.4212389998138 1230.6646020002663 1231.8055540006608 1232.7846140004694 1233.6990070007741 1234.894703000784 1238.958870999515 1240.0597719997168 1242.6692159995437 1246.644756000489 1246.7905199993402 1248.4183770008385 1250.9893709998578 1252.2647990006953 1252.3541420008987 1253.3728400003165 1254.483451999724 1255.149327000603 1255.9297429993749 1264.724647000432 1265.9226029999554 1266.3224160000682 1269.0811379998922 1269.4323350004852 1270.1857939995825 1272.0517159998417 1276.0173940006644 1277.374941000715 1279.2897159997374 1279.3173769991845 1279.3310630004853 1279.8291469998658 1281.7896619997919 1281.8038640003651 1281.958118999377 1282.3251210004091 1285.1424570009112 1286.3582160007209 1286.7281149998307 1290.6448490004987 1294.2225219998509 1297.5474079996347 1298.1898469999433 1299.409320000559 1300.5789570007473 1300.6395059991628 1305.922869000584 1306.3283559996635 1307.113517999649 1308.4882789999247 1309.0479979999363 1312.60899399966 1316.3475340008736 1317.387206999585 1320.0175940003246 1321.197329999879 1324.9196990001947 1339.6227690000087 1357.955181999132 1376.9874910004437
App start runJsBundle Baseline
Mean: 792.099 ms
Stdev: 29.626 ms (3.7%)
Runs: 729 732 734 740 742 747 750 753 754 757 757 758 759 760 760 762 764 766 766 766 767 768 769 770 770 771 772 773 773 775 776 776 779 780 781 782 783 784 786 786 788 788 789 790 790 790 791 791 792 792 795 796 800 803 803 806 806 806 808 808 809 810 811 811 812 812 813 813 813 816 817 817 818 819 820 821 823 823 826 826 829 831 833 834 836 837 840 843 843 849 867

Current
Mean: 852.275 ms
Stdev: 32.447 ms (3.8%)
Runs: 790 797 800 801 803 808 809 810 810 811 812 814 815 816 816 819 819 819 821 824 825 825 826 830 830 832 833 833 834 834 836 836 837 838 840 840 840 840 841 841 842 843 846 848 849 851 851 853 854 856 856 857 857 858 858 860 862 863 863 867 867 868 868 869 870 870 875 877 877 877 878 881 884 884 884 885 885 885 888 890 894 896 897 901 901 901 910 911 913 924 948

Meaningless Changes To Duration

Show entries
Name Duration
Open Search Page TTI 618.777 ms → 621.228 ms (+2.451 ms, ±0.0%)
App start nativeLaunch 21.412 ms → 22.589 ms (+1.177 ms, +5.5%)
App start regularAppStart 0.014 ms → 0.014 ms (+0.001 ms, +3.6%)
Show details
Name Duration
Open Search Page TTI Baseline
Mean: 618.777 ms
Stdev: 19.139 ms (3.1%)
Runs: 590.018799001351 592.0921229999512 592.934651998803 593.15356499888 593.1546640004963 593.2724200002849 593.625936999917 593.65893500112 593.8003339990973 597.8238129988313 598.0486660003662 598.0590009987354 599.7293299995363 600.0574549995363 600.0765380002558 600.1669930014759 601.5050060003996 601.746866999194 601.9514570012689 602.2627360001206 604.2894289996475 604.9045010004193 605.3740640003234 605.8728440012783 606.0252679996192 606.0609939992428 606.1664640009403 606.3692220002413 606.4690350014716 606.906086999923 607.5598140005022 607.81665099971 608.2449140008539 608.6845710016787 608.9489750005305 609.8688150011003 613.1885580010712 614.7438559997827 614.7893880009651 614.9054359998554 615.7405609991401 615.8261310011148 616.4243569988757 616.7416589986533 616.7827149983495 616.9868170004338 617.0570480003953 617.0801999997348 618.1038419995457 618.6394450012594 618.8116060011089 619.540608998388 620.2491459995508 623.0531419999897 623.0536299999803 623.6711839996278 624.4069010000676 624.6315930001438 625.0795900002122 625.5168459992856 625.797607999295 625.9726150017232 626.2150879986584 626.2391769997776 626.3379319999367 626.4558509998024 626.6012370008975 626.8151860013604 627.0097250007093 631.4152830000967 631.644532000646 631.7749840002507 635.2760020010173 635.8186449985951 637.2134610004723 641.1674400009215 641.9889330007136 647.3135989997536 648.6055920012295 649.5567220002413 649.7323819994926 651.3432620000094 656.6443290002644 659.3382980003953 663.5867519993335 665.046020001173 667.4842540007085 668.2609059996903

Current
Mean: 621.228 ms
Stdev: 17.881 ms (2.9%)
Runs: 593.4010419994593 594.1118170004338 596.4365640003234 597.9077149983495 598.0389409996569 598.1544190011919 599.1387939993292 600.6265059988946 601.4326579999179 601.6435550004244 602.7253830004483 604.3325199987739 606.2713220007718 606.7094730008394 606.7983400002122 606.8175869993865 606.8491620011628 607.2526450008154 607.434407999739 607.4487309996039 607.4628910012543 607.7694899998605 607.9870609994978 608.0961919985712 608.105835000053 608.109822999686 609.1420089993626 609.3185219988227 609.3737799990922 610.8176680002362 611.0135500002652 611.6881920006126 613.0567229986191 613.4171549994498 613.6511639989913 613.7167569994926 614.3081470001489 614.4249679986387 614.4850670006126 614.6275229994208 615.031006000936 615.2581789996475 615.2948409989476 616.3662919998169 616.7015790008008 616.8505049999803 616.875041000545 617.0235600005835 617.062784999609 617.3361010011286 617.4602049998939 617.8695890009403 617.9853109996766 619.4363609999418 620.234538000077 622.3837080001831 622.859416000545 623.7536209989339 624.1659750007093 624.2202160004526 625.6762290000916 627.8334149997681 628.0710860006511 628.1022539995611 630.0262449998409 630.3239350002259 630.8668620008975 631.0658369995654 631.4701339993626 633.3430989999324 634.0539549998939 634.2510980013758 635.7631439995021 636.6980799995363 637.7498790007085 639.1791990008205 639.8304439987987 643.2756350003183 643.8081870004535 645.9453539997339 647.2912200000137 651.6815600004047 652.590779999271 654.3258459996432 654.5919599998742 656.6058360002935 663.9387209992856 664.4827469997108 666.2874349988997 673.1270759999752
App start nativeLaunch Baseline
Mean: 21.412 ms
Stdev: 2.676 ms (12.5%)
Runs: 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 23 23 23 23 23 23 23 24 24 25 26 26 26 26 26 27 27 27 27 28 28 28

Current
Mean: 22.589 ms
Stdev: 3.574 ms (15.8%)
Runs: 18 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 23 23 23 23 23 23 23 23 23 23 23 24 24 24 24 24 25 25 25 26 27 27 27 27 28 28 28 28 29 30 30 30 30 31 31 31 31
App start regularAppStart Baseline
Mean: 0.014 ms
Stdev: 0.001 ms (6.6%)
Runs: 0.012043999508023262 0.01228800043463707 0.012450998649001122 0.012613998726010323 0.012654000893235207 0.012654999271035194 0.012818001210689545 0.01285799965262413 0.013102000579237938 0.013102000579237938 0.013102000579237938 0.01314299926161766 0.01314299926161766 0.013182999566197395 0.013183001428842545 0.013183999806642532 0.013184001669287682 0.013224000111222267 0.013225000351667404 0.013305999338626862 0.013305999338626862 0.01330600120127201 0.013345999643206596 0.013345999643206596 0.013345999643206596 0.013387000188231468 0.013387000188231468 0.013426998630166054 0.013427000492811203 0.01342800073325634 0.01342800073325634 0.013468001037836075 0.013508999720215797 0.013508999720215797 0.01355000026524067 0.01355000026524067 0.013590998947620392 0.013630999252200127 0.013671999797224998 0.013672001659870148 0.013712000101804733 0.013712000101804733 0.013712000101804733 0.01371300034224987 0.01371300034224987 0.0138349998742342 0.013875000178813934 0.013915998861193657 0.013916000723838806 0.013916000723838806 0.013956001028418541 0.013956999406218529 0.013957001268863678 0.0139979999512434 0.014038000255823135 0.014038000255823135 0.014038000255823135 0.014078998938202858 0.01411999948322773 0.014241000637412071 0.014242000877857208 0.014281999319791794 0.014282001182436943 0.014322001487016678 0.0143630001693964 0.014364000409841537 0.01452699862420559 0.014567000791430473 0.014688998460769653 0.014810999855399132 0.01489199884235859 0.014932999387383461 0.014973999932408333 0.014973999932408333 0.014973999932408333 0.01505500078201294 0.015096001327037811 0.015137000009417534 0.015137000009417534 0.015259001404047012 0.015461999922990799 0.015625 0.0157880000770092 0.01590999960899353 0.016397999599575996 0.016397999599575996 0.01643799990415573

Current
Mean: 0.014 ms
Stdev: 0.001 ms (6.3%)
Runs: 0.0125730000436306 0.012818001210689545 0.012899000197649002 0.013062000274658203 0.013225000351667404 0.013305999338626862 0.013346999883651733 0.013346999883651733 0.013346999883651733 0.013427000492811203 0.01342800073325634 0.01342800073325634 0.013467999175190926 0.013468999415636063 0.013508999720215797 0.01355000026524067 0.013590000569820404 0.013630999252200127 0.013630999252200127 0.013631001114845276 0.013632001355290413 0.013671999797224998 0.013712000101804733 0.01371300034224987 0.013753000646829605 0.013794001191854477 0.013833999633789062 0.0138349998742342 0.013875000178813934 0.013916000723838806 0.013955999165773392 0.013956999406218529 0.014038000255823135 0.014038000255823135 0.014119001105427742 0.014159999787807465 0.014159999787807465 0.014241000637412071 0.014241000637412071 0.014281999319791794 0.014322999864816666 0.014363998547196388 0.014364000409841537 0.014364000409841537 0.014403998851776123 0.014485001564025879 0.014485999941825867 0.014567000791430473 0.014567000791430473 0.014607999473810196 0.01464799977838993 0.014649000018835068 0.014689000323414803 0.01469000056385994 0.01469000056385994 0.014730000868439674 0.014771001413464546 0.014810999855399132 0.014810999855399132 0.014812000095844269 0.014851000159978867 0.014852000400424004 0.014892999082803726 0.014933999627828598 0.015014000236988068 0.015014000236988068 0.015095999464392662 0.015095999464392662 0.015136001631617546 0.015177000313997269 0.015298999845981598 0.015421999618411064 0.015421999618411064 0.015461999922990799 0.01550300046801567 0.015543000772595406 0.015665000304579735 0.015666000545024872 0.015706000849604607 0.015706000849604607 0.015706999227404594 0.0157880000770092 0.01590999960899353 0.016193998977541924 0.01635800115764141 0.016439000144600868 0.01729400083422661

@github-actions
Copy link
Contributor

@Expensify/mobile-deployers 📣 Please look into this performance regression as it's a deploy blocker.

// multiple lines, we want to show the tooltip over the part
// of the link that the user is hovering over.
const betterBounds = chooseBoundingBox(target.current, initialMousePosition.current.x, initialMousePosition.current.y);
setWrapperWidth(betterBounds.width);
Copy link
Contributor

Choose a reason for hiding this comment

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

I believe this is leading to a crash with Uncaught TypeError: Cannot read properties of undefined (reading 'width'). This is what I did:

  1. Sign in with a new account
  2. Go to Settings > Workspaces > Create New Workspace (don't create anything)
  3. Click the back button on the modal
    image

image

Copy link
Contributor

Choose a reason for hiding this comment

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

Yes it's, more info #29446 (comment) and PR fixing it #29468

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/pecanoro in version: 1.3.84-0 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 success ✅
🕸 web 🕸 success ✅

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/francoisl in version: 1.3.84-10 🚀

platform result
🤖 android 🤖 skipped 🚫
🖥 desktop 🖥 skipped 🚫
🍎 iOS 🍎 skipped 🚫
🕸 web 🕸 skipped 🚫

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/francoisl in version: 1.3.84-10 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 failure ❌
🕸 web 🕸 success ✅

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/pecanoro in version: 1.3.85-0 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 success ✅
🕸 web 🕸 success ✅

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/francoisl in version: 1.3.85-4 🚀

platform result
🤖 android 🤖 success ✅
🖥 desktop 🖥 success ✅
🍎 iOS 🍎 failure ❌
🕸 web 🕸 success ✅

const initialMousePosition = useRef({x: 0, y: 0});

const updateTargetAndMousePosition = useCallback((e) => {
target.current = e.target;
Copy link
Contributor

Choose a reason for hiding this comment

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

We should have used the currentTarget (the element that is listening to the mouse enter event) instead of target (the element that caused the event to fire and bubble up). Coming from #29678

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
DeployBlockerCash This issue or pull request should block deployment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants