Some checks failed
Check usage of free licenses / build-static-assets (pull_request) Successful in 58s
Add copyright notice / copyright_notice (pull_request) Successful in 1m19s
Build Nginx-based docker image / build-static-assets (push) Successful in 5m39s
Playwright Tests / test (pull_request) Failing after 9m0s
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
/* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/
|
|
|
|
'use client';
|
|
|
|
import Link from 'next/link';
|
|
import NavLinks from '@/app/ui/dashboard/nav-links';
|
|
import { PowerIcon } from '@heroicons/react/24/outline';
|
|
import { gloriaHallelujah } from '@/app/ui/fonts';
|
|
import { logout } from '@/app/api/authentication';
|
|
import { useRouter } from 'next/navigation';
|
|
import { getSlug } from '@/app/lib/utils';
|
|
import { useEffect, useState } from 'react';
|
|
|
|
export default function SideNav() {
|
|
const router = useRouter();
|
|
|
|
const [slug, setSlug] = useState<string>("default");
|
|
useEffect(() => { setSlug(getSlug()) }, []);
|
|
|
|
const [currentUser, setCurrentUser] = useState<{ email: string } | null>(null);
|
|
useEffect(() => { setCurrentUser(JSON.parse(localStorage.getItem('currentUser') || '{}')) }, []);
|
|
|
|
|
|
return (
|
|
<div className="flex h-full flex-col px-3 py-4 md:px-2">
|
|
<Link
|
|
className="mb-2 flex h-20 items-center justify-start rounded-md bg-blue-600 p-4 md:h-20"
|
|
href={`/${slug}/dashboard`}
|
|
>
|
|
<div className={`${gloriaHallelujah.className} "w-32 text-white md:w-40 antialiased`}>
|
|
<h1>Wedding Planner</h1>
|
|
</div>
|
|
</Link>
|
|
<div className="flex grow flex-row justify-between space-x-2 md:flex-col md:space-x-0 md:space-y-2">
|
|
<NavLinks />
|
|
<div className="hidden h-auto w-full grow rounded-md bg-gray-50 md:block"></div>
|
|
<span>Logged in as {currentUser?.email}</span>
|
|
<button
|
|
className="flex h-[48px] w-full grow items-center justify-center gap-2 rounded-md bg-gray-50 p-3 text-sm font-medium hover:bg-sky-100 hover:text-blue-600 md:flex-none md:justify-start md:p-2 md:px-3"
|
|
onClick={() => {
|
|
logout({
|
|
onLogout: () => {
|
|
localStorage.clear();
|
|
router.push(`/${slug}`);
|
|
}
|
|
});
|
|
}}
|
|
>
|
|
<PowerIcon className="w-6" />
|
|
<div className="hidden md:block">Sign Out</div>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|