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
+