Plumb componentId through buttons on workflow interactions#3380
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #3380 +/- ##
=======================================
Coverage 79.32% 79.32%
=======================================
Files 361 361
Lines 14448 14448
Branches 1964 1964
=======================================
Hits 11461 11461
Misses 2194 2194
Partials 793 793 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
0c34228 to
8ac3fa4
Compare
TriggerWorkflowAction and plumb componentId through buttonscomponentId through buttons on workflow interactions
a1073d3 to
47f4bb5
Compare
tonidero
left a comment
There was a problem hiding this comment.
I'm lacking some context so just left some questions. Code looks good in general though, but thinking about leaving to others to approve.
47f4bb5 to
08a6ac2
Compare
08a6ac2 to
ee0e6bf
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit ee0e6bf. Configure here.
|
|
||
| @Serializable | ||
| public object Workflow : Action | ||
| public object WorkflowTrigger : Action |
| internal fun PaywallAction.workflowInteraction(): ButtonComponentInteraction? = | ||
| if (this is PaywallAction.External.WorkflowTrigger) { | ||
| ButtonComponentInteraction(value = "workflow_trigger") | ||
| } else { | ||
| null | ||
| } |
There was a problem hiding this comment.
let's move it to a PaywallActionExtensions.kt alongside navigationUrlForComponentInteraction(), or pull it inline into ButtonComponentView where it's used.
facumenzella
left a comment
There was a problem hiding this comment.
The PR description had a mismatch with the implementation: the Summary bullet said the interaction event was "trigger_workflow_action", but the code emits "workflow_trigger" (matching the Cursor-generated section below the fold). Updated the description to say "workflow_trigger" so it stays in sync with the code.
| // Should not reach here: Action.WorkflowTrigger is handled before calling toPaywallAction. | ||
| // Reached only if componentId is null (misconfigured button). | ||
| is ButtonComponentStyle.Action.WorkflowTrigger -> { | ||
| Logger.e("ButtonComponentState: reached toPaywallAction for Workflow action — componentId may be null") |
There was a problem hiding this comment.
What do you think about adding something like
if (BuildConfig.DEBUG) error("WorkflowTrigger reached toPaywallAction — componentId is null")
There was a problem hiding this comment.
Note that BuildConfig.DEBUG will only work for us, not on developer's apps. If we wanted to do that, we could use appConfig.isDebugBuild, but maybe we want to keep that behavior internal...
There was a problem hiding this comment.
I think I can get rid of this. It's in draft but https://github.com/RevenueCat/purchases-android/pull/3381/files#diff-da3cac32a5cf63c0e97c308a03655c8d66360bd41c88d3aa05e8ae68c434a23dR58 here's the idea
**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 -->

Note
Stacked on top of #3377 (
ButtonComponent.id). Base will update tomainonce that PR merges.Summary
componentIdthroughButtonComponentStyle, populated fromButtonComponent.idinStyleFactory."workflow_trigger"value as the component interaction event.InternalPaywall's action handler currently just logs. The actual dispatch toPaywallViewModel.handleWorkflowActionlands in the multipage-workflow wiring PR that depends on this oneNote
Medium Risk
Touches paywall button action mapping and analytics tracking paths; misconfigured buttons (missing
componentId) now fall back toNavigateBack, so behavior changes should be validated on real paywalls.Overview
Adds explicit workflow trigger support for V2 paywall buttons by renaming the serialized
ButtonComponent.Action.WorkflowtoWorkflowTriggerwhile keeping the backend JSON"type": "workflow"mapping.Plumbs the button
idintoButtonComponentStyle.componentIdviaStyleFactory, emits a newPaywallAction.External.WorkflowTrigger(componentId), and tracks acomponent_valueof"workflow_trigger"for component-interaction analytics.InternalPaywallnow recognizes this action (currently logs only), and tests are updated accordingly.Reviewed by Cursor Bugbot for commit 186f654. Bugbot is set up for automated code reviews on this repo. Configure here.