()
| 166 | |
| 167 | // Function to handle report regeneration |
| 168 | const handleRegenerateReport = async () => { |
| 169 | try { |
| 170 | setIsLoading(true); |
| 171 | setError(null); |
| 172 | setReport(""); |
| 173 | setStatusMessage("准备重新生成报告..."); |
| 174 | |
| 175 | const url = selectedPreset |
| 176 | ? `/api/report?preset=${encodeURIComponent( |
| 177 | selectedPreset |
| 178 | )}&force_regen=true` |
| 179 | : "/api/report?force_regen=true"; |
| 180 | |
| 181 | // Check if the browser supports EventSource |
| 182 | if (typeof EventSource !== "undefined") { |
| 183 | setIsStreaming(true); |
| 184 | |
| 185 | const eventSource = new EventSource(url + "&stream=true", { |
| 186 | withCredentials: true, |
| 187 | }); |
| 188 | |
| 189 | // Handle different event types |
| 190 | eventSource.addEventListener("chunk", (event) => { |
| 191 | try { |
| 192 | const data = JSON.parse(event.data); |
| 193 | setReport((prev) => (prev || "") + data.content); |
| 194 | } catch (err) { |
| 195 | console.log(err); |
| 196 | // If it's not valid JSON, treat it as plain text |
| 197 | setReport((prev) => (prev || "") + event.data); |
| 198 | } |
| 199 | }); |
| 200 | |
| 201 | eventSource.addEventListener("status", (event) => { |
| 202 | try { |
| 203 | const data = JSON.parse(event.data); |
| 204 | setStatusMessage(data.message); |
| 205 | } catch (err) { |
| 206 | console.error("Error parsing status message:", err); |
| 207 | } |
| 208 | }); |
| 209 | |
| 210 | eventSource.addEventListener("complete", (event) => { |
| 211 | try { |
| 212 | const data = JSON.parse(event.data); |
| 213 | if (data.message) { |
| 214 | setReport(data.message); |
| 215 | } |
| 216 | setStatusMessage("报告重新生成完成"); |
| 217 | setTimeout(() => setStatusMessage(null), 3000); |
| 218 | } catch (err) { |
| 219 | console.error("Error parsing complete message:", err); |
| 220 | } finally { |
| 221 | eventSource.close(); |
| 222 | setIsStreaming(false); |
| 223 | setIsLoading(false); |
| 224 | } |
| 225 | }); |
nothing calls this directly
no outgoing calls
no test coverage detected