From ce7424219c4b5817388d89ff2dc1c2cbed0a2b2b Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Wed, 29 Apr 2026 20:04:51 -0400 Subject: [PATCH] feat(web): adminRequests cache key + staleTime polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - qk.adminRequests defaults to status='all' when no filter is set; the unfiltered endpoint returns every status, so caching it as 'pending' was a latent mismatch. - 60s staleTime on lidarrConfig + myRequests — both are session-stable enough that refetching on every consumer-page mount produced needless flicker. --- web/src/lib/api/admin.test.ts | 7 +++++-- web/src/lib/api/admin.ts | 3 ++- web/src/lib/api/queries.ts | 2 +- web/src/lib/api/requests.ts | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/web/src/lib/api/admin.test.ts b/web/src/lib/api/admin.test.ts index 90e76954..5ccd6329 100644 --- a/web/src/lib/api/admin.test.ts +++ b/web/src/lib/api/admin.test.ts @@ -215,8 +215,11 @@ describe('qk admin keys', () => { test('lidarrRootFolders key', () => { expect(qk.lidarrRootFolders()).toEqual(['lidarrRootFolders']); }); - test('adminRequests key defaults to pending when status omitted', () => { - expect(qk.adminRequests()).toEqual(['adminRequests', { status: 'pending' }]); + test('adminRequests key uses "all" when status omitted', () => { + // listAdminRequests sends no status param when called without one (returns + // every status), so the cache key must distinguish that from any specific + // status — otherwise an unfiltered call would falsely cache as `pending`. + expect(qk.adminRequests()).toEqual(['adminRequests', { status: 'all' }]); }); test('adminRequests key includes the status filter', () => { expect(qk.adminRequests('approved')).toEqual([ diff --git a/web/src/lib/api/admin.ts b/web/src/lib/api/admin.ts index bcf228f0..9ec0fc0e 100644 --- a/web/src/lib/api/admin.ts +++ b/web/src/lib/api/admin.ts @@ -72,7 +72,8 @@ export async function rejectRequest( export function createLidarrConfigQuery() { return createQuery({ queryKey: qk.lidarrConfig(), - queryFn: getLidarrConfig + queryFn: getLidarrConfig, + staleTime: 60_000 }); } diff --git a/web/src/lib/api/queries.ts b/web/src/lib/api/queries.ts index 973bd51a..3efeb35c 100644 --- a/web/src/lib/api/queries.ts +++ b/web/src/lib/api/queries.ts @@ -27,7 +27,7 @@ export const qk = { lidarrQualityProfiles: () => ['lidarrQualityProfiles'] as const, lidarrRootFolders: () => ['lidarrRootFolders'] as const, adminRequests: (status?: string) => - ['adminRequests', { status: status ?? 'pending' }] as const, + ['adminRequests', { status: status ?? 'all' }] as const, }; export function createArtistsQuery(sort: ArtistSort) { diff --git a/web/src/lib/api/requests.ts b/web/src/lib/api/requests.ts index ad01ecd5..0e601753 100644 --- a/web/src/lib/api/requests.ts +++ b/web/src/lib/api/requests.ts @@ -62,6 +62,7 @@ export async function cancelRequest(id: string): Promise { export function createMyRequestsQuery() { return createQuery({ queryKey: qk.myRequests(), - queryFn: listMyRequests + queryFn: listMyRequests, + staleTime: 60_000 }); }