Skip to content

Commit c2c10ca

Browse files
authored
refactor: refactor upload utils replacing customevent (#1578)
* init refactor upload utils * code rabbit suggestions
1 parent d1303a3 commit c2c10ca

2 files changed

Lines changed: 19 additions & 184 deletions

File tree

frontend/app/chat/page.tsx

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -588,93 +588,6 @@ function ChatPage() {
588588
}
589589
}, [placeholderConversation, currentConversationId]);
590590

591-
// Listen for file upload events from navigation
592-
useEffect(() => {
593-
const handleFileUploadStart = (event: CustomEvent) => {
594-
const { filename } = event.detail;
595-
console.log("Chat page received file upload start event:", filename);
596-
597-
setLoading(true);
598-
setIsUploading(true);
599-
setUploadedFile(null); // Clear previous file
600-
};
601-
602-
const handleFileUploaded = (event: CustomEvent) => {
603-
const { result } = event.detail;
604-
console.log("Chat page received file upload event:", result);
605-
606-
setUploadedFile(null); // Clear file after upload
607-
608-
// Update the response ID for this endpoint
609-
if (result.response_id) {
610-
setPreviousResponseIds((prev) => ({
611-
...prev,
612-
[endpoint]: result.response_id,
613-
}));
614-
}
615-
};
616-
617-
const handleFileUploadComplete = () => {
618-
console.log("Chat page received file upload complete event");
619-
setLoading(false);
620-
setIsUploading(false);
621-
};
622-
623-
const handleFileUploadError = (event: CustomEvent) => {
624-
const { filename, error } = event.detail;
625-
console.log(
626-
"Chat page received file upload error event:",
627-
filename,
628-
error,
629-
);
630-
631-
// Replace the last message with error message
632-
const errorMessage: Message = {
633-
role: "assistant",
634-
content: `❌ Upload failed for **${filename}**: ${error}`,
635-
timestamp: new Date(),
636-
};
637-
setMessages((prev) => [...prev.slice(0, -1), errorMessage]);
638-
setUploadedFile(null); // Clear file on error
639-
};
640-
641-
window.addEventListener(
642-
"fileUploadStart",
643-
handleFileUploadStart as EventListener,
644-
);
645-
window.addEventListener(
646-
"fileUploaded",
647-
handleFileUploaded as EventListener,
648-
);
649-
window.addEventListener(
650-
"fileUploadComplete",
651-
handleFileUploadComplete as EventListener,
652-
);
653-
window.addEventListener(
654-
"fileUploadError",
655-
handleFileUploadError as EventListener,
656-
);
657-
658-
return () => {
659-
window.removeEventListener(
660-
"fileUploadStart",
661-
handleFileUploadStart as EventListener,
662-
);
663-
window.removeEventListener(
664-
"fileUploaded",
665-
handleFileUploaded as EventListener,
666-
);
667-
window.removeEventListener(
668-
"fileUploadComplete",
669-
handleFileUploadComplete as EventListener,
670-
);
671-
window.removeEventListener(
672-
"fileUploadError",
673-
handleFileUploadError as EventListener,
674-
);
675-
};
676-
}, [endpoint, setPreviousResponseIds, setLoading]);
677-
678591
// Check onboarding completion
679592

680593
// Check if onboarding is complete (current_step >= 4 means complete)

frontend/lib/upload-utils.ts

Lines changed: 19 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -32,94 +32,6 @@ export async function duplicateCheck(
3232
return response.json();
3333
}
3434

35-
export async function uploadFileForContext(
36-
file: File,
37-
): Promise<UploadFileResult> {
38-
window.dispatchEvent(
39-
new CustomEvent("fileUploadStart", {
40-
detail: { filename: file.name },
41-
}),
42-
);
43-
44-
try {
45-
const formData = new FormData();
46-
formData.append("file", file);
47-
48-
const uploadResponse = await fetch("/api/upload_context", {
49-
method: "POST",
50-
body: formData,
51-
});
52-
53-
let payload: unknown;
54-
try {
55-
payload = await uploadResponse.json();
56-
} catch (_error) {
57-
throw new Error("Upload failed: unable to parse server response");
58-
}
59-
60-
const uploadJson =
61-
typeof payload === "object" && payload !== null ? payload : {};
62-
63-
if (!uploadResponse.ok) {
64-
const errorMessage =
65-
(uploadJson as { error?: string }).error || "Upload failed";
66-
throw new Error(errorMessage);
67-
}
68-
69-
const fileId =
70-
(uploadJson as { response_id?: string }).response_id || "uploaded";
71-
const filePath =
72-
(uploadJson as { filename?: string }).filename || file.name;
73-
const pages = (uploadJson as { pages?: number }).pages;
74-
const contentLength = (uploadJson as { content_length?: number })
75-
.content_length;
76-
const confirmation = (uploadJson as { confirmation?: string }).confirmation;
77-
78-
const result: UploadFileResult = {
79-
fileId,
80-
filePath,
81-
run: null,
82-
deletion: null,
83-
unified: false,
84-
raw: uploadJson,
85-
};
86-
87-
window.dispatchEvent(
88-
new CustomEvent("fileUploaded", {
89-
detail: {
90-
file,
91-
result: {
92-
file_id: fileId,
93-
file_path: filePath,
94-
filename: filePath,
95-
pages: pages,
96-
content_length: contentLength,
97-
confirmation: confirmation,
98-
response_id: fileId,
99-
run: null,
100-
deletion: null,
101-
unified: false,
102-
},
103-
},
104-
}),
105-
);
106-
107-
return result;
108-
} catch (error) {
109-
window.dispatchEvent(
110-
new CustomEvent("fileUploadError", {
111-
detail: {
112-
filename: file.name,
113-
error: error instanceof Error ? error.message : "Upload failed",
114-
},
115-
}),
116-
);
117-
throw error;
118-
} finally {
119-
window.dispatchEvent(new CustomEvent("fileUploadComplete"));
120-
}
121-
}
122-
12335
export async function uploadFiles(
12436
files: File[],
12537
replace = false,
@@ -160,10 +72,16 @@ export async function uploadFiles(
16072
return { taskId, fileCount };
16173
}
16274

75+
export interface UploadFileCallbacks {
76+
onComplete?: () => void;
77+
onError?: (filename: string, error: string) => void;
78+
}
79+
16380
export async function uploadFile(
16481
file: File,
16582
replace = false,
16683
createFilter = false,
84+
callbacks?: UploadFileCallbacks,
16785
): Promise<UploadFileResult> {
16886
try {
16987
const formData = new FormData();
@@ -243,16 +161,20 @@ export async function uploadFile(
243161

244162
return result;
245163
} catch (error) {
246-
window.dispatchEvent(
247-
new CustomEvent("fileUploadError", {
248-
detail: {
249-
filename: file.name,
250-
error: error instanceof Error ? error.message : "Upload failed",
251-
},
252-
}),
253-
);
164+
try {
165+
callbacks?.onError?.(
166+
file.name,
167+
error instanceof Error ? error.message : "Upload failed",
168+
);
169+
} catch (cbErr) {
170+
console.warn("uploadFile: onError callback threw", cbErr);
171+
}
254172
throw error;
255173
} finally {
256-
window.dispatchEvent(new CustomEvent("fileUploadComplete"));
174+
try {
175+
callbacks?.onComplete?.();
176+
} catch (cbErr) {
177+
console.warn("uploadFile: onComplete callback threw", cbErr);
178+
}
257179
}
258180
}

0 commit comments

Comments
 (0)