MCPcopy Create free account
hub / github.com/BingyanStudio/github-analyzer / fetchReport

Function fetchReport

web/src/pages/Report.tsx:61–152  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

59 if (!isPresetLoaded) return;
60
61 const fetchReport = async () => {
62 try {
63 setIsLoading(true);
64 setError(null);
65 setReport("");
66 setStatusMessage("准备生成报告...");
67
68 const url = selectedPreset
69 ? `/api/report?preset=${encodeURIComponent(selectedPreset)}`
70 : "/api/report";
71
72 setIsStreaming(true);
73
74 const eventSource = new EventSource(
75 url + (url.includes("?") ? "&" : "?") + "stream=true",
76 {
77 withCredentials: true,
78 }
79 );
80
81 // Handle different event types
82 eventSource.addEventListener("chunk", (event) => {
83 try {
84 const data = JSON.parse(event.data);
85 setReport((prev) => (prev || "") + data.content);
86 } catch (err) {
87 console.log(err);
88 // If it's not valid JSON, treat it as plain text
89 setReport((prev) => (prev || "") + event.data);
90 }
91 });
92
93 eventSource.addEventListener("status", (event) => {
94 try {
95 const data = JSON.parse(event.data);
96 setStatusMessage(data.message);
97 } catch (err) {
98 console.error("Error parsing status message:", err);
99 }
100 });
101
102 eventSource.addEventListener("complete", (event) => {
103 try {
104 const data = JSON.parse(event.data);
105 if (data.message) {
106 setReport(data.message);
107 }
108 setStatusMessage("报告生成完成");
109 setTimeout(() => setStatusMessage(null), 3000);
110 } catch (err) {
111 console.error("Error parsing complete message:", err);
112 } finally {
113 eventSource.close();
114 setIsStreaming(false);
115 setIsLoading(false);
116 }
117 });
118

Callers 1

ReportFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected