diff --git a/src/app/dashboard/(overview)/loading.tsx b/src/app/dashboard/(overview)/loading.tsx deleted file mode 100644 index 40c27b6..0000000 --- a/src/app/dashboard/(overview)/loading.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import DashboardSkeleton from "@/app/dashboard/components/skeletons/skeletons"; - -export default function Loading() { - return ; -} \ No newline at end of file diff --git a/src/app/dashboard/components/client/nav-links/nav-link-controller.ts b/src/app/dashboard/components/client/nav-links/nav-link-controller.ts new file mode 100644 index 0000000..b6a3aa9 --- /dev/null +++ b/src/app/dashboard/components/client/nav-links/nav-link-controller.ts @@ -0,0 +1,29 @@ + +import { DocumentIcon } from '@/app/components/icons/document'; +import HomeIcon from '@/app/components/icons/home'; +import { UserIcon } from '@/app/components/icons/user'; +import { usePathname } from 'next/navigation'; + +type LinkItem = { + name: string; + href: string; + icon: (props: {className?: string}) => JSX.Element +} +export default function navLinkPersonalVM() { + const pathname = usePathname() + // Map of links to display in the side navigation. + // Depending on the size of the application, this would be stored in a database. + const links: LinkItem[] = [ + { name: 'Home', href: '/dashboard', icon: HomeIcon }, + { + name: 'Invoices', + href: '/dashboard/invoices', + icon: DocumentIcon, + }, + { name: 'Customers', href: '/dashboard/customers', icon: UserIcon }, + ]; + return { + links, + isLinkActive: (link: LinkItem) => pathname === link.href + } +} \ No newline at end of file diff --git a/src/app/dashboard/components/nav-links.tsx b/src/app/dashboard/components/client/nav-links/nav-links.tsx similarity index 51% rename from src/app/dashboard/components/nav-links.tsx rename to src/app/dashboard/components/client/nav-links/nav-links.tsx index ecfca9e..1aa6072 100644 --- a/src/app/dashboard/components/nav-links.tsx +++ b/src/app/dashboard/components/client/nav-links/nav-links.tsx @@ -1,25 +1,10 @@ 'use client' -import { DocumentIcon } from '@/app/components/icons/document'; -import HomeIcon from '@/app/components/icons/home'; -import { UserIcon } from '@/app/components/icons/user'; +import navLinkPersonalVM from '@/app/dashboard/components/client/nav-links/nav-link-controller'; import clsx from 'clsx'; import Link from 'next/link' -import { usePathname } from 'next/navigation'; - -// Map of links to display in the side navigation. -// Depending on the size of the application, this would be stored in a database. -const links = [ - { name: 'Home', href: '/dashboard', icon: HomeIcon }, - { - name: 'Invoices', - href: '/dashboard/invoices', - icon: DocumentIcon, - }, - { name: 'Customers', href: '/dashboard/customers', icon: UserIcon }, -]; export default function NavLinks() { - const pathname = usePathname() + const { links, isLinkActive } = navLinkPersonalVM() return ( <> {links.map((link) => { @@ -31,7 +16,7 @@ export default function NavLinks() { className={clsx( 'flex h-[48px] 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', { - 'bg-sky-100 text-blue-600': pathname === link.href, + 'bg-sky-100 text-blue-600': isLinkActive(link), }, )} > diff --git a/src/app/dashboard/components/card/card-controller.ts b/src/app/dashboard/components/server/card/card-controller.ts similarity index 100% rename from src/app/dashboard/components/card/card-controller.ts rename to src/app/dashboard/components/server/card/card-controller.ts diff --git a/src/app/dashboard/components/card/card.tsx b/src/app/dashboard/components/server/card/card.tsx similarity index 87% rename from src/app/dashboard/components/card/card.tsx rename to src/app/dashboard/components/server/card/card.tsx index 5494f4f..1b22154 100644 --- a/src/app/dashboard/components/card/card.tsx +++ b/src/app/dashboard/components/server/card/card.tsx @@ -1,4 +1,4 @@ -import cardController from "@/app/dashboard/components/card/card-controller"; +import cardController from "@/app/dashboard/components/server/card/card-controller"; diff --git a/src/app/dashboard/components/cards/cards-controller.ts b/src/app/dashboard/components/server/cards/cards-controller.ts similarity index 100% rename from src/app/dashboard/components/cards/cards-controller.ts rename to src/app/dashboard/components/server/cards/cards-controller.ts diff --git a/src/app/dashboard/components/cards/cards.tsx b/src/app/dashboard/components/server/cards/cards.tsx similarity index 76% rename from src/app/dashboard/components/cards/cards.tsx rename to src/app/dashboard/components/server/cards/cards.tsx index c39a4fe..e8f74a9 100644 --- a/src/app/dashboard/components/cards/cards.tsx +++ b/src/app/dashboard/components/server/cards/cards.tsx @@ -1,5 +1,5 @@ -import { Card } from '@/app/dashboard/components/card/card'; -import cardsController from '@/app/dashboard/components/cards/cards-controller'; +import { Card } from '@/app/dashboard/components/server/card/card'; +import cardsController from '@/app/dashboard/components/server/cards/cards-controller'; export default async function CardWrapper() { diff --git a/src/app/dashboard/components/latest-invoices/latest-invoices-controller.ts b/src/app/dashboard/components/server/latest-invoices/latest-invoices-controller.ts similarity index 100% rename from src/app/dashboard/components/latest-invoices/latest-invoices-controller.ts rename to src/app/dashboard/components/server/latest-invoices/latest-invoices-controller.ts diff --git a/src/app/dashboard/components/latest-invoices/latest-invoices.tsx b/src/app/dashboard/components/server/latest-invoices/latest-invoices.tsx similarity index 97% rename from src/app/dashboard/components/latest-invoices/latest-invoices.tsx rename to src/app/dashboard/components/server/latest-invoices/latest-invoices.tsx index 0db6556..dc3c7be 100644 --- a/src/app/dashboard/components/latest-invoices/latest-invoices.tsx +++ b/src/app/dashboard/components/server/latest-invoices/latest-invoices.tsx @@ -1,4 +1,4 @@ -import latestInvoicesController from '@/app/dashboard/components/latest-invoices/latest-invoices-controller'; +import latestInvoicesController from '@/app/dashboard/components/server/latest-invoices/latest-invoices-controller'; import { ArrowPathIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import Image from 'next/image'; diff --git a/src/app/dashboard/components/revenue-chart/revenue-chart-controller.ts b/src/app/dashboard/components/server/revenue-chart/revenue-chart-controller.ts similarity index 100% rename from src/app/dashboard/components/revenue-chart/revenue-chart-controller.ts rename to src/app/dashboard/components/server/revenue-chart/revenue-chart-controller.ts diff --git a/src/app/dashboard/components/revenue-chart/revenue-chart.tsx b/src/app/dashboard/components/server/revenue-chart/revenue-chart.tsx similarity index 93% rename from src/app/dashboard/components/revenue-chart/revenue-chart.tsx rename to src/app/dashboard/components/server/revenue-chart/revenue-chart.tsx index 608163c..b29a7ae 100644 --- a/src/app/dashboard/components/revenue-chart/revenue-chart.tsx +++ b/src/app/dashboard/components/server/revenue-chart/revenue-chart.tsx @@ -1,4 +1,4 @@ -import revenueChartController from '@/app/dashboard/components/revenue-chart/revenue-chart-controller'; +import revenueChartController from '@/app/dashboard/components/server/revenue-chart/revenue-chart-controller'; import { CalendarIcon } from '@heroicons/react/24/outline'; export default async function RevenueChart() { diff --git a/src/app/dashboard/components/sidenav.tsx b/src/app/dashboard/components/server/sidenav.tsx similarity index 88% rename from src/app/dashboard/components/sidenav.tsx rename to src/app/dashboard/components/server/sidenav.tsx index 7cf3d44..0af5a13 100644 --- a/src/app/dashboard/components/sidenav.tsx +++ b/src/app/dashboard/components/server/sidenav.tsx @@ -1,4 +1,4 @@ -import NavLinks from '@/app/dashboard/components/nav-links'; +import NavLinks from '@/app/dashboard/components/client/nav-links/nav-links'; import Link from 'next/link'; export default function SideNav() { diff --git a/src/app/dashboard/components/skeletons/skeletons.tsx b/src/app/dashboard/components/server/skeletons/skeletons.tsx similarity index 100% rename from src/app/dashboard/components/skeletons/skeletons.tsx rename to src/app/dashboard/components/server/skeletons/skeletons.tsx diff --git a/src/app/dashboard/layout.tsx b/src/app/dashboard/layout.tsx index d28eae9..75b7ecb 100644 --- a/src/app/dashboard/layout.tsx +++ b/src/app/dashboard/layout.tsx @@ -1,4 +1,4 @@ -import SideNav from "@/app/dashboard/components/sidenav"; +import SideNav from "@/app/dashboard/components/server/sidenav"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/src/app/dashboard/loading.tsx b/src/app/dashboard/loading.tsx new file mode 100644 index 0000000..c50ad40 --- /dev/null +++ b/src/app/dashboard/loading.tsx @@ -0,0 +1,5 @@ +import DashboardSkeleton from "@/app/dashboard/components/server/skeletons/skeletons"; + +export default function Loading() { + return ; +} \ No newline at end of file diff --git a/src/app/dashboard/(overview)/page.tsx b/src/app/dashboard/page.tsx similarity index 68% rename from src/app/dashboard/(overview)/page.tsx rename to src/app/dashboard/page.tsx index 519d478..24fb89a 100644 --- a/src/app/dashboard/(overview)/page.tsx +++ b/src/app/dashboard/page.tsx @@ -1,7 +1,7 @@ -import { LatestInvoicesSkeleton, RevenueChartSkeleton } from "@/app/dashboard/components/skeletons/skeletons"; -import CardWrapper from "@/app/dashboard/components/cards/cards"; -import LatestInvoices from "@/app/dashboard/components/latest-invoices/latest-invoices"; -import RevenueChart from "@/app/dashboard/components/revenue-chart/revenue-chart"; +import { LatestInvoicesSkeleton, RevenueChartSkeleton } from "@/app/dashboard/components/server/skeletons/skeletons"; +import CardWrapper from "@/app/dashboard/components/server/cards/cards"; +import LatestInvoices from "@/app/dashboard/components/server/latest-invoices/latest-invoices"; +import RevenueChart from "@/app/dashboard/components/server/revenue-chart/revenue-chart"; import { Suspense } from "react"; export default async function Dashboard() {