From 9536ac8e021bbe6c5da69ccd16782e007aec83b0 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 02:56:44 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- src/components/app-shell.tsx | 51 ++- src/components/cases/tasks-tab.tsx | 182 +++++++++++ .../tasks/apply-workflow-dialog.tsx | 171 ++++++++++ src/components/tasks/task-detail-panel.tsx | 1 + src/routeTree.gen.ts | 51 +++ src/routes/settings.workflows.tsx | 301 ++++++++++++++++++ 6 files changed, 750 insertions(+), 7 deletions(-) create mode 100644 src/components/cases/tasks-tab.tsx create mode 100644 src/components/tasks/apply-workflow-dialog.tsx create mode 100644 src/routes/settings.workflows.tsx diff --git a/src/components/app-shell.tsx b/src/components/app-shell.tsx index 5061872..0e28d99 100644 --- a/src/components/app-shell.tsx +++ b/src/components/app-shell.tsx @@ -1,29 +1,54 @@ import { Link, useLocation, useNavigate } from "@tanstack/react-router"; import { useAuth } from "@/lib/auth"; import { Button } from "@/components/ui/button"; -import { Briefcase, Users, FileText, Receipt, ShieldCheck, LogOut, Scale, LayoutDashboard } from "lucide-react"; +import { + Briefcase, + Users, + Receipt, + ShieldCheck, + LogOut, + Scale, + LayoutDashboard, + CheckSquare, + MessageSquare, +} from "lucide-react"; import { cn } from "@/lib/utils"; import type { ReactNode } from "react"; +import { useBubbleCounts } from "@/lib/use-bubble-counts"; +import { NotificationBell } from "@/components/notifications/notification-bell"; interface NavItem { to: string; label: string; icon: typeof Briefcase; adminOnly?: boolean; + bubbleKey?: "messages" | "tasks"; } const NAV: NavItem[] = [ { to: "/", label: "Dashboard", icon: LayoutDashboard }, { to: "/clients", label: "Clients", icon: Users }, { to: "/cases", label: "Cases", icon: Briefcase }, + { to: "/tasks", label: "Tasks", icon: CheckSquare, bubbleKey: "tasks" }, + { to: "/messages", label: "Messages", icon: MessageSquare, bubbleKey: "messages" }, { to: "/invoices", label: "Invoices", icon: Receipt }, { to: "/admin/users", label: "Users", icon: ShieldCheck, adminOnly: true }, ]; +function Bubble({ count }: { count: number }) { + if (!count) return null; + return ( + + {count > 99 ? "99+" : count} + + ); +} + export function AppShell({ children }: { children: ReactNode }) { const { user, signOut, isAdmin, roles } = useAuth(); const location = useLocation(); const navigate = useNavigate(); + const counts = useBubbleCounts(); const handleSignOut = async () => { await signOut(); @@ -38,16 +63,18 @@ export function AppShell({ children }: { children: ReactNode }) {
-
-
Stage Law Firm, PLLC
+
+
Stage Law Firm, PLLC
Law Firm Suite
+