Repository navigation
[Due for payment 2026-07-02] [Design] Add Load More pattern to Workspace Workflows approval list #91727
Copy link
Copy link
Closed
Labels
DailyKSv2KSv2DesignImprovementItem broken or needs improvement.Item broken or needs improvement.Task
Description
Problem
On Workspace > Workflows, the Approvals section renders all approval workflow cards at once. For workspaces with many custom workflows (each card includes member pills, approver chain, and limits), this causes:
- Slow initial page load / jank when opening Workflows settings
- Excessive scrolling before reaching Add approval workflow
Search helps find a specific workflow but does not reduce initial render cost when the list is long and the user is browsing.
Current behavior
- Route:
workspaces/:policyID/workflows - All workflows rendered via
searchFilteredWorkflows.map(...)inWorkspaceWorkflowsPage.tsx - Search input shown when workflow count > 3 (
SEARCH_BAR_THRESHOLD) - Default workflow card (applies to "Everyone") is always first in the sorted list
- Each row is a rich card (
ApprovalWorkflowSection.tsx) with member pills, approver chain, and approval limits - Workflow data is already client-side (derived from
policy.employeeListviaWorkflowUtils.convertPolicyEmployeesToApprovalWorkflows) — pagination would be UI-only, no API changes
Goal
Design a Load More (or equivalent progressive disclosure) pattern so we only render an initial batch of approval workflows, with a clear affordance to reveal more — without hurting discoverability of Add approval workflow.
Design questions to resolve
- Initial batch size — how many workflow cards show before Load More? (e.g. 5, 10, 12 — compare HR integrations magic number of 12 in #90962)
- Button copy & pattern — which existing pattern fits best?
Show morelink button (Search transaction groups)See +X morecount-based row (#89601)Load morewith optional loading indicator
- Placement — Load More button between the list and Add approval workflow, or elsewhere?
- Default workflow — always visible regardless of batch, or included in the count?
- Search interaction — when user is searching, should we:
- show all matches (search overrides pagination), or
- still paginate filtered results?
- Empty / no-more states — hide button when all visible; any "Showing X of Y" helper text?
- Mobile vs wide layout — same behavior on narrow and wide workspace settings?
- Accessibility — focus management and screen reader announcement when more items load
Reference patterns in NewDot
| Pattern | Where | Notes |
|---|---|---|
| Search when > N items | Workflows approvals (today), Merchant Rules, HR integrations | Threshold = 3 (workflows/rules), 12 (HR) |
Show more link button |
Search expanded transaction groups | common.showMore + link-style Button |
See +X more |
Home Time Sensitive / Your Spend (#89601) | Count in label, expands in place |
| Client-side batching hook | useFilteredOptions |
loadMore / hasMore pattern (reports picker, not UI spec) |
Screenshots / mocks needed
Note: If no large test workspace is available, Design should use a mock with 10+ approval workflow cards.
- Workflows page with many approval cards (10+) — current state
- Proposed initial collapsed state + Load More affordance
- State after loading more
- Interaction while search is active (if applicable)
- Narrow (mobile) layout variant
Out of scope (follow-up engineering issue)
- Backend/API pagination (data is already in Onyx)
- Merchant Rules list (similar problem, separate decision)
- Virtualized list / FlatList refactor (unless Design recommends it over Load More)
Acceptance criteria (design deliverable)
- Figma spec (or annotated screenshots) for Load More on Workflows > Approvals
- Decisions documented for batch size, copy, search behavior, and default-workflow handling
- Handoff notes for engineering implementation in
WorkspaceWorkflowsPage.tsx
Related issues
- #89601 —
See +X morepattern precedent - #90962 — searchable list threshold precedent (12 items)
- #83865 — Workflows page migration tracking
- #91244 — upcoming changes to approval workflow cards (coordinate so Load More design accounts for new card content)
Issue Owner
Current Issue Owner: @elirangoshenReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
DailyKSv2KSv2DesignImprovementItem broken or needs improvement.Item broken or needs improvement.Task
Type
Projects
- StatusShow more project fieldsDone
Activity
melvin-bot commentedon May 26, 2026
Triggered auto assignment to @dannymcclain (
Design), see these Stack Overflow questions for more details.mountiny commentedon May 26, 2026
Discussed in this thread btw https://expensify.slack.com/archives/C05LX9D6E07/p1779123188188269
dannymcclain commentedon Jun 1, 2026
Alright noodling around here in Figma. A few options:
Button (Load more)
Link Button (Show more)
Ghost Button (See X more)
I prefer the
Load morebutton (first option), but honestly I don't feel all that strongly. I added the load more after 5 workflows (including the default), but happy to adjust to whatever the team thinks makes sense (I probably wouldn't go more than 5 though). I'm also using our Small button because it felt the most appropriate here.cc @Expensify/design for thoughts!
shawnborton commentedon Jun 1, 2026
Maybe one consideration here is, I think we're going to be updating the style of workflow rows to include two small buttons at the bottom of each row, right? cc @dubielzyk-expensify
If we do that, the first idea above might not feel as nice as it does now? I don't feel strongly, but just wanted to call that out.
dannymcclain commentedon Jun 1, 2026
Ah good point! I forgot about those buttons coming with Agents. @dubielzyk-expensify if you don't mind posting/pointing me to where that landed, we can take a fresh look with the up to date layout. Good shout Shawn!
dubielzyk-expensify commentedon Jun 2, 2026
This is where we landed: https://www.figma.com/design/PN3pXuxFPPmick1XkuIzcO/Custom-Agents?node-id=297-94307&t=bOpiIQCmigVHcnCW-4
Agree with the same thought. Not sure if I like the other options better either way though
dannymcclain commentedon Jun 3, 2026
Ok let's take a look with the up-to-date layout:
The OG small button on the left does not look good, but I think the centered buttons work pretty well. I actually think increasing the size (from small > medium) helps, and I actually think I might prefer the centered medium link button the most? Curious for your thoughts @Expensify/design!
Figma mocks are here if you wanna peep the full screens.
shawnborton commentedon Jun 3, 2026
I don't have super strong feelings. I might slightly lean towards left-aligned link button, but I am happy to roll with whatever you like best!
dannymcclain commentedon Jun 3, 2026
The link button definitely seems to stand out in the right way to me. And I think left-aligned is more aligned 🙃 with how we do stuff like this elsewhere, yeah?
Let's see what @dubielzyk-expensify thinks!
dubielzyk-expensify commentedon Jun 4, 2026
(Y'all know my feelings on the link buttons 😅)
Send it 🚀
39 remaining items
melvin-bot commentedon Jun 25, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.19-5 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-07-02. 🎊
For reference, here are some details about the assignees on this issue:
melvin-bot commentedon Jun 30, 2026
@elirangoshen Huh... This is 4 days overdue. Who can take care of this?
melvin-bot commentedon Jul 2, 2026
@elirangoshen 6 days overdue. This is scarier than being forced to listen to Vogon poetry!
melvin-bot commentedon Jul 3, 2026
@elirangoshen 6 days overdue. This is scarier than being forced to listen to Vogon poetry!
melvin-bot commentedon Jul 3, 2026
@elirangoshen Still overdue 6 days?! Let's take care of this!
melvin-bot commentedon Jul 6, 2026
@elirangoshen 10 days overdue. I'm getting more depressed than Marvin.
elirangoshen commentedon Jul 7, 2026
there megred pr we can close thus issue no ?
MonilBhavsar commentedon Jul 7, 2026
@ikevin127 were you paid for reviewing PR #94052?
ikevin127 commentedon Jul 7, 2026
@MonilBhavsar No I didn't - thanks a lot for flagging, I would've missed it 😅 @mallenexpensify If you could please drop a quick summary for my work on this PR when you get a chance 🙏
BugZero Checklist:
[Contributor] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.
Link to comment: N/A - Result of the original design
[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.
[BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.
Link to issue: https://github.com/Expensify/Expensify/issues/657036
Regression Test Proposal
Do we agree 👍 or 👎.
Zapier Logs
Run ID: 00040eee-2c9e-a192-c458-adf2bc482854mallenexpensify commentedon Jul 7, 2026
Payment Summary
Contributor+: @ikevin127 due $250 via NewDot
^ Test case created. Thx
Thanks for catching @MonilBhavsar , I too would have missed it.
quinthar commentedon Jul 15, 2026
Approved $250 to @ikevin127