Files
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

48 lines
1.7 KiB
TypeScript
Executable File

import {useMutation} from '@tanstack/react-query';
import {BackendResponse} from '../../http/backend-response/backend-response';
import {useNavigate} from '../../utils/hooks/use-navigate';
import {apiClient, queryClient} from '../../http/query-client';
import {showHttpErrorToast} from '../../utils/http/show-http-error-toast';
import {useAppearanceEditorMode} from '../../admin/appearance/commands/use-appearance-editor-mode';
import {message} from '../../i18n/message';
import {useBootstrapData} from '../../core/bootstrap-data/bootstrap-data-context';
interface Response extends BackendResponse {
bootstrapData: string;
}
const appearanceMessage = "Can't logout while in appearance editor.";
export function useLogout() {
const navigate = useNavigate();
const {isAppearanceEditorActive} = useAppearanceEditorMode();
const {setBootstrapData} = useBootstrapData();
return useMutation({
mutationFn: () => (isAppearanceEditorActive ? noopLogout() : logout()),
onSuccess: response => {
// need to update bootstrap data in order for redirect to login page to work
setBootstrapData(response.bootstrapData);
queryClient.clear();
navigate('/login');
// need to clear query client and then set bootstrap data again immediately,
// because there's no way to clear everything except one in react query
queryClient.clear();
setBootstrapData(response.bootstrapData);
},
onError: err =>
showHttpErrorToast(
err,
isAppearanceEditorActive ? message(appearanceMessage) : undefined,
),
});
}
function logout(): Promise<Response> {
return apiClient.post('auth/logout').then(r => r.data);
}
function noopLogout() {
return Promise.reject(appearanceMessage);
}