Compare commits

..

No commits in common. "b15c8b9e57dc76ae2a4ae0c796ac13fb4826bb9a" and "d9b56bb83957f98ef662290b79fa0eff91ad49fe" have entirely different histories.

5 changed files with 177 additions and 114 deletions

View File

@ -2,6 +2,7 @@
import Sidebar from "@/components/Sidebar/Sidebar"; import Sidebar from "@/components/Sidebar/Sidebar";
import React, { useState } from "react"; import React, { useState } from "react";
import { ChevronDoubleRightIcon } from "@heroicons/react/24/outline";
import { createClient } from "@/utils/supabase/client"; import { createClient } from "@/utils/supabase/client";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useEffect } from "react"; import { useEffect } from "react";
@ -13,7 +14,7 @@ export default function RootLayout({
}: { }: {
children: React.ReactNode; children: React.ReactNode;
}) { }) {
const [isSidebarOpen, setIsSidebarOpen] = useState(true); const [isSidebarOpen, setIsSidebarOpen] = useState(false);
const router = useRouter(); const router = useRouter();
const [user, setUser] = useState<User>(); const [user, setUser] = useState<User>();
@ -55,13 +56,34 @@ export default function RootLayout({
<div className="flex-row"> <div className="flex-row">
{user ? ( {user ? (
<div> <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 <Sidebar
setIsSidebarOpen={setIsSidebarOpen} setIsSidebarOpen={setIsSidebarOpen}
isSidebarOpen={isSidebarOpen}
name={user.username} name={user.username}
email={user.email} email={user.email}
isAdmin={user.role === Role.ADMIN} isAdmin={user.role === Role.ADMIN}
/> />
</div>
{/* page ui */}
<div <div
className={`flex-1 transition duration-300 ease-in-out ${ className={`flex-1 transition duration-300 ease-in-out ${
isSidebarOpen ? "ml-64" : "ml-0" isSidebarOpen ? "ml-64" : "ml-0"

View File

@ -1,6 +1,7 @@
"use client"; "use client";
import Sidebar from "@/components/Sidebar/Sidebar"; import Sidebar from "@/components/Sidebar/Sidebar";
import React, { useState } from "react"; import React, { useState } from "react";
import { ChevronDoubleRightIcon } from "@heroicons/react/24/outline";
import { createClient } from "@/utils/supabase/client"; import { createClient } from "@/utils/supabase/client";
import { useEffect } from "react"; import { useEffect } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
@ -12,7 +13,7 @@ export default function RootLayout({
}: { }: {
children: React.ReactNode; children: React.ReactNode;
}) { }) {
const [isSidebarOpen, setIsSidebarOpen] = useState(true); const [isSidebarOpen, setIsSidebarOpen] = useState(false);
const [user, setUser] = useState<User>(); const [user, setUser] = useState<User>();
const router = useRouter(); const router = useRouter();
@ -44,13 +45,34 @@ export default function RootLayout({
<div className="flex-row"> <div className="flex-row">
{user ? ( {user ? (
<div> <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 <Sidebar
name={user.username} name={user.username}
email={user.email} email={user.email}
setIsSidebarOpen={setIsSidebarOpen} setIsSidebarOpen={setIsSidebarOpen}
isSidebarOpen={isSidebarOpen}
isAdmin={user.role === Role.ADMIN} isAdmin={user.role === Role.ADMIN}
/> />
</div>
{/* page ui */}
<div <div
className={`flex-1 transition duration-300 ease-in-out ${ className={`flex-1 transition duration-300 ease-in-out ${
isSidebarOpen ? "ml-64" : "ml-0" isSidebarOpen ? "ml-64" : "ml-0"

View File

@ -2,6 +2,7 @@
import Sidebar from "@/components/Sidebar/Sidebar"; import Sidebar from "@/components/Sidebar/Sidebar";
import React, { useState } from "react"; import React, { useState } from "react";
import { ChevronDoubleRightIcon } from "@heroicons/react/24/outline";
import { createClient } from "@/utils/supabase/client"; import { createClient } from "@/utils/supabase/client";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useEffect } from "react"; import { useEffect } from "react";
@ -13,7 +14,7 @@ export default function RootLayout({
}: { }: {
children: React.ReactNode; children: React.ReactNode;
}) { }) {
const [isSidebarOpen, setIsSidebarOpen] = useState(true); const [isSidebarOpen, setIsSidebarOpen] = useState(false);
const router = useRouter(); const router = useRouter();
const [user, setUser] = useState<User>(); const [user, setUser] = useState<User>();
@ -47,6 +48,26 @@ export default function RootLayout({
<div className="flex-row"> <div className="flex-row">
{user ? ( {user ? (
<div> <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 <Sidebar
setIsSidebarOpen={setIsSidebarOpen} setIsSidebarOpen={setIsSidebarOpen}
isSidebarOpen={isSidebarOpen} isSidebarOpen={isSidebarOpen}
@ -54,7 +75,7 @@ export default function RootLayout({
email={user.email} email={user.email}
isAdmin={user.role === Role.ADMIN} isAdmin={user.role === Role.ADMIN}
/> />
{/* </div>*/} { /* </div>*/ }
{/* page ui */} {/* page ui */}
<div <div
className={`flex-1 transition duration-300 ease-in-out ${ className={`flex-1 transition duration-300 ease-in-out ${

View File

@ -2,6 +2,7 @@
import Sidebar from "@/components/Sidebar/Sidebar"; import Sidebar from "@/components/Sidebar/Sidebar";
import React, { useState } from "react"; import React, { useState } from "react";
import { ChevronDoubleRightIcon } from "@heroicons/react/24/outline";
import { createClient } from "@/utils/supabase/client"; import { createClient } from "@/utils/supabase/client";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useEffect } from "react"; import { useEffect } from "react";
@ -13,7 +14,7 @@ export default function RootLayout({
}: { }: {
children: React.ReactNode; children: React.ReactNode;
}) { }) {
const [isSidebarOpen, setIsSidebarOpen] = useState(true); const [isSidebarOpen, setIsSidebarOpen] = useState(false);
const router = useRouter(); const router = useRouter();
const [user, setUser] = useState<User>(); const [user, setUser] = useState<User>();
@ -47,13 +48,34 @@ export default function RootLayout({
<div className="flex-row"> <div className="flex-row">
{user ? ( {user ? (
<div> <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 <Sidebar
setIsSidebarOpen={setIsSidebarOpen} setIsSidebarOpen={setIsSidebarOpen}
isSidebarOpen={isSidebarOpen}
name={user.username} name={user.username}
email={user.email} email={user.email}
isAdmin={user.role === Role.ADMIN} isAdmin={user.role === Role.ADMIN}
/> />
</div>
{/* page ui */}
<div <div
className={`flex-1 transition duration-300 ease-in-out ${ className={`flex-1 transition duration-300 ease-in-out ${
isSidebarOpen ? "ml-64" : "ml-0" isSidebarOpen ? "ml-64" : "ml-0"

View File

@ -2,7 +2,6 @@ import React from "react";
import { import {
HomeIcon, HomeIcon,
ChevronDoubleLeftIcon, ChevronDoubleLeftIcon,
ChevronDoubleRightIcon,
BookmarkIcon, BookmarkIcon,
ClipboardIcon, ClipboardIcon,
BookOpenIcon, BookOpenIcon,
@ -27,31 +26,10 @@ const Sidebar: React.FC<SidebarProps> = ({
isAdmin: admin, isAdmin: admin,
}) => { }) => {
return ( return (
<> <div className={"fixed left-0 w-64 h-full border border-gray-200 bg-gray-50 px-4 "
{/* Button to open the sidebar. */} + (isSidebarOpen ? "translate-x-0" : "-translate-x-full opacity-25")
<button + " transition duration-300 ease-out"}>
onClick={() => setIsSidebarOpen(true)} {/* button to close sidebar */}
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" />
)}
</button>
{/* The sidebar itself. */}
<div
className={
"fixed left-0 w-64 h-full border border-gray-200 bg-gray-50 px-4 " +
(isSidebarOpen
? "translate-x-0" // Open
: "-translate-x-full opacity-25") + // Closed
" transition duration-300 ease-out" // More animation properties
}
>
{/* Button to close sidebar */}
<div className="flex justify-end"> <div className="flex justify-end">
<button <button
onClick={() => setIsSidebarOpen(false)} onClick={() => setIsSidebarOpen(false)}
@ -61,7 +39,6 @@ const Sidebar: React.FC<SidebarProps> = ({
<ChevronDoubleLeftIcon className="h-5 w-5" /> <ChevronDoubleLeftIcon className="h-5 w-5" />
</button> </button>
</div> </div>
<div className="flex flex-col space-y-8"> <div className="flex flex-col space-y-8">
{/* user + logout button */} {/* user + logout button */}
<div className="flex items-center p-4 space-x-2 border border-gray-200 rounded-md "> <div className="flex items-center p-4 space-x-2 border border-gray-200 rounded-md ">
@ -110,7 +87,6 @@ const Sidebar: React.FC<SidebarProps> = ({
</div> </div>
</div> </div>
</div> </div>
</>
); );
}; };