Skip to content

Use ActivityIndicator for the IOURequestStepConfirmation scan/loading overlay - #96827

Open
MelvinBot wants to merge 5 commits into
mainfrom
claude-iouConfirmationScanLoaderActivityIndicator
Open

Use ActivityIndicator for the IOURequestStepConfirmation scan/loading overlay#96827
MelvinBot wants to merge 5 commits into
mainfrom
claude-iouConfirmationScanLoaderActivityIndicator

Conversation

@MelvinBot

@MelvinBot MelvinBot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Explanation of Change

Part of the IOU cluster loader refactor (parent: #69850).

Inside IOURequestStepConfirmation's ScreenWrapper, the isLoading/scan-with-no-receipts placeholder rendered a FullScreenLoadingIndicator as an absolute-fill overlay. A header is always present behind it — the inner HeaderWithBackButton in the standalone RHP route, or the parent header/tab bar when the screen is embedded on IOURequestStartPage — so a full-screen loader here violates UI-1.

This swaps it to an ActivityIndicator and scopes the loading overlay to a dedicated content container below the header, so the header/back button stays interactable while a scan is processing (the "no escape" trapping behavior is removed). The reasonAttributes telemetry payload is preserved.

Note: the sibling PR for the other loader in this same file (the isLoadingTransaction early return) also adds the @components/ActivityIndicator import. The two changes touch different lines and merge cleanly, but whichever merges second may show a trivial import-line conflict to resolve.

Fixed Issues

$ #96096
PROPOSAL:

Tests

  1. Open the app and sign in.
  2. Tap the green + (FAB) → Create expenseScan tab.
  3. Take a photo of (or upload) a receipt and continue to the confirmation step, so a scan expense begins processing.
  4. While the receipt is still being processed (the scan overlay is showing, before any receipt file has rendered), observe the confirmation screen:
    • Verify a centered spinner (ActivityIndicator) is shown as an overlay covering the confirmation content, in the same area the previous full-screen loader covered (no visual/position regression).
    • Verify the header with the back button remains visible and tappable — you are not trapped and can navigate back while the overlay is showing.
  5. Repeat the flow embedded on the start page (open Scan from the + where the confirmation is rendered inside IOURequestStartPage) and verify the overlay shows the spinner while the parent header / tab bar stays visible.
  6. Wait for processing to finish and verify the overlay disappears and the confirmation content renders normally, with no errors.
  • Verify that no errors appear in the JS console

Offline tests

QA Steps

  1. Sign in on staging.
  2. Tap the green + (FAB) → Create expenseScan tab.
  3. Take a photo of (or upload) a receipt and continue to the confirmation step so a scan expense starts processing.
  4. While the receipt is still processing, verify the loading overlay on the confirmation step shows a centered spinner over the confirmation content, and the header/back button stays visible so you can navigate back (you are not stuck on a full-screen loader).
  5. Verify the same behavior when Scan is opened from the start page (confirmation embedded in IOURequestStartPage): the spinner overlays the content while the parent header / tab bar remain visible.
  6. Verify that once processing completes, the overlay disappears and the confirmation content renders correctly with no regressions.
  • 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
  • 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 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 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)
  • 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)
  • 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 new assets were added or existing ones were modified, I verified that:
    • The assets are optimized and compressed (for SVG files, run npm run compress-svg)
    • The assets load correctly across all supported platforms.
  • 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.
  • 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

… overlay

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>
@MelvinBot
MelvinBot requested a review from a team July 23, 2026 03:52
@MelvinBot

Copy link
Copy Markdown
Contributor Author

situchan I looked into the failing checks — there's nothing to push a fix for here.

The only failing check is PR Author Checklist / checklist. It fails because the author-checklist boxes (and the Tests/QA sections) haven't been completed yet, not because of anything in the code. This check turns green once the human co-author fills out the checklist and marks the PR ready for review — I can't (and shouldn't) tick those boxes on a human's behalf, so there's no code change for me to make.

Every substantive check passes: typecheck, all 8 test jobs, ESLint, Oxfmt, React Compiler Compliance, Storybook tests, Bun tests, Check for unused styles, Compare knip issues against main, spellcheck, and all builds. The two *-perf-tests jobs were still running when I checked; they compare branch-vs-baseline render performance and won't be affected by swapping a loader component, so I don't expect them to block.

Next step: complete the PR Author Checklist and the Tests/QA sections, then mark the PR ready for review — that clears the only red check.

@situchan

situchan commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot add Tests/QA steps
And pull main and fix conflict

…nScanLoaderActivityIndicator

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>

# Conflicts:
#	src/pages/iou/request/step/IOURequestStepConfirmation.tsx
@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Done — both requests handled:

1. Merged main and resolved the conflict. The only conflict was the expected import-line clash in src/pages/iou/request/step/IOURequestStepConfirmation.tsx. Resolved by taking main's react import (which had dropped the now-unused useRef, since main refactored away the hasPreInsertFired ref this PR never touched) and keeping this PR's react-native import with StyleSheet (still used at line 906 for the overlay). PR is now MERGEABLE.

2. Added Tests and QA steps covering the scan/loading overlay: verify a centered ActivityIndicator spinner overlays the confirmation content while the header/back button stays visible (not trapped), in both the standalone confirmation route and embedded on IOURequestStartPage.

⚠️ The local AI test suite (lint / typecheck / jest / prettier) still isn't runnable in my environment, so I couldn't validate locally — CI will validate lint/typecheck/tests on this merge commit. The conflict resolution itself is low-risk (it only removes an unused import symbol and keeps one that's already used).

Please review the Tests/QA wording and adjust if anything about the flow differs, then complete the platform screenshots/checklist before marking ready for review.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

The only failing check is PR Author Checklist / checklist — that's not a code or test failure, so there's nothing to fix by pushing code.

All the real checks are green (typecheck, all 8 test jobs, ESLint, Oxfmt, React Compiler, Storybook, spellcheck, builds). The checklist job fails simply because the boxes in the PR Author Checklist section aren't checked (0 of 38). It'll go green once the author checks them off. branch-perf-tests/baseline-perf-tests are still pending, not failing.

No fix pushed.

Comment on lines +898 to +910
// This overlay renders on top of the header (the inner one in the standalone RHP route, or the
// parent header/tab bar when embedded on IOURequestStartPage), so per UI-1 use ActivityIndicator
// (the user can still go back) instead of FullScreenLoadingIndicator. Keep the absolute-fill overlay styling.
<View style={[StyleSheet.absoluteFill, styles.fullScreenLoading, styles.w100]}>
<ActivityIndicator
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
reasonAttributes={{
context: 'IOURequestStepConfirmation',
isLoading,
isScanRequestWithNoReceipts: isScanRequest(transaction) && !Object.values(receiptFiles).length,
}}
/>
</View>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@MelvinBot we should not use absolute-fill overlay styling. This also covers header and back button is not interactable.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good catch — you're right that the previous overlay used StyleSheet.absoluteFill on a View that was a sibling of the HeaderWithBackButton inside the outer flex1, so it painted over the whole subtree (including the header) and blocked the back button in the standalone RHP route.

Fixed in 28e5c10: the loading indicator is now scoped to a dedicated content container below the header, so the header/back button sits outside it and stays interactive while a scan is processing.

  • The content (loader + orchestration subtree) is wrapped in a new <View style={styles.flex1}> that is a sibling after the header, and the loader overlays only that container (IOURequestStepConfirmation.tsx:898).
  • I kept it as an overlay (rather than gating the content out) on purpose: the scan orchestration subtree (SubmitExpenseOrchestrator, PDFValidationComponent, ErrorModal) must stay mounted while loading, so unmounting it isn't safe. If you'd prefer the loader to fully replace the content in normal flow instead of overlaying it, let me know and I'll switch to that.

oxfmt, typecheck, lint, and the React Compiler compliance check all pass locally (the file's pre-existing compiler warnings are unchanged — no new divergence).

One caveat on verification: I couldn't runtime-confirm this on web because reaching the scan confirmation screen requires attaching a receipt via a native file dialog, which the web test harness can't drive. I confirmed the fix by diff review + the checks above. Please re-check the back-button behavior during a scan on your end.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

The two failing checks are PR Author Checklist / checklist and PR Reviewer Checklist / checklist — every other check is passing.

These two aren't code or CI failures, and there's nothing to fix by pushing a commit. They stay red until the checkboxes in the PR body are ticked:

  • PR Author Checklist — fails because the author checklist items in the PR description (and the screenshots/videos per platform) are unchecked. It'll pass once those boxes are completed.
  • PR Reviewer Checklist — fails until a reviewer runs their checklist and completes it.

No code change is needed here. Once the checklists are filled in, both checks will go green.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Re-checked — the state is unchanged. The only two failing checks are PR Author Checklist / checklist and PR Reviewer Checklist / checklist; all other checks are passing or still running (a fresh CI run is in progress).

As noted above, neither of these is a code/CI failure — they stay red until the author checklist boxes are ticked in the PR description and a reviewer completes their checklist. There's nothing to fix by pushing a commit; they'll go green once the checklists are filled in.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

The only two failing checks are PR Author Checklist / checklist and PR Reviewer Checklist / checklist — every functional check (tests, typecheck, ESLint, builds, perf) is passing.

Neither of these is a code or CI failure, so there's nothing to fix with a commit:

  • PR Author Checklist — stays red until the checkboxes in the PR description (including per-platform screenshots/videos) are ticked.
  • PR Reviewer Checklist — stays red until a reviewer runs and completes their checklist.

Both will turn green once the checklists are filled in by a human. No push from me is needed here.

@codecov

codecov Bot commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ Changes either increased or maintained existing code coverage, great job!

Files with missing lines Coverage Δ
...es/iou/request/step/IOURequestStepConfirmation.tsx 73.41% <61.11%> (ø)
... and 9 files with indirect coverage changes

Comment on lines +907 to +916
<View style={[styles.pAbsolute, styles.h100, styles.w100, styles.fullScreenLoading]}>
<ActivityIndicator
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
reasonAttributes={{
context: 'IOURequestStepConfirmation',
isLoading,
isScanRequestWithNoReceipts: isScanRequest(transaction) && !Object.values(receiptFiles).length,
}}
/>
</View>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@MelvinBot simply use LoadingIndicator component

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 0e25ad9 — swapped the inline View + ActivityIndicator for the LoadingIndicator component and removed the now-unused ActivityIndicator import.

LoadingIndicator still renders inside the content wrapper below the header (IOURequestStepConfirmation.tsx:902), so its absoluteFill styling is scoped to that container and the header/back button stay interactive while loading — the earlier fix is preserved.

oxfmt, typecheck, lint, and the React Compiler compliance check pass locally (the file's pre-existing compiler warnings are unchanged — no new divergence). I still can't runtime-verify the scan overlay on web, since reaching the confirmation screen requires attaching a receipt via a native file dialog the web harness can't drive.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Re-checked — the state is unchanged. The only two failing checks are PR Author Checklist / checklist and PR Reviewer Checklist / checklist; every real CI check (tests, typecheck, ESLint, builds, perf) is green.

Neither of these is a code or CI failure, so there is nothing I can push to fix them:

  • PR Author Checklist — stays red until the checkboxes in the PR description (and per-platform screenshots) are ticked.
  • PR Reviewer Checklist — stays red until a reviewer runs and completes their checklist.

Both will turn green once the checklists are completed by a human; no code change is needed.

@situchan

situchan commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot please check all items on the author checklist (Do NOT leave any item unchecked). I also verified this across all platforms.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Still the same picture as before — the only two failing checks are PR Author Checklist / checklist and PR Reviewer Checklist / checklist. The remaining checks are still in progress, and none of them are failing.

These two checklist checks aren't code/CI failures and can't be fixed with a commit. They stay red until:

  • PR Author Checklist — the author checklist boxes (and per-platform screenshots) in the PR description are ticked.
  • PR Reviewer Checklist — a reviewer completes their checklist pass.

No code change is needed here.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

Done — I checked all 38 items in the PR Author Checklist section (based on your confirmation that you verified this across all platforms).

I left the two - [ ] Verify that no errors appear in the JS console boxes unchecked, since those sit inside the Tests and QA Steps sections (not the author checklist) and are meant for the human tester/QA to check off. Let me know if you'd like those ticked too.

@MelvinBot

Copy link
Copy Markdown
Contributor Author

The failing typecheck check is unrelated to this PR — it's a pre-existing breakage on main, and there's no fix I can push from this branch.

What's failing:

src/languages/el.ts(10554,5): error TS2741: Property 'multipleTaxExport' is missing ...

Why it's not from this PR: This PR only changes src/pages/iou/request/step/IOURequestStepConfirmation.tsx (the ActivityIndicator swap). It touches no language files. The error is in the Greek locale, which this branch doesn't even contain — CI typechecks the branch merged with main, so the failure is inherited from main.

Root cause (on main, SHA b019693): en.ts defines multipleTaxExport in the export object, but the Greek el.ts export block is missing that key — so el.ts no longer satisfies the translation type. main itself currently fails this typecheck; every open PR is inheriting the same red check.

What needs to happen: Someone needs to add multipleTaxExport to src/languages/el.ts on main (a Greek translation of the "Canadian Multiple Tax Export" string). Once main is green, this branch will pass after main is merged in. I'm intentionally not adding it here — it's outside this PR's scope, requires a proper Greek translation, and would collide with the real fix landing on main.

The other red check, PR Reviewer Checklist, is just the reviewer checklist waiting to be completed — not a code failure.

@situchan

situchan commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot mark as ready for review

@MelvinBot
MelvinBot marked this pull request as ready for review August 3, 2026 22:44
@MelvinBot
MelvinBot requested a review from a team as a code owner August 3, 2026 22:44
@melvin-bot
melvin-bot Bot requested review from situchan and removed request for a team August 3, 2026 22:44
@melvin-bot

melvin-bot Bot commented Aug 3, 2026

Copy link
Copy Markdown

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

@melvin-bot
melvin-bot Bot requested review from JmillsExpensify and removed request for a team August 3, 2026 22:44
@MelvinBot

Copy link
Copy Markdown
Contributor Author

Done — this PR is now marked ready for review. 🚀

@situchan

situchan commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Reviewer Checklist

  • I have verified the author checklist is complete (all boxes are checked off).
  • I verified the correct issue is linked in the ### Fixed Issues section above
  • I verified testing steps are clear and they cover the changes made in this PR
    • I verified the steps for local testing are in the Tests section
    • I verified the steps for Staging and/or Production testing are in the QA steps section
    • I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
    • I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
  • I checked that screenshots or videos are included for tests on all platforms
  • I included screenshots or videos for tests on all platforms
  • I verified that the composer does not automatically focus or open the keyboard on mobile unless explicitly intended. This includes checking that returning the app from the background does not unexpectedly open the keyboard.
  • I verified tests pass on all platforms & I tested again on:
    • Android: HybridApp
    • Android: mWeb Chrome
    • iOS: HybridApp
    • iOS: mWeb Safari
    • MacOS: Chrome / Safari
  • 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 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 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)
  • 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)
  • 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.
  • For any bug fix or new feature in this PR, I verified that sufficient unit tests are included to prevent regressions in this 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.
  • I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: HybridApp
Android: mWeb Chrome
iOS: HybridApp
ios1.mov
ios2.mov
iOS: mWeb Safari
MacOS: Chrome / Safari
web.mov

@melvin-bot
melvin-bot Bot requested a review from Julesssss August 3, 2026 22:45
@MelvinBot

Copy link
Copy Markdown
Contributor Author

The only real failure is typecheck (the other red check, PR Reviewer Checklist, is just the reviewer checklist verifier — no code involved). This typecheck failure is not caused by this PR and there is nothing to fix on this branch.

Root cause: main is currently broken. src/languages/el.ts is missing the multipleTaxExport key that en.ts (the source of the translation type) requires:

src/languages/el.ts(10554,5): error TS2741: Property 'multipleTaxExport' is missing ...

Expensify/App#97255 added multipleTaxExport to every locale file except el.ts (de, en, es, fr, it, ja, nl, pl, pt-BR, zh-hans all got it — Greek was skipped). Since PR checks run on the merge of the branch with main, and this PR only touches IOURequestStepConfirmation.tsx (no language files), the error comes entirely from main and will fail on every open PR until main is fixed.

Fix (needs a separate PR against main, not this branch): add the key to the export block in src/languages/el.ts, right after expenseLevelExport, matching what the other locales did (kept the English string):

        expenseLevelExport: 'Όλα τα δεδομένα - επίπεδο δαπάνης',
        multipleTaxExport: 'Canadian Multiple Tax Export',
        exportInProgress: 'Εξαγωγή σε εξέλιξη',

Once that lands on main and is merged into this branch, the typecheck check here will pass. I didn't push this fix to this PR because the change belongs on main (an el.ts translation fix), not in a scan-loading-overlay PR.

@JmillsExpensify JmillsExpensify left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

No product review required.

@situchan

situchan commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@MelvinBot pull main

…nScanLoaderActivityIndicator

Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com>
@MelvinBot
MelvinBot requested a review from a team as a code owner August 4, 2026 14:55
@melvin-bot
melvin-bot Bot requested review from situchan and removed request for a team August 4, 2026 14:55
@melvin-bot

melvin-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

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

@MelvinBot

Copy link
Copy Markdown
Contributor Author

🤖 Merged the latest main into this branch and pushed.

  • Merge commit: bd6eb43a650
  • No conflicts — the branch was 604 commits behind main and merged cleanly.
  • Working tree clean; this PR's own commit (Use LoadingIndicator component for the scan-loading overlay) is intact in the history.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants