Split key pagination in central handler

This commit is contained in:
jeffvli 2023-07-20 01:55:49 -07:00
parent 1cb0a1d72a
commit 6821735f65
4 changed files with 91 additions and 103 deletions

View file

@ -20,14 +20,21 @@ import type {
} from './types';
export const splitPaginatedQuery = (key: any) => {
const { startIndex, limit, ...query } = key;
const { startIndex, limit, ...filter } = key;
if (startIndex === undefined || limit === undefined) {
return {
filter,
pagination: {
limit,
startIndex,
},
};
}
return {
pagination: {
limit,
startIndex,
},
query,
filter,
pagination: undefined,
};
};
@ -45,14 +52,12 @@ export const queryKeys: Record<
if (query) return [serverId, 'albumArtists', 'detail', query] as const;
return [serverId, 'albumArtists', 'detail'] as const;
},
list: (
serverId: string,
query?: Omit<AlbumArtistListQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && pagination)
return [serverId, 'albumArtists', 'list', query, pagination] as const;
if (query) return [serverId, 'albumArtists', 'list', query] as const;
list: (serverId: string, query?: AlbumArtistListQuery) => {
if (query) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'albumArtists', 'list', filter, pagination] as const;
}
return [serverId, 'albumArtists', 'list'] as const;
},
root: (serverId: string) => [serverId, 'albumArtists'] as const,
@ -64,13 +69,11 @@ export const queryKeys: Record<
albums: {
detail: (serverId: string, query?: AlbumDetailQuery) =>
[serverId, 'albums', 'detail', query] as const,
list: (
serverId: string,
query?: Omit<AlbumListQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && pagination)
return [serverId, 'albums', 'list', query, pagination] as const;
list: (serverId: string, query?: AlbumListQuery) => {
if (query) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'albums', 'list', filter, pagination] as const;
}
if (query) return [serverId, 'albums', 'list', query] as const;
return [serverId, 'albums', 'list'] as const;
},
@ -80,14 +83,11 @@ export const queryKeys: Record<
[serverId, 'albums', 'songs', query] as const,
},
artists: {
list: (
serverId: string,
query?: Omit<ArtistListQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && pagination)
return [serverId, 'artists', 'list', query, pagination] as const;
if (query) return [serverId, 'artists', 'list', query] as const;
list: (serverId: string, query?: ArtistListQuery) => {
if (query) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'artists', 'list', filter, pagination] as const;
}
return [serverId, 'artists', 'list'] as const;
},
root: (serverId: string) => [serverId, 'artists'] as const,
@ -100,26 +100,19 @@ export const queryKeys: Record<
list: (serverId: string) => [serverId, 'musicFolders', 'list'] as const,
},
playlists: {
detail: (
serverId: string,
id?: string,
query?: Omit<PlaylistDetailQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && pagination)
return [serverId, 'playlists', id, 'detail', query, pagination] as const;
if (query) return [serverId, 'playlists', id, 'detail', query] as const;
detail: (serverId: string, id?: string, query?: PlaylistDetailQuery) => {
if (query) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'playlists', id, 'detail', filter, pagination] as const;
}
if (id) return [serverId, 'playlists', id, 'detail'] as const;
return [serverId, 'playlists', 'detail'] as const;
},
detailSongList: (
serverId: string,
id: string,
query?: Omit<PlaylistSongListQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && pagination)
return [serverId, 'playlists', id, 'detailSongList', query, pagination] as const;
detailSongList: (serverId: string, id: string, query?: PlaylistSongListQuery) => {
if (query) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'playlists', id, 'detailSongList', filter, pagination] as const;
}
if (query && id) return [serverId, 'playlists', id, 'detailSongList', query] as const;
if (id) return [serverId, 'playlists', id, 'detailSongList'] as const;
return [serverId, 'playlists', 'detailSongList'] as const;
@ -129,15 +122,11 @@ export const queryKeys: Record<
return [serverId, 'playlists', 'list'] as const;
},
root: (serverId: string) => [serverId, 'playlists'] as const,
songList: (
serverId: string,
id?: string,
query?: Omit<PlaylistSongListQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && id && pagination)
return [serverId, 'playlists', id, 'songList', query, pagination] as const;
if (query && id) return [serverId, 'playlists', id, 'songList', query] as const;
songList: (serverId: string, id?: string, query?: PlaylistSongListQuery) => {
if (query && id) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'playlists', id, 'songList', filter, pagination] as const;
}
if (id) return [serverId, 'playlists', id, 'songList'] as const;
return [serverId, 'playlists', 'songList'] as const;
},
@ -157,12 +146,11 @@ export const queryKeys: Record<
if (query) return [serverId, 'songs', 'detail', query] as const;
return [serverId, 'songs', 'detail'] as const;
},
list: (
serverId: string,
query?: Omit<SongListQuery, 'startIndex' | 'limit'>,
pagination?: QueryPagination,
) => {
if (query && pagination) return [serverId, 'songs', 'list', query, pagination] as const;
list: (serverId: string, query?: SongListQuery) => {
if (query) {
const { pagination, filter } = splitPaginatedQuery(query);
return [serverId, 'songs', 'list', filter, pagination] as const;
}
if (query) return [serverId, 'songs', 'list', query] as const;
return [serverId, 'songs', 'list'] as const;
},