fix(billing): refresh workspace billing status after completed top-up (FE-932)#12787
Conversation
📝 WalkthroughWalkthroughThis PR updates the top-up credits dialog component to refresh both billing balance and status after successful top-up purchases, and adds a comprehensive test suite validating the refresh behavior across completed, pending, and failed top-up states. ChangesTop-Up Billing Status Refresh
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Poem
Caution Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional.
❌ Failed checks (1 error, 1 warning)
✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
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/workspace/components/TopUpCreditsDialogContentWorkspace.test.ts`:
- Around line 8-15: The test duplicates the TopupStatus and CreateTopupResponse
types which prevents importing the canonical types; export or re-export these
types from the existing workspaceApi.ts (e.g., export type TopupStatus = ... and
export interface CreateTopupResponse {...} or re-export them from a shared types
module) and update the test to import TopupStatus and CreateTopupResponse from
that single source, then remove the local duplicate definitions in
TopUpCreditsDialogContentWorkspace.test.ts to keep a single source of truth.
🪄 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: CHILL
Plan: Pro
Run ID: c80c2ccf-3b54-42b1-94c3-f3830d4ba2ed
📒 Files selected for processing (2)
src/platform/workspace/components/TopUpCreditsDialogContentWorkspace.test.tssrc/platform/workspace/components/TopUpCreditsDialogContentWorkspace.vue
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #12787 +/- ##
===========================================
- Coverage 77.03% 62.22% -14.81%
===========================================
Files 1570 1458 -112
Lines 113907 75080 -38827
Branches 37102 21151 -15951
===========================================
- Hits 87748 46720 -41028
- Misses 25207 28015 +2808
+ Partials 952 345 -607
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 1189 files with indirect coverage changes 🚀 New features to boost your workflow:
|
Resolve TopUpCreditsDialogContentWorkspace conflict: combine main's useBillingContext topup() with this branch's fetchStatus so completed top-ups refresh both balance and status. Update the test to mock topup() on the billing context (main moved purchasing onto the context) and import the canonical CreateTopupResponse type instead of duplicating it.
🎨 Storybook: ✅ Built — View Storybook🎭 Playwright: ✅ 1677 passed, 0 failed · 3 flaky📊 Browser Reports
📦 Bundle: 7.45 MB gzip 🟢 -9 BDetailsSummary
Category Glance App Entry Points — 45.8 kB (baseline 45.8 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.26 MB (baseline 1.26 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 95.3 kB (baseline 95.3 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 9 added / 9 removed / 3 unchanged Panels & Settings — 523 kB (baseline 523 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 10 added / 10 removed / 14 unchanged User & Accounts — 19.9 kB (baseline 19.9 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 6 added / 6 removed / 3 unchanged Editors & Dialogs — 112 kB (baseline 112 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 4 added / 4 removed / 1 unchanged UI Components — 57.2 kB (baseline 57.2 kB) • ⚪ 0 BReusable component library chunks
Status: 5 added / 5 removed / 8 unchanged Data & Services — 266 kB (baseline 266 kB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 12 added / 12 removed / 3 unchanged Utilities & Hooks — 3.3 MB (baseline 3.3 MB) • 🔴 +43 BHelpers, composables, and utility bundles
Status: 14 added / 14 removed / 16 unchanged Vendor & Third-Party — 15.3 MB (baseline 15.3 MB) • ⚪ 0 BExternal libraries and shared vendor chunks Status: 16 unchanged Other — 10.4 MB (baseline 10.4 MB) • ⚪ 0 BBundles that do not match a named category
Status: 63 added / 63 removed / 86 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-06-18T11:04:11.125Z",
"gitSha": "4466b11b9443770fada7eb7152014d51078638aa",
"branch": "jaewon/fe-932-refresh-workspace-billing-status-after-completed-top-up",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2024.8240000000237,
"styleRecalcs": 12,
"styleRecalcDurationMs": 10.112000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 392.09,
"heapDeltaBytes": -2055896,
"heapUsedBytes": 56370648,
"domNodes": 24,
"jsHeapTotalBytes": 26214400,
"scriptDurationMs": 23.288,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-idle",
"durationMs": 2020.3329999999937,
"styleRecalcs": 10,
"styleRecalcDurationMs": 7.862999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 359.873,
"heapDeltaBytes": -1934432,
"heapUsedBytes": 56503740,
"domNodes": 20,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 21.398,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1932.3050000000421,
"styleRecalcs": 74,
"styleRecalcDurationMs": 42.136,
"layouts": 12,
"layoutDurationMs": 3.665,
"taskDurationMs": 820.3829999999998,
"heapDeltaBytes": 5368768,
"heapUsedBytes": 59722700,
"domNodes": -260,
"jsHeapTotalBytes": 14606336,
"scriptDurationMs": 122.86800000000001,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1748.5100000000102,
"styleRecalcs": 72,
"styleRecalcDurationMs": 32.777,
"layouts": 12,
"layoutDurationMs": 3.4149999999999996,
"taskDurationMs": 705.474,
"heapDeltaBytes": -8003996,
"heapUsedBytes": 50825336,
"domNodes": 53,
"jsHeapTotalBytes": 25427968,
"scriptDurationMs": 109.125,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1739.4590000000107,
"styleRecalcs": 32,
"styleRecalcDurationMs": 22.991999999999997,
"layouts": 6,
"layoutDurationMs": 0.7790000000000001,
"taskDurationMs": 310.537,
"heapDeltaBytes": 1731572,
"heapUsedBytes": 53153988,
"domNodes": 78,
"jsHeapTotalBytes": 14680064,
"scriptDurationMs": 25.166999999999998,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1688.3870000000343,
"styleRecalcs": 32,
"styleRecalcDurationMs": 16.746000000000002,
"layouts": 6,
"layoutDurationMs": 0.6149999999999999,
"taskDurationMs": 300.72900000000004,
"heapDeltaBytes": 7243780,
"heapUsedBytes": 70708720,
"domNodes": 79,
"jsHeapTotalBytes": 15990784,
"scriptDurationMs": 22.91,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "dom-widget-clipping",
"durationMs": 558.6100000000442,
"styleRecalcs": 12,
"styleRecalcDurationMs": 7.465,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 335.25899999999996,
"heapDeltaBytes": 7255044,
"heapUsedBytes": 65755248,
"domNodes": 20,
"jsHeapTotalBytes": 18874368,
"scriptDurationMs": 59.416000000000004,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "dom-widget-clipping",
"durationMs": 566.0540000000083,
"styleRecalcs": 12,
"styleRecalcDurationMs": 7.606,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 325.612,
"heapDeltaBytes": 6895684,
"heapUsedBytes": 65707344,
"domNodes": 20,
"jsHeapTotalBytes": 18612224,
"scriptDurationMs": 54.163,
"eventListeners": 0,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666682,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2019.61799999998,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.872000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 504.89300000000003,
"heapDeltaBytes": -8322844,
"heapUsedBytes": 61951792,
"domNodes": 22,
"jsHeapTotalBytes": 11153408,
"scriptDurationMs": 87.04400000000001,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-idle",
"durationMs": 2001.1459999999488,
"styleRecalcs": 11,
"styleRecalcDurationMs": 8.850999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 500.1199999999999,
"heapDeltaBytes": -8345064,
"heapUsedBytes": 61989128,
"domNodes": 22,
"jsHeapTotalBytes": 11677696,
"scriptDurationMs": 81.072,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2141.4530000000127,
"styleRecalcs": 71,
"styleRecalcDurationMs": 20.848,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1051.424,
"heapDeltaBytes": 13491028,
"heapUsedBytes": 84728672,
"domNodes": 20,
"jsHeapTotalBytes": 12115968,
"scriptDurationMs": 411.33599999999996,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-pan",
"durationMs": 2115.4259999999567,
"styleRecalcs": 68,
"styleRecalcDurationMs": 19.75,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 999.942,
"heapDeltaBytes": 18475596,
"heapUsedBytes": 80222220,
"domNodes": -266,
"jsHeapTotalBytes": 5967872,
"scriptDurationMs": 350.41999999999996,
"eventListeners": -126,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-zoom",
"durationMs": 3144.184999999993,
"styleRecalcs": 67,
"styleRecalcDurationMs": 20.898,
"layouts": 60,
"layoutDurationMs": 8.235,
"taskDurationMs": 1246.524,
"heapDeltaBytes": -5481908,
"heapUsedBytes": 68313768,
"domNodes": 16,
"jsHeapTotalBytes": 10629120,
"scriptDurationMs": 481.753,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-zoom",
"durationMs": 3120.8629999999857,
"styleRecalcs": 65,
"styleRecalcDurationMs": 20.46,
"layouts": 60,
"layoutDurationMs": 8.254000000000001,
"taskDurationMs": 1273.2559999999999,
"heapDeltaBytes": 13906624,
"heapUsedBytes": 69135352,
"domNodes": 14,
"jsHeapTotalBytes": 6553600,
"scriptDurationMs": 491.85300000000007,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2004.0789999999902,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.040000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 484.55499999999995,
"heapDeltaBytes": -9652212,
"heapUsedBytes": 63788844,
"domNodes": 20,
"jsHeapTotalBytes": 8531968,
"scriptDurationMs": 75.02199999999999,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "minimap-idle",
"durationMs": 2010.2640000000065,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.03,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 485.418,
"heapDeltaBytes": -9604304,
"heapUsedBytes": 64050940,
"domNodes": 20,
"jsHeapTotalBytes": 8007680,
"scriptDurationMs": 78.231,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 540.1350000000207,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.842999999999998,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 337.14200000000005,
"heapDeltaBytes": 7844940,
"heapUsedBytes": 66738652,
"domNodes": 20,
"jsHeapTotalBytes": 18087936,
"scriptDurationMs": 115.066,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.799999999999727
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 562.1939999999768,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.609,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 367.48400000000004,
"heapDeltaBytes": 7773588,
"heapUsedBytes": 66732920,
"domNodes": 20,
"jsHeapTotalBytes": 19398656,
"scriptDurationMs": 129.939,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66666666666665,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 1998.7800000000107,
"styleRecalcs": 9,
"styleRecalcDurationMs": 7.301,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 339.20099999999996,
"heapDeltaBytes": -2297172,
"heapUsedBytes": 56597272,
"domNodes": 18,
"jsHeapTotalBytes": 25690112,
"scriptDurationMs": 12.926,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2000.9979999999814,
"styleRecalcs": 10,
"styleRecalcDurationMs": 8.132000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 346.365,
"heapDeltaBytes": -2357948,
"heapUsedBytes": 56586868,
"domNodes": 20,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 12.589,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1739.103,
"styleRecalcs": 77,
"styleRecalcDurationMs": 42.66,
"layouts": 16,
"layoutDurationMs": 3.85,
"taskDurationMs": 703.7150000000001,
"heapDeltaBytes": -17559112,
"heapUsedBytes": 51076220,
"domNodes": -250,
"jsHeapTotalBytes": 21422080,
"scriptDurationMs": 93.10799999999999,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1671.2800000000243,
"styleRecalcs": 76,
"styleRecalcDurationMs": 36.72,
"layouts": 16,
"layoutDurationMs": 4.588,
"taskDurationMs": 641.623,
"heapDeltaBytes": -5160640,
"heapUsedBytes": 58207408,
"domNodes": 62,
"jsHeapTotalBytes": 15990784,
"scriptDurationMs": 87.314,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-transition-enter",
"durationMs": 931.7300000000159,
"styleRecalcs": 15,
"styleRecalcDurationMs": 27.117,
"layouts": 4,
"layoutDurationMs": 12.056999999999999,
"taskDurationMs": 713.2100000000002,
"heapDeltaBytes": 4371908,
"heapUsedBytes": 79798848,
"domNodes": 13833,
"jsHeapTotalBytes": 15728640,
"scriptDurationMs": 26.124999999999996,
"eventListeners": 2527,
"totalBlockingTimeMs": 149,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8151.648000000023,
"styleRecalcs": 251,
"styleRecalcDurationMs": 61.569,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3589.0930000000003,
"heapDeltaBytes": -10264,
"heapUsedBytes": 70226212,
"domNodes": 20,
"jsHeapTotalBytes": 19718144,
"scriptDurationMs": 1246.682,
"eventListeners": 20,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8115.64599999997,
"styleRecalcs": 251,
"styleRecalcDurationMs": 61.059999999999995,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3442.189,
"heapDeltaBytes": -3353276,
"heapUsedBytes": 67190544,
"domNodes": 24,
"jsHeapTotalBytes": 16572416,
"scriptDurationMs": 1145.9709999999998,
"eventListeners": 20,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 13382.112000000006,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13350.903,
"heapDeltaBytes": -51561896,
"heapUsedBytes": 161396268,
"domNodes": -3308,
"jsHeapTotalBytes": 17534976,
"scriptDurationMs": 567.798,
"eventListeners": -16470,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.219999999999953,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 13231.12100000003,
"styleRecalcs": 1,
"styleRecalcDurationMs": 2.1700000000000053,
"layouts": 1,
"layoutDurationMs": 3.3210000000000046,
"taskDurationMs": 13206.644999999999,
"heapDeltaBytes": -26393016,
"heapUsedBytes": 166325928,
"domNodes": -3306,
"jsHeapTotalBytes": 20156416,
"scriptDurationMs": 615.5350000000001,
"eventListeners": -16471,
"totalBlockingTimeMs": 797,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15646.608000000015,
"styleRecalcs": 78,
"styleRecalcDurationMs": 19.558999999999994,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15624.917,
"heapDeltaBytes": -31319756,
"heapUsedBytes": 167147444,
"domNodes": -3310,
"jsHeapTotalBytes": 16486400,
"scriptDurationMs": 866.603,
"eventListeners": -16470,
"totalBlockingTimeMs": 39,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15427.29600000007,
"styleRecalcs": 78,
"styleRecalcDurationMs": 19.767000000000035,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15404.712000000001,
"heapDeltaBytes": -53886632,
"heapUsedBytes": 156466268,
"domNodes": -8332,
"jsHeapTotalBytes": 14745600,
"scriptDurationMs": 832.6179999999999,
"eventListeners": -16460,
"totalBlockingTimeMs": 11,
"frameDurationMs": 17.780000000000047,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 447.50599999997576,
"styleRecalcs": 19,
"styleRecalcDurationMs": 25.85,
"layouts": 5,
"layoutDurationMs": 1.471,
"taskDurationMs": 121.501,
"heapDeltaBytes": 5264280,
"heapUsedBytes": 69607064,
"domNodes": 172,
"jsHeapTotalBytes": 5242880,
"scriptDurationMs": 20.961000000000002,
"eventListeners": 69,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666682,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "workflow-execution",
"durationMs": 453.9909999999736,
"styleRecalcs": 18,
"styleRecalcDurationMs": 24.868,
"layouts": 5,
"layoutDurationMs": 1.3020000000000003,
"taskDurationMs": 116.634,
"heapDeltaBytes": 5042112,
"heapUsedBytes": 72509204,
"domNodes": 157,
"jsHeapTotalBytes": 5242880,
"scriptDurationMs": 21.630999999999997,
"eventListeners": 69,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
}
]
} |
|
@coderabbitai approve |
✅ Action performedComments resolved and changes approved. |
|
@dante01yoon Successfully backported to #13007 |
Summary
A completed workspace top-up refreshed only the balance, leaving billing status — and
subscription.hasFunds(derived fromstatusData.has_funds) — stale until the next status fetch. The completed handler now refreshes both.Changes
TopUpCreditsDialogContentWorkspace.vuecompleted branch —await fetchBalance()→await Promise.all([fetchBalance(), fetchStatus()])(both already exposed onuseBillingContext()).Review Focus
main's top-up already calledfetchBalanceonly). Test validity proven by reverting to balance-only → the completed case goes red on thefetchStatusassertion.Fixes FE-932