Skip to content

[Due for payment 2026-10-22] [CFI] Add page navigation to multi-page PDF receipts in desktop full preview #102435

Closed

Description

@MelvinBot

Problem

Multi-page PDF receipts now show a Page 1 of N badge, but you can't flip through the pages in the full receipt preview. A prospective customer asked for an easy way to move between pages of a multi-page PDF receipt.

Solution

Add page navigation controls (previous/next page) to the full-screen receipt/attachment preview for multi-page PDFs on desktop (web and desktop app).

  • The full preview already loads the whole PDF, so this should be a frontend-only change.
  • Update the page indicator (Page X of N) as the user moves between pages.
  • Mobile is out of scope. The receipt preview there isn't a full-page view, so pagination adds little value.
Image

Context

Follow-up to Show a page count badge on multi-page PDF receipts.

Reported in Slack.

Issue OwnerCurrent Issue Owner: @mallenexpensify

Activity

  1. melvin-bot commented on Sep 28, 2026

    @melvin-bot

    Triggered auto assignment to Design team member for new feature review - @dannymcclain (NewFeature)

  2. dannymcclain commented on Sep 28, 2026

    @dannymcclain
    Contributor

    From a design perspective I don't really see a huge reason not to go with what @dubielzyk-expensify mocked up here:

    Image
  3. changed the title [-]Add page navigation to multi-page PDF receipts in desktop full preview[/-] [+][CFI] Add page navigation to multi-page PDF receipts in desktop full preview[/+] on Sep 28, 2026
  4. trjExpensify commented on Sep 28, 2026

    @trjExpensify
    Contributor

    Same, looks good to me. 👍

  5. dubielzyk-expensify commented on Sep 28, 2026

    @dubielzyk-expensify
  6. trjExpensify commented on Sep 29, 2026

    @trjExpensify
    Contributor

    Ah, in the thread in #migrate we decided this can be desktop only because mobile doesn't have a full preview anyway so you need to click in to see it all.

  7. dubielzyk-expensify commented on Sep 29, 2026

    @dubielzyk-expensify
    Contributor

    Ah, gatcha. Yep, then go with my OG mock 👍

  8. trjExpensify commented on Sep 29, 2026

    @trjExpensify
    Contributor

    Kewl. If you have it to hand, pop it in the OP - or I'll find it tomorrow. 👍

  9. dubielzyk-expensify commented on Sep 29, 2026

    @dubielzyk-expensify
    Contributor

    Done 👍

  10. dannymcclain commented on Sep 29, 2026

    @dannymcclain
    Contributor

    Thanks! And don't be offended that I marked your mobile comment as outdated, I just don't want to confuse anyone working on this since we decided this will be desktop only 😂

  11. 18 remaining items

  12. huult commented on Oct 16, 2026

    @huult
    Contributor

    Contributor+ Checklist:

    • [Contributor] The offending PR and associated issue have been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.

      It's a new feature

    • [Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.

      Link to discussion: N/A

    • [Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.

    Regression Test Proposal

    Precondition:

    Test:

    1. On desktop web, open an expense whose receipt is a multi-page PDF already on the server.
    2. Verify the pill reads "Page 1 of N" with disabled buttons, then both buttons enable once the PDF loads.
    3. Click next and verify the preview shows page 2 and the pill reads "Page 2 of N".
    4. Click previous and verify it goes back to page 1, and that previous is disabled on page 1.
    5. Click next until the last page and verify next is disabled.
    6. Hover the receipt and verify it zooms, then move the pointer onto the pill and verify the zoom stops.
    7. Create a new expense with a multi-page PDF receipt, open it while it's still scanning, and verify the pill appears once the PDF loads and keeps working after the scan finishes.
    8. Open an expense with a single-page PDF or an image receipt and verify no page badge or pill shows.
    9. Block the PDF's network request (or point the receipt at a broken URL) and verify the view falls back to the static "Page 1 of N" badge instead of a stuck or broken pill.
    10. Flip to a later page, then replace the receipt with a different multi-page PDF, and verify the pill resets to page 1 with both buttons disabled until the new file loads.

    Do we agree 👍 or 👎

  13. added
    Awaiting PaymentAuto-added when associated PR is deployed to production
    and removed on Oct 16, 2026
  14. melvin-bot commented on Oct 21, 2026

    @melvin-bot

    Triggered auto assignment to @mallenexpensify (Awaiting Payment)

  15. melvin-bot commented on Oct 21, 2026

    @melvin-bot

    Payment Summary

    Resolving PRs:

    BugZero Checklist (@mallenexpensify)

    • I have confirmed assignees, roles, and Upwork contracts look correct
    • I have paid out Upwork contracts / manual NewDot requests
    • [BugZero Assignee] I have created a GH issue for creating/updating the regression test once above steps have been agreed upon
  16. mallenexpensify commented on Oct 24, 2026

    @mallenexpensify
    Contributor

    Payment Summary

    Contributor+: @huult due $175 via NewDot

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

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2NewFeatureSomething to build that is a new item.

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions