Skip to content

Commit f70062d

Browse files
committed
fix(cloud): usage preview fixes — clear timeout on response; correct bar height calc; robust array transform
1 parent d1e7192 commit f70062d

File tree

5 files changed

+29
-11
lines changed

5 files changed

+29
-11
lines changed

.review/pr-8274

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit e46929b8d8add0cd3c412d69f8ac882c405a4ba9

src/core/webview/webviewMessageHandler.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3130,14 +3130,19 @@ export const webviewMessageHandler = async (
31303130

31313131
// Transform the data to match UI expectations
31323132
// The API returns data with separate arrays, but UI expects an array of day objects
3133+
const dates = rawUsageData.data?.dates ?? []
3134+
const tasks = rawUsageData.data?.tasks ?? []
3135+
const tokens = rawUsageData.data?.tokens ?? []
3136+
const costs = rawUsageData.data?.costs ?? []
3137+
const len = Math.min(dates.length, tasks.length, tokens.length, costs.length)
3138+
31333139
const transformedData = {
3134-
days:
3135-
rawUsageData.data?.dates?.map((date: string, index: number) => ({
3136-
date: date,
3137-
taskCount: rawUsageData.data.tasks[index] || 0,
3138-
tokenCount: rawUsageData.data.tokens[index] || 0,
3139-
cost: rawUsageData.data.costs[index] || 0,
3140-
})) || [],
3140+
days: Array.from({ length: len }).map((_, index) => ({
3141+
date: dates[index] ?? "",
3142+
taskCount: tasks[index] ?? 0,
3143+
tokenCount: tokens[index] ?? 0,
3144+
cost: costs[index] ?? 0,
3145+
})),
31413146
totals: rawUsageData.data?.totals || {
31423147
tasks: 0,
31433148
tokens: 0,

tmp/pr-8287-Roo-Code

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 88a473b017af37091c85ce3056e444e856f80d6e

tmp/pr-8412

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 1339c7cc8bad17f95532117f36049d84a9ee8266

webview-ui/src/components/cloud/UsagePreview.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,16 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
5555
vscode.postMessage({ type: "getUsagePreview" })
5656

5757
// Listen for the response
58+
let timeoutId: ReturnType<typeof setTimeout> | null = null
5859
const handleMessage = (event: MessageEvent) => {
5960
const message = event.data
6061

6162
if (message.type === "usagePreviewData") {
63+
// Clear timeout on success/error to avoid stale timeout flipping UI into error
64+
if (timeoutId) {
65+
clearTimeout(timeoutId)
66+
}
67+
6268
if (message.error) {
6369
setError(message.error)
6470
} else if (message.data) {
@@ -76,23 +82,27 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
7682
window.addEventListener("message", handleMessage)
7783

7884
// Clean up listener after 10 seconds (timeout)
79-
const timeout = setTimeout(() => {
85+
timeoutId = setTimeout(() => {
8086
if (isLoading) {
8187
setError(t("cloud:usagePreview.failedToLoad"))
8288
setIsLoading(false)
8389
}
8490
}, 10000)
8591

8692
return () => {
87-
clearTimeout(timeout)
93+
if (timeoutId) {
94+
clearTimeout(timeoutId)
95+
}
8896
window.removeEventListener("message", handleMessage)
8997
}
9098
}, []) // eslint-disable-line react-hooks/exhaustive-deps
9199

92100
const getBarHeight = (cost: number): number => {
93101
if (!data || !data.days || data.days.length === 0) return 1
94-
const maxCost = ~~Math.max(...data.days.map((d) => d.cost)) // Avoid NaN
95-
return Math.max(1, ~~(cost / maxCost) * 100) // Enforce minimum height for visibility
102+
const maxCost = Math.max(...data.days.map((d) => d.cost))
103+
if (!Number.isFinite(maxCost) || maxCost <= 0) return 1
104+
// Compute percentage first, then round; enforce minimum height for visibility
105+
return Math.max(1, Math.round((cost / maxCost) * 100))
96106
}
97107

98108
// Retry loading

0 commit comments

Comments
 (0)