feat(21-01): wire toast notifications into all mutation flows

- SpawnArchitectDropdown: toast.success on spawn, toast.error on failure
- ActionMenu: toast.success on archive, toast.error on failure
- CreateInitiativeDialog: toast.success on creation
- Inbox: toast.success/error for resumeAgent and respondToMessage mutations
- Replace all console.error-only mutation error handling with user-visible toasts
This commit is contained in:
Lukas May
2026-02-05 09:01:45 +01:00
parent 7e82ac561b
commit 5efb4d4e8b
4 changed files with 22 additions and 6 deletions

View File

@@ -7,6 +7,7 @@ import {
DropdownMenuSeparator,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { toast } from "sonner";
import { trpc } from "@/lib/trpc";
interface ActionMenuProps {
@@ -21,9 +22,10 @@ export function ActionMenu({ initiativeId, onDelete }: ActionMenuProps) {
onSuccess: () => {
utils.listInitiatives.invalidate();
onDelete?.();
toast.success("Initiative archived");
},
onError: (err) => {
console.error("Failed to archive initiative:", err.message);
onError: () => {
toast.error("Failed to archive initiative");
},
});

View File

@@ -11,6 +11,7 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Textarea } from "@/components/ui/textarea";
import { toast } from "sonner";
import { trpc } from "@/lib/trpc";
interface CreateInitiativeDialogProps {
@@ -32,6 +33,7 @@ export function CreateInitiativeDialog({
onSuccess: () => {
utils.listInitiatives.invalidate();
onOpenChange(false);
toast.success("Initiative created");
},
onError: (err) => {
setError(err.message);

View File

@@ -7,6 +7,7 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { toast } from "sonner";
import { trpc } from "@/lib/trpc";
interface SpawnArchitectDropdownProps {
@@ -26,9 +27,10 @@ export function SpawnArchitectDropdown({
setOpen(false);
setSuccessText("Spawned!");
setTimeout(() => setSuccessText(null), 2000);
toast.success("Architect spawned");
},
onError: (err) => {
console.error("Failed to spawn discuss architect:", err.message);
onError: () => {
toast.error("Failed to spawn architect");
},
});
@@ -37,9 +39,10 @@ export function SpawnArchitectDropdown({
setOpen(false);
setSuccessText("Spawned!");
setTimeout(() => setSuccessText(null), 2000);
toast.success("Architect spawned");
},
onError: (err) => {
console.error("Failed to spawn breakdown architect:", err.message);
onError: () => {
toast.error("Failed to spawn architect");
},
});

View File

@@ -4,6 +4,7 @@ import { AlertCircle, ChevronLeft } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { Skeleton } from "@/components/Skeleton";
import { toast } from "sonner";
import { trpc } from "@/lib/trpc";
import { InboxList } from "@/components/InboxList";
import { QuestionForm } from "@/components/QuestionForm";
@@ -39,6 +40,10 @@ function InboxPage() {
void utils.listWaitingAgents.invalidate();
void utils.listMessages.invalidate();
setSelectedAgentId(null);
toast.success("Answer submitted");
},
onError: () => {
toast.error("Failed to submit answer");
},
});
@@ -47,6 +52,10 @@ function InboxPage() {
void utils.listWaitingAgents.invalidate();
void utils.listMessages.invalidate();
setSelectedAgentId(null);
toast.success("Response sent");
},
onError: () => {
toast.error("Failed to send response");
},
});