text:
[$1000] Inviting a user that has display name starting with "<" generates two bugs in the #admins channel

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

Action Performed:

Go to web chrome with User A account and change the display name of the user that starts with <, for example <hello (There should not be gap between the < and the name)
Now login with User B in web platform
From user's B account , go to any workspaces
Go to invite members page
Now invite the User A whose display name you changed a few moments back
Now go to the admins channel of that workspace
First Bug : Notice that it doesn't display the username of the user. It just displays 'added' and if you remove that user , it just displays 'removed user'. But for the users with normal display names that doesn't starts with < , it displays the whole text including the display name of the user
Second Bug : Notice that the 'added' and the ' removed user' are shown in white color , whereas if you add any other users with normal display name that doesn't starts with < , then it displays 'added name as an user' in grey color

Expected Result:
Adding a user that has display name starting with '<name' should display the username in the #admins channel. Also, it should be in grey color
Actual Result:
Adding a user that has display name starting with '<name' doesn't display the username. Also, the text is displayed in white color , which should actually be grey like other texts when a user with normal display names are added
Workaround:

Can the user still use Expensify without this being fixed? Have you informed them of the workaround?
Yes this is more an edge case problem

Platforms:

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

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[X] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: v1.3.3-1
Reproducible in staging?: Y
Reproducible in production?: Y
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
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/43996225/233505101-55988324-170c-46d3-ac7f-99ecd136c3a4.mp4
https://user-images.githubusercontent.com/43996225/233505123-a5af9724-fe65-485c-a76e-a373fe041075.mp4
Expensify/Expensify Issue URL:
Issue reported by: @priya-zha
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1681985659398949
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01a75f6d2bf3eaaaa6
Upwork Job ID: 1651235107916226560
Last Price Increase: 2023-04-26

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

Bug0 Triage Checklist (Main S/O)

[ ] This "bug" occurs on a supported platform (ensure Platforms in OP are ✅)
[ ] This bug is not a duplicate report (check E/App issues and #expensify-bugs)

If it is, comment with a link to the original report, close the issue and add any novel details to the original issue instead

[ ] This bug is reproducible using the reproduction steps in the OP. S/O

If the reproduction steps are clear and you're unable to reproduce the bug, check with the reporter and QA first, then close the issue.
If the reproduction steps aren't clear and you determine the correct steps, please update the OP.

[ ] This issue is filled out as thoroughly and clearly as possible

Pay special attention to the title, results, platforms where the bug occurs, and if the bug happens on staging/production.

[ ] I have reviewed and subscribed to the linked Slack conversation to ensure Slack/Github stay in sync

@michaelhaxhiu Whoops! This issue is 2 days overdue. Let's get this updated quick!

Will test tomorrow

Job added to Upwork: https://www.upwork.com/jobs/~01a75f6d2bf3eaaaa6

Current assignee @michaelhaxhiu is eligible for the External assigner, not assigning anyone new.

Triggered auto assignment to Contributor-plus team member for initial proposal review - @mollfpr (External)

Triggered auto assignment to @MonilBhavsar (External), see https://stackoverflow.com/c/expensify/questions/7972 for more details.

Current assignee @mollfpr is eligible for the Internal assigner, not assigning anyone new.

This requires internal change

oopsie daisy 🌸  thanks for fixing that Monil

@michaelhaxhiu @mollfpr @MonilBhavsar this issue was created 2 weeks ago. Are we close to a solution? Let's make sure we're treating this as a top priority. Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!

Not a priority, very weird and edge case.
cc @sakluger

Not a priority right now

@MonilBhavsar I understand you are focsed on Wave/NL priorities based on internal slack channels. Do you think we can start working on this next week or should we post in slack for a volunteer?
Just trying to get ahead of the 4 week "breaking WAQ" post that's going to inevitably happen next week. 🙏

@MonilBhavsar and I DM'ed and he's got a fix in mind. We agree this is edge case AF, and wave1 priorities are higher for Monil. But he will fix this in the coming days now that wave 1 is nearing it's end!

Discussing with Yuwen if we want to put a patch or not. If we agree, I can put up a PR here as I proposed

Any update @MonilBhavsar ?

I think we can close this issue for now. The fix is to prevent formatting for change log messages and this appears like not a real world example. We can fix it if we see this issue for any customer.
Please reopen if we see this issue in real.

I think we should fix this since it's reproducible and strange behavior. While I agree it's an edge case, I think it's still worth fixing personally.

Cool, I'll push a fix then 👍

We're discussing in slack https://expensify.slack.com/archives/C01GTK53T8Q/p1685100167513159

I think we should pass actionName prop to ReportActionItemFragment component and prevent rendering HTML for change log actions, and instead render text.
const differByLineBreaksOnly = Str.replaceAll(html, '<br />', '\n') === text;

// Only render HTML if we have html in the fragment
-if (!differByLineBreaksOnly) {
+if (!differByLineBreaksOnly && !_.contains(_.values(CONST.REPORT.ACTIONS.TYPE.POLICYCHANGELOG), props.actionName)) {

@mollfpr what do you think about this solution?

@mollfpr 👋 😄

Sorry, I missed the notification!

I think we should pass actionName prop to ReportActionItemFragment component and prevent rendering HTML for change log actions, and instead render text.

@MonilBhavsar Is there any reason for that? My understanding is we should always render HTML if possible.

No worries!
My understanding is - For these policy change log messages, we want to render messages with muted style. Please see this.
Now, if message contains an HTML like <, we encode it and hence html and text becomes different in fragment, and we end up rendering HTML and disregarding that style.
So, i was thinking of that solution. Please correct me If I am going other way.

Okay, that makes sense now!
What about the issue with the text fragment only showing added or removed user for display names containing an HTML? Is this will be fixed in the API?

What about the issue with the text fragment only showing added or removed user for display names containing an HTML? Is this will be fixed in the API?

That has been fixed as we're encoding HTML now, so this is the only thing left to do now.
I'll push a quick fix

@MonilBhavsar how is this coming along?

Note: I'm preparing to go OOO for ~2 weeks and assigning another BZ to watch over it.
Next steps:

Hoping @MonilBhavsar can give us a progress update and complete this.
Then, the BZ can process $1000 payment C+ review (for the internal PR) and $250 payment for bug reporter.

Weird, seems another BZ didn't get assigned despite that being my intention! But regardless this hasn't seen movement.
In terms of next steps, @MonilBhavsar what remains to close this out?

Re-assigning the Bug label so that a BZ can help see this through while I'm away on Sabbatical (starting Friday).
Next steps are same as outlined above:

@MonilBhavsar can you give us a progress update and complete your steps sometime soon 🙏 ?
Then, the BZ can process $1000 payment C+ review (for the internal PR) and $250 payment for bug reporter.

@MonilBhavsar sorry, I am coming to this a bit late - can you please provide an update here?

@MonilBhavsar bump!

Sorry for some delay here. @kavimuru can we please retest this bug. It appears fixed. Thank you!!

@kavimuru bump! ^^

(or actually @kavimuru pls reopen if still reproducible)

@NicMendonca Not reproduced anymore
Uploading Recording #1641.mp4…

@NicMendonca Should we still compensate the PR review and bug report here? I believe it's still a legit bug, but it was resolved.

@NicMendonca Could you take a look at the above comment, please? Thank you!

@mollfpr sorry for the delay - can you point me to the PR?

@NicMendonca Here's the PR https://github.com/Expensify/App/pull/20239.

authors: MelvinBot MonilBhavsar NicMendonca kavimuru michaelhaxhiu mollfpr


text:
Error while uploading bmp file

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

Action Performed:

Go to any chat
upload bmp file

Expected Result:
should not show any error
Actual Result:
error appears and not able to upload bmp file
Workaround:
Can the user still use Expensify without this being fixed? Have you informed them of the workaround?
Platforms:

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

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[x] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: 1.3.17.0
Reproducible in staging?: y
Reproducible in production?: y
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
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/43996225/f86c5858-64b1-4270-9632-4dbd41cbc9fd
https://github.com/Expensify/App/assets/43996225/168ddc3c-9495-45d5-9bd4-25a1fbc35bee
Expensify/Expensify Issue URL:
Issue reported by: @gadhiyamanan
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1684385464228429
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01c0b53c117b9e1663
Upwork Job ID: 1661341936466767872
Last Price Increase: 2023-05-24

hey @kavimuru why have you said this is reproducible on staging / production? the reporter even noted this is fixed on production. Thanks!

Actually - regardless of if this is fixed, bmp is not a supported file type:
// Same as the PHP layer allows
ALLOWED_EXTENSIONS: ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'html', 'txt', 'rtf', 'doc', 'docx', 'htm', 'tiff', 'tif', 'xml', 'mp3', 'mp4', 'mov'],

@zanyrenney If bmp file is not allowed, in that case, we have to show below popup

Cool, that would be a different issue though - if you can report that in the channel we can get it tested and written up to an issue.

We have started supporting all common filetypes, including .bmp, it looks like in this case we are failing to process BMP files in the backend while trying to create a thumbnail for them. I'll investigate this and report back here.

@kavimuru could you please attach the BMP image in this issue so I can test locally? I just tried with a few BMP images from https://filesamples.com/ and they worked.

@kavimuru the fix is live in staging, could you try again with the same file as in the recording?

@youssef-lr working for me

We can close this out once the fix is deployed to production.

@zanyrenney have we issued bug report payment for @gadhiyamanan?

@youssef-lr reporting bonus is pending

Will get an upwork job offer over to you asap @gadhiyamanan - there are some access issues with Upwork currently: **

**

Job post here https://www.upwork.com/jobs/~01154c72fc516f5d28
@gadhiyamanan you've been invited for the reporting bonus.

@zanyrenney applied

please accept the offer @gadhiyamanan

@zanyrenney accepted, thanks!

Closing this out as its in Prod and reporting bonus is paid out.

source: gharchive/issue

authors: gadhiyamanan kavimuru youssef-lr zanyrenney

repo: Expensify/App

license: MIT

license_type: permissive

license_source: github-api


text:
Chat-Sign * is not displayed in the message if this message consists only of emojis

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

Action Performed:

Go to URL https://staging.new.expensify.com/
Login with any account
Go to any chat
Send message that consists of only three emojis
Click Edit message
Add some * between emojis

Expected Result:
If we consider * as a markdown (bold), then it does nothing for emoticons and it need to be displayed in the message (as in Slack for example).
Actual Result:
Sign * is not displayed in the message if this message consists only of emojis
Workaround:
Unknown
Platforms:

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

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

Version Number: 1.3.22.0
Reproducible in staging?: Yes
Reproducible in production?: Yes
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
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/78819774/4d910fe1-ab36-4939-9295-5d1927e924d9
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
View all open jobs on GitHub

Proposal
Please re-state the problem that we are trying to solve in this issue.
* is not displayed in the message if this message consists only of emojis.
What is the root cause of that problem?
The root cause of this issue is that we render bold syntax for text consists only of emojis. For example input
*😄*😄*😄*

is translated into html
😄😄😄

What changes do you think we should make in order to solve the problem?
To fix this issue, we should skip rendering bold syntax if the text only consists of emojis. To achieve this, we can define a new regex EMOJIS_ALL after this line
EMOJIS_ALL: /^([\p{Extended_Pictographic}\u200d\u{1f1e6}-\u{1f1ff}\u{1f3fb}-\u{1f3ff}\u{e0020}-\u{e007f}\u20E3\uFE0F]|[#*0-9]\uFE0F?\u20E3)*$/gu,

to check if text consists of only emojis. And check if the text part of bold syntax contains emojis only in the replacement method
We change it
replacement: (match, g1) => (g1.includes('
') || this.containsNonPairTag(g1) ? match : `<strong>${g1}</strong>`),

to
replacement: (match, g1) => {
    // We remove spaces in g1 before test regex EMOJIS_ALL
    if (g1.replace(/\s/g, '').match(CONST.REG_EXP.EMOJIS_ALL)) {
        return match;
    }
    return g1.includes('
') || this.containsNonPairTag(g1) ? match : `<strong>${g1}</strong>`;
},

By doing so, we won't render bold syntax for input
*😄*😄*😄*

and won't break existing unit test cases of expensify-common.
If you want to verify more corner cases of this issue, below test cases will be helpful
*😄😄😄*

*😄😄 😄*

*😄😄😄
😄😄😄*

italic and strikethrough rule have similar issue, so we can apply same fix for them as well.
What alternative solutions did you explore? (Optional)
N/A

I'll test soon

@mountiny and @aimane-chnaif -- Based on this GH: https://github.com/Expensify/App/issues/14676#issuecomment-1571973632 I think we should close this GH. We are planning to not allow formating, right? Please let me know if I'm wrong and we can keep this one open.

yes, I think we can close this super narrow usecase


text:
[$1000] Android - Send Money - The cursor moves to the middle when entering amount

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

Action Performed:

Open the app
Login
Tap on the + button
Tap on Send money
Select a recipient
Enter 8 00000 quickly

Expected Result:
The cursor should always be moved at the end of the digits when entering the amount
Actual Result:
The cursor auto moves to the middle when entering amount. This causes the user to enter the amount wrongly since a digit that supposed to be at the end will rather be in the middle. For example. Entering the amount 4593000 will rather be 450390 due to the auto movement of the cursor
Workaround:
Unknown
Platforms:

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

[x] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[ ] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: 1.3.29.
Reproducible in staging?: Yes
**Reproducible in production?:**Yes
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
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/78819774/2881e256-3b2b-4927-85c2-acf04029ede9

Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~018846f9cb29c17500
Upwork Job ID: 1674450506459115520
Last Price Increase: 2023-06-29

Working on it

Real easy to reproduce on my android pixel

Proposal
========================================================
I will fix this problem with the textAlignVertical of the TextInput element.
So the cursor will keep the end position of the input and display correct input values.
Also, It needs to trigger user input and validate the amount as well.
<View
                    nativeID={this.amountViewID}
                    onMouseDown={(event) => this.onMouseDown(event, [this.amountViewID])}
                    style={[styles.flex1, styles.flexRow, styles.w100, styles.alignItemsCenter, styles.justifyContentCenter]}
                >
                    <TextInputWithCurrencySymbol
                        formattedAmount={formattedAmount}
                        onChangeAmount={this.updateAmount}
                        onCurrencyButtonPress={this.navigateToCurrencySelectionPage}
                        placeholder={this.props.numberFormat(0)}
                        ref={(el) => (this.textInput = el)}
                        selectedCurrencyCode={this.state.selectedCurrencyCode}
                        selection={this.state.selection}
                        onSelectionChange={(e) => {
                            if (!this.state.shouldUpdateSelection) {
                                return;
                            }
                            this.setState({selection: e.nativeEvent.selection});
                        }}
                    />
                </View>

📣 @k1r0s! 📣 Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork. Please follow these steps:

Get the email address used to login to your Expensify account. If you don't already have an Expensify account, create one here. If you have multiple accounts (e.g. one for testing), please use your main account email.
Get the link to your Upwork profile. It's necessary because we only pay via Upwork. You can access it by logging in, and then clicking on your name. It'll look like this. If you don't already have an account, sign up for one here.
Copy the format below and paste it in a comment on this issue. Replace the placeholder text with your actual details.

Format:

Contributor details
Your Expensify account email: <REPLACE EMAIL HERE>
Upwork Profile Link: <REPLACE LINK HERE>

ok, I will add it.

sure, @rushatgabhane
I think the focusTextInput() function is not triggered properly when the user type an amount.

Still fielding proposals. If no bites, will increase the price. But I agree let's find the regression if we can @rushatgabhane 🙏

Proposal
Please re-state the problem that we are trying to solve in this issue.
The problem is that when entering an amount quickly the cursor does not appear at the last position.
Additionally the order of the numbers might differ from how the were entered and the cursor might start
to jump between to positions.
What is the root cause of that problem?
The root cause seems to be that setState is call in onSelectionChange.
As I do not see the purpose of the implementation of
 onSelectionChange={(e) => {
                                        if (!this.state.shouldUpdateSelection) {
                                            return;
                                        }
                                        this.setState({selection: e.nativeEvent.selection});
                                    }}

What changes do you think we should make in order to solve the problem?
I would remove this block (onSelectionChanged). It  seems to work as expected on android and iOS.
This also solves the problem of the wrong order. And the jumping cursor.
What alternative solutions did you explore? (Optional)
I did not try anything else.

Here is a video to show the described problems.
https://github.com/Expensify/App/assets/109748065/9a2c3c86-283a-4bb3-a6e4-7186ba4a0de6

Doubling

:fry:

damn i missed that 😢


text:
Web - Some .bmp files does not show in chat

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

Action Performed:

Go to any chat
Send .bmp file

Expected Result:
Should show preview of .bmp file
Actual Result:
Does not show preview or as an attachment do download file
Workaround:
Unknown
Platforms:

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

[ ] Android / native
[ ] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[x] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: 1.3.62.0
Reproducible in staging?: y
Reproducible in production?: y
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
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/93399543/ee3ff4e4-e892-4405-9525-45a8d836cbb6
https://github.com/Expensify/App/assets/93399543/0652e121-3f2c-47bc-a194-5da1e85b668d
Expensify/Expensify Issue URL:
Issue reported by: @gadhiyamanan
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1689854452166949
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0184e0f8706ddb9c47
Upwork Job ID: 1698989397308989440
Last Price Increase: 2023-09-05

Similar to this issue, this is also a backend problem. what I observed is that the backend is returning an  tag for bmp images instead of an  tag like it does for jpg and png.

Adding the internal label since this looks like a backend issue.

Adding the engineer label as no engineer has been assigned.

Asking in slack if this is a file format we're supporting right now. This might be a feature request

Also going to make this a weekly – I think this should be low priority because I've never really seen this file format before.

Slack thread: https://expensify.slack.com/archives/C03TQ48KC/p1694659752399939

I'll get a PR up for this one this week.

Can be weekly.

Fix coming this week.

Couldn't get to this due to focusing on a design doc with tight deadline, I'll have a PR for this one tomorrow.

@youssef-lr were you able to get that PR ready?

@youssef-lr do you have an update here? 😬

Creating the PR today!

Cool please keep us posted!

Will do. Sorry didn't get to it yet, I will have free cycles tomorrow. I'm currently focusing on multiple PRs related to Wave7 & Money2020.

@adelekennedy I'm officially no longer in the BugZero team so reassigning this as it will not close until tomorrow.

I'll get to this next week, this is a low priority bug and can be weekly.

Youssef will be getting to this next week

bump on this @youssef-lr

PR ready!

@adelekennedy can we pay the reporting bonus please?

bump @adelekennedy
@youssef-lr can we changed it to weekly or daily instead of monthly ?

sorry! This dropped off my K2

just created the job and hired you: https://www.upwork.com/jobs/~013a6c902148242a54

@adelekennedy offer accepted, thanks!

and paid!

authors: AmjedNazzal adelekennedy flaviadefaria gadhiyamanan kbecciv roryabraham youssef-lr


text:
Participants on a bill split are not shown in a list after searching/selecting a user

Bug coming from https://github.com/Expensify/App/pull/29903

Version Number: v1.3.85-0
Reproducible in staging?: Y
Reproducible in production?: No
Slack conversation: https://expensify.slack.com/archives/C05RECHFBEW/p1697711009900939?thread_ts=1697687894.730109&cid=C05RECHFBEW
Action Performed:

Request money
Search an email
Select "Split"

Expected Result:
We should clear the entry in the input, so all previous selections are made.
Actual Result:
The search list is cleared, as if you didn't make a selection
Screenshots/Videos
http://g.recordit.co/RpgD602vd7.gif
View all open jobs on GitHub

cc : @thienlnam

We chatted about this in slack, and it seems like this bug is due to the new participant issue
https://github.com/Expensify/App/issues/29917
So going to close this in favor of that


text:
[HOLD for payment 2023-12-08] [$500] Compose - Pop up box shows contrast, heading as url and below mailto text

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.4.2.0
Reproducible in staging?: y
Reproducible in production?: y
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:

Go to https://staging.new.expensify.com/
Tap on a chat
Paste D@45.comGGgghbbbbbbv:vhjjbbvbbnnn.comhttps://expensify.testrail.io/index.php?/tests/view/4004034
Long press "D@45.comGGgghbbbbbbv"
part

Expected Result:
The pop up box must not show contrast message.
Actual Result:
The pop up box shows contrast message, heading as "copy URL to clipboard" and below "mailto" text when long pressing "D@45.comGGgghbbbbbbv"
Workaround:
Unknown
Platforms:

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

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence
https://github.com/Expensify/App/assets/93399543/19f6890c-f7a1-45dc-a12b-9d6c6c35bc47
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~010d7f48875a265e48
Upwork Job ID: 1727382831137755136
Last Price Increase: 2023-11-22

Proposal
Please re-state the problem that we are trying to solve in this issue.
Pop up box shows contrast, heading as url and below mailto text(https://github.com/Expensify/App/issues/31731#top)
What is the root cause of that problem?
The string "d@45.comGGgghbbbbbbv" would also be recognized as a valid email address, even though it contains an uppercase "G" in the domain name in using isValidEmailMarkdown function.
What changes do you think we should make in order to solve the problem?

To address this concern, it might be more appropriate to implement a more sophisticated email validation scheme that considers both the structure and content of the email address.
const isValidEmail = (href) => {
  const emailRegex = new RegExp(EMAIL_BASE_REGEX, 'i');
  const [localPart, domain] = href.split('@');

  if (!localPart.match(/^[a-z0-9.+_-]+$/)) {
    return false;
  }

  try {
    dns.lookup(domain, (err) => {
      if (err) {
        return false;
      }
    });
  } catch (err) {
    return false;
  }

  return emailRegex.test(href);
};

What alternative solutions did you explore? (Optional)

@bernhardoj's proposal LGTM 👍

@Ollyws could you please complete the BugZero checklist?

Offers sent to you both!

@bernhardoj $500 Contributor paid, thanks my dude!

Paid $500 to @Ollyws
Looks like we're all done here!

authors: kbecciv lakchote peterdbarkerUK sukach318


text:
[$500] Wallet - Radio buttons in questionnaire page have a different design

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.4.4.0
Reproducible in staging?: y
Reproducible in production?: cannot check production
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:
Issue found when executing PR https://github.com/Expensify/App/pull/31050
Action Performed:
Precondition: User has added a bank account.

Navigate to staging.new.expensify.com
Go to Settings > Wallet > Enable wallet.
Proceed to questionnaire page.

Expected Result:
The radio button has a tick in the button when unchecked and has green background when selected (Please refer to PR attachment).
Actual Result:
The radio button does not have a tick in the button when unchecked and does not have a green background when checked (different radio button from PR).
Workaround:
Unknown
Platforms:

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

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence
Staging

PR

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01f3dc5fe1ec3e1343
Upwork Job ID: 1729517232411906048
Last Price Increase: 2023-11-28

Proposal
Please re-state the problem that we are trying to solve in this issue.
Wallet - Radio buttons in questionnaire page have a different design
What is the root cause of that problem?
I don't know why this is a bug
Because the styles that are used are in the RadioButton component
What changes do you think we should make in order to solve the problem?
We can update styles like
            <View style={[styles.radioButtonContainer, hasError && styles.borderColorDanger, disabled && styles.cursorDisabled, isChecked ? {backgroundColor: theme.checkBox} : {}]}>
                <Icon
                    src={Expensicons.Checkmark}
                    fill={theme.white}
                    height={14}
                    width={14}
                />
            </View>

https://github.com/Expensify/App/blob/5eea6289a1bcbb36115a8bc31598e9105ebe16cd/src/components/RadioButton.tsx#L40-L50
What alternative solutions did you explore? (Optional)
NA (edited)

Yep! Staging is correct, this is an intentional update - to double check cc @dubielzyk-expensify but I think we're good

So this is expected? Should we close?

Yes @miljakljajic we should close this one out.

authors: ZhenjaHorbach dangrous kbecciv mananjadhav miljakljajic


text:
Help @staszekscp with access to Push Notification configurations

Help @staszekscp with access to Push Notification configurations.

[x] Add him to the OldDot apple development team, so I could build the app on physical devices

[x] Do the same for OldApp AdHoc
[ ] Attempt to resole AdHoc cert issue

[ ] Provide use cases for push notifications in NewDot, and which deep-links are going to be used
[ ] Modify backend so that push notifications from NewDot (triggered eg by chat messages) could also be shown for OldDot Hybrid if the userId matches

Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01cb1d504c4c27249f
Upwork Job ID: 1753372386828328960
Last Price Increase: 2024-02-02

I used our internal S.O to get @staszekscp onto our internal team. 🤞 everything went well

Today I shared additional provisioning profiles that should allow Mariusz to build OldDot AdHoc

Hey @AndrewGable, I'm trying to help @staszekscp build the AdHoc OldDot app to speed up his Hybrid notification testing:

The worst thing is that right now I cannot get push notifications at all on debug iOS... ...The solution here could be building an adhoc app, but I would need a provisioning profile with my apple developer account

I provided the AdHoc provisioning profile, but I believe his certificate would need to be Apple Distribution instead of the current Apple Development. But, I assume we shouldn't be giving that permission to external contributors. Even our internal certificates are for development only.
I'm also unfamiliar with the OldDot AdHoc capability. Is the plan to migrate NewDot AdHoc builds to this Capability, and delegate cert signing to a CI?

Today I submitted a PR that duplicates NewDot notifications to OldDot for a small list of accounts provided by @staszekscp.
Here's a cleanup issue to remind us to remove this code.

I think I fixed this, it was a configuration issue.

Provide use cases for push notifications in NewDot, and which deep-links are going to be used

Currently we only send Aitship push notifications for report comments. These are mostly basic messages, but there are a couple of addition badly formatted actions that take place:
I'm sharing them here for reference. I'm creating issues to improve these, but I think they just need to deep link users to the relevant chat.
IOU Request/Paid
No notifications
Invited or removed user from room

Room name was changed

Closing this, access has been provided for both SWM devs, and all requested information has been shared

authors: AndrewGable Julesssss


text:
Chat - Large font size when replacing emoji with text in compose box

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.4.66-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Issue reported by: Applause - Internal Team
Action Performed:

Log in to New Expensify
Navigate to any chat
Enter emoji in compose box
Highlight the emoji and replace it with any text

Expected Result:
Regular text font size should be displayed
Actual Result:
Text is displayed with large font size
Workaround:
Unknown
Platforms:

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

[x] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/2ff0e945-efa4-4e52-8d29-056be0c44353
View all open jobs on GitHub

@zanyrenney  FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

We think that this bug might be related to #vip-vsp

This seems like polish. I

These aren't even the correct emojis? I've just tried to reproduce this and I can't. These look like some kind of weird stickers?


text:
[$250] Profile - Timezones listing page displayed empty in Safari

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.4.74-1
Reproducible in staging?: Y
Reproducible in production?: Y
Email or phone of affected tester (no customers): applausetester+omq233@applause.expensifail.com
Logs: https://stackoverflow.com/c/expensify/questions/4856
Issue reported by: Applause-internal team
Action Performed:

Open https://staging.new.expensify.com/
Click on Profile icon
Select Profile > Timezone
Click on Timezone

Expected Result:
Timezones listing page should be displayed with timezones
Actual Result:
Timezones listing page is empty
Workaround:
Unknown
Platforms:

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

[ ] Android: Native
[ ] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[x] MacOS: Safari
[ ] MacOS: Desktop

Screenshots/Videos
https://github.com/Expensify/App/assets/115492554/66889583-1acb-4e14-8258-7dd5222f39a6

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01b2c71e8eb905ea6d
Upwork Job ID: 1793075625564327936
Last Price Increase: 2024-05-22

Issue OwnerCurrent Issue Owner: @s77rt

Sending through to external

Dupe of https://github.com/Expensify/App/issues/40483, we should reopen the original issue

I think we need to determine if this issue and this issue have the same root. if we're not sure, I think we should fix this and put https://github.com/Expensify/App/issues/40483#issuecomment-2123810738 on Hold since it's affecting only RP currency whereas this seems to be affecting a larger group of users.

Reposting my proposal here from https://github.com/Expensify/App/issues/40483, in case we want to fix it in this GH.
Proposal
Please re-state the problem that we are trying to solve in this issue.
Timezones listing page should be displayed with timezones
What is the root cause of that problem?
Here, we have the logic to scrollToIndex if the focused index changes in useArrowKeyFocusManager.
In useArrowKeyFocusManager here, we call onFocusedIndexChange in an useEffect, so it will be called in first render, even if the focusedIndex did not change.
This first render of useArrowKeyFocusManager (and scrolling) happens even before the SectionList here finishes rendering (and onLayout called), so the scrolling will interfere with the SectionList rendering, causing the blank page to show.
This is a known issue and avoided that by only scrolling to the focused index after the onLayout was already called here. But due to the first rendering in useArrowKeyFocusManager, scrolling is still called before onLayout.
What changes do you think we should make in order to solve the problem?

In useArrowKeyFocusManager here, we need to call onFocusedIndexChange when the focused index actually changes (not on first render). We can use usePrevious or firstRenderRef (like here) for this.
const prevIsFocusedIndex = usePrevious(focusedIndex);

useEffect(() => {
    if (prevIsFocusedIndex === focusedIndex) {
        return;
    }
    onFocusedIndexChange(focusedIndex)
}, [focusedIndex, prevIsFocusedIndex]);

What alternative solutions did you explore? (Optional)
In scrollToIndex, early return if onLayout of SectionList wasn't called yet. To do this, we need to store isInitialSectionListRender in a ref like isInitialSectionListRenderRef too and use it, also we need to make sure to set isInitialSectionListRenderRef to false before this line to make sure the initial scroll still works fine.
An alternative is to still reuse isInitialSectionListRender state, but we should use animated: false (or add a new param) to distinguish the first scroll. So we always allow the first scroll, if it's not the first scroll, isInitialSectionListRender is true, then we early return and don't scroll.

I think we need to determine if this issue and this https://github.com/Expensify/App/issues/40483#issuecomment-2123810738 have the same root.

Yes it has the same RCA.

@Christinadobrzyn Indeed we can close this one as a dupe.

okay closing this in favour of https://github.com/Expensify/App/issues/40483

authors: Christinadobrzyn greg-schroeder izarutskaya nkdengineer s77rt


text:
[Closed & Archived] Use private_isArchived instead of report state/status to determine archived behavior in App

We want to separate archived behavior from closed state/status. To do this, we introduced a new rNVP private_isArchived in the backend. Currently this is being sent in the reports Onyx collection but in the future this will be stored in a new reportsNameValuePairs collection.
We need to start using the private_isArchived rNVP instead of the closed state/status in the frontend
More info about temporarily using the report collection instead of creating the reportNameValuePairs collection here

@srikarparsi  Since I reviewed linked PR, can you please assign me to this issue?

Hi @Christinadobrzyn! @hungvu193 helped review this PR, do you think you could help with payment whenever you get a chance?

hi! Yes, happy to pay this out - just checking as a deploy blocker is showing. Is that accurate for this job?
@hungvu193 are you paid through Upwork?

hi! Yes, happy to pay this out - just checking as a deploy blocker is showing. Is that accurate for this job?

It's not a blocker however it's still in debate (https://github.com/Expensify/App/issues/45829#issuecomment-2241764314)

@hungvu193 are you paid through Upwork?

I'll request on ND 😄

hi! Yes, happy to pay this out - just checking as a deploy blocker is showing. Is that accurate for this job?

Thanks! We should pay @hungvu193 the full amount for reviewing because we will most likely close out both the blockers as expected behavior based on this thread.

Sounds good! Thank you @srikarparsi and @hungvu193!
Payment summary:
Payouts due:

Contributor+: $250 @hungvu193 (paid through NewDot)

Do we need a regression test?

The current tests cover this since this is just a refactor. So we should be good here :)

Awesome! Thanks @srikarparsi!
This is ready for payment based on this payment summary.
Since payment is only in NewDot, we can close this whenever is best.

I'm going to close this out, but let me know if we need to keep it open for any reason!

Requested on ND

$250 approved for @hungvu193

authors: Christinadobrzyn JmillsExpensify hungvu193 srikarparsi


text:
[$250] Card transaction is showing wrong date

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:
Reproducible in staging?: need reproduction
Reproducible in production?: need reproduction
If this was caught on HybridApp, is this reproducible on New Expensify Standalone?:
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: @mountiny
Slack conversation: https://expensify.slack.com/archives/C049HHMV9SM/p1729065391600539

I have the automatic timezone and it happened when i was in japan so i believe GMT+9

Action Performed:

Make a transaction on the expensify card Japan time
Open the expense report

Expected Result:
Should show the correct date of the transaction
Actual Result:
Showing wrong date (previous date)
Workaround:
unknown
Platforms:

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

[ ] Android: Standalone
[ ] Android: HybridApp
[ ] Android: mWeb Chrome
[ ] iOS: Standalone
[ ] iOS: HybridApp
[ ] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos

Add any screenshot/video evidence
![image (5)](https://github.com/user-attachments/assets/8301f16f-2246-49ae-94ea-e789743c7169)

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~021849906638089937871
Upwork Job ID: 1849906638089937871
Last Price Increase: 2024-10-25

Issue OwnerCurrent Issue Owner: @abdulrahuman5196

This has been labelled "Needs Reproduction". Follow the steps here: https://stackoverflowteams.com/c/expensify/questions/16989

I think we need someone specific to retest this in the same timezone

Its set for Needs reproduction label and no proposals

Sorry about that @abdulrahuman5196 this actually doesn't need reproductions - @mountiny experienced this and the logs/screenshot shows the results

Hi, I'm Nicolay from Callstack - expert contributor group - and I would like to work on this issue.

Will post my findings here:
The root case of the issue - that we do not use user timezone - when showing info for Transaction.

We use formatWithUTCTimeZone function to prepare Date in date field. And it's just use UTC - instead of user timezone.
As an example for the Vit date:

That's why Date is shown incorrectly. We need to rely on user timezone (manually selected/automatically detect) to show correctly the date in date field.
Let me know @abdulrahuman5196 wdyt

Not overdue - just assigned @narefyev91 👍

@abdulrahuman5196 friendly bump here

@abdulrahuman5196 friendly bump here

Hi, I was OOO couple of days. Checking back here.

@abdulrahuman5196 any updates here - thanks!

@abdulrahuman5196 any updates here - thanks!

Hi, Sorry for delay. Checking now

Hi, @narefyev91 I tested the code changes, AFAIK the analysis is correct.
But curious question on usecase perspective, if we change this logic to use user's current timezone when displaying the date, we could potentially show different dates when the user switches between one timezone to another. The transaction date should stay same after creation right?
cc: @slafortune

@abdulrahuman5196 good point - technically - what is returned from API should be shown. If in Vit situation - he submitted transaction 2024-10-16. From API side the same date is returned.
Probably we should 2 options here - either we do not touch date from API - and just show exactly what is coming or we apply user timezone from preferences.
But i think that if date is already created in one timezone (like in Tokio) and should not be changed - no matter where user will be move next. That's why option to not use any manipulation with date is more preferable. wdyt @abdulrahuman5196

But i think that if date is already created in one timezone (like in Tokio) and should not be changed - no matter where user will be move next. That's why option to not use any manipulation with date is more preferable

@narefyev91 I agree on this. But I think we should confirm with product on this.
@slafortune What do you think? Could you kindly confirm on product expectation if not already done?


text:
Core - Duplicate Expenses - Merge expenses CTA is not responsive

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: 9.0.53-0 Expensify Classic / 9.0.50.6 Expensify Classic
Reproducible in staging?: Unknown
Reproducible in production?: Y
If this was caught on HybridApp, is this reproducible on New Expensify Standalone?: Expensify Classic and might be affecting HybridApp
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/5082446
Email or phone of affected tester (no customers): gatantm+1011b@gmail.com
Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL: Unknown
Issue reported by: @IuliiaHerets
Slack conversation: https://expensify.slack.com/archives/C01SKUP7QR0/p1729058100280669 & https://expensify.slack.com/archives/C9YU7BX5M/p1729750397051089
Related to: https://github.com/Expensify/Expensify/issues/435841
Expected Result:
App directs to another page where user can select which title to keep on the merged expense
Actual Result:
Nothing happens
Action Performed:

On a Control workspace - Create two expenses Test 1 and Test 2 with same amount and a receipt each > Add both to the same Report
Go to Inbox and expand the task about the expenses needing attention > Begin Review
Select resolve on the Potential Duplicate line item
Tap Merge expenses

Workaround:
Unknown
Platforms:
Which of our officially supported platforms is this issue occurring on?

[ ] Android: Standalone
[ ] Android: HybridApp
[ ] Android: mWeb Chrome
[ ] iOS: Standalone
[ ] iOS: HybridApp
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop
[X] Expensify Classic Android

Notes/Images/Videos
https://github.com/user-attachments/assets/1a1409c5-f679-4dd9-b532-d0c75c92405f

View all open jobs on GitHub
Issue OwnerCurrent Issue Owner: @Christinadobrzyn

More examples of this
Build: 9.0.50.6
Account: gatantm+1011b@gmail.com
https://github.com/user-attachments/assets/315e8170-ea1a-4813-a9f2-b81cdec0386b

Build 9.0.53-0
https://github.com/user-attachments/assets/56e87386-6c4d-4fbd-a223-af9125252f1c

This has been labelled "Needs Reproduction". Follow the steps here: https://stackoverflowteams.com/c/expensify/questions/16989

Asking SWM if they might be able to help with this - https://expensify.slack.com/archives/C04878MDF34/p1730266628913689

Hey @Christinadobrzyn! Unfortunately the videos are unavailable for us, so I'm afraid they would have to be reuploaded so we can see them 😢 Also, do you know is there a way to create a test Control workspace on OldDot? When I tried to do that on my account the app informed me that I need a paid account to do that, and then after typing a workspace name the creation failed 😞

Hi @staszekscp I just uploaded them again through my own method instead of from another GH so maybe the permissions are different. Can you check again?

Follow up from @staszekscp that they also tested and can't reproduce so I feel more confident with putting this on weekly and having it retested. If we can retest consistently I'll reach back out to @staszekscp

I still can't reproduce this. Asking QA if they can test again.

Still reproducible
https://github.com/user-attachments/assets/bb2b53f1-7bb1-4de6-a7b3-46b4b86d79f7

I just tested this on Android mobile Classic v9.0.60.0 and it's not happening. I think this is resolved in the most recent Android app. Asking QA to retest.

This issue in not reproducible with new account
Build  v9.0.60.0
https://github.com/user-attachments/assets/65203686-7b40-401f-b31f-b71bda5d8602

Yay! Closing this since it seems to be resolved.

authors: Christinadobrzyn MelvinBot izarutskaya kavimuru staszekscp


text:
[$250] Expense - Edited amount for a paid request does not revert to paid amount when dismiss the error

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: v9.0.77-6
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught on HybridApp, is this reproducible on New Expensify Standalone?: N/A
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Email or phone of affected tester (no customers): N/A
Issue reported by: Applause Internal Team
Action Performed:

Navigate to staging.new.expensify.com.
[User A] Request money from User B.
[User A] Open IOU details page > Click Amount.
[User B] Pay the request.
[User A] Enter a new amount and save it.
[User A] Close the error message.

Expected Result:
The amount in IOU details page should revert to the original amount after closing the error message (as in PR #32898)
Actual Result:
The amount in IOU details page does not revert to the original amount after closing the error message. It only reverts after refreshing the app.
Workaround:
Unknown
Platforms:

[ ] Android: Standalone
[ ] Android: HybridApp
[ ] Android: mWeb Chrome
[ ] iOS: Standalone
[ ] iOS: HybridApp
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
https://github.com/user-attachments/assets/968f85dc-0481-4961-82c6-2be770919182
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~021871573512679466358
Upwork Job ID: 1871573512679466358
Last Price Increase: 2024-12-24

Issue OwnerCurrent Issue Owner: @hungvu193

Proposal
Please re-state the problem that we are trying to solve in this issue.
The amount in IOU details page does not revert to the original amount after closing the error message. It only reverts after refreshing the app.
What is the root cause of that problem?
We only update the pending field and error field of transaction in failureData. Then other data isn't reverted,
https://github.com/Expensify/App/blob/245863520625d8ecba9ad6793dc095c43b16eb60/src/libs/actions/IOU.ts#L2992-L3000
What changes do you think we should make in order to solve the problem?
We should revert to original transaction data and only override the pending field and error field. Or we can simply revert to transaction
failureData.push({
    onyxMethod: Onyx.METHOD.MERGE,
    key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
    value: {
        ...transaction,
        pendingFields: clearedPendingFields,
        isLoading: false,
        errorFields,
    },
});

Or
failureData.push({
    onyxMethod: Onyx.METHOD.MERGE,
    key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
    value: transaction,
});

https://github.com/Expensify/App/blob/245863520625d8ecba9ad6793dc095c43b16eb60/src/libs/actions/IOU.ts#L2992-L3000
We can check if getUpdateTrackExpenseParams has the same problem and fix it
What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

We must create a unit test for one of the update money request APIs, making the request fail. After that we need to verify the transaction data is reverted correctly.
What alternative solutions did you explore? (Optional)
NA
Reminder: Please use plain English, be brief and avoid jargon. Feel free to use images, charts or pseudo-code if necessary. Do not post large multi-line diffs or write walls of text. Do not create PRs unless you have been hired for this job.

Proposal
Please re-state the problem that we are trying to solve in this issue.
Expense - Edited amount for a paid request does not revert to paid amount when dismissing the error
What is the root cause of that problem?
We are not returning the transaction amount figure back to the original amount and will take the figure from modifiedAmount since it is not empty.
https://github.com/Expensify/App/blob/a6ea6a1f3a8ace0bc0a6b6c26e666627b697ea22/src/pages/home/report/ReportActionItem.tsx#L79
So, we any clear the errors but we don't revert the transaction changes.
https://github.com/Expensify/App/blob/245863520625d8ecba9ad6793dc095c43b16eb60/src/libs/actions/Transaction.ts#L460-L462
What changes do you think we should make in order to solve the problem?

Create a new function for the clearError prop, over here, to revert the transaction data to the previous values depending on which field was attempted to change while calling Transaction.clearError.
We will revert the transaction values from the report's modified Expense action originalMessage.
clearError={
 (transactionID) => {
  // Revert the transaction values from reportAction.originalMessage
  Transaction.clearError(transactionID)
 }
}

What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

Create a unit test for the new function to check if it can restore the previous values of the transaction even with different changes.
What alternative solutions did you explore? (Optional)
Let's update the failureData and add the previous values of the transaction, in this case, the amount, modified amount, etc...

Thanks for the proposals, everyone.
Both proposals make sense to me.
As described in the expected result, we should revert the edited amount after closing error message. Because of that I'm aligned with @Tony-MK 's proposal.
🎀👀🎀

Verify you will get an error message
Verify the amount is reverted to the paid amount

@hungvu193 Based on the PR mentioned in OP, the expected amount is reverted immediately after we get an error message.

@tylerkaraszewski, please wait for the assignment until we clarify what is expected.

I'm fine with both solutions:

cc @tylerkaraszewski  and @bfitzexpensify for the expected behavior here.

The amount in IOU details page should revert to the original amount after closing the error message (as in PR https://github.com/Expensify/App/pull/32898)

@bfitzexpensify I think we need to update the expected to avoid confusion. As in https://github.com/Expensify/App/pull/32898, the expected should be The amount in IOU details page should revert to the original amount after getting the error

@bfitzexpensify Please help to take a look at this comment when you have time

How do I make this not overdue? Does @bfitzexpensify need to comment?

Oh I need to comment, I'm still the owner of this issue.


text:
$500 Keyboard is hidden after user send message with send  button in mobile web - reported by @K4tsuki

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

Action Performed:

Navigate to any room in mobile web
Send a message by pressing send button
Onscreen keyboard disappear / hidden

Expected Result:
Onscreen keyboard stays visible like in native apps
Actual Result:
Onscreen keyboard is hidden/disappears
Workaround:
unknown
Platform:

Where is this issue occurring?

Mobile Web

Version Number: 1.1.39-0
Reproducible in staging?: Y
Reproducible in production?: Y
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
Expensify/Expensify Issue URL:
Issue reported by: @K4tsuki
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1643956656821729
View all open jobs on GitHub

Triggered auto assignment to @puneetlath (AutoAssignerTriage), see https://stackoverflow.com/c/expensify/questions/4749 for more details.

https://www.upwork.com/jobs/~012a764a955a9354d3

I have a feeling this might be more trouble than it's worth. Dealing with the virtual keyboard's disobedience on mobile safari is always a pain.

@K4tsuki did you have a proposal on how to fix this?

@laurenreidexpensify currently I don't have proposal for this issue.

Increased pricing to $500

Proposal
I notice that the issue is the default behavior of the browser. So what I'm gonna do add this.textInput.focus() to onFocus props of TouchableOpacity.
https://github.com/Expensify/App/blob/bc4f429849f87da71962638c204351a946cee474/src/pages/home/report/ReportActionCompose.js#L573-L583
+ onFocus={() => this.textInput.focus()}

This will make re focus the text input after the button is pressed.
https://user-images.githubusercontent.com/25520267/157417718-17a8a81d-20a3-46aa-af50-65d2d6144929.MP4

Interesting solution @mollfpr. It seems to work well on the mobile Web. But it will cause problems on the web. When a user is focusing on the send button via tab it will move it back to the composer.

Nice catch @parasharrajat . There’s another approach. Adding ‘this.textInput.focus()’ inside ‘submit’ also work, but there’s some delay for the focus applied to text input.

Yeah, that delay is bad as it will close the keyboard and reopen it causing layout shifts.

I do have a proposal too.
Proposal.

We can preventDefault mouseDown event to prevent the focus from being lost from Composer.  test here

On Submit button add an event https://github.com/Expensify/App/blob/6e83f4a1fc4a2087574d53b7fbc07c9234645393/src/pages/home/report/ReportActionCompose.js#L573
				<TouchableOpacity
                      ....
                      onPress={this.submitForm}
					  onMouseDown={e => e.preventDefault()}
					  ....

then in submitForm reset the selection to 0 so that cursor is reset as well at the last line. https://github.com/Expensify/App/blob/6e83f4a1fc4a2087574d53b7fbc07c9234645393/src/pages/home/report/ReportActionCompose.js#L385-L386
this.textInput.setNativeProps({selection: {start: 0, end: 0}});

@parasharrajat I think you got this 😉

I can't validate this atm because of https://expensify.slack.com/archives/C01GTK53T8Q/p1646964936524219

I just removed the Help Wanted label and will wait for a PR. @laurenreidexpensify feel free to hire @parasharrajat for this on upwork.

PR merged – as a reminder @laurenreidexpensify since @parasharrajat submitted the PR to fix this issue he's not eligible for the C+ reward for the issue as well, as stated our C+ guidelines:

If C+ wants to fix an issue they’re assigned to they will only be compensated for the fix ($0 for the C+ review) and they won’t have another C+ assigned to review. The CME assigned to the issue will review proposals fairly, not favoring the C+.

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

https://github.com/Expensify/App/pull/8091

If no regressions arise, payment will be issued on 2022-03-24. :confetti_ball:

Taking over CM to manage payments.  @parasharrajat , can you apply here plz https://www.upwork.com/jobs/~012a764a955a9354d3

@mallenexpensify Applied with correct terms. Thanks.

Paid @parasharrajat $500 for the fix and @K4tsuki $250 for reporting. Thanks!

Since the linked PR caused a small regression, @parasharrajat could you please follow the steps mentioned in the doc here and fill the RCA doc. It will be helpful to learn something and improve our process.
I have added a row in the RCA sheet, feel free to update it.

Thanks, @MonilBhavsar but I wasn't C+ on this issue. I solved with a PR as a contributor. So IMO, the C+ assigned on the new issue should proceed with the steps. cc: @mananjadhav. Please let me know otherwise whatever is the process.

Thank you! 🙌

authors: K4tsuki MelvinBot MonilBhavsar botify laurenreidexpensify mallenexpensify mollfpr mvtglobally parasharrajat roryabraham


text:
Stack traces are not showing up in logs when hit from the error boundary

Problem
Stack traces are not showing up in logs when hit from the error boundary
Solution
Think we can just wrap them in JSON.stringify to fix. not sure why they do not show up correctly on the log server but discussing here.

Triggered auto assignment to @sonialiap (AutoAssignerTriage), see https://stackoverflow.com/c/expensify/questions/4749 for more details.

@marcaaron Whoops! This issue is 2 days overdue. Let's get this updated quick!

authors: MelvinBot marcaaron


text:
[No QA] Remove unneeded suppression

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/10460
Tests / QA
None

: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.

🚀 Deployed to staging by @deetergp in version: 1.1.96-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

source: gharchive/pull-request

authors: Gonals OSBotify


text:
Remove all uses of report.lastActorEmail

Details

As part of the personalDetails email to accountID migration, I removed all uses of lastActorAccountEmail in the App.
Fixed Issues

https://github.com/Expensify/App/issues/19007
Tests

Make sure you are able to create tasks and reports as normal and without error.
Make sure the LHN loads report details as normal
Make sure the search page loads report details as normal

[x] Verify that no errors appear in the JS console

Offline tests

Same as regular tests. Chats/tasks should be created optimistically
QA Steps

Same as tests.

[ ] Verify that no errors appear in the JS console

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 the expected offline behavior in the Offline steps 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 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).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[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 is localized by adding it to src/languages/* files and using the translation method

[x] 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:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] 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.
[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] I verified that if a function's arguments changed that all usages have also been updated correctly
[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 any new file was added I verified that:

[x] 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

[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 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.
[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] 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.
[x] 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.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

Mobile Web - Chrome

Mobile Web - Safari

Desktop

iOS

Android

Code is looking good, but yeah definitely need to test thoroughly :D

iOS seems to be acting very weirdly. Is this a known issue?

There is a known issue with assigning tasks to someone you've never chatted with before, yes. That's being handled separately.

I just tried iOS safari with a user who I already have chatted with and it seems to work fine.

Same thing with iOS:

I'm having an issue with Android chrome where it won't load the app. Won't load new.expensify.com either which is weird.

Merging since @neil-marcellini and @allroundexperts already approved! 👍

: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.

🚀 Deployed to staging by https://github.com/Beamanator in version: 1.3.39-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/francoisl in version: 1.3.39-11 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

authors: Beamanator OSBotify puneetlath


text:
[No QA] Update deployBlocker workflow to stop using community actions

Details
This PR updates the deployBlocker workflow to:

Use the gh cli instead of community actions (we're seeing warnings on the labeler action as it's still using Node 12)
Use GitHub App token for OSBotify
Relative paths for actions to actions + workflows remain in-sync.

Fixed Issues
$ n/a
Tests

Merge this PR.
Add the DeployBlockerCash label to an issue
Verify that the job completes successfully.

[x] Verify that no errors appear in the JS console

Offline tests
n/a
QA Steps
n/a

[x] Verify that no errors appear in the JS console

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 the expected offline behavior in the Offline steps 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 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).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[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 is localized by adding it to src/languages/* files and using the translation method

[x] 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:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] 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.
[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] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] 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

[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 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.
[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] 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.
[x] 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.
[x] 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: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

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] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[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 is localized by adding it to src/languages/* files and using the translation method
[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] 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.
[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 any new file was added I verified that:

[x] 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

[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 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.
[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] 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.
[x] 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.
[x] 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.
[x] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native
N/A - Deploy code only

Android: mWeb Chrome
N/A - Deploy code only

iOS: Native
N/A - Deploy code only

iOS: mWeb Safari
N/A - Deploy code only

MacOS: Chrome / Safari
N/A - Deploy code only

MacOS: Desktop
N/A - Deploy code only

: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.

🚀 Deployed to production by https://github.com/luacmartins in version: 1.4.1-13 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

authors: AndrewGable OSBotify roryabraham


text:
[CP staging] Revert "Align offline receipt view for one-transaction and multi-transaction views"

Reverts Expensify/App#39465
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 the expected offline behavior in the Offline steps 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 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).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[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 is localized by adding it to src/languages/* files and using the translation method

[x] 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:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] 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.
[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] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] 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

[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(theme.componentBG))

[x] 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.
[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] 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.
[x] If the PR modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label so the design team can review the changes.

[x] 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.
[x] 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: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

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 either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[ ] 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 the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[ ] I verified that all the inputs inside a form are aligned with each other.
[ ] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[ ] 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: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

: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.

🚀 Cherry-picked to staging by https://github.com/Julesssss in version: 1.4.61-6 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
failure ❌

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Cherry-picked to staging by https://github.com/Julesssss in version: 1.4.61-6 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Deployed to production by https://github.com/Julesssss in version: 1.4.61-8 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

authors: NikkiWines OSBotify pecanoro