feat(21-04): add subscription error handling with toast feedback on all pages
- Replace silent onError: () => {} with sticky toast notification
- Toast uses fixed ID 'sub-error' to prevent duplicate notifications
- duration: Infinity keeps toast visible until dismissed
- Applied to initiatives/index.tsx, initiatives/$id.tsx, inbox.tsx
This commit is contained in:
@@ -23,7 +23,12 @@ function InboxPage() {
|
|||||||
void utils.listWaitingAgents.invalidate();
|
void utils.listWaitingAgents.invalidate();
|
||||||
void utils.listMessages.invalidate();
|
void utils.listMessages.invalidate();
|
||||||
},
|
},
|
||||||
onError: () => {},
|
onError: () => {
|
||||||
|
toast.error("Live updates disconnected. Refresh to reconnect.", {
|
||||||
|
id: "sub-error",
|
||||||
|
duration: Infinity,
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Data fetching
|
// Data fetching
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { createFileRoute, useNavigate } from "@tanstack/react-router";
|
|||||||
import { AlertCircle } from "lucide-react";
|
import { AlertCircle } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Skeleton } from "@/components/Skeleton";
|
import { Skeleton } from "@/components/Skeleton";
|
||||||
|
import { toast } from "sonner";
|
||||||
import { trpc } from "@/lib/trpc";
|
import { trpc } from "@/lib/trpc";
|
||||||
import { InitiativeHeader } from "@/components/InitiativeHeader";
|
import { InitiativeHeader } from "@/components/InitiativeHeader";
|
||||||
import { ProgressPanel } from "@/components/ProgressPanel";
|
import { ProgressPanel } from "@/components/ProgressPanel";
|
||||||
@@ -218,13 +219,23 @@ function InitiativeDetailPage() {
|
|||||||
void utils.listTasks.invalidate();
|
void utils.listTasks.invalidate();
|
||||||
void utils.listPlans.invalidate();
|
void utils.listPlans.invalidate();
|
||||||
},
|
},
|
||||||
onError: () => {},
|
onError: () => {
|
||||||
|
toast.error("Live updates disconnected. Refresh to reconnect.", {
|
||||||
|
id: "sub-error",
|
||||||
|
duration: Infinity,
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
trpc.onAgentUpdate.useSubscription(undefined, {
|
trpc.onAgentUpdate.useSubscription(undefined, {
|
||||||
onData: () => {
|
onData: () => {
|
||||||
void utils.listAgents.invalidate();
|
void utils.listAgents.invalidate();
|
||||||
},
|
},
|
||||||
onError: () => {},
|
onError: () => {
|
||||||
|
toast.error("Live updates disconnected. Refresh to reconnect.", {
|
||||||
|
id: "sub-error",
|
||||||
|
duration: Infinity,
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// State
|
// State
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useState } from "react";
|
|||||||
import { createFileRoute, useNavigate } from "@tanstack/react-router";
|
import { createFileRoute, useNavigate } from "@tanstack/react-router";
|
||||||
import { Plus } from "lucide-react";
|
import { Plus } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
|
import { toast } from "sonner";
|
||||||
import { trpc } from "@/lib/trpc";
|
import { trpc } from "@/lib/trpc";
|
||||||
import { InitiativeList } from "@/components/InitiativeList";
|
import { InitiativeList } from "@/components/InitiativeList";
|
||||||
import { CreateInitiativeDialog } from "@/components/CreateInitiativeDialog";
|
import { CreateInitiativeDialog } from "@/components/CreateInitiativeDialog";
|
||||||
@@ -31,7 +32,12 @@ function DashboardPage() {
|
|||||||
void utils.listInitiatives.invalidate();
|
void utils.listInitiatives.invalidate();
|
||||||
void utils.listPhases.invalidate();
|
void utils.listPhases.invalidate();
|
||||||
},
|
},
|
||||||
onError: () => {},
|
onError: () => {
|
||||||
|
toast.error("Live updates disconnected. Refresh to reconnect.", {
|
||||||
|
id: "sub-error",
|
||||||
|
duration: Infinity,
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user