feat: add private media dashboard slice
This commit is contained in:
1 parent
8d4eae7ab5
commit
768470204b
8 files changed
+688
No files matched your search
@@ -0,0 +1,41 @@
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import { fetchMedia, fetchMediaSyncStatus, triggerMediaSync } from './api.js';
|
||||
|
||||
export const mediaQueryKeys = {
|
||||
items: ['dashboard', 'media'] as const,
|
||||
syncStatus: ['dashboard', 'media', 'sync-status'] as const,
|
||||
};
|
||||
|
||||
export function useMediaQuery() {
|
||||
return useQuery({ queryKey: mediaQueryKeys.items, queryFn: fetchMedia });
|
||||
}
|
||||
|
||||
export function useMediaSyncStatusQuery() {
|
||||
return useQuery({
|
||||
queryKey: mediaQueryKeys.syncStatus,
|
||||
queryFn: fetchMediaSyncStatus,
|
||||
refetchInterval(query) {
|
||||
return query.state.data?.isSyncing ? 1_000 : 15_000;
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useTriggerMediaSyncMutation() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn(isFull: boolean) {
|
||||
const syncRequest = triggerMediaSync(isFull);
|
||||
void queryClient.invalidateQueries({ queryKey: mediaQueryKeys.syncStatus });
|
||||
return syncRequest;
|
||||
},
|
||||
async onSuccess() {
|
||||
await Promise.all([
|
||||
queryClient.invalidateQueries({ queryKey: mediaQueryKeys.items }),
|
||||
queryClient.invalidateQueries({ queryKey: mediaQueryKeys.syncStatus }),
|
||||
]);
|
||||
},
|
||||
onError() {
|
||||
void queryClient.invalidateQueries({ queryKey: mediaQueryKeys.syncStatus });
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user