feat: add settings and access dashboard slice
This commit is contained in:
1 parent
dcf2a1200c
commit
79de6aa2a1
11 files changed
+1066
No files matched your search
@@ -0,0 +1,45 @@
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
import type { ConfigResponse } from '../../../../../packages/api-contracts/src/index.js';
|
||||
import { fetchLoginInfo, fetchLoginStatus, fetchSettings, saveSettings, startLogin } from './settings-api.js';
|
||||
|
||||
export const settingsQueryKeys = {
|
||||
config: ['dashboard', 'config'] as const,
|
||||
loginInfo: ['dashboard', 'login', 'info'] as const,
|
||||
loginStatus: ['dashboard', 'login', 'status'] as const,
|
||||
};
|
||||
|
||||
export function useSettingsQuery() {
|
||||
return useQuery({ queryKey: settingsQueryKeys.config, queryFn: fetchSettings });
|
||||
}
|
||||
|
||||
export function useSaveSettingsMutation() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: saveSettings,
|
||||
onSuccess(response) {
|
||||
queryClient.setQueryData<ConfigResponse>(settingsQueryKeys.config, (current) => ({
|
||||
...response.config,
|
||||
subreddits: response.subreddits,
|
||||
tones: current?.tones ?? [],
|
||||
}));
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useLoginInfoQuery() {
|
||||
return useQuery({ queryKey: settingsQueryKeys.loginInfo, queryFn: fetchLoginInfo });
|
||||
}
|
||||
|
||||
export function useLoginStatusQuery() {
|
||||
return useQuery({ queryKey: settingsQueryKeys.loginStatus, queryFn: fetchLoginStatus });
|
||||
}
|
||||
|
||||
export function useStartLoginMutation() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: startLogin,
|
||||
onSuccess() {
|
||||
void queryClient.invalidateQueries({ queryKey: settingsQueryKeys.loginStatus });
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user