diff --git a/components/ActionBar/NavigationButtons.tsx b/components/ActionBar/NavigationButtons.tsx
index 5a16fe1a..0b643c92 100644
--- a/components/ActionBar/NavigationButtons.tsx
+++ b/components/ActionBar/NavigationButtons.tsx
@@ -1,5 +1,5 @@
"use client";
-import { usePathname } from "next/navigation";
+import { usePathname, useRouter, useSearchParams } from "next/navigation";
import { HomeSmall } from "components/Icons/HomeSmall";
import { ActionButton } from "./ActionButton";
import { useIdentityData } from "components/IdentityProvider";
@@ -77,10 +77,28 @@ export const ReaderButton = (props: { subs: boolean }) => {
export function NotificationButton() {
let { identity } = useIdentityData();
let unreads = identity?.notifications[0]?.count;
- let current = useIsActive("/notifications");
+ let pathname = usePathname();
+ let searchParams = useSearchParams();
+ let router = useRouter();
+
+ let isOnPage =
+ pathname === "/notifications" || pathname.startsWith("/notifications/");
+ let isOpen = searchParams.get("notifications") === "open";
+ let active = isOnPage || isOpen;
+
+ function handleClick() {
+ if (isOnPage || isOpen) return;
+ let params = new URLSearchParams(searchParams.toString());
+ params.set("notifications", "open");
+ router.push(`${pathname}?${params.toString()}`, { scroll: false });
+ }
return (
-
+
+
);
}
diff --git a/components/PageLayouts/DashboardShell.tsx b/components/PageLayouts/DashboardShell.tsx
index 68d17ee9..a68aa206 100644
--- a/components/PageLayouts/DashboardShell.tsx
+++ b/components/PageLayouts/DashboardShell.tsx
@@ -1,11 +1,13 @@
"use client";
import * as Dialog from "@radix-ui/react-dialog";
+import { useSearchParams } from "next/navigation";
import {
DesktopNavigation,
NavigationContent,
} from "components/ActionBar/DesktopNavigation";
import { Sidebar, useSidebarStore } from "components/ActionBar/Sidebar";
import { DashboardIdContext } from "./dashboardState";
+import { NotificationContent } from "./NotificationContent";
export type DashboardShellProps = {
id: string;
@@ -19,6 +21,8 @@ export type DashboardShellProps = {
export function DashboardShell(props: DashboardShellProps) {
let { id, children, ...navigationProps } = props;
let { open, setOpen } = useSidebarStore();
+ let searchParams = useSearchParams();
+ let showNotifications = searchParams.get("notifications") === "open";
return (
@@ -50,7 +54,7 @@ export function DashboardShell(props: DashboardShellProps) {
- {children}
+ {showNotifications ? : children}
);
diff --git a/components/PageLayouts/NotificationContent.tsx b/components/PageLayouts/NotificationContent.tsx
new file mode 100644
index 00000000..81729524
--- /dev/null
+++ b/components/PageLayouts/NotificationContent.tsx
@@ -0,0 +1,32 @@
+"use client";
+import { useEffect, useState } from "react";
+import { DashboardPageLayout } from "./DashboardPageLayout";
+import { NotificationList } from "app/(home-pages)/(writer)/notifications/NotificationList";
+import { getNotifications } from "app/(home-pages)/(writer)/notifications/getNotifications";
+import { HydratedNotification } from "src/notifications";
+
+export function NotificationContent() {
+ let [notifications, setNotifications] = useState<
+ HydratedNotification[] | null
+ >(null);
+
+ useEffect(() => {
+ getNotifications().then(setNotifications);
+ }, []);
+
+ return (
+
+ {notifications === null ? (
+
+ ) : (
+
+ )}
+
+ );
+}