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

Disables timezone options if it is set to automatic #15176

Merged

Conversation

priyeshshah11
Copy link
Contributor

@priyeshshah11 priyeshshah11 commented Feb 15, 2023

Details

This PR disables all the timezone options in the list if timezone is set to automatic. It also adds componentDidUpdate in order to update the timezone options when automatic is toggled on/off as navigating back doesn't unmount the page, thus it won't update the timezone options & stay disabled without this.

Fixed Issues

$ #14340
PROPOSAL: #14340 (comment)

Tests

  1. Go to Settings -> Profile -> Timezone.
  2. Toggle ON automatic & add /select to the existing route in the browser.
  3. Now, try selecting items from the list - they should be disabled.
  4. Try searching for items in the list with your country/city name & verify it filters the list accordingly but the options are still not selectable
  5. Now go back.
  6. Toggle OFF automatic & click on the selected timezone.
  7. Try searching for items in the list with your country/city name & verify it filters the list accordingly and the options are now enabled.
  8. Now, try selecting an item from the list & verify it gets selected & you're navigated back.
  • Verify that no errors appear in the JS console

Offline tests

  1. Go to Settings -> Profile -> Timezone.
  2. Toggle OFF automatic & click on the selected timezone.
  3. Try searching for items in the list with your country/city name & verify it filters the list accordingly and the options are now enabled.
  4. Now, try selecting an item from the list & verify it gets selected & you're navigated back.
  • Verify that no errors appear in the JS console

You won't be able to go to the timezone options page by modifying the URL in offline mode

QA Steps

Same as Tests section

  • 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 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 correct English and 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
    • 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 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 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.
  • 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-02-16.at.4.03.10.AM.mov
Mobile Web - Chrome
timezone-chrome.mov
timzone-chrom-a.mov
Mobile Web - Safari
timezone-mweb.mov
Desktop
timezone-desktop.mov
iOS
timezone-ios.mov
Android
timezone-android.mov

@priyeshshah11 priyeshshah11 changed the title disabled timezone options if it is set to automatic Disables timezone options if it is set to automatic Feb 15, 2023
@priyeshshah11 priyeshshah11 marked this pull request as ready for review February 15, 2023 18:03
@priyeshshah11 priyeshshah11 requested a review from a team as a code owner February 15, 2023 18:03
@melvin-bot melvin-bot bot requested review from amyevans and mollfpr and removed request for a team February 15, 2023 18:04
@MelvinBot
Copy link

@amyevans @mollfpr One of you needs to 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]

@mollfpr
Copy link
Contributor

mollfpr commented Feb 16, 2023

There's a bug I found while testing this PR. Whenever I redirect to the select timezone page with automatic set to false, select a timezone. After the timezone is updated, go back to the select timezone page, not select the current timezone.

Simulator.Screen.Recording.-.iPhone.13.-.2023-02-16.at.22.06.07.mp4

Also, I confirm this already in staging, so no regression tied to this PR.

@mollfpr
Copy link
Contributor

mollfpr commented Feb 16, 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 / Chrome
    • iOS / native
    • iOS / 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 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 correct English and 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 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 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.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
15176.Web.mp4
Mobile Web - Chrome
15176.mWeb-Chrome.mp4
Mobile Web - Safari
15176.mWeb-Safari.mp4
Desktop
15176.Desktop.mp4
iOS
15176.iOS.mp4
Android
15176.Android.mp4

timezoneInputText: this.timezone.selected,
timezoneOptions: updatedAllTimezones,
});
}
Copy link
Contributor

Choose a reason for hiding this comment

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

@priyeshshah11 Why do we need this componentDidUpdate?

Copy link
Contributor

Choose a reason for hiding this comment

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

It also adds componentDidUpdate in order to update the timezone options when automatic is toggled on/off as navigating back doesn't unmount the page, thus it won't update the timezone options & stay disabled without this.

We should put that instead of // Update timezoneInputText & all timezoneOptions when the timezone object changes

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@mollfpr

It also adds componentDidUpdate in order to update the timezone options when automatic is toggled on/off as navigating back doesn't unmount the page, thus it won't update the timezone options & stay disabled without this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks @priyeshshah11 that will help to explain what's going on 👍

@amyevans amyevans requested review from tylerkaraszewski and removed request for amyevans February 16, 2023 15:41
@amyevans
Copy link
Contributor

Assigning @tylerkaraszewski since a bug caused me to be added to #14340 by mistake, but Tyler is CME on that GH, not me

// componentDidUpdate is added in order to update the timezone options when automatic is toggled on/off as
// navigating back doesn't unmount the page, thus it won't update the timezone options & stay disabled without this.
const newTimezone = lodashGet(this.props.currentUserPersonalDetails, 'timezone', CONST.DEFAULT_TIME_ZONE);
if (_.isEqual(this.timezone, newTimezone)) { return; }
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
if (_.isEqual(this.timezone, newTimezone)) { return; }
if (_.isEqual(this.timezone, newTimezone)) {
return;
}

@mollfpr
Copy link
Contributor

mollfpr commented Feb 16, 2023

@priyeshshah11 Is it possible to DRY the below codes?

lodashGet(props.currentUserPersonalDetails, 'timezone', CONST.DEFAULT_TIME_ZONE);
timezone => ({
                text: timezone,
                keyForList: timezone,

                // Include the green checkmark icon to indicate the currently selected value
                customIcon: timezone === this.timezone.selected ? greenCheckmark : undefined,

                // This property will make the currently selected value have bold text
                boldStyle: timezone === this.timezone.selected,
            })

Example:

    getUserTimezone(currentUserPersonalDetails) {
        return lodashGet(currentUserPersonalDetails, 'timezone', CONST.DEFAULT_TIME_ZONE);
    }

    formatTimezone(timezone) {
        return {
            text: timezone,

            keyForList: timezone,

            // Include the green checkmark icon to indicate the currently selected value
            customIcon: timezone === this.timezone.selected ? greenCheckmark : undefined,

            // This property will make the currently selected value have bold text
            boldStyle: timezone === this.timezone.selected,
        };
    }
-        this.timezone = lodashGet(props.currentUserPersonalDetails, 'timezone', CONST.DEFAULT_TIME_ZONE);
+        this.timezone = this.getUserTimezone(props.currentUserPersonalDetails);
         this.allTimezones = _.chain(moment.tz.names())
             .filter(timezone => !timezone.startsWith('Etc/GMT'))
-            .map(timezone => ({
-                text: timezone,
-                keyForList: timezone,
-
-                // Include the green checkmark icon to indicate the currently selected value
-                customIcon: timezone === this.timezone.selected ? greenCheckmark : undefined,
-
-                // This property will make the currently selected value have bold text
-                boldStyle: timezone === this.timezone.selected,
-            }))
+            .map(this.formatTimezone)
             .value();

         this.state = {
@@ -58,23 +49,36 @@ class TimezoneSelectPage extends Component {
     componentDidUpdate() {
         // componentDidUpdate is added in order to update the timezone options when automatic is toggled on/off as
         // navigating back doesn't unmount the page, thus it won't update the timezone options & stay disabled without this.
-        const newTimezone = lodashGet(this.props.currentUserPersonalDetails, 'timezone', CONST.DEFAULT_TIME_ZONE);
-        if (_.isEqual(this.timezone, newTimezone)) { return; }
+        const newTimezone = this.getUserTimezone(this.props.currentUserPersonalDetails);
+        if (_.isEqual(this.timezone, newTimezone)) {
+            return;
+        }
+
         this.timezone = newTimezone;
-        const updatedAllTimezones = _.map(this.allTimezones, timezone => ({
-            ...timezone,
+        const updatedAllTimezones = _.map(this.allTimezones, this.formatTimezone);
+
+        this.setState({
+            timezoneInputText: this.timezone.selected,
+            timezoneOptions: updatedAllTimezones,
+        });
+    }

@priyeshshah11
Copy link
Contributor Author

@mollfpr Thanks for that suggestion. I have refactored the get timezone part but not the formatTimezone part as I realised that there was an issue in that code where the timezone in both map represented different type of data.

Thus, I have refactored it to use the correct type of data in each map. I have also added a new getKey function to update the key which includes the timestamp in it as the options in the list weren't getting updated properly when going back & forth between the timezone pages. This fixes the bug that you found & mentioned here.

Let me know your thoughts on those changes! Thanks 😄

@priyeshshah11 priyeshshah11 requested review from mollfpr and removed request for tylerkaraszewski February 17, 2023 20:05
@priyeshshah11
Copy link
Contributor Author

Screen Shot 2023-02-18 at 7 14 24 AM

Sorry, I didn't mean to remove the review request for @tylerkaraszewski but re-requesting review from @mollfpr did it automatically & now I can't request from Tyler.

*/
getKey(text) {
return `${text}-${(new Date()).getTime()}`;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Could you add a description of why we are doing this?


// This property will make the currently selected value have bold text
boldStyle: text === this.timezone.selected,
};
Copy link
Contributor

Choose a reason for hiding this comment

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

We have a similar object structured within the constructor. We could probably create a function to return the object with a single argument.

@mollfpr
Copy link
Contributor

mollfpr commented Feb 19, 2023

Thanks for the update @priyeshshah11! It solves the issue I encountered before, just left with a comment.

@priyeshshah11
Copy link
Contributor Author

Thanks for the update @priyeshshah11! It solves the issue I encountered before, just left with a comment.

@mollfpr Done, refactored as requested 👍

mollfpr
mollfpr previously approved these changes Feb 19, 2023
Copy link
Contributor

@mollfpr mollfpr left a comment

Choose a reason for hiding this comment

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

LGTM 👍

@priyeshshah11
Copy link
Contributor Author

@mollfpr @tylerkaraszewski Are we waiting on anything here? Is there any action required from me?

@mollfpr
Copy link
Contributor

mollfpr commented Feb 22, 2023

@priyeshshah11 we just need to wait for @tylerkaraszewski to review this.

@mollfpr
Copy link
Contributor

mollfpr commented Feb 23, 2023

@priyeshshah11 Could you resolve the conflict? Thanks!

@priyeshshah11
Copy link
Contributor Author

@priyeshshah11 Could you resolve the conflict? Thanks!

Done @mollfpr

@mollfpr
Copy link
Contributor

mollfpr commented Feb 24, 2023

Bump @tylerkaraszewski for final review.

@mollfpr
Copy link
Contributor

mollfpr commented Feb 27, 2023

Bump @tylerkaraszewski for review.

@mollfpr mollfpr mentioned this pull request Feb 28, 2023
55 tasks
@tylerkaraszewski tylerkaraszewski merged commit 599c2b0 into Expensify:main Feb 28, 2023
@MelvinBot
Copy link

Congrats, that’s your 5th PR merged! 🎉 Do you know about the ContributorPlus role? It’s an opportunity to earn more in the Expensify Open Source community. Keep up the great work - thanks!

@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
Copy link
Contributor

Performance Comparison Report 📊

Significant Changes To Duration

Name Duration
Open Search Page TTI 611.042 ms → 670.139 ms (+59.097 ms, +9.7%) 🔴
Show details
Name Duration
Open Search Page TTI Baseline
Mean: 611.042 ms
Stdev: 19.571 ms (3.2%)
Runs: 572.6962489988655 588.2333990000188 589.1766360010952 590.2857670001686 590.3026119992137 592.7333990000188 593.1040449999273 596.582397999242 597.766114000231 598.5017909985036 601.0429689995944 603.1802570000291 603.9194339998066 604.0407309997827 605.1213380005211 606.5788569990546 606.71952399984 607.2382819987833 607.6459969989955 612.2621259987354 616.4203690011054 622.390829000622 622.8802490010858 624.1153569985181 626.1001379992813 626.3327639997005 629.0293790008873 633.152710000053 633.456421000883 635.3269449993968 654.9680989999324 662.0420740004629

Current
Mean: 670.139 ms
Stdev: 18.043 ms (2.7%)
Runs: 622.6558029986918 638.4752200003713 641.6689459998161 651.8703610002995 653.0636800006032 654.2376309987158 655.9472250007093 656.9170329999179 658.5491129998118 659.214883999899 661.347737999633 661.3604739997536 663.6889239996672 667.4766850005835 671.1613769996911 671.4017340000719 671.8024489991367 672.942383999005 675.8261719997972 676.7622890006751 677.6695559993386 679.0834560003132 679.194499000907 682.7205410003662 684.437826000154 688.5301109999418 688.8925369996578 691.519328000024 693.5059409998357 694.1195480003953 696.8811850007623 701.516072999686

Meaningless Changes To Duration

Show entries
Name Duration
App start TTI 710.316 ms → 727.650 ms (+17.333 ms, +2.4%)
App start runJsBundle 197.000 ms → 203.344 ms (+6.344 ms, +3.2%)
App start nativeLaunch 19.500 ms → 19.552 ms (+0.052 ms, ±0.0%)
App start regularAppStart 0.014 ms → 0.014 ms (+0.001 ms, +5.7%)
Show details
Name Duration
App start TTI Baseline
Mean: 710.316 ms
Stdev: 29.329 ms (4.1%)
Runs: 654.0150300003588 665.0860130004585 666.370257999748 674.4251680001616 678.0783890001476 680.8401100002229 686.9290050007403 687.6174030005932 687.6775219999254 688.8214100003242 700.2027250006795 701.8425799999386 701.925238000229 702.0669730007648 706.8452220000327 707.4605539999902 710.6752170007676 711.2239020001143 719.1500300001353 720.7911380007863 724.0592340007424 725.0336240008473 726.4126420002431 726.6131629999727 729.8036320004612 730.8354480005801 733.2920200005174 736.77400300093 746.9914980009198 752.2634200006723 754.2567960005254 791.7417970001698

Current
Mean: 727.650 ms
Stdev: 29.679 ms (4.1%)
Runs: 679.972453000024 682.4868989996612 684.1315720006824 690.6841299999505 691.4435719996691 696.5419950000942 700.9695660006255 702.332800000906 702.7982160001993 703.9233229998499 705.2557529993355 708.5891849994659 714.5789529997855 718.707098999992 722.5414129998535 726.1594120003283 729.2701639998704 733.8437179997563 734.5385710000992 741.2204379998147 741.6734730005264 743.8107149992138 746.4244100004435 747.0883079990745 748.8755329996347 760.6036639995873 760.9940649997443 763.2345049995929 769.9244730006903 770.5334239993244 779.9108509998769 781.7288540005684
App start runJsBundle Baseline
Mean: 197.000 ms
Stdev: 14.999 ms (7.6%)
Runs: 169 172 178 183 184 187 188 188 189 189 191 191 191 192 192 198 199 200 200 200 204 205 207 209 211 213 217 231 235

Current
Mean: 203.344 ms
Stdev: 20.907 ms (10.3%)
Runs: 172 174 178 179 182 183 185 185 187 189 190 190 192 193 197 197 199 201 204 205 209 216 218 221 221 224 226 233 234 236 236 251
App start nativeLaunch Baseline
Mean: 19.500 ms
Stdev: 1.565 ms (8.0%)
Runs: 17 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 20 20 20 20 20 20 21 21 21 22 22 23 23

Current
Mean: 19.552 ms
Stdev: 1.694 ms (8.7%)
Runs: 17 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 20 20 20 20 20 21 21 21 21 22 24 24
App start regularAppStart Baseline
Mean: 0.014 ms
Stdev: 0.001 ms (5.4%)
Runs: 0.011840999126434326 0.012736000120639801 0.01285799965262413 0.012899000197649002 0.013020999729633331 0.013020999729633331 0.013062000274658203 0.013224000111222267 0.013265000656247139 0.013305000960826874 0.013345999643206596 0.013467999175190926 0.013508999720215797 0.013549000024795532 0.013589998707175255 0.013590000569820404 0.013671999797224998 0.01371300034224987 0.01371300034224987 0.0138349998742342 0.013955999165773392 0.013996999710798264 0.01407800056040287 0.014079000800848007 0.014322999864816666 0.014322999864816666 0.014322999864816666 0.014607999473810196 0.014729000627994537 0.015095999464392662 0.015544001013040543

Current
Mean: 0.014 ms
Stdev: 0.001 ms (5.7%)
Runs: 0.01285799965262413 0.013345999643206596 0.013591000810265541 0.013591000810265541 0.013630999252200127 0.013631001114845276 0.013753999024629593 0.013793999329209328 0.013794001191854477 0.0138349998742342 0.013916000723838806 0.014119001105427742 0.014159999787807465 0.014201000332832336 0.014242000877857208 0.01428299956023693 0.0143630001693964 0.01440500095486641 0.01448499970138073 0.014567000791430473 0.01476999931037426 0.014770999550819397 0.014933999627828598 0.015014000236988068 0.015056001022458076 0.015095999464392662 0.015461999922990799 0.015543000772595406 0.015665000304579735 0.015706000849604607 0.0157880000770092 0.016479000449180603

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

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

@OSBotify
Copy link
Contributor

OSBotify commented Mar 2, 2023

🚀 Deployed to staging by https://github.com/tylerkaraszewski in version: 1.2.78-0 🚀

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

@OSBotify
Copy link
Contributor

OSBotify commented Mar 6, 2023

🚀 Deployed to production by https://github.com/mountiny in version: 1.2.78-0 🚀

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

@sobitneupane
Copy link
Contributor

This regression was caused by this PR. this.currentSelectedTimezone was removed in this PR but was missed to remove in the following:

initiallyFocusedOptionKey={this.currentSelectedTimezone}

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