From 3fa228c368b8e4460efee642bb6c766aa1b647e5 Mon Sep 17 00:00:00 2001 From: ShenzheZhu Date: Sun, 12 Jul 2026 10:46:00 -0400 Subject: [PATCH] feat: #1023 align publisher dashboard shell --- packages/frontend/public/favicon.ico | Bin 0 -> 7791 bytes packages/frontend/public/favicon.png | Bin 0 -> 4629 bytes packages/frontend/src/app/layout.tsx | 9 ++++- packages/frontend/src/app/tasks/layout.tsx | 31 +++++++++++++++--- .../src/components/navigation/navbar.tsx | 2 +- 5 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 packages/frontend/public/favicon.ico create mode 100644 packages/frontend/public/favicon.png diff --git a/packages/frontend/public/favicon.ico b/packages/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..84af72ac98d245bc6c4d62fe82fef25b07869ef9 GIT binary patch literal 7791 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 literal 0 HcmV?d00001 diff --git a/packages/frontend/public/favicon.png b/packages/frontend/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6cf73842451bb77605e61220744ba13340d54f GIT binary patch literal 4629 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 LNkvXXu0mjfM$5x9 literal 0 HcmV?d00001 diff --git a/packages/frontend/src/app/layout.tsx b/packages/frontend/src/app/layout.tsx index 6c95813b..d81dfa78 100644 --- a/packages/frontend/src/app/layout.tsx +++ b/packages/frontend/src/app/layout.tsx @@ -51,7 +51,14 @@ export const metadata: Metadata = { 'survey tracking', ], authors: [{ name: `${BRAND.name} Team` }], - icons: { icon: '/icon.svg' }, + icons: { + icon: [ + { url: '/favicon.ico', sizes: 'any' }, + { url: '/favicon.png', type: 'image/png' }, + { url: '/icon.svg', type: 'image/svg+xml' }, + ], + shortcut: '/favicon.ico', + }, openGraph: { title: getBrandText().pageTitles.admin, description: diff --git a/packages/frontend/src/app/tasks/layout.tsx b/packages/frontend/src/app/tasks/layout.tsx index 45d1a761..53867b0d 100644 --- a/packages/frontend/src/app/tasks/layout.tsx +++ b/packages/frontend/src/app/tasks/layout.tsx @@ -1,7 +1,9 @@ 'use client'; import { useEffect, useState } from 'react'; -import { useRouter } from 'next/navigation'; +import Link from 'next/link'; +import { usePathname, useRouter } from 'next/navigation'; +import { ClipboardList } from 'lucide-react'; import { useAuthStore } from '@/stores/auth-store'; import { Navbar } from '@/components/navigation/navbar'; @@ -11,8 +13,12 @@ export default function TasksLayout({ children: React.ReactNode; }) { const router = useRouter(); + const pathname = usePathname(); const { isAuthenticated, isLoading, fetchUser } = useAuthStore(); const [isValidating, setIsValidating] = useState(true); + // The dashboard index gets the sidebar app shell (mirroring the writer + // portal); detail/form pages keep the centered container. + const isDashboardRoute = pathname === '/tasks'; useEffect(() => { // Always validate session on mount @@ -55,9 +61,26 @@ export default function TasksLayout({ return (
-
- {children} -
+ {isDashboardRoute ? ( +
+ +
+
{children}
+
+
+ ) : ( +
{children}
+ )}
); } diff --git a/packages/frontend/src/components/navigation/navbar.tsx b/packages/frontend/src/components/navigation/navbar.tsx index e0621a13..ea2f559e 100644 --- a/packages/frontend/src/components/navigation/navbar.tsx +++ b/packages/frontend/src/components/navigation/navbar.tsx @@ -43,7 +43,7 @@ export function Navbar() { return ( <>