mirror of
https://github.com/cssgunc/compass.git
synced 2025-04-20 10:30:16 -04:00
small changes for cleaner code
This commit is contained in:
parent
2f163fe223
commit
462d324b53
|
@ -1,7 +1,7 @@
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { PageLayout } from "@/components/PageLayout";
|
import { PageLayout } from "@/components/PageLayout";
|
||||||
import UserTable from "@/components/Table/UserIndex";
|
import { Table } from "@/components/Table/Index"
|
||||||
import User from "@/utils/models/User";
|
import User from "@/utils/models/User";
|
||||||
import { createClient } from "@/utils/supabase/client";
|
import { createClient } from "@/utils/supabase/client";
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ export default function Page() {
|
||||||
<div className="min-h-screen flex flex-col">
|
<div className="min-h-screen flex flex-col">
|
||||||
{/* icon + title */}
|
{/* icon + title */}
|
||||||
<PageLayout title="Users" icon={<UsersIcon />}>
|
<PageLayout title="Users" icon={<UsersIcon />}>
|
||||||
<UserTable users={users} />
|
<Table users={users} />
|
||||||
</PageLayout>
|
</PageLayout>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
100
compass/app/admin_test/layout.tsx
Normal file
100
compass/app/admin_test/layout.tsx
Normal file
|
@ -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<User>();
|
||||||
|
|
||||||
|
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 (
|
||||||
|
<div className="flex-row">
|
||||||
|
{user ? (
|
||||||
|
<div>
|
||||||
|
{/* button to open sidebar */}
|
||||||
|
<button
|
||||||
|
onClick={() => setIsSidebarOpen(!isSidebarOpen)}
|
||||||
|
className={`fixed z-20 p-2 text-gray-500 hover:text-gray-800 left-0`}
|
||||||
|
aria-label={"Open sidebar"}
|
||||||
|
>
|
||||||
|
{
|
||||||
|
!isSidebarOpen && (
|
||||||
|
<ChevronDoubleRightIcon className="h-5 w-5" />
|
||||||
|
) // Icon for closing the sidebar
|
||||||
|
}
|
||||||
|
</button>
|
||||||
|
{/* sidebar */}
|
||||||
|
<div
|
||||||
|
className={`absolute inset-y-0 left-0 transform ${
|
||||||
|
isSidebarOpen
|
||||||
|
? "translate-x-0"
|
||||||
|
: "-translate-x-full"
|
||||||
|
} w-64 transition duration-300 ease-in-out`}
|
||||||
|
>
|
||||||
|
<Sidebar
|
||||||
|
setIsSidebarOpen={setIsSidebarOpen}
|
||||||
|
name={user.username}
|
||||||
|
email={user.email}
|
||||||
|
isAdmin={user.role === Role.ADMIN}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{/* page ui */}
|
||||||
|
<div
|
||||||
|
className={`flex-1 transition duration-300 ease-in-out ${
|
||||||
|
isSidebarOpen ? "ml-64" : "ml-0"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<Loading />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
46
compass/app/admin_test/page.tsx
Normal file
46
compass/app/admin_test/page.tsx
Normal file
|
@ -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<User[]>([]);
|
||||||
|
|
||||||
|
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 (
|
||||||
|
<div className="min-h-screen flex flex-col">
|
||||||
|
{/* icon + title */}
|
||||||
|
<PageLayout title="Users" icon={<UsersIcon />}>
|
||||||
|
<UserTable users={users} />
|
||||||
|
</PageLayout>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
|
@ -54,7 +54,7 @@ const fuzzyFilter = (
|
||||||
* @param props.columns Column definitions made with Tanstack columnHelper
|
* @param props.columns Column definitions made with Tanstack columnHelper
|
||||||
*/
|
*/
|
||||||
export const Table = ({ data, setData, columns }: TableProps) => {
|
export const Table = ({ data, setData, columns }: TableProps) => {
|
||||||
const columnHelper = createColumnHelper<Resource>();
|
const columnHelper = createColumnHelper<DataPoint>();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const sortedData = [...data].sort((a, b) =>
|
const sortedData = [...data].sort((a, b) =>
|
||||||
a.visible === b.visible ? 0 : a.visible ? -1 : 1
|
a.visible === b.visible ? 0 : a.visible ? -1 : 1
|
||||||
|
@ -64,7 +64,7 @@ export const Table = ({ data, setData, columns }: TableProps) => {
|
||||||
|
|
||||||
|
|
||||||
// Data manipulation
|
// 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) => {
|
const deleteData = (dataId: number) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
setData((currentData) =>
|
setData((currentData) =>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user