mirror of
https://github.com/antebudimir/feishin.git
synced 2026-01-01 10:23:33 +00:00
Split key pagination in central handler
This commit is contained in:
parent
1cb0a1d72a
commit
6821735f65
4 changed files with 91 additions and 103 deletions
|
|
@ -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;
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue