selected folder

This commit is contained in:
Takeshi Kimata
2024-02-23 12:47:27 +09:00
parent a835e2f836
commit 25bf3390dc
3 changed files with 44 additions and 21 deletions

View File

@@ -32,7 +32,11 @@ async function fetchCases(url) {
} }
} }
export default function Page({ params }: { params: { projectId: string, folderId: string } }) { export default function Page({
params,
}: {
params: { projectId: string; folderId: string };
}) {
const router = useRouter(); const router = useRouter();
const [cases, setCases] = useState([]); const [cases, setCases] = useState([]);
const url = `${apiServer}/cases?folderId=${params.folderId}`; const url = `${apiServer}/cases?folderId=${params.folderId}`;
@@ -51,19 +55,21 @@ export default function Page({ params }: { params: { projectId: string, folderId
}, []); }, []);
return ( return (
<Listbox aria-label="Listbox Variants"> <>
{cases.map((testCase, index) => ( <Listbox aria-label="Listbox Variants">
<ListboxItem {cases.map((testCase, index) => (
key={index} <ListboxItem
onClick={() => key={index}
router.push( onClick={() =>
`/projects/${params.projectId}/folders/${params.folderId}/cases/${testCase.id}` router.push(
) `/projects/${params.projectId}/folders/${params.folderId}/cases/${testCase.id}`
} )
> }
{testCase.title} >
</ListboxItem> {testCase.title}
))} </ListboxItem>
</Listbox> ))}
</Listbox>
</>
); );
} }

View File

@@ -5,6 +5,7 @@ const apiServer = Config.apiServer;
import { Button, Listbox, ListboxItem } from "@nextui-org/react"; import { Button, Listbox, ListboxItem } from "@nextui-org/react";
import { Folder, Plus } from "lucide-react"; import { Folder, Plus } from "lucide-react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import useGetCurrentIds from "@/utils/useGetCurrentIds";
/** /**
* fetch folder records * fetch folder records
@@ -41,24 +42,34 @@ export default function ProjectsLayout({
params: { projectId: string }; params: { projectId: string };
}) { }) {
const [folders, setFolders] = useState([]); const [folders, setFolders] = useState([]);
const [selectedFolder, setSelectedFolder] = useState({
id: null,
name: "",
});
const url = `${apiServer}/folders?projectId=${params.projectId}`; const url = `${apiServer}/folders?projectId=${params.projectId}`;
const { folderId } = useGetCurrentIds();
useEffect(() => { useEffect(() => {
async function fetchDataEffect() { async function fetchDataEffect() {
try { try {
const data = await fetchFolders(url); const data = await fetchFolders(url);
setFolders(data); setFolders(data);
const selectedFolderFromUrl = data.find(
(folder) => folder.id === folderId
);
setSelectedFolder(selectedFolderFromUrl);
} catch (error) { } catch (error) {
console.error("Error in effect:", error.message); console.error("Error in effect:", error.message);
} }
} }
fetchDataEffect(); fetchDataEffect();
}, []); }, [folderId]);
const router = useRouter(); const router = useRouter();
return ( return (
<div className="flex"> <div className="flex w-full">
<div className="w-64 min-h-screen border-r-1"> <div className="w-64 min-h-screen border-r-1">
<Button <Button
startContent={<Plus size={16} />} startContent={<Plus size={16} />}
@@ -78,15 +89,21 @@ export default function ProjectsLayout({
) )
} }
startContent={<Folder size={20} color="#99ccff" fill="#99ccff" />} startContent={<Folder size={20} color="#99ccff" fill="#99ccff" />}
className={
selectedFolder && folder.id === selectedFolder.id
? "bg-gray-300"
: ""
}
> >
{folder.name} {folder.name}
{/* {folder.detail}
{folder.projectId} */}
</ListboxItem> </ListboxItem>
))} ))}
</Listbox> </Listbox>
</div> </div>
<div className="flex-grow">{children}</div> <div className="flex-grow w-full">
<h3 className="border-b-1 w-full font-bold p-3">{selectedFolder ? selectedFolder.name : "Select Folder"}</h3>
{children}
</div>
</div> </div>
); );
} }

View File

@@ -9,7 +9,7 @@ export default function ProjectsLayout({
<> <>
<div className="flex border-t-1 min-h-screen"> <div className="flex border-t-1 min-h-screen">
<Sidebar /> <Sidebar />
<div className="flex"> <div className="flex w-full">
<div className="flex-grow bg-white rounded-lg">{children}</div> <div className="flex-grow bg-white rounded-lg">{children}</div>
</div> </div>
</div> </div>