diff --git a/frontend/src/hooks/tools/convert/useConvertOperation.ts b/frontend/src/hooks/tools/convert/useConvertOperation.ts index 3aeb77222..c79383f75 100644 --- a/frontend/src/hooks/tools/convert/useConvertOperation.ts +++ b/frontend/src/hooks/tools/convert/useConvertOperation.ts @@ -88,23 +88,28 @@ export const useConvertOperation = () => { parameters: ConvertParameters, selectedFiles: File[] ): Promise => { + const processedFiles: File[] = []; const endpoint = getEndpointUrl(parameters.fromExtension, parameters.toExtension); if (!endpoint) { - throw new Error('Unsupported conversion format'); + throw new Error(t('errorNotSupported', 'Unsupported conversion format')); } // Convert-specific routing logic: decide batch vs individual processing if (shouldProcessFilesSeparately(selectedFiles, parameters)) { // Individual processing for complex cases (PDF→image, smart detection, etc.) for (const file of selectedFiles) { - const formData = buildFormData(parameters, [file]); - const response = await axios.post(endpoint, formData, { responseType: 'blob' }); - - const convertedFile = createFileFromResponse(response.data, response.headers, file.name, parameters.toExtension); - - processedFiles.push(convertedFile); + try { + const formData = buildFormData(parameters, [file]); + const response = await axios.post(endpoint, formData, { responseType: 'blob' }); + + const convertedFile = createFileFromResponse(response.data, response.headers, file.name, parameters.toExtension); + + processedFiles.push(convertedFile); + } catch (error) { + console.warn(`Failed to convert file ${file.name}:`, error); + } } } else { // Batch processing for simple cases (image→PDF combine) diff --git a/frontend/src/tests/convert/ConvertIntegration.test.tsx b/frontend/src/tests/convert/ConvertIntegration.test.tsx index c9a636035..f7305f7aa 100644 --- a/frontend/src/tests/convert/ConvertIntegration.test.tsx +++ b/frontend/src/tests/convert/ConvertIntegration.test.tsx @@ -389,7 +389,7 @@ describe('Convert Tool Integration Tests', () => { }); expect(mockedAxios.post).not.toHaveBeenCalled(); - expect(result.current.status).toContain('noFileSelected'); + expect(result.current.errorMessage).toContain('noFileSelected'); }); });