|
1 | 1 | "use client"; |
2 | 2 |
|
3 | 3 | import Link from "next/link"; |
4 | | -import { useRef, useState } from "react"; |
| 4 | +import { useRef, useState, useTransition } from "react"; |
5 | 5 | import { Check, SquarePen, Trash2, X } from "lucide-react"; |
6 | 6 | import { |
7 | 7 | createRouteAction, |
8 | 8 | updateRouteAction, |
9 | 9 | deleteRouteAction, |
10 | 10 | } from "../../lib/actions"; |
11 | | -import { useRunAction } from "./useRunAction"; |
| 11 | +import { runAction } from "./runAction"; |
12 | 12 |
|
13 | 13 | type RouteRow = { |
14 | 14 | id: number; |
@@ -181,33 +181,45 @@ export function RouteTable({ |
181 | 181 | routes: RouteRow[]; |
182 | 182 | documents: DocumentOption[]; |
183 | 183 | }) { |
184 | | - const [isPending, run] = useRunAction(); |
| 184 | + const [isPending, startTransition] = useTransition(); |
185 | 185 | const [creating, setCreating] = useState(false); |
186 | 186 | const [routes, setRoutes] = useState(initialRoutes); |
187 | 187 |
|
188 | | - async function handleCreate(path: string, documentId: number) { |
| 188 | + function handleCreate(path: string, documentId: number) { |
189 | 189 | setCreating(false); |
190 | | - const result = await run(createRouteAction({ path, documentId })); |
191 | | - if (result.success) { |
192 | | - const docName = documents.find((d) => d.id === documentId)?.name ?? ""; |
193 | | - setRoutes((prev) => [...prev, { id: result.data.routeId, path, documentId, documentName: docName }]); |
194 | | - } |
| 190 | + startTransition(async () => { |
| 191 | + const result = await runAction(createRouteAction({ path, documentId })); |
| 192 | + if (result.success) { |
| 193 | + const docName = documents.find((d) => d.id === documentId)?.name ?? ""; |
| 194 | + setRoutes((prev) => [...prev, { id: result.data.routeId, path, documentId, documentName: docName }]); |
| 195 | + } else { |
| 196 | + alert(result.error); |
| 197 | + } |
| 198 | + }); |
195 | 199 | } |
196 | 200 |
|
197 | | - async function handleUpdate(id: number, path: string, documentId: number) { |
198 | | - const result = await run(updateRouteAction({ id, path, documentId })); |
199 | | - if (result.success) { |
200 | | - const docName = documents.find((d) => d.id === documentId)?.name ?? ""; |
201 | | - setRoutes((prev) => prev.map((r) => (r.id === id ? { ...r, path, documentId, documentName: docName } : r))); |
202 | | - } |
| 201 | + function handleUpdate(id: number, path: string, documentId: number) { |
| 202 | + startTransition(async () => { |
| 203 | + const result = await runAction(updateRouteAction({ id, path, documentId })); |
| 204 | + if (result.success) { |
| 205 | + const docName = documents.find((d) => d.id === documentId)?.name ?? ""; |
| 206 | + setRoutes((prev) => prev.map((r) => (r.id === id ? { ...r, path, documentId, documentName: docName } : r))); |
| 207 | + } else { |
| 208 | + alert(result.error); |
| 209 | + } |
| 210 | + }); |
203 | 211 | } |
204 | 212 |
|
205 | | - async function handleDelete(route: RouteRow) { |
| 213 | + function handleDelete(route: RouteRow) { |
206 | 214 | if (!window.confirm(`Delete route "${route.path}"?`)) return; |
207 | | - const result = await run(deleteRouteAction({ id: route.id })); |
208 | | - if (result.success) { |
209 | | - setRoutes((prev) => prev.filter((r) => r.id !== route.id)); |
210 | | - } |
| 215 | + startTransition(async () => { |
| 216 | + const result = await runAction(deleteRouteAction({ id: route.id })); |
| 217 | + if (result.success) { |
| 218 | + setRoutes((prev) => prev.filter((r) => r.id !== route.id)); |
| 219 | + } else { |
| 220 | + alert(result.error); |
| 221 | + } |
| 222 | + }); |
211 | 223 | } |
212 | 224 |
|
213 | 225 | return ( |
|
0 commit comments