From 81f4654b50fd8f33701a28ba7268c55f7f185ad9 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 14 Apr 2026 17:27:49 -0400 Subject: [PATCH] Fixes to the import error checks --- plans/import-directory-status.md | 211 ++++++++++++++++++ src/client/components/Import/Import.test.tsx | 184 +++++++++++++++ src/client/components/Import/Import.tsx | 104 ++++++++- .../components/Import/RealTimeImportStats.tsx | 73 +++++- 4 files changed, 564 insertions(+), 8 deletions(-) create mode 100644 plans/import-directory-status.md diff --git a/plans/import-directory-status.md b/plans/import-directory-status.md new file mode 100644 index 0000000..3f76b1e --- /dev/null +++ b/plans/import-directory-status.md @@ -0,0 +1,211 @@ +# Implementation Plan: Directory Status Check for Import.tsx + +## Overview + +Add functionality to `Import.tsx` that checks if the required directories (`comics` and `userdata`) exist before allowing the import process to start. If either directory is missing, display a warning banner to the user and disable the import functionality. + +## API Endpoint + +- **Endpoint**: `GET /api/library/getDirectoryStatus` +- **Response Structure**: +```typescript +interface DirectoryStatus { + comics: { exists: boolean }; + userdata: { exists: boolean }; +} +``` + +## Implementation Details + +### 1. Add Directory Status Type + +In [`Import.tsx`](src/client/components/Import/Import.tsx:1), add a type definition for the directory status response: + +```typescript +interface DirectoryStatus { + comics: { exists: boolean }; + userdata: { exists: boolean }; +} +``` + +### 2. Create useQuery Hook for Directory Status + +Use `@tanstack/react-query` (already imported) to fetch directory status on component mount: + +```typescript +const { data: directoryStatus, isLoading: isCheckingDirectories, error: directoryError } = useQuery({ + queryKey: ['directoryStatus'], + queryFn: async (): Promise => { + const response = await axios.get('http://localhost:3000/api/library/getDirectoryStatus'); + return response.data; + }, + refetchOnWindowFocus: false, + staleTime: 30000, // Cache for 30 seconds +}); +``` + +### 3. Derive Missing Directories State + +Compute which directories are missing from the query result: + +```typescript +const missingDirectories = useMemo(() => { + if (!directoryStatus) return []; + const missing: string[] = []; + if (!directoryStatus.comics?.exists) missing.push('comics'); + if (!directoryStatus.userdata?.exists) missing.push('userdata'); + return missing; +}, [directoryStatus]); + +const hasAllDirectories = missingDirectories.length === 0; +``` + +### 4. Create Warning Banner Component + +Add a warning banner that displays when directories are missing, positioned above the import button. This uses the same styling patterns as the existing error banner: + +```tsx +{/* Directory Status Warning */} +{!isCheckingDirectories && missingDirectories.length > 0 && ( +
+
+ + + +
+

+ Required Directories Missing +

+

+ The following directories do not exist and must be created before importing: +

+
    + {missingDirectories.map((dir) => ( +
  • + {dir} +
  • + ))} +
+

+ Please ensure these directories are mounted correctly in your Docker configuration. +

+
+
+
+)} +``` + +### 5. Disable Import Button When Directories Missing + +Modify the button's `disabled` prop and click handler: + +```tsx +