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: treat certain US numbers as invalid #31726

Merged
merged 12 commits into from
Dec 18, 2023

Conversation

barros001
Copy link
Contributor

@barros001 barros001 commented Nov 22, 2023

Details

We have a special case of US phone numbers that are technically valid but we want to treat them as invalid.

Fixed Issues

$ #28492
PROPOSAL: #28492 (comment)

Tests

  1. Click the search icon
  2. Type +15005550009
  3. Verify a phone number suggestion is displayed
  4. Add an extra 1 after +1 (+15005550009)
  5. Verify invalid phone number message is displayed
  • Verify that no errors appear in the JS console

Offline tests

  1. Click the search icon
  2. Type +15005550009
  3. Verify a phone number suggestion is displayed
  4. Add an extra 1 after +1 (+15005550009)
  5. Verify invalid phone number message is displayed

QA Steps

  1. Click the search icon
  2. Type +15005550009
  3. Verify a phone number suggestion is displayed
  4. Add an extra 1 after +1 (+15005550009)
  5. Verify invalid phone number message is displayed
  • 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: mWeb Chrome
    • iOS: Native
    • iOS: mWeb 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 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.

Screenshots/Videos

Android: Native
android_native.webm
Android: mWeb Chrome
android_web.webm
iOS: Native
Simulator.Screen.Recording.-.iPhone.15.Pro.-.2023-11-27.at.12.14.10.mp4
iOS: mWeb Safari
Simulator.Screen.Recording.-.iPhone.15.Pro.-.2023-11-27.at.12.14.50.mp4
MacOS: Chrome / Safari
Screen.Recording.2023-11-27.at.12.05.17.PM.mov
MacOS: Desktop
Screen.Recording.2023-11-27.at.12.07.14.PM.mov

…cial case where a phone is valid but we want to make it invalid
@barros001 barros001 marked this pull request as ready for review November 27, 2023 17:36
@barros001 barros001 requested a review from a team as a code owner November 27, 2023 17:36
@melvin-bot melvin-bot bot requested review from aimane-chnaif and removed request for a team November 27, 2023 17:36
Copy link

melvin-bot bot commented Nov 27, 2023

@aimane-chnaif 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]

@@ -0,0 +1,18 @@
import {parsePhoneNumber} from '@libs/PhoneNumber';

describe('PhoneNumber', () => {
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we add some more tests with non-US phone numbers?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@aimane-chnaif added a few more test numbers

Copy link
Contributor

Choose a reason for hiding this comment

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

Can you add some more test cases with blank space in various places?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sure. I’ll be spotty for the next 24 hours due to long haul traveling, but I’ll add it as soon as I can.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@aimane-chnaif added a few extra numbers with spaces between every number including country selector. Let me know if this is good enough.

}

// eslint-disable-next-line import/prefer-default-export
export {parsePhoneNumber};
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I wasn't very happy with the export {*} from 'awesome-phone-number' part. I I think it was unnecessary and added complexity to it. I'm now only exporting parsePhoneNumber and I updated the lint rule to only restrict this function from awesome-phone-number (we are not using anything else throughout the entire codebase anyways).

@aimane-chnaif
Copy link
Contributor

Please fix conflict

@barros001
Copy link
Contributor Author

Please fix conflict

Conflict fixed.

Copy link
Contributor

@aimane-chnaif aimane-chnaif left a comment

Choose a reason for hiding this comment

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

2 bugs in this video:

  • error text glitch
  • no +11 validation when there are spaces between letters
bug.mov

return parsedPhoneNumber;
}

const phoneNumberWithoutSpecialChars = phoneNumber.replace(CONST.REGEX.SPECIAL_CHARS_WITHOUT_NEWLINE, '');
Copy link
Contributor

Choose a reason for hiding this comment

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

Note for further reviewers: not using getPhoneNumberWithoutSpecialChars from LoginUtils because of dependency cycle

@barros001
Copy link
Contributor Author

2 bugs in this video:

  • error text glitch
  • no +11 validation when there are spaces between letters

bug.mov

I believe the glitch is unrelated to this fix as it’s also happening on staging. I’ll try to find the cause and possibly fix it.

I’ll look into the validation issue and report back.

@barros001
Copy link
Contributor Author

no +11 validation when there are spaces between letters

this is also not related to this fix. You can see this happening on staging with the following examples:

+15555555555 (try adding a space after the +)
+1 (555) 555-5555

this is because of the following line:

if (searchValue && CONST.REGEX.DIGITS_AND_PLUS.test(searchValue) && !isValidPhone && !hasSelectableOptions) {

When a telephone is not valid (possible is false) it will check if the search string is only numbers and +, and if so then it will display the error message related to phone numbers. Because space (and all other non numeric chars) is not part of it, it will think the search string is not a phone number. We could add spaces, () and - to the list as well to address that (might not be as simple because it would then show the phone error if you type something like () - basically any string with only ()- without numbers.)

What are your thoughts? Should we try and address both issues you pointed out as part of this PR even though they are not really related? I’m fine either way, just want to make sure to follow the correct procedure here.

@barros001
Copy link
Contributor Author

I did a little more digging and found out what's the reason behind the error message glitch.

{/* If we are loading new options we will avoid showing any header message. This is mostly because one of the header messages says there are no options. */}
{/* This is misleading because we might be in the process of loading fresh options from the server. */}
{!isLoadingNewOptions && headerMessage ? (
<View style={[styles.ph5, styles.pb5]}>
<Text style={[styles.textLabel, styles.colorMuted]}>{headerMessage}</Text>
</View>
) : null}

As you can see above, this same issue have been dealt with in the past and the code above was added to solve it. Basically it will not display any error message while data is still being loaded, which makes total sense. But it doesn't work quite as expected, see below:

onChangeText(searchValue = '') {
Report.searchInServer(searchValue);
this.setState({searchValue}, this.debouncedUpdateOptions);
}

isLoadingNewOptions={this.props.isSearchingForReports}

App/src/pages/SearchPage.js

Lines 237 to 240 in 573c5e8

isSearchingForReports: {
key: ONYXKEYS.IS_SEARCHING_FOR_REPORTS,
initWithStoredValues: false,
},

The code above is from the SearchPage. Notice how searchValue is a local state but isSearchingForReports is an Onyx prop. The root cause here is the fact that we update searchValue, the component is re-rendered, error message is displayed, all that before Onyx (which works around promises and is slow at times) has a chance to persist isSearchingForReports and SearchPage see the new value. That causes the glitch.

To solve this we'll need to move the isSearchingForReports to a local state as well so we can keep it in sync. This same issue affect a few different pages:

https://github.com/Expensify/App/blob/573c5e812c5def1a4b18150ebca9e505766fe4b4/src/pages/SearchPage.js
https://github.com/Expensify/App/blob/573c5e812c5def1a4b18150ebca9e505766fe4b4/src/pages/NewChatPage.js
https://github.com/Expensify/App/blob/573c5e812c5def1a4b18150ebca9e505766fe4b4/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js
https://github.com/Expensify/App/blob/573c5e812c5def1a4b18150ebca9e505766fe4b4/src/pages/tasks/TaskShareDestinationSelectorModal.js

All these components suffer the same issue. IMO we should raise a new issue to handle this in order to get my eyes on it as the solution might not be as easy. I'd say ideally we would want to extract the search logic on a shared component used by all these pages so we don't have repeated logic.

@barros001
Copy link
Contributor Author

no +11 validation when there are spaces between letters

this is also not related to this fix. You can see this happening on staging with the following examples:

+15555555555 (try adding a space after the +) +1 (555) 555-5555

this is because of the following line:

if (searchValue && CONST.REGEX.DIGITS_AND_PLUS.test(searchValue) && !isValidPhone && !hasSelectableOptions) {

When a telephone is not valid (possible is false) it will check if the search string is only numbers and +, and if so then it will display the error message related to phone numbers. Because space (and all other non numeric chars) is not part of it, it will think the search string is not a phone number. We could add spaces, () and - to the list as well to address that (might not be as simple because it would then show the phone error if you type something like () - basically any string with only ()- without numbers.)

What are your thoughts? Should we try and address both issues you pointed out as part of this PR even though they are not really related? I’m fine either way, just want to make sure to follow the correct procedure here.

As far as the above, we can replace DIGITS_AND_PLUS with the regex below:

-        DIGITS_AND_PLUS: /^\+?[0-9]*$/,
+        PHONE_NUMBER_CHARS: /^\+?(?=.*[0-9])([0-9() -]+)$/,

Basically it will expand the list of characters to include (, ), - and space, while requiring at least one number. This is a more comprehensive way of guessing if the user is trying to type a phone number of just text.

I haven't made the change yet, just wanted to hear your thoughts first.

@aimane-chnaif
Copy link
Contributor

aimane-chnaif commented Dec 6, 2023

For me, the glitch doesn't happen on main. Just before loading and while loading, not found message should not show.

That regex change is fine to me.

So the target we're trying to achieve is that:
+1 1 5 00 should behave exactly same as +1 2 5 00
+11500 should behave exactly same as +12500

@barros001
Copy link
Contributor Author

For me, the glitch doesn't happen on main. Just before loading and while loading, not found message should not show.

See screen recording. This is production app installed on my phone. It’s not as apparent because it’s a production build and things are a lot faster, but it’s still there.

RPReplay_Final1701876362.mp4

@aimane-chnaif
Copy link
Contributor

For me, the glitch doesn't happen on main. Just before loading and while loading, not found message should not show.

See screen recording. This is production app installed on my phone. It’s not as apparent because it’s a production build and things are a lot faster, but it’s still there.

RPReplay_Final1701876362.mp4

ok thanks for confirmation. Agree out of scope then

@aimane-chnaif
Copy link
Contributor

aimane-chnaif commented Dec 6, 2023

So the target we're trying to achieve is that:
+1 1 5 00 should behave exactly same as +1 2 5 00
+11500 should behave exactly same as +12500

Let's just stick to this. If something is buggy, should happen on both this branch and main

@barros001
Copy link
Contributor Author

So the target we're trying to achieve is that:
+1 1 5 00 should behave exactly same as +1 2 5 00
+11500 should behave exactly same as +12500

Let's just stick to this. If something is buggy, should happen on both this branch and main

Just to confirm, do we want to update the regex to show invalid phone number error when there are spaces (parenthesis and dashes as well) on the search item, or leave it as is (where it won’t if there are spaces)?

@barros001
Copy link
Contributor Author

On main, +1 2 5 00 will say “no results” while +12500 will show the invalid phone number error.

@aimane-chnaif
Copy link
Contributor

On main, +1 2 5 00 will say “no results” while +12500 will show the invalid phone number error.

Good catch. I think current branch is in good shape then.

@aimane-chnaif
Copy link
Contributor

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(theme.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

Android: Native
android.mov
Android: mWeb Chrome
mchrome.mov
iOS: Native
ios.mov
iOS: mWeb Safari
msafari.mov
MacOS: Chrome / Safari
web.mov
MacOS: Desktop
desktop.mov

Copy link
Contributor

@aimane-chnaif aimane-chnaif left a comment

Choose a reason for hiding this comment

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

LGTM 🎉

@melvin-bot melvin-bot bot requested a review from madmax330 December 10, 2023 08:07
@aimane-chnaif
Copy link
Contributor

@barros001 there's conflict

@barros001
Copy link
Contributor Author

@barros001 there's conflict

@aimane-chnaif conflict resolved. We should try and merge this PR quickly because conflicts tend to happen the longer we wait due to the nature of the changes.

@aimane-chnaif
Copy link
Contributor

@barros001 there's conflict

@aimane-chnaif conflict resolved. We should try and merge this PR quickly because conflicts tend to happen the longer we wait due to the nature of the changes.

@madmax330 kindly bump ^

@madmax330 madmax330 merged commit 7ad6edc into Expensify:main Dec 18, 2023
15 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.

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/madmax330 in version: 1.4.14-0 🚀

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

@OSBotify
Copy link
Contributor

🚀 Deployed to staging by https://github.com/madmax330 in version: 1.4.14-0 🚀

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

@OSBotify
Copy link
Contributor

🚀 Deployed to production by https://github.com/jasperhuangg in version: 1.4.14-6 🚀

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

@mountiny
Copy link
Contributor

@barros001 @aimane-chnaif This was reverted as the additional phone check on the Search page has been causing the app to hang/ crash for Account Manager users who have thousands of people with sms number in their contacts

With the next attempt, lets make an Adhoc build and ask internal users like @conorpendergrast or @muttmuure to test the build search page performance

@barros001
Copy link
Contributor Author

@mountiny I thought of this scenario when working on the PR and even tried to make it as efficient as possible. I guess it wasn't enough, I'll look again into it.

@mountiny
Copy link
Contributor

No problem, this was super hard to catch because only some of the largest heavy users internally had this issue

@barros001
Copy link
Contributor Author

I'll run some performance tests against it. I think if I check for the length of the string and only comparing the first 3 digits (+11) instead of doing a regex test could make a difference here.

@barros001
Copy link
Contributor Author

@mountiny are we sure this PR caused the problem? I just run a quick benchmark test calling parsePhoneNumber 1,000,000 times in a row and comparing the total time it takes on the original and patched method. The difference is negligible on my tests. It fluctuates due to differences in load on my computer but the biggest difference I saw was 1 second (on a 55 seconds total time), which only a 2% difference. Load fluctuation on my computer plays a role here as well as sometimes the new is faster than the original. Overall it looks like the patched version does not add noticeable load to the system, but I could be wrong as my test is not super scientific.

I tried to following:

    if (phoneNumberWithoutSpecialChars.length !== 13 || !phoneNumberWithoutSpecialChars.startsWith('+11') || !/^\+11[0-9]{10}$/.test(phoneNumberWithoutSpecialChars)) {
        return parsedPhoneNumber;
    }

To delay calling .test unless we we exhausted faster checks but it did't really make noticeable difference here. In fact it made it worse when testing against 1M invalid (numbers subject to this PR) numbers (because now we're doing 3 tests on them vs only 1 - but these numbers should NOT be widespread by any means).

While I agree that if this PR is causing issues it should be reverted, to me the root cause here is the search page being inefficient. It calls parsePhoneNumber for each phone on the list multiple times while rendering, which is pretty inefficient. Maybe we should look into that and improve search as well?

@aimane-chnaif
Copy link
Contributor

@barros001 we haven't confirmed 100%. But the issue seemed to have gone after reverting 2 PRs at the same time.
So you can create new PR with same code changes and ask for reproducers test on adhoc build

@mountiny
Copy link
Contributor

@barros001 I must admit that there was not a clear reasoning due to the fact this was hard to experience locally, we ahve reverted two PRs, this one and #31010 so it could be that main problem was actually coming from the other PR.

Nevertheless, you are right the search page needs optimizing and there is couple PRs already in works as well as Reassure tests so hopefully we will get into a better place in a week or so

@barros001
Copy link
Contributor Author

@aimane-chnaif @mountiny I opened a new PR here for us to verify if this is causing the performance bottleneck. How do we go about making an Adhoc build?

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

Successfully merging this pull request may close these issues.

5 participants