From 462d324b538a9ae33446bd1f44eefdd525402be5 Mon Sep 17 00:00:00 2001 From: Nick A Date: Mon, 28 Oct 2024 22:36:12 -0400 Subject: [PATCH] small changes for cleaner code --- compass/app/admin/page.tsx | 4 +- compass/app/admin_test/layout.tsx | 100 +++++++++++++++++++++++++ compass/app/admin_test/page.tsx | 46 ++++++++++++ compass/components/Table/Table.tsx | 6 +- compass/components/Table/UserIndex.tsx | 2 +- 5 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 compass/app/admin_test/layout.tsx create mode 100644 compass/app/admin_test/page.tsx diff --git a/compass/app/admin/page.tsx b/compass/app/admin/page.tsx index 8097b6c..b1ec1e9 100644 --- a/compass/app/admin/page.tsx +++ b/compass/app/admin/page.tsx @@ -1,7 +1,7 @@ "use client"; import { PageLayout } from "@/components/PageLayout"; -import UserTable from "@/components/Table/UserIndex"; +import { Table } from "@/components/Table/Index" import User from "@/utils/models/User"; import { createClient } from "@/utils/supabase/client"; @@ -38,7 +38,7 @@ export default function Page() {
{/* icon + title */} }> - + ); diff --git a/compass/app/admin_test/layout.tsx b/compass/app/admin_test/layout.tsx new file mode 100644 index 0000000..78bf6a6 --- /dev/null +++ b/compass/app/admin_test/layout.tsx @@ -0,0 +1,100 @@ +"use client"; + +import Sidebar from "@/components/Sidebar/Sidebar"; +import React, { useState } from "react"; +import { ChevronDoubleRightIcon } from "@heroicons/react/24/outline"; +import { createClient } from "@/utils/supabase/client"; +import { useRouter } from "next/navigation"; +import { useEffect } from "react"; +import User, { Role } from "@/utils/models/User"; +import Loading from "@/components/auth/Loading"; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + const [isSidebarOpen, setIsSidebarOpen] = useState(false); + const router = useRouter(); + const [user, setUser] = useState(); + + useEffect(() => { + async function getUser() { + const supabase = createClient(); + + const { data, error } = await supabase.auth.getUser(); + + console.log(data, error); + + if (error) { + console.log("Accessed admin page but not logged in"); + router.push("/auth/login"); + return; + } + + const userData = await fetch( + `${process.env.NEXT_PUBLIC_HOST}/api/user?uuid=${data.user.id}` + ); + + const user: User = await userData.json(); + + if (user.role !== Role.ADMIN) { + console.log( + `Accessed admin page but incorrect permissions: ${user.username} ${user.role}` + ); + router.push("/home"); + return; + } + + setUser(user); + } + + getUser(); + }, [router]); + + return ( +
+ {user ? ( +
+ {/* button to open sidebar */} + + {/* sidebar */} +
+ +
+ {/* page ui */} +
+ {children} +
+
+ ) : ( + + )} +
+ ); +} diff --git a/compass/app/admin_test/page.tsx b/compass/app/admin_test/page.tsx new file mode 100644 index 0000000..78f97fa --- /dev/null +++ b/compass/app/admin_test/page.tsx @@ -0,0 +1,46 @@ +"use client"; + +import { PageLayout } from "@/components/PageLayout"; +import { Table } from "@/components/Table/Index" +import UserTable from "@/components/Table/UserIndex"; +import User from "@/utils/models/User"; +import { createClient } from "@/utils/supabase/client"; + +import { UsersIcon } from "@heroicons/react/24/solid"; +import { useEffect, useState } from "react"; + +export default function Page() { + const [users, setUsers] = useState([]); + + useEffect(() => { + async function getUser() { + const supabase = createClient(); + + const { data, error } = await supabase.auth.getUser(); + + if (error) { + console.log("Accessed admin page but not logged in"); + return; + } + + const userListData = await fetch( + `${process.env.NEXT_PUBLIC_HOST}/api/user/all?uuid=${data.user.id}` + ); + + const users: User[] = await userListData.json(); + + setUsers(users); + } + + getUser(); + }, []); + + return ( +
+ {/* icon + title */} + }> + + +
+ ) +} diff --git a/compass/components/Table/Table.tsx b/compass/components/Table/Table.tsx index 4bd5d1c..9598134 100644 --- a/compass/components/Table/Table.tsx +++ b/compass/components/Table/Table.tsx @@ -54,17 +54,17 @@ const fuzzyFilter = ( * @param props.columns Column definitions made with Tanstack columnHelper */ export const Table = ({ data, setData, columns }: TableProps) => { - const columnHelper = createColumnHelper(); + const columnHelper = createColumnHelper(); useEffect(() => { const sortedData = [...data].sort((a, b) => a.visible === b.visible ? 0 : a.visible ? -1 : 1 ); - setData(sortedData); + setData(sortedData); }, [data, setData]); // Data manipulation - // TODO: Connect data manipulation methods to the database (deleteResource, hideResource, addResource) + // TODO: Connect data manipulation methods to the database (deleteData, hideData, addData) const deleteData = (dataId: number) => { console.log(data); setData((currentData) => diff --git a/compass/components/Table/UserIndex.tsx b/compass/components/Table/UserIndex.tsx index 30ec363..766780a 100644 --- a/compass/components/Table/UserIndex.tsx +++ b/compass/components/Table/UserIndex.tsx @@ -13,7 +13,7 @@ import { DataPoint } from "@/components/Table/Table"; * @param props.users List of users to be displayed by the table */ export default function UserTable({ users }: { users: User[] }) { - const columnHelper = createColumnHelper(); + const columnHelper = createColumnHelper(); const [data, setData] = useState([...users]); const { presetOptions, setPresetOptions, getTagColor } = useTagsHandler([