App icon indicating copy to clipboard operation
App copied to clipboard

Desktop - Add "Check For Update" system menu item

Open kidroca opened this issue 3 years ago • 3 comments

Details

Add a "Check for Updates" system menu item The "Check for Updates" appears until an update is downloaded (either manually or automatically), then it gets swapped by the "Update New Expensify" system menu item

Since the "Update available" notification is displayed only after an update is downloaded I've included a feedback dialog The dialog is shown soon after clicking "Check for Updates" and the user is informed whether an update is available and being downloaded, or not update is available right now

Note: As other content (menu items) in desktop/main.js the texts are not localized. Dialogs, notifications, menus localization is out current scope

Fixed Issues

$ https://github.com/Expensify/App/issues/11817 PROPOSAL: N/A

Tests

To test in dev (temporarily) add the following file inside ./desktop/dev-app-update.yml

provider: s3
bucket: staging-expensify-cash
channel: latest
updaterCacheDirName: new.expensify.desktop-updater

This would allow the "Check For Update" menu item to work in dev (otherwise the checkForUpdates action fails with an error)

In DEV update checks resolve with no update available (even when there's a new version):

  • [ ] Verify "Check for updates" menu item appears in DEV
  • [ ] Verify pressing "Check for updates" shows a dialog with the result shortly
  • [ ] Verify "Update New Expensify" menu item does not appear

Build the desktop app for staging and/or prod Since the version in this PR is older there is already a new version and hence an update is available almost as soon as app is launched If you're quick enough you can tap on the system menu and see the "Check for updates" item before it gets replaced by "Update New Expensify" (Alternatively go offline before launching App, so that the initial/automatic update check happens while offline, then resume connectivity)

  • [ ] quickly, as soon as launching App, press on the system menu to see the "Check for updates" option - pressing it should shortly display a dialog that an update is available. The update is being downloaded - sometimes it takes a few minutes, before we get the notification that the update is ready to be installed. At that point "Check for updates" should no longer be displayed in the system menu
    • [ ] You can discard or not press on the "Update ready" (downloaded) notification and see that "Check for updates" indeed is no longer in the system menu, but "Update New Expensify" is reviewed
    • [ ] Verify that pressing "Update New Expensify" still works - I couldn't easily check this, perhaps we can leave it for QA, otherwise we'd need to setup local update server
    • [ ] Verify pressing the "Update ready" notification still works the same way as before - it displays the in-app modal that lets you apply the update ASAP

To simulates that there are no updates available in staging or prod, go to main package.json and set the app version, to the latest released version or newer. Now build the desktop app and launch it

  • [ ] Verify the "Check for updates" option appears in the system menu

  • [ ] Verify pressing it shows a dialog that there are no updates right now

  • [ ] Verify "Check for Updates" works offline

    • launch the app offline
    • press "Check for Updates" - see a dialog explaining the check for updates failed
    • optionally resume connectivity and retry - now you should get actual results whether update exists or no

QA Steps

Since the version in this PR is older there is already a new version and hence an update is available almost as soon as app is launched If you're quick enough you can tap on the system menu and see the "Check for updates" item before it gets replaced by "Update New Expensify"

  • [ ] quickly, as soon as launching App, press on the system menu to see the "Check for updates" option - pressing it should shortly display a dialog that an update is available. The update is being downloaded - sometimes it takes a few minutes, before we get the notification that the update is ready to be installed. At that point "Check for updates" should no longer be displayed in the system menu
    • [ ] You can discard or not press on the "Update ready" (downloaded) notification and see that "Check for updates" indeed is no longer in the system menu, but "Update New Expensify" is reviewed
    • [ ] Verify that pressing "Update New Expensify" still works - I couldn't easily check this, perhaps we can leave it for QA, otherwise we'd need to setup local update server
    • [ ] Verify pressing the "Update ready" notification still works the same way as before - it displays the in-app modal that lets you apply the update ASAP

If by any chance you aren't able to open the menu quick enough you can uninstall the app and install it again (Due to caching I think the update would appear very fast, but you can still beat it)

An alternative is to disconnect Wi-Fi, then launch App, wait a bit (e.g. 20-30 sec) (for the initial update check to fail), reconnect to Wifi - you should see and be able to interact with the "Check for updates" system menu item

  • [ ] Verify "Check for Updates" works offline
    • launch the app offline
    • press "Check for Updates" - see a dialog explaining the check for updates failed
    • optionally resume connectivity and retry - now you should get actual results whether update exists or no

PR Author Checklist

  • [x] I linked the correct issue in the ### Fixed Issues section above
  • [x] I wrote clear testing steps that cover the changes made in this PR
    • [x] I added steps for local testing in the Tests section
    • [x] I added steps for Staging and/or Production testing in the QA steps section
    • [x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • [x] 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)
  • [x] I included screenshots or videos for tests on all platforms
  • [x] I ran the tests on all platforms & verified they passed on:
    • [x] iOS / native
    • [x] Android / native
    • [x] iOS / Safari
    • [x] Android / Chrome
    • [x] MacOS / Chrome
    • [x] MacOS / Desktop
  • [x] 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)
  • [x] I followed proper code patterns (see Reviewing the code)
    • [x] 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)
    • [x] I verified that comments were added to code that is not self explanatory
    • [x] 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.
    • [x] I verified any copy / text shown in the product was added in all src/languages/* files
    • [ ] 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.
    • [x] 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.
    • [x] I verified the JSDocs style guidelines (in STYLE.md) were followed
  • [x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • [x] I followed the guidelines as stated in the Review Guidelines
  • [x] 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)
  • [x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • [x] 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
  • [x] If a new component is created I verified that:
    • [x] A similar component doesn't exist in the codebase
    • [x] All props are defined accurately and each prop has a /** comment above it */
    • [x] The file is named correctly
    • [x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • [x] The only data being stored in the state is data necessary for rendering and nothing else
    • [x] 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)
    • [x] 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)
    • [x] All JSX used for rendering exists in the render method
    • [x] 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
  • [x] If a new CSS style is added I verified that:
    • [x] A similar style doesn't already exist
    • [x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
  • [x] 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)
  • [x] 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.
  • [ ] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

PR Reviewer Checklist

The reviewer will copy/paste it into a new comment and complete it after the author checklist is completed

  • [ ] 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:
    • [ ] iOS / native
    • [ ] Android / native
    • [ ] iOS / Safari
    • [ ] Android / Chrome
    • [ ] MacOS / Chrome
    • [ ] 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 was added in all src/languages/* files
    • [ ] 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 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.
  • [ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

Screenshot 2022-11-09 at 16 31 08

https://user-images.githubusercontent.com/12156624/200919148-d70c05d1-3d4b-48ad-8898-866f42ea6cfd.mov

Screenshot 2022-11-09 at 21 23 02

iOS

Android

kidroca avatar Nov 09 '22 19:11 kidroca

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.

Obviously the texts here are a fruit of my imagination so we'll need to update them, I'll post about that on the original issue

kidroca avatar Nov 09 '22 19:11 kidroca

I haven't provided screenshots for all platforms - I just verified they still run/build - as you can see nothing is changed for other platforms

kidroca avatar Nov 09 '22 19:11 kidroca

Looks good we're waiting for a copy!

https://user-images.githubusercontent.com/85645967/201247752-9c408928-b600-45da-9b6d-a02831f0256b.mov

Santhosh-Sellavel avatar Nov 11 '22 02:11 Santhosh-Sellavel

@kidroca Are we still waiting for copy here?

Still waiting for copy, posted a comment on the ticket

kidroca avatar Nov 14 '22 10:11 kidroca

Updated copies, ready for review ✔️

image

  • During development the app name in the menu is "Electron" and this Electron icon appear as default, for prod/staging the icon would be the Expensify icon like below

image

Screenshot 2022-11-15 at 20 40 18

kidroca avatar Nov 15 '22 18:11 kidroca

Note: there's a lot of code related to updates/auto-updates and creating menu items that can be extracted in separate files

  • updater.js
  • appMenu.js

desktop/main.js needs better organization, because it becomes very cluttered/tangled Can we capture a refactor ticket?

kidroca avatar Nov 17 '22 10:11 kidroca

Note: there's a lot of code related to updates/auto-updates and creating menu items that can be extracted in separate files

  • updater.js
  • appMenu.js

desktop/main.js needs better organization, because it becomes very cluttered/tangled Can we capture a refactor ticket?

Please take this idea to slack, if not already!

Santhosh-Sellavel avatar Nov 18 '22 18:11 Santhosh-Sellavel

In DEV update checks resolve with no update available (even when there's a new version):

  • [x] Verify "Check for updates" menu item appears in DEV
  • [x] Verify pressing "Check for updates" shows a dialog with the result shortly
  • [x] Verify "Update New Expensify" menu item does not appear

https://user-images.githubusercontent.com/85645967/202795226-8dc918da-a844-4957-b960-d33b153abc99.mov

Santhosh-Sellavel avatar Nov 18 '22 20:11 Santhosh-Sellavel

@kidroca

While building for production/staging, should I keep this file ./desktop/dev-app-update.yml or remove it?

Should I add anything else?

I can just clone your branch, and build desktop-staging should do right?

Santhosh-Sellavel avatar Nov 18 '22 20:11 Santhosh-Sellavel

@Santhosh-Sellavel

While building for production/staging, should I keep this file ./desktop/dev-app-update.yml or remove it?

It shouldn't matter, but just to be safe you can deleted it first

Should I add anything else?

No Depending whether you want to get "Update Available" or "Update Not Available" you can change the main package.json version before building desktop

I can just clone your branch, and build desktop-staging should do right?

Yes

kidroca avatar Nov 19 '22 19:11 kidroca

@kidroca Not sure what I am doing wrong, app always crashes when I open the generated desktop build. I was unable to verify update available case alone.

Santhosh-Sellavel avatar Nov 20 '22 16:11 Santhosh-Sellavel

@kidroca Not sure what I am doing wrong, app always crashes when I open the generated desktop build. I was unable to verify update available case alone.

  • Are you using an M1 mac?
  • Can you include a screenshot or the content of the crash dialog?
  • is it only with my changes or does building from the main also results in the same crash?

kidroca avatar Nov 21 '22 09:11 kidroca

@Santhosh-Sellavel I remember I had a crash after building staging/prod as well

Could you check if this bug report and shared fix solves the crash for you: https://expensify.slack.com/archives/C01GTK53T8Q/p1667938306012479

kidroca avatar Nov 21 '22 10:11 kidroca

Thanks, @kidroca It works!

Santhosh-Sellavel avatar Nov 21 '22 15:11 Santhosh-Sellavel

Screen recording

Update Available & unable to check error

https://user-images.githubusercontent.com/85645967/203092549-6dd72f29-93d1-4274-a481-a93426f7b661.mov

No Update

https://user-images.githubusercontent.com/85645967/203098735-2b749b80-f2ad-4503-933b-abd5f50d433f.mov

Santhosh-Sellavel avatar Nov 21 '22 15:11 Santhosh-Sellavel

@kidroca Need some clarification

Please check the above video for updates available flow

  1. Initially Check for updates is shown in the menu.
  2. After clicking the "Update available popup"
  3. For some time Check for updates is disabled, I assume the update is downloading
  4. When the download is complete there is no notification as said in the UpdateAvailable popup. Is this Expected?
  5. Now Update New Expensify is shown in the menu, but clicking it does nothing. Is this expected for now?

Santhosh-Sellavel avatar Nov 21 '22 15:11 Santhosh-Sellavel

Thanks, @kidroca It works!

Could you kindly answer these questions:

  • Are you using an M1 mac?
  • Can you include a screenshot or the content of the crash dialog?
  • is it only with my changes or does building from the main also results in the same crash?

If this bug report and the fix I shared here: https://github.com/Expensify/App/pull/12607#issuecomment-1321858605 resolved the build issue, could you post on the slack thread and move the bug report forward - I can commit the fix (from slack), but I think someone from the core team should confirm, so a separate PR might be better

kidroca avatar Nov 21 '22 17:11 kidroca

@kidroca Need some clarification

Please check the above video for updates available flow

For some time Check for updates is disabled, I assume the update is downloading

Yes

When the download is complete there is no notification

Where do you look for notifications? A system notification like this one should appear image

Unless:

  • you or your mac is in a Focus/DND mode -> in that case you can still see the notification if you check all notification manually
  • you haven't allowed to receive notification by Expensify

Now Update New Expensify is shown in the menu, but clicking it does nothing. Is this expected for now?

It depends, it should work for QA with the staging app being built by Github Actions (I'll update Test/QA to mention testing this)

The Update New Expensify didn't nothing for me even before the changes in the current PR I suspect it might be because:

  • I'm on a M1 mac
  • When building App electron sign the package with a local signature that doesn't match the signature of the downloaded update
  • Note: I think we also have to install New Expensify.dmg to applications

I see the following error in the log:

[2022-11-21 18:41:55.924] [info]  Checking for update
[2022-11-21 18:41:56.575] [info]  Found version 1.2.29-6 (url: New Expensify-1.2.29-6-mac.zip, NewExpensify.dmg)
[2022-11-21 18:41:56.576] [info]  Downloading update from New Expensify-1.2.29-6-mac.zip, NewExpensify.dmg
[2022-11-21 18:41:56.587] [info]  Checked for macOS Rosetta environment (isRosetta=false)
[2022-11-21 18:41:56.590] [info]  Checked 'uname -a': arm64=true
[2022-11-21 18:45:27.895] [info]  New version 1.2.29-6 has been downloaded to /Users/kidroca/Library/Application Support/Caches/new.expensify.desktop-updater/pending/New Expensify-1.2.29-6-mac.zip
[2022-11-21 18:45:27.928] [info]  / requested
[2022-11-21 18:45:27.933] [info]  /1849b1493dc-226e.zip requested
[2022-11-21 18:45:27.933] [info]  /1849b1493dc-226e.zip requested by Squirrel.Mac, pipe /Users/kidroca/Library/Application Support/Caches/new.expensify.desktop-updater/pending/New Expensify-1.2.29-6-mac.zip
[2022-11-21 18:45:29.376] [warn]  Error: Code signature at URL file:///Users/kidroca/Library/Caches/com.expensifyreactnative.chat.ShipIt/update.bWoM6v6/New%20Expensify.app/ did not pass validation: code failed to satisfy specified code requirement(s)
[2022-11-21 18:45:29.377] [error] Error: Error: Code signature at URL file:///Users/kidroca/Library/Caches/com.expensifyreactnative.chat.ShipIt/update.bWoM6v6/New%20Expensify.app/ did not pass validation: code failed to satisfy specified code requirement(s)

These items should be tested by QA as we can't simulate updates and applying updates locally (We actually can, but it would just take a lot more time, instead since QA need to test it anyway it would be better to leave it to them)

kidroca avatar Nov 21 '22 17:11 kidroca

Here's a video sample showing the system notification - because I'm in a Focus mode the notification does not appear, but I can see it in "Notifications"

https://user-images.githubusercontent.com/12156624/203119662-6aac38c0-62e9-44c5-8104-9333f6e488d2.mp4

I think since I have the App focused I should just see the in-app prompt that update is available, but that's another out of scope item

kidroca avatar Nov 21 '22 17:11 kidroca

@kidroca It occurs on the main too, yes I am using an M1 Mac.

Santhosh-Sellavel avatar Nov 21 '22 17:11 Santhosh-Sellavel

Reviewer Checklist

  • [x] I have verified the author checklist is complete (all boxes are checked off).
  • [x] I verified the correct issue is linked in the ### Fixed Issues section above
  • [x] I verified testing steps are clear and they cover the changes made in this PR
    • [x] I verified the steps for local testing are in the Tests section
    • [x] I verified the steps for Staging and/or Production testing are in the QA steps section
    • [x] 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)
    • [x] 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)
  • [x] I checked that screenshots or videos are included for tests on all platforms
  • [x] I included screenshots or videos for tests on all platforms
  • [x] I verified tests pass on all platforms & I tested again on:
    • [x] iOS / native
    • [x] Android / native
    • [x] iOS / Safari
    • [x] Android / Chrome
    • [x] MacOS / Chrome
    • [x] MacOS / Desktop
  • [x] 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
  • [x] I verified proper code patterns were followed (see Reviewing the code)
    • [x] 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).
    • [x] I verified that comments were added to code that is not self explanatory
    • [x] 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.
    • [x] I verified any copy / text shown in the product was added in all src/languages/* files
    • [x] 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.
    • [x] 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.
    • [x] I verified the JSDocs style guidelines (in STYLE.md) were followed
  • [x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
  • [x] I verified that this PR follows the guidelines as stated in the Review Guidelines
  • [x] 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)
  • [x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • [x] 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
  • [x] If a new component is created I verified that:
    • [x] A similar component doesn't exist in the codebase
    • [x] All props are defined accurately and each prop has a /** comment above it */
    • [x] The file is named correctly
    • [x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
    • [x] The only data being stored in the state is data necessary for rendering and nothing else
    • [x] 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)
    • [x] 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)
    • [x] All JSX used for rendering exists in the render method
    • [x] 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
  • [x] If a new CSS style is added I verified that:
    • [x] A similar style doesn't already exist
    • [x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)
  • [x] 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)
  • [x] 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.
  • [x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Only the desktop-specific code is modified here, so only the desktop screens are Added!

Desktop

Update Available & unable to check error

https://user-images.githubusercontent.com/85645967/203092549-6dd72f29-93d1-4274-a481-a93426f7b661.mov

No Update

https://user-images.githubusercontent.com/85645967/203098735-2b749b80-f2ad-4503-933b-abd5f50d433f.mov

Santhosh-Sellavel avatar Nov 21 '22 17:11 Santhosh-Sellavel

@kidroca Notifications works It was turned off, and after enabling I received a notification. Also, let's verify Update New Expensify option works or not in the staging build once deployed, all good for now so approved!

cc: @pecanoro

Santhosh-Sellavel avatar Nov 21 '22 17:11 Santhosh-Sellavel

@kidroca It seems the checks are failing on the PR author list, can ou double check nothing is missing from https://raw.githubusercontent.com/Expensify/App/main/.github/PULL_REQUEST_TEMPLATE.md?

pecanoro avatar Nov 21 '22 18:11 pecanoro

@kidroca It seems the checks are failing on the PR author list, can ou double check nothing is missing from https://raw.githubusercontent.com/Expensify/App/main/.github/PULL_REQUEST_TEMPLATE.md?

@pecanoro Just did and updated the PR with the new list of checks

kidroca avatar Nov 21 '22 18:11 kidroca

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

OSBotify avatar Nov 23 '22 19:11 OSBotify

🚀 Deployed to staging by @pecanoro in version: 1.2.31-0 🚀

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

OSBotify avatar Nov 24 '22 00:11 OSBotify

@kidroca @luacmartins Can you pls help out with this PR internally as well. When the initial build updated, I wasn't getting the "Update New Expensify" active, but when we pushed CPs, the app updates automatically and I can't catch the notification without looking at my screen for 8 hrs. Screen Shot 2022-11-24 at 5 46 29 PM If there are no updates, its working fine

https://user-images.githubusercontent.com/43995119/204023235-f2536710-c951-4e60-a1d3-153ab5640670.mp4

mvtglobally avatar Nov 25 '22 16:11 mvtglobally

@mvtglobally this works for me! Screenshot 2022-11-25 at 11 13 02 AM Screenshot 2022-11-25 at 11 13 13 AM

luacmartins avatar Nov 25 '22 18:11 luacmartins

If there's no other way to test this right now - it can just be monitored over time

  • a "Check For Update" option should exist - it triggers a check "right now" and displays a result prompt (as seen in screenshots)
  • an "Update New Expensify" option is shown only when update have been downloaded and can be applied

kidroca avatar Nov 28 '22 08:11 kidroca

@pecanoro Can you assign me to this issue for tracking payment thanks!

Santhosh-Sellavel avatar Nov 28 '22 17:11 Santhosh-Sellavel