From a9192beae3e87e937e8fce37bb9158595410fd44 Mon Sep 17 00:00:00 2001 From: Anish Sarkar <104695310+AnishSarkar22@users.noreply.github.com> Date: Sun, 3 May 2026 18:42:29 +0530 Subject: [PATCH] feat(announcements): rename "Announcements" to "What's New" across the application; add AnnouncementsDialog component for displaying updates; update empty state messaging; remove unused AnnouncementsSidebar component. --- .../app/(home)/announcements/layout.tsx | 6 +- .../app/(home)/announcements/page.tsx | 2 +- .../atoms/settings/settings-dialog.atoms.ts | 2 + .../announcements/AnnouncementsDialog.tsx | 50 +++++++++++ .../announcements/AnnouncementsEmptyState.tsx | 4 +- .../components/homepage/footer-new.tsx | 2 +- .../providers/FreeLayoutDataProvider.tsx | 46 +++++----- .../layout/ui/icon-rail/IconRail.tsx | 6 ++ .../layout/ui/shell/LayoutShell.tsx | 44 +++------- .../ui/sidebar/AnnouncementsSidebar.tsx | 84 ------------------- .../layout/ui/sidebar/MobileSidebar.tsx | 13 +++ .../layout/ui/sidebar/NavSection.tsx | 7 +- .../components/layout/ui/sidebar/Sidebar.tsx | 41 ++++++++- .../layout/ui/sidebar/SidebarUserProfile.tsx | 37 ++++++++ .../components/layout/ui/sidebar/index.ts | 1 - .../lib/announcements/announcements-data.ts | 4 +- 16 files changed, 189 insertions(+), 160 deletions(-) create mode 100644 surfsense_web/components/announcements/AnnouncementsDialog.tsx delete mode 100644 surfsense_web/components/layout/ui/sidebar/AnnouncementsSidebar.tsx diff --git a/surfsense_web/app/(home)/announcements/layout.tsx b/surfsense_web/app/(home)/announcements/layout.tsx index 072db2c3f..cff15d3a1 100644 --- a/surfsense_web/app/(home)/announcements/layout.tsx +++ b/surfsense_web/app/(home)/announcements/layout.tsx @@ -2,20 +2,20 @@ import type { Metadata } from "next"; import type { ReactNode } from "react"; export const metadata: Metadata = { - title: "Announcements | SurfSense", + title: "What's New | SurfSense", description: "Latest product updates, feature releases, and news from SurfSense.", alternates: { canonical: "https://surfsense.com/announcements", }, openGraph: { - title: "Announcements | SurfSense", + title: "What's New | SurfSense", description: "Latest product updates, feature releases, and news from SurfSense.", url: "https://surfsense.com/announcements", type: "website", }, twitter: { card: "summary_large_image", - title: "Announcements | SurfSense", + title: "What's New | SurfSense", description: "Latest product updates, feature releases, and news from SurfSense.", }, }; diff --git a/surfsense_web/app/(home)/announcements/page.tsx b/surfsense_web/app/(home)/announcements/page.tsx index 966c09f77..f287e43d1 100644 --- a/surfsense_web/app/(home)/announcements/page.tsx +++ b/surfsense_web/app/(home)/announcements/page.tsx @@ -24,7 +24,7 @@ export default function AnnouncementsPage() {
- You're all caught up! New announcements will appear here. + You're all caught up! New updates will appear here.
); diff --git a/surfsense_web/components/homepage/footer-new.tsx b/surfsense_web/components/homepage/footer-new.tsx index 53eb833e9..5943cc8ec 100644 --- a/surfsense_web/components/homepage/footer-new.tsx +++ b/surfsense_web/components/homepage/footer-new.tsx @@ -38,7 +38,7 @@ export function FooterNew() { href: "/contact", }, { - title: "Announcements", + title: "What's New", href: "/announcements", }, ]; diff --git a/surfsense_web/components/layout/providers/FreeLayoutDataProvider.tsx b/surfsense_web/components/layout/providers/FreeLayoutDataProvider.tsx index 8b362f45b..a2695078a 100644 --- a/surfsense_web/components/layout/providers/FreeLayoutDataProvider.tsx +++ b/surfsense_web/components/layout/providers/FreeLayoutDataProvider.tsx @@ -1,6 +1,6 @@ "use client"; -import { Inbox, Megaphone, SquareLibrary } from "lucide-react"; +import { Inbox, SquareLibrary } from "lucide-react"; import { useRouter } from "next/navigation"; import type { ReactNode } from "react"; import { Fragment, useCallback, useEffect, useMemo, useState } from "react"; @@ -55,28 +55,24 @@ export function FreeLayoutDataProvider({ children }: FreeLayoutDataProviderProps const navItems: NavItem[] = useMemo( () => - [ - { - title: "Inbox", - url: "#inbox", - icon: Inbox, - isActive: false, - }, - isMobile - ? { - title: "Documents", - url: "#documents", - icon: SquareLibrary, - isActive: false, - } - : null, - { - title: "Announcements", - url: "#announcements", - icon: Megaphone, - isActive: false, - }, - ].filter((item): item is NavItem => item !== null), + ( + [ + { + title: "Inbox", + url: "#inbox", + icon: Inbox, + isActive: false, + }, + isMobile + ? { + title: "Documents", + url: "#documents", + icon: SquareLibrary, + isActive: false, + } + : null, + ] as (NavItem | null)[] + ).filter((item): item is NavItem => item !== null), [isMobile] ); @@ -90,11 +86,12 @@ export function FreeLayoutDataProvider({ children }: FreeLayoutDataProviderProps (item: NavItem) => { if (item.title === "Inbox") gate("use the inbox"); else if (item.title === "Documents") setIsDocsSidebarOpen((v) => !v); - else if (item.title === "Announcements") gate("view announcements"); }, [gate] ); + const handleAnnouncements = useCallback(() => gate("see what's new"), [gate]); + const handleSearchSpaceSelect = useCallback( (_id: number) => gate("switch search spaces"), [gate] @@ -127,6 +124,7 @@ export function FreeLayoutDataProvider({ children }: FreeLayoutDataProviderProps onSettings={gatedAction("search space settings")} onManageMembers={gatedAction("team management")} onUserSettings={gatedAction("account settings")} + onAnnouncements={handleAnnouncements} onLogout={() => router.push("/register")} pageUsage={pageUsage} isChatPage diff --git a/surfsense_web/components/layout/ui/icon-rail/IconRail.tsx b/surfsense_web/components/layout/ui/icon-rail/IconRail.tsx index c4b127c63..fdc4930d6 100644 --- a/surfsense_web/components/layout/ui/icon-rail/IconRail.tsx +++ b/surfsense_web/components/layout/ui/icon-rail/IconRail.tsx @@ -23,6 +23,8 @@ interface IconRailProps { onNavItemClick?: (item: NavItem) => void; user: User; onUserSettings?: () => void; + onAnnouncements?: () => void; + announcementUnreadCount?: number; onLogout?: () => void; theme?: string; setTheme?: (theme: "light" | "dark" | "system") => void; @@ -42,6 +44,8 @@ export function IconRail({ onNavItemClick, user, onUserSettings, + onAnnouncements, + announcementUnreadCount = 0, onLogout, theme, setTheme, @@ -138,6 +142,8 @@ export function IconRail({