import type { IssueResponse, ProjectResponse } from "@issue/shared"; import { useEffect, useRef, useState } from "react"; import { IssueDetailPane } from "@/components/issue-detail-pane"; import { IssuesTable } from "@/components/issues-table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import SmallUserDisplay from "./components/small-user-display"; function Index() { const [selectedProject, setSelectedProject] = useState(null); const [projects, setProjects] = useState([]); const projectsRef = useRef(false); useEffect(() => { if (projectsRef.current) return; projectsRef.current = true; fetch("http://localhost:3000/projects/all") .then((res) => res.json()) .then((data: ProjectResponse[]) => { setProjects(data); }) .catch((err) => { console.error("error fetching projects:", err); }); }, []); const [selectedIssue, setSelectedIssue] = useState(null); const [issuesData, setIssues] = useState([]); const serverURL = import.meta.env.SERVER_URL?.trim() || "http://localhost:3000"; useEffect(() => { if (!selectedProject) return; fetch(`${serverURL}/issues/${selectedProject.Project.blob}`) .then((res) => res.json()) .then((data: IssueResponse[]) => { setIssues(data); }) .catch((err) => { console.error("error fetching issues:", err); }); }, [selectedProject]); return (
{/* header area */}
{selectedProject && (
Owner:
)}
{/* main body */}
{selectedProject && issuesData.length > 0 && ( <> {/* issues list (table) */} {/* issue detail pane */} {selectedIssue && (
setSelectedIssue(null)} />
)} )}
); } export default Index;