File size: 3,194 Bytes
5c9019c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import { useState } from 'react'
import { FiFolder, FiFile, FiPlus, FiTrash2, FiEdit, FiSave } from 'react-icons/fi'

export default function ProjectManager() {
  const [projects, setProjects] = useState([
    {
      id: 1,
      name: 'React App',
      files: [
        { id: 1, name: 'index.js', content: '// Main entry point\nimport React from "react";' },
        { id: 2, name: 'App.js', content: 'function App() {\n  return <div>Hello</div>;\n}' }
      ]
    },
    {
      id: 2,
      name: 'Python Scripts',
      files: [
        { id: 1, name: 'main.py', content: '# Main script\nprint("Hello World")' }
      ]
    }
  ])
  const [selectedProject, setSelectedProject] = useState(null)
  const [selectedFile, setSelectedFile] = useState(null)
  const [newProjectName, setNewProjectName] = useState('')
  const [newFileName, setNewFileName] = useState('')
  const [fileContent, setFileContent] = useState('')
  const [isEditing, setIsEditing] = useState(false)

  const handleCreateProject = () => {
    if (!newProjectName.trim()) return

    const newProject = {
      id: Date.now(),
      name: newProjectName,
      files: []
    }

    setProjects([...projects, newProject])
    setNewProjectName('')
  }

  const handleCreateFile = () => {
    if (!newFileName.trim() || !selectedProject) return

    const newFile = {
      id: Date.now(),
      name: newFileName,
      content: ''
    }

    const updatedProjects = projects.map(project =>
      project.id === selectedProject.id
        ? { ...project, files: [...project.files, newFile] }
        : project
    )

    setProjects(updatedProjects)
    setNewFileName('')
  }

  const handleSelectFile = (file) => {
    setSelectedFile(file)
    setFileContent(file.content)
    setIsEditing(false)
  }

  const handleSaveFile = () => {
    if (!selectedFile || !selectedProject) return

    const updatedProjects = projects.map(project => {
      if (project.id === selectedProject.id) {
        const updatedFiles = project.files.map(file =>
          file.id === selectedFile.id
            ? { ...file, content: fileContent }
            : file
        )
        return { ...project, files: updatedFiles }
      }
      return project
    })

    setProjects(updatedProjects)
    setIsEditing(false)
  }

  const handleDeleteProject = (projectId) => {
    setProjects(projects.filter(project => project.id !== projectId))
    if (selectedProject?.id === projectId) {
      setSelectedProject(null)
      setSelectedFile(null)
    }
  }

  const handleDeleteFile = (fileId) => {
    if (!selectedProject) return

    const updatedProjects = projects.map(project => {
      if (project.id === selectedProject.id) {
        return {
          ...project,
          files: project.files.filter(file => file.id !== fileId)
        }
      }
      return project
    })

    setProjects(updatedProjects)
    if (selectedFile?.id === fileId) {
      setSelectedFile(null)
      setFileContent('')
    }
  }

  return (
    <div className="grid grid-cols-1 lg:grid-cols-4 gap-6 h-[calc(100vh-200px)]">
      <div className="lg:col-span-1 bg-white rounded-lg shadow-md p-4 overflow-y-auto">
        <div className="space-y-4">