Skip to content

Add WorkflowNavigator for multipage workflow step navigation#3379

Merged
vegaro merged 3 commits into
mainfrom
cesar/wfl-46-workflow-navigator
Apr 23, 2026
Merged

Add WorkflowNavigator for multipage workflow step navigation#3379
vegaro merged 3 commits into
mainfrom
cesar/wfl-46-workflow-navigator

Conversation

@vegaro

@vegaro vegaro commented Apr 23, 2026

Copy link
Copy Markdown
Member

Summary

  • Introduces a standalone WorkflowNavigator class that tracks the current step in a PublishedWorkflow and supports forward navigation via component triggers + back navigation via a back stack.
  • Not wired into any UI. A follow-up PR will consume this from PaywallViewModel to drive multipage paywall navigation.

Note

Low Risk
Low risk: new, internal navigation helper and tests only; no existing UI flow is modified, though future integration will rely on correct trigger/step ID handling.

Overview
Introduces WorkflowNavigator, an internal helper that tracks the current PublishedWorkflow step via a StateFlow, advances to the next step when a component trigger maps to a step action, and maintains a back stack for navigateBack/canNavigateBack.

Adds comprehensive tests validating forward navigation, back navigation behavior, and non-navigation on invalid component/action/step references.

Reviewed by Cursor Bugbot for commit 22c1559. Bugbot is set up for automated code reviews on this repo. Configure here.

Introduces a standalone `WorkflowNavigator` that tracks the current step
in a `PublishedWorkflow` and handles forward navigation via component
triggers and back navigation via a back stack.

Not wired into any UI yet — a follow-up PR will consume this from
`PaywallViewModel` to drive multipage paywall navigation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Apr 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.20%. Comparing base (a18b6bf) to head (22c1559).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #3379   +/-   ##
=======================================
  Coverage   79.20%   79.20%           
=======================================
  Files         360      360           
  Lines       14437    14437           
  Branches     1982     1982           
=======================================
  Hits        11435    11435           
  Misses       2194     2194           
  Partials      808      808           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@vegaro vegaro marked this pull request as ready for review April 23, 2026 14:36
@vegaro vegaro requested a review from a team as a code owner April 23, 2026 14:36
@vegaro vegaro requested a review from facumenzella April 23, 2026 14:36
return workflow.steps[prevStepId]
}

fun canNavigateBack(): Boolean = backStack.isNotEmpty()

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

curious, why fun and not val?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

changing to val to match CustomerCenterNavigationState

@facumenzella facumenzella left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Comparing with the iOS equivalent (purchases-ios#6680), there are three test cases present on iOS that are missing here:

None of these are blocking, but worth adding for parity.

@facumenzella facumenzella left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

solid

@vegaro vegaro enabled auto-merge April 23, 2026 15:24
@vegaro vegaro added this pull request to the merge queue Apr 23, 2026
Merged via the queue into main with commit a95eacb Apr 23, 2026
36 checks passed
@vegaro vegaro deleted the cesar/wfl-46-workflow-navigator branch April 23, 2026 15:59
matteinn pushed a commit to matteinn/purchases-android that referenced this pull request May 5, 2026
**This is an automatic release.**

## RevenueCat SDK
### ✨ New Features
* Unified StoreReplacementMode API (RevenueCat#3234) via Will Taylor
(@fire-at-will)
* Add placement and targeting context to paywall events (RevenueCat#3253) via Dan
Pannasch (@dpannasch)
### 🐞 Bugfixes
* Fix null Placements when offering_ids_by_placement is absent (RevenueCat#3254)
via Dan Pannasch (@dpannasch)

## RevenueCatUI SDK
### Paywallv2
#### ✨ New Features
* Wire multipage workflow navigation into PaywallViewModel (RevenueCat#3381) via
Cesar de la Vega (@vegaro)

### 🔄 Other Changes
* Add `triggerType` to `WorkflowTrigger` (RevenueCat#3393) via Cesar de la Vega
(@vegaro)
* Extract private function `NavigateTo.toPaywallAction` (RevenueCat#3392) via
Cesar de la Vega (@vegaro)
* Bump revenucatui-tests gradle cache key (RevenueCat#3391) via Toni Rico
(@tonidero)
* Create `WorkflowTriggerType` and `WorkflowTriggerActionType` (RevenueCat#3386)
via Cesar de la Vega (@vegaro)
* Update baseline profiles (RevenueCat#3390) via RevenueCat Git Bot (@RCGitBot)
* Plumb `componentId` through buttons on workflow interactions (RevenueCat#3380)
via Cesar de la Vega (@vegaro)
* Add `ButtonComponent.Action.Workflow` (RevenueCat#3385) via Cesar de la Vega
(@vegaro)
* Add `componentId` to `ButtonCoomponentStyle` (RevenueCat#3384) via Cesar de la
Vega (@vegaro)
* Migrate all suspendCoroutine usages to suspendCancellableCoroutine
(RevenueCat#3365) via Jaewoong Eum (@skydoves)
* Add `WorkflowNavigator` for multipage workflow step navigation (RevenueCat#3379)
via Cesar de la Vega (@vegaro)
* build(deps): bump fastlane-plugin-revenuecat_internal from `b822f01`
to `d24ab26` (RevenueCat#3383) via dependabot[bot] (@dependabot[bot])
* Add `id` field to `ButtonComponent` (RevenueCat#3377) via Cesar de la Vega
(@vegaro)
* Add CI workflows for generating Baseline Profiles (RevenueCat#3372) via Jaewoong
Eum (@skydoves)
* add min sdk level for paywalls and customer center (RevenueCat#2465) via
Muhammad-Sharif Moustafa (@mshmoustafa)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk release bookkeeping: updates version strings, changelogs, and
documentation deployment targets without changing runtime logic beyond
the reported version identifier.
> 
> **Overview**
> Cuts the `10.3.0` release by updating all version references from
`10.3.0-SNAPSHOT` to `10.3.0` across build config (`gradle.properties`,
`.version`, `Config.frameworkVersion`) and sample/test app dependency
pins.
> 
> Updates release documentation publishing to sync Dokka output to the
`10.3.0` S3 path and changes `docs/index.html` to redirect to `10.3.0`.
Also promotes release notes by moving `CHANGELOG.latest.md` entries into
a new `CHANGELOG.md` section for `10.3.0`.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
056ce62. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
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.

2 participants