Expensify / App

Welcome to New Expensify: a complete re-imagination of financial collaboration, centered around chat. Help us build the next generation of Expensify by sharing feedback and contributing to the code.
https://new.expensify.com
MIT License
3.55k stars 2.89k forks source link

[HOLD for payment 2023-11-22] [HOLD for payment 2023-11-21] Nontification preferences - Mute option not seen in notification prefrences when immediately is selected #31192

Closed lanitochka17 closed 12 months ago

lanitochka17 commented 1 year ago

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!


Version Number: 1.3.98-0 Reproducible in staging?: Y Reproducible in production?: N If this was caught during regression testing, add the test name, ID and link from TestRail: Email or phone of affected tester (no customers): Logs: https://stackoverflow.com/c/expensify/questions/4856 Expensify/Expensify Issue URL: Issue reported by: Applause - Internal Team Slack conversation:

Action Performed:

  1. Open the app
  2. Navigate to any room or chat
  3. Tap the header Settings > Notification prefrences

Expected Result:

All the menu options "Mute", "Daily" and "Immediately" are visible

Actual Result:

The "Mute" option is not visible when "Immediately" is selected

Workaround:

Unknown

Platforms:

Which of our officially supported platforms is this issue occurring on?

Screenshots/Videos

Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/f51de853-e93e-4077-a156-1205a894aaad

View all open jobs on GitHub

melvin-bot[bot] commented 1 year ago

Triggered auto assignment to @sophiepintoraetz (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details.

melvin-bot[bot] commented 1 year ago

Bug0 Triage Checklist (Main S/O)

OSBotify commented 1 year ago

:wave: Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open StagingDeployCash deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:

  1. Identify the pull request that introduced this issue and revert it.
  2. Find someone who can quickly fix the issue.
  3. Fix the issue yourself.
melvin-bot[bot] commented 1 year ago

Triggered auto assignment to @cead22 (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

esh-g commented 1 year ago

Regression from #30972

ishpaul777 commented 1 year ago

Proposal

Problem

Mute option not seen in notification prefrences when immediately is selected

Root cause

Here root cause behaviour of SectionList when we set initialScrollIndex to ">=" 2, Sectionlist just start at initialScrollIndex skip the rendering items before it (according to layout) and only render on scroll, in case of notification pref. page the items are limited no scroll event can be triggered so sectionlist wont render skipped items

(above root cause can be verified if we set a max width to notification page screen Wrapper and apply overscroll auto manually)

https://github.com/Expensify/App/assets/104348397/bdcdaeb1-9e7d-444b-9ee3-4b05e110794e

Solution

we should apply the fix from https://github.com/Expensify/App/pull/30972 selctively for cases when list is long and scrollable (EG. currency list) and revert back for other lists.

Code changes : Introduce a prop shouldUseInitialScrollIndex and use it only for IOUCurrencySelection only (for now) until we realize to while other selectors Menus we want to use this.

  const scrollToFocusedIndexOnFirstRender = useCallback(() => {
        if (!firstLayoutRef.current) {
            return;
        }
        scrollToIndex(focusedIndex, false);
        firstLayoutRef.current = false;
    }, [focusedIndex, scrollToIndex]);

<SectionList
  // other props
  onLayout={shouldUseInitialScrollIndex ? handleFirstLayout : scrollToFocusedIndexOnFirstRender}
  // eslint-disable-next-line react/jsx-props-no-spreading
  {...(shouldUseInitialScrollIndex && {initialScrollIndex: initialFocusedIndex})}
 />

OR revert https://github.com/Expensify/App/pull/30972 completely

situchan commented 1 year ago

Removing this line fixes this issue: (Not a real solution but just for testing purpose) https://github.com/Expensify/App/blob/ffe1c63a57f80479450dcf0e5c2fa82509630c8f/src/components/SelectionList/BaseSelectionList.js#L441

So I can confirm that the root cause is related to combination of getItemLayout and initialScrollIndex. When initialScrollIndex is set, previous items (index 0 - initialScrollIndex-2) are not rendered and thus getItemLayout callback is not called. That's why this isn't noticeable when number of items are less than 3 (i.e. Language or Priority mode pages).

ishpaul777 commented 1 year ago

Acc. to this, to use initialScrollIndex list Requires getItemLayout to be implemented.

situchan commented 1 year ago

Interesting if it's RN bug. @ishpaul777 can you reproduce with minimal repro step in new RN project?

ishpaul777 commented 1 year ago

~I can try tommorrow (monday), its late and i am AFK.~

ishpaul777 commented 1 year ago

i reproduced on a snack here https://snack.expo.dev/_a4GIohtB?platform=android, when items are limited, items rendered from scrollindex - 1 and list is not even scrollable

https://github.com/Expensify/App/assets/104348397/7a4482c4-c8a6-48bb-9653-262751b02907

sophiepintoraetz commented 1 year ago

This came in over my weekend - i'm able to reproduce. @cead22, I don't think this is deploy blocker worthy though? image

0xmiros commented 1 year ago

This bug is critical and blocks other PRs. i.e. https://github.com/Expensify/App/pull/30958#issuecomment-1807220638

ishpaul777 commented 1 year ago

@situchan do you think we should revert or apply a fix until bug is resolve upstream. Though I dont think this to be accepted as bug but "expected behaviour" for list in RN repo?

situchan commented 1 year ago

I think we should revert

sophiepintoraetz commented 1 year ago

cc @deetergp @fedirjh @kubabutkiewicz

fedirjh commented 1 year ago

I agree that we should revert, I will raise a revert PR shortly.

fedirjh commented 1 year ago

cc @cead22 PR is ready https://github.com/Expensify/App/pull/31262

roryabraham commented 12 months ago

Confirmed that this was fixed by https://github.com/Expensify/App/pull/31262

sophiepintoraetz commented 12 months ago

Cool - is there a regression test we should include as a part of this - @fedirjh @roryabraham?

fedirjh commented 12 months ago

Cool - is there a regression test we should include as a part of this

I think we already have a regression test for this? The issue was already identified in the staging.

melvin-bot[bot] commented 12 months ago

Reviewing label has been removed, please complete the "BugZero Checklist".

melvin-bot[bot] commented 12 months ago

The solution for this issue has been :rocket: deployed to production :rocket: in version 1.3.98-5 and is now subject to a 7-day regression period :calendar:. Here is the list of pull requests that resolve this issue:

If no regressions arise, payment will be issued on 2023-11-21. :confetti_ball:

After the hold period is over and BZ checklist items are completed, please complete any of the applicable payments for this issue, and check them off once done.

melvin-bot[bot] commented 12 months ago

BugZero Checklist: The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed:

sophiepintoraetz commented 12 months ago

All right, nothing further to do here, given it was a regression. Closing.

melvin-bot[bot] commented 12 months ago

The solution for this issue has been :rocket: deployed to production :rocket: in version 1.3.99-0 and is now subject to a 7-day regression period :calendar:. Here is the list of pull requests that resolve this issue:

If no regressions arise, payment will be issued on 2023-11-22. :confetti_ball:

After the hold period is over and BZ checklist items are completed, please complete any of the applicable payments for this issue, and check them off once done.

melvin-bot[bot] commented 12 months ago

BugZero Checklist: The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed: