Expensify / App

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

[HOLD for payment 2023-11-22] [HOLD for payment 2023-11-21] [$500] Scan-App crashes tapping on scan request split bill amount&merchant #31226

Closed izarutskaya closed 10 months ago

izarutskaya commented 10 months ago

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


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

Action Performed:

  1. Launch app
  2. Tap fab
  3. Tap request money
  4. Tap scan
  5. Take a photo
  6. Select any 2 users and tap split
  7. Tap Add to split
  8. Tap split
  9. Tap scan split bill created
  10. Tap amount
  11. Tap merchant

Expected Result:

Tapping on amount and merchant in scan request split bill, app must not crash.

Actual Result:

Tapping on amount and merchant in scan request split bill, app crashes.

Workaround:

Unknown

Platforms:

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

Screenshots/Videos

Add any screenshot/video evidence

https://github.com/Expensify/App/assets/115492554/4f528627-902f-4c98-bced-27ffc9df3221

https://github.com/Expensify/App/assets/115492554/6a3b5241-a8bc-4b07-ac81-b5ad02f3f7b7

amtcrasj.txt

View all open jobs on GitHub

Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~01c2c24def63298e44
  • Upwork Job ID: 1723301697309106176
  • Last Price Increase: 2023-11-11
melvin-bot[bot] commented 10 months ago

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

melvin-bot[bot] commented 10 months ago

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

melvin-bot[bot] commented 10 months ago

Bug0 Triage Checklist (Main S/O)

melvin-bot[bot] commented 10 months ago

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

izarutskaya commented 10 months ago

Not reproducible on production.

https://github.com/Expensify/App/assets/115492554/d9bbc3df-9db5-4768-8e0a-3655f3c7bd79

OSBotify commented 10 months ago

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

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

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

ishpaul777 commented 10 months ago

regression from https://github.com/Expensify/App/pull/28866 maybe ?

DylanDylann commented 10 months ago

Proposal

Please re-state the problem that we are trying to solve in this issue.

Scan-App crashes tapping on scan request split bill amount&merchant

What is the root cause of that problem?

In a withOnyx we are using the result of the previous field to get the next field https://github.com/Expensify/App/blob/f0fb7a825a26967766e9f040e71a79d6006b027e/src/pages/EditSplitBillPage.js#L138-L155

in here we are using reportActions field while getting transaction so that reportActions field will be undefined

What changes do you think we should make in order to solve the problem?

We should separate into 2 withOnyx function like that

export default compose(
    withOnyx({
        reportActions: {
            key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${route.params.reportID}`,
            canEvict: false,
        }
    }),
    // eslint-disable-next-line rulesdir/no-multiple-onyx-in-file
    withOnyx({
        transaction: {
            key: ({route, reportActions}) => {
                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
                return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
            },
        },
        draftTransaction: {
            key: ({route, reportActions}) => {
                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
                console.log("route.params.reportActionID", route.params.reportActionID)
                console.log("reportAction", reportAction)

                return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
            },
        },
    })
)(EditSplitBillPage);

What alternative solutions did you explore? (Optional)

ishpaul777 commented 10 months ago

Proposal

Please re-state the problem that we are trying to solve in this issue.

Scan-App crashes tapping on scan request split bill amount&merchant

What is the root cause of that problem?

withOnyx we are using the result of the previous field to get the next field and reportactions is undefined when used in transaction key

What changes do you think we should make in order to solve the problem?

we should use withReportAndReportActionOrNotFound and use compose like we use in SplitBillDetailsPage

export default compose(
    withReportAndReportActionOrNotFound,
    withOnyx({
    transaction: {
        key: ({route, reportActions}) => {
            const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
            return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
        },
    },
    draftTransaction: {
        key: ({route, reportActions}) => {
            const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
            return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
        },
    },
}))(EditSplitBillPage);

What alternative solutions did you explore? (Optional)

Gensu123 commented 10 months ago

### Problem Statement:

The Expensify app crashes when tapping on the amount and merchant in a scan request split bill, caused by reportActions being undefined when used in the transaction key within EditSplitBillPage.js.

Proposed Solution:

Implement a refactor in EditSplitBillPage.js using two separate withOnyx higher-order components. This approach will isolate the reportActions and transaction keys, ensuring that each is properly defined and accessed, thereby resolving the undefined issue leading to the crash.

Technical Implementation:

Modify the EditSplitBillPage.js file to use two withOnyx components. Ensure each component separately handles reportActions and transaction keys. Conduct thorough testing to confirm that the issue is resolved and no new bugs are introduced.

Approach 1: Separating into Two withOnyx Functions

import { compose } from 'react-compose';
import { withOnyx } from 'react-native-onyx';
import ONYXKEYS from 'YOUR_PATH_TO_ONYX_KEYS';

export default compose(
    withOnyx({
        reportActions: {
            key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${route.params.reportID}`,
            canEvict: false,
        }
    }),
    withOnyx({
        transaction: {
            key: ({route, reportActions}) => {
                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
                return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
            },
        },
        draftTransaction: {
            key: ({route, reportActions}) => {
                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
                return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
            },
        },
    })
)(EditSplitBillPage);

Approach 2: Using withReportAndReportActionOrNotFound

import { compose } from 'react-compose';
import { withOnyx, withReportAndReportActionOrNotFound } from 'react-native-onyx';
import ONYXKEYS from 'YOUR_PATH_TO_ONYX_KEYS';

export default compose(
    withReportAndReportActionOrNotFound,
    withOnyx({
        transaction: {
            key: ({route, reportActions}) => {
                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
                return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
            },
        },
        draftTransaction: {
            key: ({route, reportActions}) => {
                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
                return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
            },
        },
    })
)(EditSplitBillPage);
melvin-bot[bot] commented 10 months ago

📣 @Gensu123! 📣 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:

  1. Make sure you've read and understood the contributing guidelines.
  2. 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.
  3. 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.
  4. Copy the format below and paste it in a comment on this issue. Replace the placeholder text with your actual details. Screen Shot 2022-11-16 at 4 42 54 PM Format:
    Contributor details
    Your Expensify account email: <REPLACE EMAIL HERE>
    Upwork Profile Link: <REPLACE LINK HERE>
rlinoz commented 10 months ago

Removing the Help Wanted label because it seems that this was fixed reverting a PR here https://github.com/Expensify/App/pull/31231

stephanieelliott commented 10 months ago

Hey @izarutskaya can you retest this for us please?

roryabraham commented 10 months ago

Confirmed this issue is fixed: https://expensify.slack.com/archives/C9YU7BX5M/p1699981118689649?thread_ts=1699980359.470499&cid=C9YU7BX5M

roryabraham commented 10 months ago

No payments due, closing this out

melvin-bot[bot] commented 10 months ago

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

melvin-bot[bot] commented 10 months ago

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

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

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

For reference, here are some details about the assignees on this issue:

melvin-bot[bot] commented 10 months ago

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

melvin-bot[bot] commented 10 months ago

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

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

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

For reference, here are some details about the assignees on this issue:

melvin-bot[bot] commented 10 months ago

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