fix: skip retries on 404 for single-resource queries
Prevents 10-second loading skeleton when navigating to non-existent threads, setups, or items. Shows error/not-found state immediately. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,13 @@
|
|||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import type { CreateItem } from "../../shared/types";
|
import type { CreateItem } from "../../shared/types";
|
||||||
import { apiDelete, apiGet, apiPost, apiPut, apiUpload } from "../lib/api";
|
import {
|
||||||
|
ApiError,
|
||||||
|
apiDelete,
|
||||||
|
apiGet,
|
||||||
|
apiPost,
|
||||||
|
apiPut,
|
||||||
|
apiUpload,
|
||||||
|
} from "../lib/api";
|
||||||
|
|
||||||
interface Item {
|
interface Item {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -45,6 +52,8 @@ export function useItem(id: number | null) {
|
|||||||
queryKey: ["items", id],
|
queryKey: ["items", id],
|
||||||
queryFn: () => apiGet<ItemWithCategory>(`/api/items/${id}`),
|
queryFn: () => apiGet<ItemWithCategory>(`/api/items/${id}`),
|
||||||
enabled: id != null,
|
enabled: id != null,
|
||||||
|
retry: (count, error) =>
|
||||||
|
error instanceof ApiError && error.status === 404 ? false : count < 3,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { apiDelete, apiGet, apiPatch, apiPost, apiPut } from "../lib/api";
|
import {
|
||||||
|
ApiError,
|
||||||
|
apiDelete,
|
||||||
|
apiGet,
|
||||||
|
apiPatch,
|
||||||
|
apiPost,
|
||||||
|
apiPut,
|
||||||
|
} from "../lib/api";
|
||||||
|
|
||||||
interface SetupListItem {
|
interface SetupListItem {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -50,6 +57,8 @@ export function useSetup(setupId: number | null) {
|
|||||||
queryKey: ["setups", setupId],
|
queryKey: ["setups", setupId],
|
||||||
queryFn: () => apiGet<SetupWithItems>(`/api/setups/${setupId}`),
|
queryFn: () => apiGet<SetupWithItems>(`/api/setups/${setupId}`),
|
||||||
enabled: setupId != null,
|
enabled: setupId != null,
|
||||||
|
retry: (count, error) =>
|
||||||
|
error instanceof ApiError && error.status === 404 ? false : count < 3,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
||||||
import { apiDelete, apiGet, apiPost, apiPut } from "../lib/api";
|
import { ApiError, apiDelete, apiGet, apiPost, apiPut } from "../lib/api";
|
||||||
|
|
||||||
interface ThreadListItem {
|
interface ThreadListItem {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -61,6 +61,8 @@ export function useThread(threadId: number | null) {
|
|||||||
queryKey: ["threads", threadId],
|
queryKey: ["threads", threadId],
|
||||||
queryFn: () => apiGet<ThreadWithCandidates>(`/api/threads/${threadId}`),
|
queryFn: () => apiGet<ThreadWithCandidates>(`/api/threads/${threadId}`),
|
||||||
enabled: threadId != null,
|
enabled: threadId != null,
|
||||||
|
retry: (count, error) =>
|
||||||
|
error instanceof ApiError && error.status === 404 ? false : count < 3,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class ApiError extends Error {
|
export class ApiError extends Error {
|
||||||
constructor(
|
constructor(
|
||||||
message: string,
|
message: string,
|
||||||
public status: number,
|
public status: number,
|
||||||
|
|||||||
Reference in New Issue
Block a user