Skip to content

Commit 91d7b74

Browse files
Copilot changes commit in the file upload
1 parent 0569ff7 commit 91d7b74

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

src/frontend/src/components/uploadButton.tsx

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
import React, { useCallback, useState, useEffect } from 'react';
2+
// Helper function to check for .sql extension
3+
const isSqlFile = (file: File): boolean => file.name.toLowerCase().endsWith('.sql');
4+
5+
// MessageBar styles constant
6+
const messageBarErrorStyles = {
7+
root: { display: "flex", flexDirection: "column", alignItems: "left", background: "#fff4f4" },
8+
icon: { display: "none" },
9+
};
210
import { useDropzone, FileRejection, DropzoneOptions } from 'react-dropzone';
311
import { CircleCheck, X } from 'lucide-react';
412
import {
@@ -163,14 +171,13 @@ const FileUploadZone: React.FC<FileUploadZoneProps> = ({
163171

164172
const onDrop = useCallback(
165173
(acceptedFiles: File[], fileRejections: FileRejection[]) => {
166-
// Manual extension check: only allow .sql files
167-
const validFiles = acceptedFiles.filter(file => file.name.toLowerCase().endsWith('.sql'));
168-
const invalidFiles = acceptedFiles.filter(file => !file.name.toLowerCase().endsWith('.sql'));
174+
// Use helper for .sql extension check
175+
const validFiles = acceptedFiles.filter(isSqlFile);
176+
const invalidFiles = acceptedFiles.filter(file => !isSqlFile(file));
169177

170178
// Check current files count and determine how many more can be added
171179
const remainingSlots = MAX_FILES - uploadingFiles.length;
172180

173-
174181
if (validFiles.length > 0) {
175182
setFileRejectionErrors([]); // Clear error notification when valid file is selected
176183
}
@@ -191,26 +198,26 @@ const FileUploadZone: React.FC<FileUploadZoneProps> = ({
191198
if (onFileUpload) onFileUpload(validFiles);
192199
}
193200

194-
// Build error messages for invalid extension files
195-
const errors: string[] = [];
196-
invalidFiles.forEach(file => {
197-
errors.push(`File '${file.name}' is not a valid SQL file. Only .sql files are allowed.`);
198-
});
199-
200-
// Existing fileRejections (size/type)
201-
if (fileRejections.length > 0) {
202-
fileRejections.forEach(rejection => {
203-
rejection.errors.forEach(err => {
201+
// Efficient error array construction
202+
const errors: string[] = [
203+
...invalidFiles.map(file =>
204+
`File '${file.name}' is not a valid SQL file. Only .sql files are allowed.`
205+
),
206+
...fileRejections.flatMap(rejection =>
207+
rejection.errors.map(err => {
204208
if (err.code === "file-too-large") {
205-
errors.push(`File '${rejection.file.name}' exceeds the 200MB size limit. Please upload a file smaller than 200MB.`);
209+
return `File '${rejection.file.name}' exceeds the 200MB size limit. Please upload a file smaller than 200MB.`;
206210
} else if (err.code === "file-invalid-type") {
207-
errors.push(`File '${rejection.file.name}' is not a valid SQL file. Only .sql files are allowed.`);
211+
return `File '${rejection.file.name}' is not a valid SQL file. Only .sql files are allowed.`;
208212
} else {
209-
errors.push(`File '${rejection.file.name}': ${err.message}`);
213+
return `File '${rejection.file.name}': ${err.message}`;
210214
}
211-
});
212-
});
213-
if (onFileReject) onFileReject(fileRejections);
215+
})
216+
)
217+
];
218+
219+
if (fileRejections.length > 0 && onFileReject) {
220+
onFileReject(fileRejections);
214221
}
215222
if (errors.length > 0) {
216223
setFileRejectionErrors(errors);
@@ -552,10 +559,7 @@ const FileUploadZone: React.FC<FileUploadZoneProps> = ({
552559
<MessageBar
553560
messageBarType={MessageBarType.error}
554561
isMultiline={true}
555-
styles={{
556-
root: { display: "flex", flexDirection: "column", alignItems: "left", background: "#fff4f4" },
557-
icon: { display: "none" },
558-
}}
562+
styles={messageBarErrorStyles}
559563
>
560564
<div style={{ display: "flex", alignItems: "center" }}>
561565
<X strokeWidth="2.5px" color="#d83b01" size="16px" style={{ marginRight: "8px" }} />

0 commit comments

Comments
 (0)