From 8ee03fa1c6317d864643c487df5c40251e2bfa88 Mon Sep 17 00:00:00 2001 From: Reece Date: Mon, 20 Oct 2025 15:50:14 +0100 Subject: [PATCH] Lint --- frontend/eslint.config.mjs | 5 +++++ frontend/src/components/layout/Workbench.tsx | 2 +- frontend/src/components/pageEditor/DragDropGrid.tsx | 5 +---- frontend/src/components/pageEditor/PageEditor.tsx | 2 +- frontend/src/components/pageEditor/PageThumbnail.tsx | 6 +++--- .../components/pageEditor/hooks/usePageDocument.ts | 1 - .../src/components/shared/PageEditorFileDropdown.tsx | 12 ++++++++++-- 7 files changed, 21 insertions(+), 12 deletions(-) diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs index 0b92de05b..a3793955d 100644 --- a/frontend/eslint.config.mjs +++ b/frontend/eslint.config.mjs @@ -4,6 +4,7 @@ import eslint from '@eslint/js'; import globals from "globals"; import { defineConfig } from 'eslint/config'; import tseslint from 'typescript-eslint'; +import reactHooks from 'eslint-plugin-react-hooks'; const srcGlobs = [ 'src/**/*.{js,mjs,jsx,ts,tsx}', @@ -23,7 +24,11 @@ export default defineConfig( ], }, { + plugins: { + 'react-hooks': reactHooks, + }, rules: { + ...reactHooks.configs.recommended.rules, "@typescript-eslint/no-empty-object-type": [ "error", { diff --git a/frontend/src/components/layout/Workbench.tsx b/frontend/src/components/layout/Workbench.tsx index 62c228c62..8ffbeded9 100644 --- a/frontend/src/components/layout/Workbench.tsx +++ b/frontend/src/components/layout/Workbench.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, useEffect } from 'react'; +import React, { useMemo } from 'react'; import { Box } from '@mantine/core'; import { useRainbowThemeContext } from '../shared/RainbowThemeProvider'; import { useToolWorkflow } from '../../contexts/ToolWorkflowContext'; diff --git a/frontend/src/components/pageEditor/DragDropGrid.tsx b/frontend/src/components/pageEditor/DragDropGrid.tsx index 518fe8cc7..dc72b9304 100644 --- a/frontend/src/components/pageEditor/DragDropGrid.tsx +++ b/frontend/src/components/pageEditor/DragDropGrid.tsx @@ -6,13 +6,11 @@ import { DndContext, DragEndEvent, DragStartEvent, - DragOverEvent, DragOverlay, useSensor, useSensors, PointerSensor, closestCenter, - useDndMonitor, useDraggable, useDroppable, } from '@dnd-kit/core'; @@ -122,7 +120,6 @@ const DragDropGrid = ({ const [dragPreview, setDragPreview] = useState<{ src: string; rotation: number } | null>(null); const [hoveredItemId, setHoveredItemId] = useState(null); const [dropSide, setDropSide] = useState<'left' | 'right' | null>(null); - const lastCursorXRef = useRef(null); // Configure sensors for dnd-kit with activation constraint // Require 10px movement before drag starts to allow clicks for selection @@ -179,7 +176,7 @@ const DragDropGrid = ({ // Step 2: Find the closest row to cursor Y position let closestRowY = 0; let closestRowDistance = Infinity; - rows.forEach((items, rowY) => { + Array.from(rows.keys()).forEach((rowY) => { const distance = Math.abs(cursorY - rowY); if (distance < closestRowDistance) { closestRowDistance = distance; diff --git a/frontend/src/components/pageEditor/PageEditor.tsx b/frontend/src/components/pageEditor/PageEditor.tsx index d8e46f8a3..c417bd31f 100644 --- a/frontend/src/components/pageEditor/PageEditor.tsx +++ b/frontend/src/components/pageEditor/PageEditor.tsx @@ -48,7 +48,7 @@ const PageEditor = ({ const { setHasUnsavedChanges } = useNavigationGuard(); // Get PageEditor coordination functions - const { updateCurrentPages, reorderedPages, clearReorderedPages, updateFileOrderFromPages, fileOrder } = usePageEditor(); + const { updateFileOrderFromPages, fileOrder } = usePageEditor(); // Derive page editor files from PageEditorContext's fileOrder (page editor workspace order) // Filter to only show PDF files (PageEditor only supports PDFs) diff --git a/frontend/src/components/pageEditor/PageThumbnail.tsx b/frontend/src/components/pageEditor/PageThumbnail.tsx index a1f4f36e2..f202dcf69 100644 --- a/frontend/src/components/pageEditor/PageThumbnail.tsx +++ b/frontend/src/components/pageEditor/PageThumbnail.tsx @@ -61,11 +61,11 @@ const PageThumbnail: React.FC = ({ movingPage, isAnimating, isBoxSelected = false, - boxSelectedPageIds = [], + // boxSelectedPageIds, clearBoxSelection, - getBoxSelection, + // getBoxSelection, activeId, - isOver, + // isOver, pageRefs, dragHandleProps, onReorderPages, diff --git a/frontend/src/components/pageEditor/hooks/usePageDocument.ts b/frontend/src/components/pageEditor/hooks/usePageDocument.ts index 80fafca56..0f0943d3e 100644 --- a/frontend/src/components/pageEditor/hooks/usePageDocument.ts +++ b/frontend/src/components/pageEditor/hooks/usePageDocument.ts @@ -26,7 +26,6 @@ export function usePageDocument(): PageDocumentHook { // Filter to only include PDF files (PageEditor only supports PDFs) // Use stable string keys to prevent infinite loops const allFileIdsKey = allFileIds.join(','); - const selectedIdsKey = [...state.ui.selectedFileIds].sort().join(','); const activeFilesSignature = selectors.getFilesSignature(); // Get ALL PDF files (selected or not) for document building with placeholders diff --git a/frontend/src/components/shared/PageEditorFileDropdown.tsx b/frontend/src/components/shared/PageEditorFileDropdown.tsx index 4fc67ffd8..667d85978 100644 --- a/frontend/src/components/shared/PageEditorFileDropdown.tsx +++ b/frontend/src/components/shared/PageEditorFileDropdown.tsx @@ -105,8 +105,16 @@ const FileMenuItem: React.FC = ({ }); return () => { - try { dragCleanup(); } catch {} - try { dropCleanup(); } catch {} + try { + dragCleanup(); + } catch { + // Cleanup may fail if element was already removed + } + try { + dropCleanup(); + } catch { + // Cleanup may fail if element was already removed + } }; }, []); // NOTE: no `onReorder` here