"use client"; import { useEffect, useState } from "react"; import Config from "@/config/config"; const apiServer = Config.apiServer; import { Button, Listbox, ListboxItem } from "@nextui-org/react"; import { Folder, Plus } from "lucide-react"; import { useRouter } from "next/navigation"; import useGetCurrentIds from "@/utils/useGetCurrentIds"; /** * fetch folder records * * @param {string} url - API endpoint url * @returns {Promise} - project record array * @throws {Error} */ async function fetchFolders(url) { try { const response = await fetch(url, { method: "GET", headers: { "Content-Type": "application/json", }, }); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const data = await response.json(); return data; } catch (error) { console.error("Error fetching data:", error.message); } } export default function ProjectsLayout({ children, params, }: { children: React.ReactNode; params: { projectId: string }; }) { const [folders, setFolders] = useState([]); const [selectedFolder, setSelectedFolder] = useState({ id: null, name: "", }); const url = `${apiServer}/folders?projectId=${params.projectId}`; const { folderId } = useGetCurrentIds(); useEffect(() => { async function fetchDataEffect() { try { const data = await fetchFolders(url); setFolders(data); const selectedFolderFromUrl = data.find( (folder) => folder.id === folderId ); setSelectedFolder(selectedFolderFromUrl); } catch (error) { console.error("Error in effect:", error.message); } } fetchDataEffect(); }, [folderId]); const router = useRouter(); return (
{folders.map((folder, index) => ( router.push( `/projects/${params.projectId}/folders/${folder.id}/cases` ) } startContent={} className={ selectedFolder && folder.id === selectedFolder.id ? "bg-gray-300" : "" } > {folder.name} ))}

{selectedFolder ? selectedFolder.name : "Select Folder"}

{children}
); }