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([