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:
@@ -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");
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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");
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user