()
| 34 | const USER_ID = ensureGlobalUserId() |
| 35 | |
| 36 | function App() { |
| 37 | const { |
| 38 | projects, |
| 39 | activeProjectId, |
| 40 | setActiveProjectId, |
| 41 | project, |
| 42 | proposals, |
| 43 | activeFile, |
| 44 | folders, |
| 45 | expandedFolders, |
| 46 | setExpandedFolders, |
| 47 | isPathIgnored, |
| 48 | projectForTree, |
| 49 | proposalsForTree, |
| 50 | projectForSend, |
| 51 | proposalsForSend, |
| 52 | setActiveFile, |
| 53 | setCode, |
| 54 | clearProposal, |
| 55 | createFile, |
| 56 | createFolder, |
| 57 | renameFile, |
| 58 | deleteFile, |
| 59 | moveFile, |
| 60 | moveFolder, |
| 61 | renameFolder, |
| 62 | deleteFolder, |
| 63 | input, |
| 64 | setInput, |
| 65 | loading, |
| 66 | setLoading, |
| 67 | cancelling, |
| 68 | setCancelling, |
| 69 | model, |
| 70 | setModel, |
| 71 | activeThreadId, |
| 72 | setActiveThreadId, |
| 73 | templateId, |
| 74 | renameProject, |
| 75 | cloneProject, |
| 76 | deleteProject, |
| 77 | upsertFileIfMissing, |
| 78 | createProject, |
| 79 | } = useProjects() |
| 80 | const [showNewProject, setShowNewProject] = useState<boolean>(false) |
| 81 | |
| 82 | // Empty projects state flag (used for conditional rendering) |
| 83 | const isNoProjects = projects.length === 0 |
| 84 | const [codeFix, setCodeFix] = useState<{ |
| 85 | fileName: string |
| 86 | startLine: number |
| 87 | endLine: number |
| 88 | selectedCode: string |
| 89 | } | null>(null) |
| 90 | const nextProjectName = React.useMemo( |
| 91 | () => `Project ${projects.length + 1}`, |
| 92 | [projects.length] |
| 93 | ) |
nothing calls this directly
no test coverage detected