Fix linting
This commit is contained in:
@@ -559,7 +559,7 @@ def create_document_routes(
|
|||||||
if file_path.exists():
|
if file_path.exists():
|
||||||
return InsertResponse(
|
return InsertResponse(
|
||||||
status="duplicated",
|
status="duplicated",
|
||||||
message=f"File '{file.filename}' already exists in the input directory."
|
message=f"File '{file.filename}' already exists in the input directory.",
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(file_path, "wb") as buffer:
|
with open(file_path, "wb") as buffer:
|
||||||
|
@@ -30,18 +30,18 @@ export default function UploadDocumentsDialog() {
|
|||||||
rejectedFiles.forEach(({ file, errors }) => {
|
rejectedFiles.forEach(({ file, errors }) => {
|
||||||
// Get the first error message
|
// Get the first error message
|
||||||
let errorMsg = errors[0]?.message || t('documentPanel.uploadDocuments.fileUploader.fileRejected', { name: file.name })
|
let errorMsg = errors[0]?.message || t('documentPanel.uploadDocuments.fileUploader.fileRejected', { name: file.name })
|
||||||
|
|
||||||
// Simplify error message for unsupported file types
|
// Simplify error message for unsupported file types
|
||||||
if (errorMsg.includes('file-invalid-type')) {
|
if (errorMsg.includes('file-invalid-type')) {
|
||||||
errorMsg = t('documentPanel.uploadDocuments.fileUploader.unsupportedType')
|
errorMsg = t('documentPanel.uploadDocuments.fileUploader.unsupportedType')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set progress to 100% to display error message
|
// Set progress to 100% to display error message
|
||||||
setProgresses((pre) => ({
|
setProgresses((pre) => ({
|
||||||
...pre,
|
...pre,
|
||||||
[file.name]: 100
|
[file.name]: 100
|
||||||
}))
|
}))
|
||||||
|
|
||||||
// Add error message to fileErrors
|
// Add error message to fileErrors
|
||||||
setFileErrors(prev => ({
|
setFileErrors(prev => ({
|
||||||
...prev,
|
...prev,
|
||||||
@@ -55,7 +55,7 @@ export default function UploadDocumentsDialog() {
|
|||||||
const handleDocumentsUpload = useCallback(
|
const handleDocumentsUpload = useCallback(
|
||||||
async (filesToUpload: File[]) => {
|
async (filesToUpload: File[]) => {
|
||||||
setIsUploading(true)
|
setIsUploading(true)
|
||||||
|
|
||||||
// Only clear errors for files that are being uploaded, keep errors for rejected files
|
// Only clear errors for files that are being uploaded, keep errors for rejected files
|
||||||
setFileErrors(prev => {
|
setFileErrors(prev => {
|
||||||
const newErrors = { ...prev };
|
const newErrors = { ...prev };
|
||||||
@@ -64,14 +64,14 @@ export default function UploadDocumentsDialog() {
|
|||||||
});
|
});
|
||||||
return newErrors;
|
return newErrors;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Show uploading toast
|
// Show uploading toast
|
||||||
const toastId = toast.loading(t('documentPanel.uploadDocuments.batch.uploading'))
|
const toastId = toast.loading(t('documentPanel.uploadDocuments.batch.uploading'))
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Track errors locally to ensure we have the final state
|
// Track errors locally to ensure we have the final state
|
||||||
const uploadErrors: Record<string, string> = {}
|
const uploadErrors: Record<string, string> = {}
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
filesToUpload.map(async (file) => {
|
filesToUpload.map(async (file) => {
|
||||||
try {
|
try {
|
||||||
@@ -80,7 +80,7 @@ export default function UploadDocumentsDialog() {
|
|||||||
...pre,
|
...pre,
|
||||||
[file.name]: 0
|
[file.name]: 0
|
||||||
}))
|
}))
|
||||||
|
|
||||||
const result = await uploadDocument(file, (percentCompleted: number) => {
|
const result = await uploadDocument(file, (percentCompleted: number) => {
|
||||||
console.debug(t('documentPanel.uploadDocuments.single.uploading', { name: file.name, percent: percentCompleted }))
|
console.debug(t('documentPanel.uploadDocuments.single.uploading', { name: file.name, percent: percentCompleted }))
|
||||||
setProgresses((pre) => ({
|
setProgresses((pre) => ({
|
||||||
@@ -104,10 +104,10 @@ export default function UploadDocumentsDialog() {
|
|||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`Upload failed for ${file.name}:`, err)
|
console.error(`Upload failed for ${file.name}:`, err)
|
||||||
|
|
||||||
// Handle HTTP errors, including 400 errors
|
// Handle HTTP errors, including 400 errors
|
||||||
let errorMsg = errorMessage(err)
|
let errorMsg = errorMessage(err)
|
||||||
|
|
||||||
// If it's an axios error with response data, try to extract more detailed error info
|
// If it's an axios error with response data, try to extract more detailed error info
|
||||||
if (err && typeof err === 'object' && 'response' in err) {
|
if (err && typeof err === 'object' && 'response' in err) {
|
||||||
const axiosError = err as { response?: { status: number, data?: { detail?: string } } }
|
const axiosError = err as { response?: { status: number, data?: { detail?: string } } }
|
||||||
@@ -115,14 +115,14 @@ export default function UploadDocumentsDialog() {
|
|||||||
// Extract specific error message from backend response
|
// Extract specific error message from backend response
|
||||||
errorMsg = axiosError.response.data?.detail || errorMsg
|
errorMsg = axiosError.response.data?.detail || errorMsg
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set progress to 100% to display error message
|
// Set progress to 100% to display error message
|
||||||
setProgresses((pre) => ({
|
setProgresses((pre) => ({
|
||||||
...pre,
|
...pre,
|
||||||
[file.name]: 100
|
[file.name]: 100
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record error message in both local tracking and state
|
// Record error message in both local tracking and state
|
||||||
uploadErrors[file.name] = errorMsg
|
uploadErrors[file.name] = errorMsg
|
||||||
setFileErrors(prev => ({
|
setFileErrors(prev => ({
|
||||||
@@ -132,10 +132,10 @@ export default function UploadDocumentsDialog() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
// Check if any files failed to upload using our local tracking
|
// Check if any files failed to upload using our local tracking
|
||||||
const hasErrors = Object.keys(uploadErrors).length > 0
|
const hasErrors = Object.keys(uploadErrors).length > 0
|
||||||
|
|
||||||
// Update toast status
|
// Update toast status
|
||||||
if (hasErrors) {
|
if (hasErrors) {
|
||||||
toast.error(t('documentPanel.uploadDocuments.batch.error'), { id: toastId })
|
toast.error(t('documentPanel.uploadDocuments.batch.error'), { id: toastId })
|
||||||
|
@@ -155,7 +155,7 @@ function FileUploader(props: FileUploaderProps) {
|
|||||||
(acceptedFiles: File[], rejectedFiles: FileRejection[]) => {
|
(acceptedFiles: File[], rejectedFiles: FileRejection[]) => {
|
||||||
// Calculate total file count including both accepted and rejected files
|
// Calculate total file count including both accepted and rejected files
|
||||||
const totalFileCount = (files?.length ?? 0) + acceptedFiles.length + rejectedFiles.length
|
const totalFileCount = (files?.length ?? 0) + acceptedFiles.length + rejectedFiles.length
|
||||||
|
|
||||||
// Check file count limits
|
// Check file count limits
|
||||||
if (!multiple && maxFileCount === 1 && (acceptedFiles.length + rejectedFiles.length) > 1) {
|
if (!multiple && maxFileCount === 1 && (acceptedFiles.length + rejectedFiles.length) > 1) {
|
||||||
toast.error(t('documentPanel.uploadDocuments.fileUploader.singleFileLimit'))
|
toast.error(t('documentPanel.uploadDocuments.fileUploader.singleFileLimit'))
|
||||||
@@ -186,19 +186,19 @@ function FileUploader(props: FileUploaderProps) {
|
|||||||
preview: URL.createObjectURL(file)
|
preview: URL.createObjectURL(file)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
// Process rejected files for UI display
|
// Process rejected files for UI display
|
||||||
const newRejectedFiles = rejectedFiles.map(({ file }) =>
|
const newRejectedFiles = rejectedFiles.map(({ file }) =>
|
||||||
Object.assign(file, {
|
Object.assign(file, {
|
||||||
preview: URL.createObjectURL(file),
|
preview: URL.createObjectURL(file),
|
||||||
rejected: true
|
rejected: true
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
// Combine all files for display
|
// Combine all files for display
|
||||||
const allNewFiles = [...newAcceptedFiles, ...newRejectedFiles]
|
const allNewFiles = [...newAcceptedFiles, ...newRejectedFiles]
|
||||||
const updatedFiles = files ? [...files, ...allNewFiles] : allNewFiles
|
const updatedFiles = files ? [...files, ...allNewFiles] : allNewFiles
|
||||||
|
|
||||||
// Update the files state with all files
|
// Update the files state with all files
|
||||||
setFiles(updatedFiles)
|
setFiles(updatedFiles)
|
||||||
|
|
||||||
@@ -211,13 +211,13 @@ function FileUploader(props: FileUploaderProps) {
|
|||||||
const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => {
|
const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => {
|
||||||
return file.type === mimeType || extensions.includes(fileExt);
|
return file.type === mimeType || extensions.includes(fileExt);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Check file size
|
// Check file size
|
||||||
const isSizeValid = file.size <= maxSize;
|
const isSizeValid = file.size <= maxSize;
|
||||||
|
|
||||||
return isAccepted && isSizeValid;
|
return isAccepted && isSizeValid;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (validFiles.length > 0) {
|
if (validFiles.length > 0) {
|
||||||
onUpload(validFiles);
|
onUpload(validFiles);
|
||||||
}
|
}
|
||||||
@@ -265,24 +265,24 @@ function FileUploader(props: FileUploaderProps) {
|
|||||||
const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => {
|
const isAccepted = Object.entries(accept || {}).some(([mimeType, extensions]) => {
|
||||||
return file.type === mimeType || extensions.includes(fileExt);
|
return file.type === mimeType || extensions.includes(fileExt);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!isAccepted) {
|
if (!isAccepted) {
|
||||||
return {
|
return {
|
||||||
code: 'file-invalid-type',
|
code: 'file-invalid-type',
|
||||||
message: t('documentPanel.uploadDocuments.fileUploader.unsupportedType')
|
message: t('documentPanel.uploadDocuments.fileUploader.unsupportedType')
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check file size
|
// Check file size
|
||||||
if (file.size > maxSize) {
|
if (file.size > maxSize) {
|
||||||
return {
|
return {
|
||||||
code: 'file-too-large',
|
code: 'file-too-large',
|
||||||
message: t('documentPanel.uploadDocuments.fileUploader.fileTooLarge', {
|
message: t('documentPanel.uploadDocuments.fileUploader.fileTooLarge', {
|
||||||
maxSize: formatBytes(maxSize)
|
maxSize: formatBytes(maxSize)
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
Reference in New Issue
Block a user