From 490c7c10186cdc148fc980312c0e1853c0da609c Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Thu, 25 Sep 2025 07:36:19 +0200 Subject: [PATCH] Refactor to use nullish coalescing and add missing React imports Replaced many uses of logical OR (||) with nullish coalescing (??) for more accurate handling of undefined/null values. Added missing explicit React imports to various component files to ensure compatibility with tooling and future React versions. Also updated some async function calls to use 'void' for better type safety and intent clarity. Minor whitespace and formatting adjustments included. --- .../tools/addStamp/StampPreview.tsx | 16 ++++++------- .../tools/addStamp/useAddStampOperation.ts | 4 ++-- .../tools/addWatermark/WatermarkImageFile.tsx | 2 +- .../addWatermark/WatermarkTypeSettings.tsx | 1 + .../AdjustPageScaleSettings.test.tsx | 1 + .../AdjustPageScaleSettings.tsx | 1 + .../tools/automate/AutomationCreation.tsx | 4 ++-- .../tools/automate/AutomationEntry.tsx | 2 +- .../tools/automate/AutomationRun.tsx | 4 ++-- .../tools/automate/ToolConfigurationModal.tsx | 2 +- .../tools/automate/ToolSelector.tsx | 6 ++--- .../certSign/CertificateFilesSettings.tsx | 19 ++++++++------- .../certSign/CertificateFormatSettings.tsx | 1 + .../certSign/CertificateTypeSettings.tsx | 1 + .../certSign/SignatureAppearanceSettings.tsx | 1 + .../ChangeMetadataSingleStep.tsx | 1 + .../steps/AdvancedOptionsStep.tsx | 1 + .../steps/CustomMetadataStep.tsx | 1 + .../changeMetadata/steps/DeleteAllStep.tsx | 1 + .../steps/DocumentDatesStep.tsx | 1 + .../steps/StandardMetadataStep.tsx | 1 + .../ChangePermissionsSettings.test.tsx | 1 + .../ChangePermissionsSettings.tsx | 1 + .../tools/convert/ConvertToPdfaSettings.tsx | 2 +- .../components/tools/crop/CropSettings.tsx | 6 ++--- .../tools/flatten/FlattenSettings.tsx | 1 + .../tools/merge/MergeFileSorter.test.tsx | 1 + .../tools/merge/MergeSettings.test.tsx | 1 + .../components/tools/ocr/LanguagePicker.tsx | 2 +- .../src/components/tools/ocr/OCRSettings.tsx | 2 +- .../redact/RedactAdvancedSettings.test.tsx | 1 + .../tools/redact/RedactAdvancedSettings.tsx | 1 + .../tools/redact/RedactModeSelector.tsx | 1 + .../redact/RedactSingleStepSettings.test.tsx | 1 + .../src/components/viewer/SearchInterface.tsx | 2 +- .../components/viewer/ThumbnailSidebar.tsx | 2 +- frontend/src/contexts/FilesModalContext.tsx | 10 +++++--- .../tools/automate/useSavedAutomations.ts | 4 ++-- .../changeMetadata/useMetadataExtraction.ts | 2 +- frontend/src/hooks/useAppConfig.ts | 2 +- frontend/src/hooks/useEndpointConfig.ts | 4 ++-- .../src/hooks/useEnhancedProcessedFiles.ts | 2 +- frontend/src/hooks/useIndexedDBThumbnail.ts | 3 +-- .../src/hooks/usePdfSignatureDetection.ts | 2 +- frontend/src/hooks/useProcessedFiles.ts | 2 +- frontend/src/i18n.ts | 2 +- frontend/src/i18n/config.ts | 6 ++--- .../services/enhancedPDFProcessingService.ts | 2 +- .../src/services/fileProcessingService.ts | 2 +- frontend/src/services/fileStorage.ts | 24 +++++++++---------- frontend/src/services/indexedDBManager.ts | 4 ++-- frontend/src/services/pdfProcessingService.ts | 2 +- frontend/src/services/pdfWorkerManager.ts | 6 ++--- frontend/src/tools/AdjustPageScale.tsx | 2 +- frontend/src/tools/Crop.tsx | 1 + frontend/src/tools/RemovePassword.tsx | 1 + frontend/src/tools/Rotate.tsx | 1 + 57 files changed, 104 insertions(+), 76 deletions(-) diff --git a/frontend/src/components/tools/addStamp/StampPreview.tsx b/frontend/src/components/tools/addStamp/StampPreview.tsx index 730f36b35..a6a4c178b 100644 --- a/frontend/src/components/tools/addStamp/StampPreview.tsx +++ b/frontend/src/components/tools/addStamp/StampPreview.tsx @@ -72,7 +72,7 @@ export default function StampPreview({ parameters, onParameterChange, file, show if (!cancelled) setPageSize(null); } }; - load(); + void load(); return () => { cancelled = true; }; }, [file]); @@ -88,12 +88,12 @@ export default function StampPreview({ parameters, onParameterChange, file, show const pageNumber = Math.max(1, getFirstSelectedPage(parameters.pageNumbers)); const pageId = `${file.name}:${file.size}:${file.lastModified}:page:${pageNumber}`; const thumb = await requestThumbnail(pageId, file, pageNumber); - if (isActive) setPageThumbnail(thumb || null); + if (isActive) setPageThumbnail(thumb ?? null); } catch { if (isActive) setPageThumbnail(null); } }; - loadThumb(); + void loadThumb(); return () => { isActive = false; }; }, [file, parameters.pageNumbers, requestThumbnail]); @@ -189,7 +189,7 @@ export default function StampPreview({ parameters, onParameterChange, file, show draggingRef.current = { type, - startX: e.clientX - (rect?.left || 0), + startX: e.clientX - (rect?.left ?? 0), startY: (rect ? rect.bottom - e.clientY : 0), // convert to bottom-based coords initLeft: left, initBottom: bottom, @@ -255,11 +255,11 @@ export default function StampPreview({ parameters, onParameterChange, file, show
Preview Stamp
-
{pageThumbnail && ( diff --git a/frontend/src/components/tools/addStamp/useAddStampOperation.ts b/frontend/src/components/tools/addStamp/useAddStampOperation.ts index c41c440fc..48480f408 100644 --- a/frontend/src/components/tools/addStamp/useAddStampOperation.ts +++ b/frontend/src/components/tools/addStamp/useAddStampOperation.ts @@ -7,7 +7,7 @@ export const buildAddStampFormData = (parameters: AddStampParameters, file: File const formData = new FormData(); formData.append('fileInput', file); formData.append('pageNumbers', parameters.pageNumbers); - formData.append('customMargin', parameters.customMargin || 'medium'); + formData.append('customMargin', parameters.customMargin || 'medium'); formData.append('position', String(parameters.position)); const effectiveFontSize = parameters.fontSize; formData.append('fontSize', String(effectiveFontSize)); @@ -19,7 +19,7 @@ export const buildAddStampFormData = (parameters: AddStampParameters, file: File formData.append('alphabet', parameters.alphabet); // Stamp type and payload - formData.append('stampType', parameters.stampType || 'text'); + formData.append('stampType', parameters.stampType ?? 'text'); if (parameters.stampType === 'text') { formData.append('stampText', parameters.stampText); } else if (parameters.stampType === 'image' && parameters.stampImage) { diff --git a/frontend/src/components/tools/addWatermark/WatermarkImageFile.tsx b/frontend/src/components/tools/addWatermark/WatermarkImageFile.tsx index 85e723ccb..90e603f52 100644 --- a/frontend/src/components/tools/addWatermark/WatermarkImageFile.tsx +++ b/frontend/src/components/tools/addWatermark/WatermarkImageFile.tsx @@ -17,7 +17,7 @@ const WatermarkImageFile = ({ parameters, onParameterChange, disabled = false }: onParameterChange('watermarkImage', file || undefined)} + onChange={(file) => onParameterChange('watermarkImage', file ?? undefined)} accept="image/*" disabled={disabled} placeholder={t('watermark.settings.image.choose', 'Choose Image')} diff --git a/frontend/src/components/tools/addWatermark/WatermarkTypeSettings.tsx b/frontend/src/components/tools/addWatermark/WatermarkTypeSettings.tsx index 2c7548df8..142d623a4 100644 --- a/frontend/src/components/tools/addWatermark/WatermarkTypeSettings.tsx +++ b/frontend/src/components/tools/addWatermark/WatermarkTypeSettings.tsx @@ -1,3 +1,4 @@ +import React from "react"; import { useTranslation } from "react-i18next"; import ButtonSelector from "../../shared/ButtonSelector"; diff --git a/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.test.tsx b/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.test.tsx index d71655cdc..52b0abbd5 100644 --- a/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.test.tsx +++ b/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.test.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { describe, expect, test, vi, beforeEach } from 'vitest'; import { render, screen } from '@testing-library/react'; import { MantineProvider } from '@mantine/core'; diff --git a/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx b/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx index 9262bcba4..3879ad954 100644 --- a/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx +++ b/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx @@ -1,3 +1,4 @@ +import React from "react"; import { Stack, NumberInput, Select } from "@mantine/core"; import { useTranslation } from "react-i18next"; import { AdjustPageScaleParameters, PageSize } from "../../../hooks/tools/adjustPageScale/useAdjustPageScaleParameters"; diff --git a/frontend/src/components/tools/automate/AutomationCreation.tsx b/frontend/src/components/tools/automate/AutomationCreation.tsx index b5e793ccb..c19092f79 100644 --- a/frontend/src/components/tools/automate/AutomationCreation.tsx +++ b/frontend/src/components/tools/automate/AutomationCreation.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, @@ -100,7 +100,7 @@ export default function AutomationCreation({ mode, existingAutomation, onBack, o icon: automationIcon, operations: selectedTools.map(tool => ({ operation: tool.operation, - parameters: tool.parameters || {} + parameters: tool.parameters ?? {} })) }; diff --git a/frontend/src/components/tools/automate/AutomationEntry.tsx b/frontend/src/components/tools/automate/AutomationEntry.tsx index 30c280491..d68b517b5 100644 --- a/frontend/src/components/tools/automate/AutomationEntry.tsx +++ b/frontend/src/components/tools/automate/AutomationEntry.tsx @@ -240,7 +240,7 @@ export default function AutomationEntry({ ); // Show tooltip if there's a description OR operations to display - const shouldShowTooltip = description || operations.length > 0; + const shouldShowTooltip = description ?? operations.length > 0; return shouldShowTooltip ? ( 0 || automateOperation?.downloadUrl !== null; // Initialize execution steps from automation @@ -194,7 +194,7 @@ export default function AutomationRun({ automation, onComplete, automateOperatio