Skip to content

Commit 2c31616

Browse files
committed
Actually makes data flow in
1 parent af0a90e commit 2c31616

File tree

3 files changed

+21
-89
lines changed

3 files changed

+21
-89
lines changed

packages/cloud/src/CloudAPI.ts

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,7 @@ export class CloudAPI {
7777
}
7878

7979
// Log before attempting to read the body
80-
this.log(`[CloudAPI] Reading response body for ${endpoint}`)
8180
const data = await response.json()
82-
this.log(`[CloudAPI] Successfully read response body for ${endpoint}`)
8381

8482
if (parseResponse) {
8583
return parseResponse(data)
@@ -109,22 +107,14 @@ export class CloudAPI {
109107
let responseBody: unknown
110108

111109
try {
112-
// Clone the response before reading to avoid "Body has already been read" error
113-
this.log(`[CloudAPI] Handling error response for ${endpoint}, status: ${response.status}`)
114-
115-
// Read the body as text first, then try to parse as JSON
116110
const bodyText = await response.text()
117-
this.log(`[CloudAPI] Error response body text: ${bodyText}`)
118111

119112
try {
120113
responseBody = JSON.parse(bodyText)
121-
this.log(`[CloudAPI] Parsed error response as JSON:`, responseBody)
122114
} catch {
123115
responseBody = bodyText
124-
this.log(`[CloudAPI] Error response is plain text: ${bodyText}`)
125116
}
126-
} catch (error) {
127-
this.log(`[CloudAPI] Failed to read error response body: ${error}`)
117+
} catch (_error) {
128118
responseBody = "Failed to read error response"
129119
}
130120

@@ -146,15 +136,12 @@ export class CloudAPI {
146136
}
147137

148138
async shareTask(taskId: string, visibility: ShareVisibility = "organization"): Promise<ShareResponse> {
149-
this.log(`[CloudAPI] Sharing task ${taskId} with visibility: ${visibility}`)
150-
151139
const response = await this.request("/api/extension/share", {
152140
method: "POST",
153141
body: JSON.stringify({ taskId, visibility }),
154142
parseResponse: (data) => shareResponseSchema.parse(data),
155143
})
156144

157-
this.log("[CloudAPI] Share response:", response)
158145
return response
159146
}
160147

@@ -173,22 +160,12 @@ export class CloudAPI {
173160
}
174161

175162
async getUsagePreview(): Promise<UsageStats> {
176-
this.log("[CloudAPI] Fetching usage preview - starting request")
177-
178-
try {
179-
const response = await this.request("/api/analytics/usage/daily?period=7&format=array", {
180-
method: "GET",
181-
parseResponse: (data) => {
182-
this.log("[CloudAPI] Parsing usage preview response data:", data)
183-
return usageStatsSchema.parse(data)
184-
},
185-
})
186-
187-
this.log("[CloudAPI] Usage preview response successfully received:", response)
188-
return response
189-
} catch (error) {
190-
this.log("[CloudAPI] Error fetching usage preview:", error)
191-
throw error
192-
}
163+
const response = await this.request("/api/analytics/usage/daily?period=7", {
164+
method: "GET",
165+
parseResponse: (data) => {
166+
return usageStatsSchema.parse(data)
167+
},
168+
})
169+
return response
193170
}
194171
}

src/core/webview/webviewMessageHandler.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3112,8 +3112,6 @@ export const webviewMessageHandler = async (
31123112
}
31133113
case "getUsagePreview": {
31143114
try {
3115-
provider.log("[webviewMessageHandler] Received getUsagePreview request")
3116-
31173115
// Get the CloudAPI instance and fetch usage preview
31183116
const cloudApi = CloudService.instance.cloudAPI
31193117
if (!cloudApi) {
@@ -3128,12 +3126,7 @@ export const webviewMessageHandler = async (
31283126
}
31293127

31303128
// Fetch usage preview data
3131-
provider.log("[webviewMessageHandler] Calling cloudApi.getUsagePreview()")
31323129
const rawUsageData = await cloudApi.getUsagePreview()
3133-
provider.log(`[webviewMessageHandler] Raw API response structure: ${JSON.stringify(rawUsageData)}`)
3134-
provider.log(
3135-
`[webviewMessageHandler] Raw API response has properties: ${Object.keys(rawUsageData).join(", ")}`,
3136-
)
31373130

31383131
// Transform the data to match UI expectations
31393132
// The API returns data with separate arrays, but UI expects an array of day objects
@@ -3152,9 +3145,6 @@ export const webviewMessageHandler = async (
31523145
},
31533146
}
31543147

3155-
provider.log(`[webviewMessageHandler] Transformed data for UI: ${JSON.stringify(transformedData)}`)
3156-
provider.log(`[webviewMessageHandler] Transformed data has ${transformedData.days.length} days`)
3157-
31583148
// Send the transformed data back to the webview
31593149
await provider.postMessageToWebview({
31603150
type: "usagePreviewData",

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

Lines changed: 13 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -59,28 +59,13 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
5959
const message = event.data
6060

6161
if (message.type === "usagePreviewData") {
62-
console.log("[UsagePreview] Received usagePreviewData:", message)
63-
console.log("[UsagePreview] Data structure:", {
64-
hasData: !!message.data,
65-
dataKeys: message.data ? Object.keys(message.data) : [],
66-
hasDays: message.data?.days !== undefined,
67-
daysIsArray: Array.isArray(message.data?.days),
68-
daysLength: message.data?.days?.length || 0,
69-
})
70-
7162
if (message.error) {
72-
console.log("[UsagePreview] Setting error:", message.error)
7363
setError(message.error)
7464
} else if (message.data) {
7565
// Validate the data structure
7666
if (!message.data.days || !Array.isArray(message.data.days)) {
77-
console.error(
78-
"[UsagePreview] Invalid data structure - missing or non-array days:",
79-
message.data,
80-
)
8167
setError("Invalid data format received")
8268
} else {
83-
console.log("[UsagePreview] Setting valid data with", message.data.days.length, "days")
8469
setData(message.data)
8570
}
8671
}
@@ -106,8 +91,8 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
10691

10792
const getBarHeight = (cost: number): number => {
10893
if (!data || !data.days || data.days.length === 0) return 1
109-
const maxCost = Math.max(...data.days.map((d) => d.cost))
110-
return Math.max(1, ~~(cost / maxCost) * 100) // Avoid NaN and enforce minimum height for visibility
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
11196
}
11297

11398
// Retry loading
@@ -134,7 +119,7 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
134119
}
135120

136121
// Error state
137-
if (error) {
122+
if (error || !data) {
138123
return (
139124
<div
140125
className="cursor-pointer group rounded-lg bg-vscode-editor-background hover:bg-vscode-list-hoverBackground transition-colors relative"
@@ -152,34 +137,14 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
152137
)
153138
}
154139

155-
// Use placeholder data if no real data available
156-
const displayData = data || {
157-
days: [
158-
{ date: "2025-09-17", taskCount: 2, tokenCount: 3200000, cost: 3.2 },
159-
{ date: "2025-09-18", taskCount: 1, tokenCount: 1600000, cost: 1.6 },
160-
{ date: "2025-09-19", taskCount: 1, tokenCount: 2400000, cost: 2.4 },
161-
{ date: "2025-09-20", taskCount: 0, tokenCount: 1200000, cost: 1.2 },
162-
{ date: "2025-09-21", taskCount: 3, tokenCount: 4000000, cost: 4.0 },
163-
{ date: "2025-09-22", taskCount: 1, tokenCount: 2800000, cost: 2.8 },
164-
{ date: "2025-09-23", taskCount: 1, tokenCount: 2000000, cost: 2.61 },
165-
],
166-
totals: {
167-
tasks: 9,
168-
tokens: 14800000,
169-
cost: 17.81,
170-
},
171-
}
172-
173140
return (
174-
<div
175-
className="cursor-pointer group rounded-lg bg-vscode-editor-background hover:bg-vscode-list-hoverBackground transition-colors relative"
176-
onClick={onViewDetails}>
141+
<div className="cursor-pointer group rounded-lg bg-vscode-editor-background relative" onClick={onViewDetails}>
177142
<div className="p-4">
178143
{/* Chart with daily usage bars */}
179144
<div className="h-24 min-[450px]:h-40 rounded mb-3 flex items-end gap-1 pb-2">
180-
{displayData.days &&
181-
Array.isArray(displayData.days) &&
182-
displayData.days.map((day, index) => (
145+
{data &&
146+
Array.isArray(data.days) &&
147+
data.days.map((day, index) => (
183148
<div key={index} className="w-full flex flex-col items-center justify-end h-full">
184149
<div
185150
className="w-full rounded-t-xs transition-all bg-vscode-button-background"
@@ -193,22 +158,22 @@ export const UsagePreview = ({ onViewDetails }: UsagePreviewProps) => {
193158
</div>
194159

195160
{/* Stats text */}
196-
<div className="flex flex-col justify-between text-sm min-[450px]:flex-row min-[450px]:items-center">
161+
<div className="flex flex-col justify-between text-sm min-[400px]:flex-row min-[450px]:items-center">
197162
<span className="flex items-center gap-1 text-vscode-descriptionForeground">
198-
{t("cloud:usageStats.pastDays", { count: displayData.days.length })}
163+
{t("cloud:usageStats.pastDays", { count: data.days.length })}
199164
</span>
200165
<span className="text-vscode-foreground">
201-
{displayData.totals.tasks} tasks · {formatTokenCount(displayData.totals.tokens)} tokens ·{" "}
202-
{formatCost(displayData.totals.cost)}
166+
{data.totals.tasks} tasks · {formatTokenCount(data.totals.tokens)} tokens ·{" "}
167+
{formatCost(data.totals.cost)}
203168
</span>
204169
</div>
205170
</div>
206171

207172
{/* Hover overlay */}
208-
<div className="absolute inset-0 bg-vscode-editor-background/95 rounded-lg flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none">
173+
<div className="absolute inset-0 bg-vscode-editor-background/85 rounded-lg flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none">
209174
<div className="flex items-center gap-2 text-vscode-foreground">
210175
<span>{t("cloud:usageStats.seeMoreStats")}</span>
211-
<SquareArrowOutUpRight className="w-4 h-4" />
176+
<SquareArrowOutUpRight className="size-3" />
212177
</div>
213178
</div>
214179
</div>

0 commit comments

Comments
 (0)