Skip to content

Commit 71a2245

Browse files
committed
管理者画面の見た目を一旦作成
1 parent 6156232 commit 71a2245

File tree

7 files changed

+107
-5
lines changed

7 files changed

+107
-5
lines changed

web/app/admin/layout.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Header from "~/components/Header";
1+
import SideNav from "~/components/admin/sideNave";
22
import { NavigateByAuthState } from "~/components/common/NavigateByAuthState";
33

44
export default function SettingsPageLayout({
@@ -8,9 +8,13 @@ export default function SettingsPageLayout({
88
}) {
99
return (
1010
<NavigateByAuthState type="toLoginForUnauthenticated">
11-
<Header title="管理者画面/Admin" />
12-
<div className="absolute top-14 right-0 bottom-14 left-0 overflow-y-auto sm:top-16">
13-
{children}
11+
<div className="flex h-screen flex-col md:flex-row md:overflow-hidden">
12+
<div className="w-full flex-none md:w-64">
13+
<SideNav />
14+
</div>
15+
<div className="flex-grow p-6 md:overflow-y-auto md:p-12">
16+
{children}
17+
</div>
1418
</div>
1519
</NavigateByAuthState>
1620
);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import React from "react";
2+
3+
export default function notification() {
4+
return <div>お知らせ配信</div>;
5+
}

web/app/admin/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ export default function AdminPage() {
1919
checkAuth();
2020
}, [router]);
2121

22-
return <div>Welcome to the Admin Dashboard</div>;
22+
return <div>管理者画面へようこそ</div>;
2323
}

web/app/admin/question/page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import React from "react";
2+
3+
export default function Question() {
4+
return <div>お問い合わせ</div>;
5+
}

web/app/admin/users/page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import React from "react";
2+
3+
export default function Users() {
4+
return <div>ユーザー一覧</div>;
5+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"use client";
2+
3+
import clsx from "clsx";
4+
import Link from "next/link";
5+
import { usePathname } from "next/navigation";
6+
import { MdHome } from "react-icons/md";
7+
import { MdNotificationsNone } from "react-icons/md";
8+
import { MdSupervisedUserCircle } from "react-icons/md";
9+
import { MdQuestionMark } from "react-icons/md";
10+
11+
// Map of links to display in the side navigation.
12+
// Depending on the size of the application, this would be stored in a database.
13+
const links = [
14+
{ name: "ホーム", href: "/admin", icon: MdHome },
15+
{
16+
name: "ユーザー一覧",
17+
href: "/admin/users",
18+
icon: MdSupervisedUserCircle,
19+
},
20+
{
21+
name: "お知らせ配信",
22+
href: "/admin/notification",
23+
icon: MdNotificationsNone,
24+
},
25+
{
26+
name: "お問い合わせ",
27+
href: "/admin/question",
28+
icon: MdQuestionMark,
29+
},
30+
];
31+
32+
export default function NavLinks() {
33+
const pathname = usePathname();
34+
35+
return (
36+
<>
37+
{links.map((link) => {
38+
const LinkIcon = link.icon;
39+
return (
40+
<Link
41+
key={link.name}
42+
href={link.href}
43+
className={clsx(
44+
"flex h-[48px] grow items-center justify-center gap-2 rounded-md bg-gray-50 p-3 font-medium text-sm hover:bg-sky-100 hover:text-blue-600 md:flex-none md:justify-start md:p-2 md:px-3",
45+
{
46+
"bg-sky-100 text-blue-600": pathname === link.href,
47+
},
48+
)}
49+
>
50+
<LinkIcon className="w-6" />
51+
<p className="hidden md:block">{link.name}</p>
52+
</Link>
53+
);
54+
})}
55+
</>
56+
);
57+
}

web/components/admin/sideNave.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { MdOutlinePowerSettingsNew } from "react-icons/md";
2+
import NavLinks from "./nave-links";
3+
4+
export default function SideNav() {
5+
return (
6+
<div className="flex h-full flex-col px-3 py-4 md:px-2">
7+
<div className="flex grow flex-row justify-between space-x-2 md:flex-col md:space-x-0 md:space-y-2">
8+
<NavLinks />
9+
{/* biome-ignore lint/style/useSelfClosingElements: <explanation> */}
10+
<div className="hidden h-auto w-full grow rounded-md bg-gray-50 md:block"></div>
11+
<form
12+
// action={async () => {
13+
// "use server";
14+
// await signOut();
15+
// }}
16+
>
17+
{/* biome-ignore lint/a11y/useButtonType: <explanation> */}
18+
<button className="flex h-[48px] w-full grow items-center justify-center gap-2 rounded-md bg-gray-50 p-3 font-medium text-sm hover:bg-sky-100 hover:text-blue-600 md:flex-none md:justify-start md:p-2 md:px-3">
19+
<MdOutlinePowerSettingsNew className="w-6" />
20+
<div className="hidden md:block">Sign Out</div>
21+
</button>
22+
</form>
23+
</div>
24+
</div>
25+
);
26+
}

0 commit comments

Comments
 (0)