From 5902664658a36e4afc81327eea9f8eef05561bcb Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Mon, 30 Dec 2024 12:15:35 +0000 Subject: refactor: Refactor sidebar into a shared component --- .../components/shared/sidebar/MobileSidebar.tsx | 26 +++++++++++++++ apps/web/components/shared/sidebar/Sidebar.tsx | 38 ++++++++++++++++++++++ .../components/shared/sidebar/SidebarLayout.tsx | 37 +++++++++++++++++++++ apps/web/components/shared/sidebar/TSidebarItem.ts | 5 +++ 4 files changed, 106 insertions(+) create mode 100644 apps/web/components/shared/sidebar/MobileSidebar.tsx create mode 100644 apps/web/components/shared/sidebar/Sidebar.tsx create mode 100644 apps/web/components/shared/sidebar/SidebarLayout.tsx create mode 100644 apps/web/components/shared/sidebar/TSidebarItem.ts (limited to 'apps/web/components/shared') diff --git a/apps/web/components/shared/sidebar/MobileSidebar.tsx b/apps/web/components/shared/sidebar/MobileSidebar.tsx new file mode 100644 index 00000000..d3edc7df --- /dev/null +++ b/apps/web/components/shared/sidebar/MobileSidebar.tsx @@ -0,0 +1,26 @@ +import { useTranslation } from "@/lib/i18n/server"; +import { TFunction } from "i18next"; + +import MobileSidebarItem from "./ModileSidebarItem"; +import { TSidebarItem } from "./TSidebarItem"; + +export default async function MobileSidebar({ + items, +}: { + items: (t: TFunction) => TSidebarItem[]; +}) { + const { t } = await useTranslation(); + return ( + + ); +} diff --git a/apps/web/components/shared/sidebar/Sidebar.tsx b/apps/web/components/shared/sidebar/Sidebar.tsx new file mode 100644 index 00000000..bd5d23e6 --- /dev/null +++ b/apps/web/components/shared/sidebar/Sidebar.tsx @@ -0,0 +1,38 @@ +import { useTranslation } from "@/lib/i18n/server"; +import { TFunction } from "i18next"; + +import serverConfig from "@hoarder/shared/config"; + +import SidebarItem from "./SidebarItem"; +import { TSidebarItem } from "./TSidebarItem"; + +export default async function Sidebar({ + items, + extraSections, +}: { + items: (t: TFunction) => TSidebarItem[]; + extraSections?: React.ReactNode; +}) { + const { t } = await useTranslation(); + + return ( + + ); +} diff --git a/apps/web/components/shared/sidebar/SidebarLayout.tsx b/apps/web/components/shared/sidebar/SidebarLayout.tsx new file mode 100644 index 00000000..2a2a872e --- /dev/null +++ b/apps/web/components/shared/sidebar/SidebarLayout.tsx @@ -0,0 +1,37 @@ +import Header from "@/components/dashboard/header/Header"; +import DemoModeBanner from "@/components/DemoModeBanner"; +import { Separator } from "@/components/ui/separator"; +import ValidAccountCheck from "@/components/utils/ValidAccountCheck"; + +import serverConfig from "@hoarder/shared/config"; + +export default function SidebarLayout({ + children, + mobileSidebar, + sidebar, + modal, +}: { + children: React.ReactNode; + mobileSidebar: React.ReactNode; + sidebar: React.ReactNode; + modal?: React.ReactNode; +}) { + return ( +
+
+
+ +
{sidebar}
+
+ {serverConfig.demoMode && } +
+ {mobileSidebar} + +
+ {modal} +
{children}
+
+
+
+ ); +} diff --git a/apps/web/components/shared/sidebar/TSidebarItem.ts b/apps/web/components/shared/sidebar/TSidebarItem.ts new file mode 100644 index 00000000..84cd58f5 --- /dev/null +++ b/apps/web/components/shared/sidebar/TSidebarItem.ts @@ -0,0 +1,5 @@ +export interface TSidebarItem { + name: string; + icon: JSX.Element; + path: string; +} -- cgit v1.2.3-70-g09d2