feat(billing): add inactive team subscription state - #14498
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughInactive Team subscriptions now show dedicated messaging, billing and reactivation actions, muted benefits, and inactive credit details. Reactivation opens the subscription dialog with billing-panel context. English localization and tests cover the new state. ChangesInactive Team subscription reactivation
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant WorkspaceSubscriptionPanel
participant CreditsTile
participant SubscriptionDialog
WorkspaceSubscriptionPanel->>CreditsTile: Render inactivePlan=true
WorkspaceSubscriptionPanel->>SubscriptionDialog: Open with billing-panel reason
SubscriptionDialog-->>WorkspaceSubscriptionPanel: Display reactivation flow
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
📄 Knowledge reviewDosu skipped reviewing this PR because your organization has used its |
🎨 Storybook: ✅ Built — View Storybook🎭 Playwright: ✅ 1778 passed, 0 failed · 2 flaky📊 Browser Reports
📦 Bundle: 8.19 MB gzip 🔴 +534 BDetailsSummary
Category Glance App Entry Points — 3.62 kB (baseline 3.62 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.29 MB (baseline 1.29 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed / 1 unchanged Views & Navigation — 111 kB (baseline 111 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 12 added / 12 removed / 4 unchanged Panels & Settings — 551 kB (baseline 551 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 11 added / 11 removed / 15 unchanged User & Accounts — 28.7 kB (baseline 28.7 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 7 added / 7 removed / 3 unchanged Editors & Dialogs — 124 kB (baseline 124 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 6 added / 6 removed / 1 unchanged UI Components — 70 kB (baseline 70 kB) • ⚪ 0 BReusable component library chunks
Status: 6 added / 6 removed / 9 unchanged Data & Services — 3.45 MB (baseline 3.45 MB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 14 added / 14 removed / 3 unchanged Utilities & Hooks — 386 kB (baseline 386 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 19 added / 19 removed / 17 unchanged Vendor & Third-Party — 15.7 MB (baseline 15.7 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 12.7 MB (baseline 12.7 MB) • 🔴 +4.36 kBBundles that do not match a named category
Status: 78 added / 78 removed / 202 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-08-01T00:45:46.811Z",
"gitSha": "28ed1adb16666a83fbc3569c4eae7ccc251f0bd9",
"branch": "jaewon/des-621-inactive-team-subscription-state",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2057.9709999999804,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.783000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 517.544,
"heapDeltaBytes": 4947368,
"heapUsedBytes": 72727928,
"domNodes": 18,
"jsHeapTotalBytes": 20836352,
"scriptDurationMs": 18.557,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2021.4940000000183,
"styleRecalcs": 10,
"styleRecalcDurationMs": 7.865000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 443.77700000000004,
"heapDeltaBytes": 4506264,
"heapUsedBytes": 72200964,
"domNodes": 20,
"jsHeapTotalBytes": 20574208,
"scriptDurationMs": 15.986,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1967.7939999999978,
"styleRecalcs": 77,
"styleRecalcDurationMs": 40.779,
"layouts": 12,
"layoutDurationMs": 3.5780000000000003,
"taskDurationMs": 1022.3950000000002,
"heapDeltaBytes": -17417020,
"heapUsedBytes": 50390020,
"domNodes": -282,
"jsHeapTotalBytes": 22011904,
"scriptDurationMs": 129.596,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1824.3060000000355,
"styleRecalcs": 75,
"styleRecalcDurationMs": 36.6,
"layouts": 12,
"layoutDurationMs": 3.7209999999999996,
"taskDurationMs": 861.4430000000001,
"heapDeltaBytes": -14684868,
"heapUsedBytes": 53213044,
"domNodes": -279,
"jsHeapTotalBytes": 22536192,
"scriptDurationMs": 118.83399999999999,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1737.1459999999956,
"styleRecalcs": 32,
"styleRecalcDurationMs": 17.868999999999996,
"layouts": 6,
"layoutDurationMs": 0.6280000000000001,
"taskDurationMs": 377.313,
"heapDeltaBytes": 7906820,
"heapUsedBytes": 75847896,
"domNodes": 77,
"jsHeapTotalBytes": 20049920,
"scriptDurationMs": 18.41,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1722.09799999996,
"styleRecalcs": 31,
"styleRecalcDurationMs": 16.144000000000002,
"layouts": 6,
"layoutDurationMs": 0.5169999999999999,
"taskDurationMs": 368.77099999999996,
"heapDeltaBytes": 7897320,
"heapUsedBytes": 75858936,
"domNodes": 77,
"jsHeapTotalBytes": 20312064,
"scriptDurationMs": 17.410999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 565.3029999999717,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.224,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 369.56600000000003,
"heapDeltaBytes": -11859232,
"heapUsedBytes": 55820676,
"domNodes": 20,
"jsHeapTotalBytes": 21884928,
"scriptDurationMs": 63.45099999999999,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 613.5160000000042,
"styleRecalcs": 12,
"styleRecalcDurationMs": 8.486999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 380.707,
"heapDeltaBytes": -11988048,
"heapUsedBytes": 55912500,
"domNodes": 20,
"jsHeapTotalBytes": 21622784,
"scriptDurationMs": 58.98,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-idle",
"durationMs": 2027.7810000000045,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.749,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 668.444,
"heapDeltaBytes": 8013848,
"heapUsedBytes": 66687968,
"domNodes": -279,
"jsHeapTotalBytes": 4517888,
"scriptDurationMs": 101.43199999999999,
"eventListeners": -144,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2007.9550000000381,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.603,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 657.1560000000001,
"heapDeltaBytes": 7225808,
"heapUsedBytes": 66021708,
"domNodes": -280,
"jsHeapTotalBytes": 3469312,
"scriptDurationMs": 96.89299999999999,
"eventListeners": -144,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2145.6249999999955,
"styleRecalcs": 69,
"styleRecalcDurationMs": 13.538000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1233.1760000000002,
"heapDeltaBytes": 5818100,
"heapUsedBytes": 65577612,
"domNodes": -282,
"jsHeapTotalBytes": 5267456,
"scriptDurationMs": 417.40299999999996,
"eventListeners": -142,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2183.1640000000334,
"styleRecalcs": 68,
"styleRecalcDurationMs": 12.750999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1267.126,
"heapDeltaBytes": 5252448,
"heapUsedBytes": 65654048,
"domNodes": -285,
"jsHeapTotalBytes": 5529600,
"scriptDurationMs": 433.62100000000004,
"eventListeners": -144,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3231.7069999999717,
"styleRecalcs": 65,
"styleRecalcDurationMs": 16.393,
"layouts": 60,
"layoutDurationMs": 6.843,
"taskDurationMs": 1496.346,
"heapDeltaBytes": 1061744,
"heapUsedBytes": 62563612,
"domNodes": -285,
"jsHeapTotalBytes": 6615040,
"scriptDurationMs": 514.888,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-zoom",
"durationMs": 3178.9609999999584,
"styleRecalcs": 65,
"styleRecalcDurationMs": 13.940000000000001,
"layouts": 60,
"layoutDurationMs": 7.014,
"taskDurationMs": 1469.392,
"heapDeltaBytes": -1509132,
"heapUsedBytes": 59892440,
"domNodes": -287,
"jsHeapTotalBytes": 7925760,
"scriptDurationMs": 511.6240000000001,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 2055.605000000014,
"styleRecalcs": 8,
"styleRecalcDurationMs": 6.737999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 665.654,
"heapDeltaBytes": 8164464,
"heapUsedBytes": 68575048,
"domNodes": -282,
"jsHeapTotalBytes": 3993600,
"scriptDurationMs": 104.74499999999999,
"eventListeners": -144,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2038.300999999933,
"styleRecalcs": 7,
"styleRecalcDurationMs": 6.030999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 660.2389999999999,
"heapDeltaBytes": 4948196,
"heapUsedBytes": 65944600,
"domNodes": -282,
"jsHeapTotalBytes": 4255744,
"scriptDurationMs": 104.06099999999999,
"eventListeners": -144,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 601.3149999999996,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.11,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 392.78,
"heapDeltaBytes": -11461956,
"heapUsedBytes": 56609392,
"domNodes": 20,
"jsHeapTotalBytes": 21360640,
"scriptDurationMs": 115.24900000000001,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 589.0889999999445,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.372000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 396.475,
"heapDeltaBytes": -12085104,
"heapUsedBytes": 55753260,
"domNodes": 20,
"jsHeapTotalBytes": 22147072,
"scriptDurationMs": 118.379,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2012.7019999999902,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.386999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 484.14,
"heapDeltaBytes": -20614388,
"heapUsedBytes": 47243764,
"domNodes": -278,
"jsHeapTotalBytes": 20963328,
"scriptDurationMs": 13.610000000000001,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-idle",
"durationMs": 2037.7359999999953,
"styleRecalcs": 11,
"styleRecalcDurationMs": 9.547,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 494.21700000000004,
"heapDeltaBytes": -20869616,
"heapUsedBytes": 47011160,
"domNodes": -279,
"jsHeapTotalBytes": 20439040,
"scriptDurationMs": 13.873000000000001,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1699.324000000047,
"styleRecalcs": 76,
"styleRecalcDurationMs": 33.717,
"layouts": 16,
"layoutDurationMs": 4.041,
"taskDurationMs": 785.9419999999999,
"heapDeltaBytes": -20132128,
"heapUsedBytes": 47628124,
"domNodes": -279,
"jsHeapTotalBytes": 22274048,
"scriptDurationMs": 87.51,
"eventListeners": -148,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1696.8779999999697,
"styleRecalcs": 75,
"styleRecalcDurationMs": 33.836,
"layouts": 16,
"layoutDurationMs": 3.871,
"taskDurationMs": 738.8900000000001,
"heapDeltaBytes": -4614004,
"heapUsedBytes": 63107332,
"domNodes": 63,
"jsHeapTotalBytes": 20836352,
"scriptDurationMs": 89.895,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-transition-enter",
"durationMs": 1400.6390000000124,
"styleRecalcs": 19,
"styleRecalcDurationMs": 30.887999999999998,
"layouts": 15,
"layoutDurationMs": 12.408000000000003,
"taskDurationMs": 930.2100000000002,
"heapDeltaBytes": 1967380,
"heapUsedBytes": 73218728,
"domNodes": 13673,
"jsHeapTotalBytes": 15204352,
"scriptDurationMs": 33.61,
"eventListeners": 2371,
"totalBlockingTimeMs": 142,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "viewport-pan-sweep",
"durationMs": 8328.362000000026,
"styleRecalcs": 250,
"styleRecalcDurationMs": 34.858,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4421.378,
"heapDeltaBytes": 11728084,
"heapUsedBytes": 70455364,
"domNodes": -280,
"jsHeapTotalBytes": 6807552,
"scriptDurationMs": 1374.184,
"eventListeners": -128,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8210.102000000006,
"styleRecalcs": 250,
"styleRecalcDurationMs": 35.209,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4381.859,
"heapDeltaBytes": 13229288,
"heapUsedBytes": 72055512,
"domNodes": -280,
"jsHeapTotalBytes": 7331840,
"scriptDurationMs": 1348.866,
"eventListeners": -128,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.80000000000109
},
{
"name": "vue-large-graph-idle",
"durationMs": 16810.160999999993,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16788.478,
"heapDeltaBytes": -41460240,
"heapUsedBytes": 166909580,
"domNodes": -8312,
"jsHeapTotalBytes": -13049856,
"scriptDurationMs": 557.513,
"eventListeners": -16385,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.780000000000047,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 16798.458000000097,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 16770.071,
"heapDeltaBytes": -44053172,
"heapUsedBytes": 167444592,
"domNodes": -8312,
"jsHeapTotalBytes": -13574144,
"scriptDurationMs": 562.422,
"eventListeners": -16385,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.220000000000073,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 20231.295999999988,
"styleRecalcs": 136,
"styleRecalcDurationMs": 14.873999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20172.495,
"heapDeltaBytes": -46426412,
"heapUsedBytes": 154566640,
"domNodes": -8312,
"jsHeapTotalBytes": -15929344,
"scriptDurationMs": 853.225,
"eventListeners": -16381,
"totalBlockingTimeMs": 99,
"frameDurationMs": 17.77333333333336,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 20445.35500000006,
"styleRecalcs": 141,
"styleRecalcDurationMs": 16.113000000000017,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 20396.034,
"heapDeltaBytes": -50614460,
"heapUsedBytes": 156497180,
"domNodes": -8312,
"jsHeapTotalBytes": -15667200,
"scriptDurationMs": 896.762,
"eventListeners": -16383,
"totalBlockingTimeMs": 134,
"frameDurationMs": 17.776666666666642,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 453.44999999997526,
"styleRecalcs": 13,
"styleRecalcDurationMs": 17.288999999999998,
"layouts": 2,
"layoutDurationMs": 0.4140000000000001,
"taskDurationMs": 107.91700000000002,
"heapDeltaBytes": -16031072,
"heapUsedBytes": 50917480,
"domNodes": 130,
"jsHeapTotalBytes": 7467008,
"scriptDurationMs": 9.72,
"eventListeners": 67,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 112.42599999991398,
"styleRecalcs": 8,
"styleRecalcDurationMs": 13.951,
"layouts": 3,
"layoutDurationMs": 0.651,
"taskDurationMs": 77.689,
"heapDeltaBytes": 3004344,
"heapUsedBytes": 69997228,
"domNodes": 109,
"jsHeapTotalBytes": 3145728,
"scriptDurationMs": 6.513,
"eventListeners": 33,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.800000000000182
}
]
} |
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #14498 +/- ##
==========================================
- Coverage 78.56% 78.52% -0.04%
==========================================
Files 1767 1767
Lines 102642 102618 -24
Branches 32122 31825 -297
==========================================
- Hits 80637 80584 -53
- Misses 21587 21612 +25
- Partials 418 422 +4
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 16 files with indirect coverage changes 🚀 New features to boost your workflow:
|
Amp-Thread-ID: https://ampcode.com/threads/T-019fb9ac-1bf4-7240-bcbf-fce2c8d76779 Co-authored-by: Amp <amp@ampcode.com>
0c83bb4 to
5c1f234
Compare
|
@coderabbitai approve |
✅ Action performedComments resolved and changes approved. |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/platform/workspace/components/SubscriptionPanelContentWorkspace.vue`:
- Around line 554-557: Remove the !showInactiveTeamSubscription.value guard from
showSubscriptionStateCard so cancelled or ended subscriptions continue rendering
the warning banner for inactive Team subscriptions. In
src/platform/workspace/components/SubscriptionPanelContentWorkspace.test.ts
lines 626-675, add or update coverage asserting that the Team owner sees the
ended-subscription warning banner.
- Around line 109-117: Update the Billing & invoices Button rendering in
SubscriptionPanelContentWorkspace so it is shown only when
showInactiveTeamSubscription is true; keep it hidden for unsubscribed workspaces
where showTeamSubscribePrompt is true.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 272b3ca9-2019-4ee5-a45b-0b9907e62380
📒 Files selected for processing (5)
src/locales/en/main.jsonsrc/platform/cloud/subscription/components/CreditsTile.test.tssrc/platform/cloud/subscription/components/CreditsTile.vuesrc/platform/workspace/components/SubscriptionPanelContentWorkspace.test.tssrc/platform/workspace/components/SubscriptionPanelContentWorkspace.vue
Amp-Thread-ID: https://ampcode.com/threads/T-019fb9ac-1bf4-7240-bcbf-fce2c8d76779 Co-authored-by: Amp <amp@ampcode.com>
|
Reviewed the two latest CodeRabbit findings against the source specs and live Figma node
No code changes are needed for these findings. The focused tests and PR screenshots reflect the intended state. |
Amp-Thread-ID: https://ampcode.com/threads/T-019fb9ac-1bf4-7240-bcbf-fce2c8d76779 Co-authored-by: Amp <amp@ampcode.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/platform/cloud/subscription/components/CreditsTile.vue (1)
159-188: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDerive inactive-plan credit values from
inactivePlan.
displayTotalanddisplayPrepaidonly usezeroState, whilesrc/platform/workspace/components/SubscriptionPanelContentWorkspace.vuepasses:inactive-plan="showInactiveTeamSubscription"and also sets:zero-state="showZeroState"only for other zero-state branches. If an inactive Team view does not provide a zero balance,CreditsTilecan render computed credit values behind the inactive “reactivate” message instead of0. Make display values also readinactivePlan, or update this caller contract if inactive plans should show loaded credit counts.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/platform/cloud/subscription/components/CreditsTile.vue` around lines 159 - 188, Update the display-value computations used by CreditsTile, including displayTotal and displayPrepaid, to return zero whenever inactivePlan is true rather than relying only on zeroState. Preserve the existing loaded-credit behavior for active plans and ensure the inactive-plan reactivation view always displays 0 credits.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/platform/cloud/subscription/components/CreditsTile.vue`:
- Around line 159-188: Update the display-value computations used by
CreditsTile, including displayTotal and displayPrepaid, to return zero whenever
inactivePlan is true rather than relying only on zeroState. Preserve the
existing loaded-credit behavior for active plans and ensure the inactive-plan
reactivation view always displays 0 credits.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: dd8792c1-14bf-475d-a6e3-6d0b54d8f619
📒 Files selected for processing (1)
src/platform/cloud/subscription/components/CreditsTile.vue
Amp-Thread-ID: https://ampcode.com/threads/T-019fb9ac-1bf4-7240-bcbf-fce2c8d76779 Co-authored-by: Amp <amp@ampcode.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/platform/cloud/subscription/components/CreditsTile.vue`:
- Around line 338-343: Update the displayTotal and displayPrepaid computed
values to format inactive-plan zero totals through formatCreditCount using
locale.value, rather than returning the literal '0'. Preserve the existing
zeroState behavior and normal credit-value paths.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: bfca9bd2-dd05-4f58-ae3a-501a811fbb97
📒 Files selected for processing (2)
src/platform/cloud/subscription/components/CreditsTile.test.tssrc/platform/cloud/subscription/components/CreditsTile.vue
Amp-Thread-ID: https://ampcode.com/threads/T-019fb9ac-1bf4-7240-bcbf-fce2c8d76779 Co-authored-by: Amp <amp@ampcode.com>
|
|
Summary
Adds the DES-621 / FE-1469 fully ended Team subscription state. This PR is standalone on
main; #14450 was used only as a visual and implementation reference.Root cause
After a Team subscription fully ended, Plan & Credits fell back to generic subscription and credit states. That left owners without a clear inactive-subscription explanation, a direct checkout reactivation path, or credit messaging that reflected the inactive plan.
Changes
AS IS
Fully ended Team subscriptions use the generic Plan & Credits presentation and do not clearly explain that the Team plan is inactive.
TO BE
Fully ended Team subscriptions show the inactive Team win-back presentation from DES-621, retain billing access, and provide a normal-checkout reactivation action. #14450 is reference-only and is not a dependency of this PR.
Validation
pnpm test:unit src/platform/workspace/components/SubscriptionPanelContentWorkspace.test.ts src/platform/cloud/subscription/components/CreditsTile.test.ts— 61 passedpnpm typecheckpnpm exec oxfmt --checkon all five changed filesgit diff --check origin/main...HEADorigin/mainand this PR branchReferences
5482:58300