74 lines
1.6 KiB
TypeScript
74 lines
1.6 KiB
TypeScript
import { useMutation, useQuery, useQueryClient } from "@tanstack/vue-query";
|
|
import {
|
|
changePassword,
|
|
fetchSession,
|
|
fetchSetupState,
|
|
login,
|
|
logout,
|
|
setup,
|
|
} from "@/api/admin/session.ts";
|
|
import { qk } from "@/api/query-keys.ts";
|
|
import { useAdminSessionStore } from "@/stores/admin-session.ts";
|
|
|
|
export function useSetupState() {
|
|
return useQuery({
|
|
queryKey: qk.admin.setupState(),
|
|
queryFn: fetchSetupState,
|
|
staleTime: 60_000,
|
|
});
|
|
}
|
|
|
|
export function useSession() {
|
|
const store = useAdminSessionStore();
|
|
return useQuery({
|
|
queryKey: qk.admin.session(),
|
|
queryFn: async () => {
|
|
const data = await fetchSession();
|
|
store.signIn(data.username);
|
|
return data;
|
|
},
|
|
staleTime: 60_000,
|
|
retry: false,
|
|
});
|
|
}
|
|
|
|
export function useLogin() {
|
|
const store = useAdminSessionStore();
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: login,
|
|
onSuccess: (data) => {
|
|
store.signIn(data.username);
|
|
void qc.invalidateQueries({ queryKey: qk.admin.session() });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useSetup() {
|
|
const store = useAdminSessionStore();
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: setup,
|
|
onSuccess: (data) => {
|
|
store.signIn(data.username);
|
|
void qc.invalidateQueries({ queryKey: qk.admin.setupState() });
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useLogout() {
|
|
const store = useAdminSessionStore();
|
|
const qc = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: logout,
|
|
onSuccess: () => {
|
|
store.signOut();
|
|
qc.clear();
|
|
},
|
|
});
|
|
}
|
|
|
|
export function useChangePassword() {
|
|
return useMutation({ mutationFn: changePassword });
|
|
}
|