frontend_nyla/src/hooks/useCurrentUser.ts
2025-05-14 12:39:45 +02:00

60 lines
No EOL
1.6 KiB
TypeScript

import { useState, useEffect } from 'react';
import api from '../api';
interface CurrentUser {
id: number;
username: string;
fullName: string;
email: string;
privilege: string;
mandateId: number;
}
interface UseCurrentUserReturn {
user: CurrentUser | null;
error: string | null;
isLoading: boolean;
refetch: () => Promise<void>;
}
export function useCurrentUser(): UseCurrentUserReturn {
const [user, setUser] = useState<CurrentUser | null>(null);
const [error, setError] = useState<string | null>(null);
const [isLoading, setIsLoading] = useState(false);
const fetchCurrentUser = async () => {
setIsLoading(true);
setError(null);
try {
const response = await api.get('/api/user/me');
setUser(response.data);
} catch (error: any) {
let errorMessage = 'Fehler beim Abrufen des Benutzerprofils';
if (error.response) {
errorMessage = error.response.data?.detail || error.response.data?.message || errorMessage;
} else if (error.request) {
errorMessage = 'Keine Antwort vom Server erhalten';
} else {
errorMessage = error.message || errorMessage;
}
setError(errorMessage);
setUser(null);
} finally {
setIsLoading(false);
}
};
useEffect(() => {
fetchCurrentUser();
}, []);
return {
user,
error,
isLoading,
refetch: fetchCurrentUser
};
}