diff --git a/app/musics/loading.tsx b/app/musics/loading.tsx new file mode 100644 index 0000000..fc84ba2 --- /dev/null +++ b/app/musics/loading.tsx @@ -0,0 +1,5 @@ +import MusicListLoading from "@/components/music-list-loading"; + +export default function Loading() { + return ; +} diff --git a/components/dashboard-home.tsx b/components/dashboard-home.tsx index ed8d0cc..f8519ae 100644 --- a/components/dashboard-home.tsx +++ b/components/dashboard-home.tsx @@ -1,36 +1,22 @@ -"use client"; - -import AppLayout from "@cloudscape-design/components/app-layout"; import Button from "@cloudscape-design/components/button"; import Container from "@cloudscape-design/components/container"; import ContentLayout from "@cloudscape-design/components/content-layout"; import Header from "@cloudscape-design/components/header"; import SpaceBetween from "@cloudscape-design/components/space-between"; -import TopNavigation from "@cloudscape-design/components/top-navigation"; + +import DashboardLayout from "@/components/dashboard-layout"; export default function DashboardHome({ userName }: { userName: string }) { return ( -
- - XLAIR Dashboard}> - - -
管理者用ダッシュボードへようこそ、{userName} さん。
- - -
-
- - } - /> -
+ + XLAIR Dashboard}> + + +
管理者用ダッシュボードへようこそ、{userName} さん。
+ +
+
+
+
); } diff --git a/components/dashboard-layout.tsx b/components/dashboard-layout.tsx new file mode 100644 index 0000000..a14733a --- /dev/null +++ b/components/dashboard-layout.tsx @@ -0,0 +1,41 @@ +"use client"; + +import AppLayout from "@cloudscape-design/components/app-layout"; +import SideNavigation from "@cloudscape-design/components/side-navigation"; +import TopNavigation from "@cloudscape-design/components/top-navigation"; +import type { ReactNode } from "react"; + +const navigationItems = [ + { type: "link" as const, text: "ホーム", href: "/" }, + { type: "link" as const, text: "楽曲管理", href: "/musics" }, +]; + +export default function DashboardLayout({ + activeHref, + children, +}: { + activeHref: string; + children: ReactNode; +}) { + return ( +
+ + + } + // Remove toolsHide when an AppLayout tools panel is introduced. + toolsHide + content={children} + /> +
+ ); +} diff --git a/components/music-list-loading.tsx b/components/music-list-loading.tsx new file mode 100644 index 0000000..fb30409 --- /dev/null +++ b/components/music-list-loading.tsx @@ -0,0 +1,25 @@ +import Container from "@cloudscape-design/components/container"; +import ContentLayout from "@cloudscape-design/components/content-layout"; +import Header from "@cloudscape-design/components/header"; +import Spinner from "@cloudscape-design/components/spinner"; + +import DashboardLayout from "@/components/dashboard-layout"; + +export default function MusicListLoading() { + return ( + + 楽曲管理}> + +
+ + 楽曲一覧を読み込み中 +
+
+
+
+ ); +} diff --git a/components/music-list.tsx b/components/music-list.tsx index 9ab6cb5..5097f11 100644 --- a/components/music-list.tsx +++ b/components/music-list.tsx @@ -1,14 +1,13 @@ "use client"; -import AppLayout from "@cloudscape-design/components/app-layout"; import Button from "@cloudscape-design/components/button"; import Container from "@cloudscape-design/components/container"; import ContentLayout from "@cloudscape-design/components/content-layout"; import Header from "@cloudscape-design/components/header"; import SpaceBetween from "@cloudscape-design/components/space-between"; -import TopNavigation from "@cloudscape-design/components/top-navigation"; import dynamic from "next/dynamic"; +import DashboardLayout from "@/components/dashboard-layout"; import type { MusicListResponse } from "@/lib/api"; const MusicTable = dynamic(() => import("@/components/music-table"), { @@ -30,36 +29,19 @@ export default function MusicList({ : undefined; return ( -
- - ホーム} variant="h1"> - 楽曲管理 - - } - > - - - -
- -
-
-
- - } - /> -
+ + 楽曲管理}> + + + + {nextPageHref ? ( +
+ +
+ ) : null} +
+
+
+
); }