From 439c399600d005d5c35d9b1fe3b54eefa97ea39d Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Sun, 18 Jan 2026 00:41:10 +0000 Subject: [PATCH] Refactor file explorer copy and sections --- src/components/FileExplorer.tsx | 248 +----------------- .../file-explorer/FileExplorerDialog.tsx | 218 +++++++++++++++ .../file-explorer/FileExplorerList.tsx | 50 ++++ src/data/file-explorer.json | 50 ++++ 4 files changed, 329 insertions(+), 237 deletions(-) create mode 100644 src/components/file-explorer/FileExplorerDialog.tsx create mode 100644 src/components/file-explorer/FileExplorerList.tsx create mode 100644 src/data/file-explorer.json diff --git a/src/components/FileExplorer.tsx b/src/components/FileExplorer.tsx index 486ee81..256d750 100644 --- a/src/components/FileExplorer.tsx +++ b/src/components/FileExplorer.tsx @@ -1,28 +1,9 @@ -import { useState } from 'react' +import { FolderOpen } from '@phosphor-icons/react' import { ProjectFile } from '@/types/project' import { ScrollArea } from '@/components/ui/scroll-area' -import { Button } from '@/components/ui/button' -import { Input } from '@/components/ui/input' -import { Textarea } from '@/components/ui/textarea' -import { FileCode, FolderOpen, Plus, Folder, Sparkle } from '@phosphor-icons/react' -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogTrigger, -} from '@/components/ui/dialog' -import { Label } from '@/components/ui/label' -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from '@/components/ui/select' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import { AIService } from '@/lib/ai-service' -import { toast } from 'sonner' +import { FileExplorerDialog } from '@/components/file-explorer/FileExplorerDialog' +import { FileExplorerList } from '@/components/file-explorer/FileExplorerList' +import fileExplorerCopy from '@/data/file-explorer.json' interface FileExplorerProps { files: ProjectFile[] @@ -37,228 +18,21 @@ export function FileExplorer({ onFileSelect, onFileAdd, }: FileExplorerProps) { - const [isAddDialogOpen, setIsAddDialogOpen] = useState(false) - const [newFileName, setNewFileName] = useState('') - const [newFileLanguage, setNewFileLanguage] = useState('typescript') - const [aiDescription, setAiDescription] = useState('') - const [aiFileType, setAiFileType] = useState<'component' | 'page' | 'api' | 'utility'>('component') - const [isGenerating, setIsGenerating] = useState(false) - - const handleAddFile = () => { - if (!newFileName.trim()) return - - const newFile: ProjectFile = { - id: `file-${Date.now()}`, - name: newFileName, - path: `/src/${newFileName}`, - content: '', - language: newFileLanguage, - } - - onFileAdd(newFile) - setNewFileName('') - setIsAddDialogOpen(false) - } - - const handleGenerateFileWithAI = async () => { - if (!aiDescription.trim() || !newFileName.trim()) { - toast.error('Please provide both a filename and description') - return - } - - try { - setIsGenerating(true) - toast.info('Generating code with AI...') - - const code = await AIService.generateCodeFromDescription(aiDescription, aiFileType) - - if (code) { - const newFile: ProjectFile = { - id: `file-${Date.now()}`, - name: newFileName, - path: `/src/${newFileName}`, - content: code, - language: newFileLanguage, - } - - onFileAdd(newFile) - setNewFileName('') - setAiDescription('') - setIsAddDialogOpen(false) - toast.success('File generated successfully!') - } else { - toast.error('AI generation failed. Please try again.') - } - } catch (error) { - toast.error('Failed to generate file') - console.error(error) - } finally { - setIsGenerating(false) - } - } - - const groupedFiles = files.reduce((acc, file) => { - const dir = file.path.split('/').slice(0, -1).join('/') || '/' - if (!acc[dir]) acc[dir] = [] - acc[dir].push(file) - return acc - }, {} as Record) - return (

- Files + {fileExplorerCopy.header.title}

- - - - - - - Add New File - - - - Manual - - - AI Generate - - - -
- - setNewFileName(e.target.value)} - placeholder="example.tsx" - onKeyDown={(e) => { - if (e.key === 'Enter') handleAddFile() - }} - /> -
-
- - -
- -
- -
- - setNewFileName(e.target.value)} - placeholder="UserCard.tsx" - /> -
-
- - -
-
- -