import type { IssueRecord, ProjectRecord } from "@issue/shared"; import { useEffect, useRef, useState } from "react"; import { IssuesTable } from "@/components/issues-table"; import { IssueDetailPane } from "./components/issue-detail-pane"; function Index() { 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: ProjectRecord[]) => { setProjects(data); console.log("fetched projects:", data); }) .catch((err) => { console.error("error fetching projects:", err); }); }, []); const [selectedIssue, setSelectedIssue] = useState(null); const [issues, setIssues] = useState([]); const issuesRef = useRef(false); const serverURL = import.meta.env.SERVER_URL?.trim() || "http://localhost:3000"; useEffect(() => { if (issuesRef.current) return; issuesRef.current = true; fetch(`${serverURL}/issues/all`) .then((res) => res.json()) .then((data: IssueRecord[]) => { setIssues(data); console.log("fetched issues:", data); }) .catch((err) => { console.error("error fetching issues:", err); }); }, []); return (
{/* header area */}
project selection filters
{/* main body */}
{/* issues list (table) */}
{/* issue detail pane */} {selectedIssue && (
setSelectedIssue(null)} />
)}
); } export default Index;