Skip to content

Add contacts import nitro module #54459

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 100 commits into
base: main
Choose a base branch
from

Conversation

perunt
Copy link
Contributor

@perunt perunt commented Dec 23, 2024

Explanation of Change

https://github.com/Expensify/Mobile-Expensify/pull/13516 - use this PR for Mobile-Expensify

During the revert of the NitroModules PR, we identified two main issues affecting our iOS builds. First, there was a mismatch between the minimum iOS deployment target (set to 13.4) and our app's requirement (iOS 15). Second, we discovered build failures specific to iOS simulators due to a known Swift compiler issue.
While investigating, we found that our CI environment was running an older version of Xcode (15.2), which contributed to the build failures. We've addressed this by updating our CI configuration to use newer macOS runners and updating the Ruby GitHub Action version.
To move forward cleanly, we'll be splitting this into two separate PRs:

  • CI infrastructure update for newer Xcode support
  • Re-introduction of ContactsModule with correct iOS configuration

After implementing these changes in isolation, our test builds are now passing successfully.

revert #54421

Fixed Issues

$ #47938
PROPOSAL:

Tests

See QA steps.

  • Verify that no errors appear in the JS console

Offline tests

QA Steps

Setup Prerequisites

  1. Clean installation of the app on Android and iOS devices
  2. No prior contact permissions granted
  3. Device with test contacts available

Test Steps

1. Basic Flow - First Time Access

  1. Launch the app
  2. Press the '+' button
  3. Select 'create expense' from the menu
  4. Navigate to the create expenses page
  5. Take a photo of expenses
  6. Verify: Navigation to recipient list occurs
  7. Verify: Soft permission modal appears (first-time only)

2. Soft Permission Modal - "Not Now" Path

  1. On the soft permission modal, press "Not Now"
  2. Verify: Modal closes without showing contact permission
  3. Verify: Recipient list is displayed without phone contacts
  4. Exit to the app home screen
  5. Repeat steps to reach recipient list
  6. Verify: Soft permission modal does NOT appear again within this app session

3. Soft Permission Modal - "Continue" Path

  1. On the soft permission modal, press "Continue"
  2. Verify: Soft permission modal closes
  3. Verify: Native contact permission modal appears

4. Contact Permission - Deny Access

  1. On the native permission modal, press "Deny" or "Don't Allow"
  2. Verify: Modal closes
  3. Verify: Recipient list appears without phone contacts
  4. Verify: Button for importing contacts appears at the bottom of the list
  5. Press the import contacts button
  6. Verify: Navigation to permission settings occurs

5. Contact Permission - Allow Access

  1. On the native permission modal, press "Allow" or "OK"
  2. Verify: Modal closes
  3. Verify: Contacts appear in the participant/recipient list

6. Search Functionality

  1. Deny contact access
  2. In the recipient list, perform a search that yields no results
  3. Verify: Clickable text for importing contacts appears
  4. Press the import contacts text
  5. Verify: Navigation to permission settings occurs
  • Verify that no errors appear in the JS console

PR Author Checklist

  • I linked the correct issue in the ### Fixed Issues section above
  • I wrote clear testing steps that cover the changes made in this PR
    • I added steps for local testing in the Tests section
    • I added steps for the expected offline behavior in the Offline steps section
    • I added steps for Staging and/or Production testing in the QA steps section
    • I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
    • I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).
  • I included screenshots or videos for tests on all platforms
  • I ran the tests on all platforms & verified they passed on:
    • Android: Native
    • Android: mWeb Chrome
    • iOS: Native
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
    • MacOS: Desktop
  • I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
  • I followed proper code patterns (see Reviewing the code)
    • I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
    • I verified that comments were added to code that is not self explanatory
    • I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
    • I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
      • If any non-english text was added/modified, I used JaimeGPT to get English > Spanish translation. I then posted it in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:
    • I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
    • I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is 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 followed the guidelines as stated in the Review Guidelines
  • I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
  • I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
  • I verified any variables that can be defined as constants (ie. in CONST.ts or at the top of the file that uses the constant) are defined as such
  • I verified that if a function's arguments changed that all usages have also been updated correctly
  • If any new file was added I verified that:
    • The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
  • If a new CSS style is added I verified that:
    • A similar style doesn't already exist
    • The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(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.
  • I added unit tests for any new feature or bug fix in this PR to help automatically prevent regressions in this user flow.
  • 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

@perunt
Copy link
Contributor Author

perunt commented Jan 6, 2025

I didn't test the Hybrid App as I don't have access yet

@perunt perunt marked this pull request as ready for review January 6, 2025 12:38
@perunt perunt requested a review from a team as a code owner January 6, 2025 12:38
@melvin-bot melvin-bot bot requested review from DylanDylann and shawnborton and removed request for a team January 6, 2025 12:38
Copy link

melvin-bot bot commented Jan 6, 2025

@shawnborton @DylanDylann One of you needs to copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button]

@staszekscp
Copy link
Contributor

Hey! I've created a PR with adjustments so everything works fine with HybridApp

@mateuuszzzzz
Copy link
Contributor

mateuuszzzzz commented Jan 7, 2025

Hi! @perunt what's your Xcode version locally? I'm testing PR on HybridApp and I cannot build for simulators (it builds fine on physical device tho). My version is 16.2 (16C5032a)

I'm also curious about swiftc version. Here is mine: swift-driver version: 1.115.1 Apple Swift version 6.0.3 (swiftlang-6.0.3.1.10 clang-1600.0.30.1)

The key information here is that some people might encounter issues when building on a simulator, while others might not, depending on their Swift compiler version. This can block HybridApp development for people without physical iPhone

@mateuuszzzzz
Copy link
Contributor

mateuuszzzzz commented Jan 7, 2025

Nevertheless I think this is not a serious issue and we can proceed further with this PR and its HybridApp part 😅

People experiencing issues with the Swift compiler can try downgrading their Xcode version or using a physical device if available. cc: @Julesssss

@mateuuszzzzz
Copy link
Contributor

I think only remaining thing is to bump Xcode on CI infrastructure. I have this PR that was created before Christmas: #54424
I will sync it with main later today

blimpich
blimpich previously approved these changes Jan 7, 2025
Copy link
Contributor

@blimpich blimpich left a comment

Choose a reason for hiding this comment

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

Tentatively approving, seems like we need to confirm first that this doesn't break hybrid app for simulator's as per above comments.

@blimpich
Copy link
Contributor

blimpich commented Jan 7, 2025

Also I think we need to merge main due to xcode being bumped, which is why the validate github actions check is failing.

@perunt
Copy link
Contributor Author

perunt commented Jan 10, 2025

I'm still dealing with Android errors after bumping RN. I'll ping you once it's done

@IuliiaHerets
Copy link

IuliiaHerets commented May 17, 2025

Android - Contacts - Missing Import contacts button when contact list is empty

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

Precondition:

  • Log in with a new account that has self DM and no chat history at all.
  • Contact access is denied.
  1. Launch adhoc app.
  2. Go to self DM.
  3. Track a manual expense.
  4. Tap Submit it to someone.
  5. Tap Not now on contact permission prompt.
  6. Note that Import contacts button is missing when there is no contact.
  7. Go back to LHN.
  8. Open FAB > Create expense > Manual.
  9. Submit an expense to any user.
  10. Go to self DM.
  11. Tap Submit it to someone.
  12. Note that Import contacts button is only present when there is at least one expense.

Expected Result:

In Step 6, Import contacts button should be present when there is no contact.

Actual Result:

In Step 6, Import contacts button is missing when there is no contact.
In Step 12, Import contacts button is only shown when there is at least one contact.

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834291_1747491780709.Screen_Recording_20250517_221907_Expensify_Adhoc.mp4

View all open jobs on GitHub

@IuliiaHerets
Copy link

iOS&Android - Members - "Select" widget at bottom not triggered on long pressing member name

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace >> go to Invite member page >> tap Invite member CTA
  4. Invite few members
  5. Long press on a existing member

Expected Result:

On long pressing member name, "Select" widget at the bottom should be triggered

Actual Result:

"Select" widget at bottom not triggered on long pressing member name, hence owner cannot select members

On Android app - Select widget is displayed at the bottom, but the "Select" checkboxes is not triggered on clicking Select

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834391_1747506705488.az_recorder_20250517_142128.mp4
Bug6834391_1747498004657.ScreenRecording_05-17-2025_12-04-09_1.mp4

View all open jobs on GitHub

@mitarachim
Copy link

mitarachim commented May 19, 2025

iOS - Contacts - Searched contact does not appear until background app & reopen

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace >> go to Invite member page >> tap Invite member CTA
  4. Enter email to search contact
  5. Wait for few seconds & observe searched contact does not appear below
  6. Background app & reopen it
  7. Observe infinite loading appears in search field (Note: Searched contact now displayed below)

Expected Result:

When user searches for a contact in invite member page, the contact should appear immediately to select in contacts below

Actual Result:

Searched contact does not appear until background app & reopen. Also, infinite loading appears in search field when background app & reopen

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834341_1747495129102.ScreenRecording_05-17-2025_10-54-09_1.mp4

View all open jobs on GitHub

@mitarachim
Copy link

iOS - Invite-User not automatically taken to confirm details page on selecting different roles

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace >> go to Invite member page >> tap Invite member CTA
  4. Search contact & select it >> Tap Next button
  5. Select a different role - Auditor or Admin

Expected Result:

User should be automatically redirected to confirm details page when selecting different roles

Actual Result:

User remains on role page & not automatically taken to confirm details page on selecting different roles. User has to manually tap back button to go back to confirm details page

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834360_1747496143479.ScreenRecording_05-17-2025_11-35-00_1.mp4

View all open jobs on GitHub

@mitarachim
Copy link

iOS - Invite- Invite button not responsive in confirm details page

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace >> go to Invite member page >> tap Invite member CTA
  4. Select contact >> tap Next button
  5. Tap on Invite button
  6. Observe user not redirected to members page
  7. Back ground app & reopen it or tap on back button twice to go back to members page
  8. Observe invited user appears in Members page

Expected Result:

On step 5 - On tapping Invite button, user should be redirected to members page & all listed members displayed

Actual Result:

Invite button not responsive in confirm details page. User not redirected to members page on tapping invite button. However, the invited user appears in members page and can be seen only after background app & reopening it

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834377_1747496926150.ScreenRecording_05-17-2025_11-44-59_1.mp4

View all open jobs on GitHub

@mitarachim
Copy link

iOS - Profile & Role fields remain highlighted after going back from profile or role page

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace >>Invite few members
  4. Tap on existing member
  5. Tap on Profile option
  6. Go back (Note: Profile field remain highlighted)
  7. Tap on Role option
  8. Go back (Note: Role field remain highlighted)

Expected Result:

Profile & Role fields should not be highlighted after going back from profile or role page

Actual Result:

Profile & Role fields remain highlighted after going back from profile or role page

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834434_1747501139771.ScreenRecording_05-17-2025_12-58-19_1.mp4

View all open jobs on GitHub

@mitarachim
Copy link

iOS-Profile option does not respond after visiting 1:1 DM & then selecting profile second time

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace >>Invite few members
  4. Tap on existing member
  5. Tap on Profile option
    6.Tap on Message button to go to 1:1 chat
  6. Tap back button to go back to Profile
  7. Tap back button to go back to user details page
  8. Tap profile option >> tap back button
  9. Tap on profile option again

Expected Result:

On step 10 - User able to visit details page on tapping profile option

Actual Result:

Profile option does not respond after visiting 1:1 DM & then selecting profile second time

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834451_1747501940568.ScreenRecording_05-17-2025_13-10-51_1.mp4

View all open jobs on GitHub

@mitarachim
Copy link

mitarachim commented May 19, 2025

iOS-Notification - No notification is received for 1:1 DM

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): N/A
Issue reported by: Applause Internal Team

Action Performed:

  1. Open the app
  2. Log in with a Gmail account
  3. Close the app
  4. Send a message from another device
  5. Open the app
  6. Open the message
  7. Background the app
  8. Send another message from another device

Expected Result:

I should receive a notification.

Actual Result:

No notification is received for 1:1 DM. The app can be closed or backgrounded.

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6834819_1747550384146.QFXE4461.mp4

View all open jobs on GitHub

@mitarachim
Copy link

Android-Contacts - Contact middle name is not displayed

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

Precondition:

  • There is a contact on device with first, middle and last name.
  • App contact permission is allowed.
  1. Launch adhoc app.
  2. Go to FAB.
  3. Tap Create expense > Manual.
  4. Enter amount > Next.

Expected Result:

The contact middle name will be displayed.

Actual Result:

The contact middle name is not displayed.

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6835109_1747585616362.Screen_Recording_20250518_003717_Expensify_Adhoc.mp4

View all open jobs on GitHub

@mitarachim
Copy link

iOS - Infinite loading on navigating to Private Notes page first time

Version Number: 9.1.42-0 PR:54559
Reproducible in staging?: No
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: Exp
Email or phone of affected tester (no customers): [email protected]
Issue reported by: Applause Internal Team

Action Performed:

  1. Launch Hybrid app
  2. Create new gmail account
  3. Create workspace
  4. Invite few members to workspace
  5. Select member >> tap on Profile >> tap on message button
  6. Go back to profile page
  7. Tap on Private notes

Expected Result:

Privates page should open when navigated to the page first time

Actual Result:

Infinite loading on navigating to Private Notes page first time

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Bug6835342_1747619911888.ScreenRecording_05-18-2025_21-56-13_1.mp4

View all open jobs on GitHub

@mvtglobally
Copy link

QA is completed

@perunt
Copy link
Contributor Author

perunt commented May 20, 2025

  1. Android - No option to Import contacts in Start chat page and Invite member page - 🟡 I didn't discuss this properly but originally my idea was to deliver contact import to expenses pages and later spread around the app. Since we have 4k changes now and adding that to the rest of the app will bring another 1 - 1.5k changes. Do you think we should deliver it within this PR? @roryabraham

  2. Android - Missing pagination "Showing x of y" & Show more button when contact access is denied 🟢 Done

  3. Android - Contacts - Missing Import contacts button when contact list is empty
    - 🟢 Done
    @Expensify/design, what do you think about this? I remember we removed the button and put a clickable text for the search mode(the second picture). In this case, we have the same layout, but not for search, instead for the main screen list(first picture). I assume we also apply some clickable text? How should it look, and what should it say?
    | Expense list | Expense list search |
    |-------------|--------------------|
    | IMG_6833 | IMG_6834 |

  4. iOS&Android - Members - "Select" widget at bottom not triggered on long pressing member name - ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main

  5. iOS - Contacts - Searched contact does not appear until background app & reopen ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main
    (same as the first report. I didn't touch this screen. @roryabraham should I add contact import here within this PR?)

  6. iOS - Invite-User not automatically taken to confirm details page on selecting different roles - ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main

  7. iOS - Invite- Invite button not responsive in confirm details page - ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main

  8. iOS - Profile & Role fields remain highlighted after going back from profile or role page - ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main

  9. iOS-Profile option does not respond after visiting 1:1 DM & then selecting profile second time - ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main

  10. iOS-Notification - No notification is received for 1:1 DM - ⚠️ This PR has nothing to do with notifications. Are we sure that this type of build that you're testing can receive notifications? @mitarachim

  11. Android-Contacts - Contact middle name is not displayed - 🟡 originally I did this intentionally. @roryabraham since we have only firstName and lastName do you think that we can merge middle name to lastName? What do you think about adding middle name in general?

  12. iOS - Infinite loading on navigating to Private Notes page first time - ⚠️ Not related to this PR. The bug originated in the main branch and disappeared after merging the latest changes from main

@dannymcclain
Copy link
Contributor

#54459 (comment)

  • 🟡 @Expensify/design, what do you think about this?

I'm not sure I am completely following, so I apologize if I'm missing something, but could we include the same little text component beneath the search bar as in your right screenshot, but just remove the first sentence saying "No results found"?

So we'd just have a little message under there that says "Import your contacts so your favorite people
are always a tap away."

Thoughts on something like that?

@perunt
Copy link
Contributor Author

perunt commented May 20, 2025

So we'd just have a little message under there that says "Import your contacts so your favorite people
are always a tap away."

Sounds good to me.
Yeah, I was about to use a similar approach but wanted to double-check with you, thanks!

@blimpich
Copy link
Contributor

#54459 (comment) - 🟡 I didn't discuss this properly but originally my idea was to deliver contact import to expenses pages and later spread around the app. Since we have 4k changes now and adding that to the rest of the app will bring another 1 - 1.5k changes. Do you think we should deliver it within this PR?

Agreed, this PR is big enough, lets not increase it even more.

#54459 (comment) - 🟡 originally I did this intentionally. @roryabraham since we have only firstName and lastName do you think that we can merge middle name to lastName? What do you think about adding middle name in general?

I think this is fine. I don't think it matters including the middle name. I would not expect this from an app and think it's better without importing the middle name.

@blimpich
Copy link
Contributor

I think this is really close to being merged 🚀! Things left to do:

  • fix merge conflicts here and in the Mobile-Expensify PR
  • confirm with QA that the tests are ready and have them QA the PR (not a full regression test suite). Slack conversation here. Looks like they might still be drafting them here.

Only other thing I can think of is putting this behind a beta, which will minimize our chances of having to revert this in case of deploy blockers. @perunt is it possible to put this behind a beta so that we can QA this in staging without exposing it to users? @roryabraham thoughts?

@perunt
Copy link
Contributor Author

perunt commented May 26, 2025

Good idea moving it to beta. I’ll do it

@roryabraham
Copy link
Contributor

@perunt you won't be able to until we create the beta in the back-end

@roryabraham
Copy link
Contributor

back-end PR to create the beta: https://github.com/Expensify/Web-Expensify/pull/46918

Note that it must be called nativeContactImport

@blimpich
Copy link
Contributor

Beta was deployed to staging. Should be deployed to production tomorrow. Bumped QA on creating some TC's for this feature here. However, even without the full set of TC's I think we should still be good to merge as long as the beta is in place and in production. So we could merge this as early as tomorrow I think.

Copy link
Contributor

@blimpich blimpich left a comment

Choose a reason for hiding this comment

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

Beta is on production and core e2e regression tests have been written. I think we're good to move forward here 👍 🚀

@perunt one more round of merge conflict resolution 🤞

@roryabraham how do you feel about moving forward?

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

Successfully merging this pull request may close these issues.