Migrate useProfileSettings hook

This commit is contained in:
2025-05-11 15:36:30 +02:00
parent c6d46df7a0
commit 5fcd24db3e
2 changed files with 88 additions and 71 deletions

View File

@@ -1,71 +0,0 @@
import { useState, useCallback } from 'react';
import { notifications } from '@mantine/notifications';
import { updateProfile, deleteProfile } from '../api/git';
export function useProfileSettings() {
const [loading, setLoading] = useState(false);
const handleProfileUpdate = useCallback(async (updates) => {
setLoading(true);
try {
const updatedUser = await updateProfile(updates);
notifications.show({
title: 'Success',
message: 'Profile updated successfully',
color: 'green',
});
return { success: true, user: updatedUser };
} catch (error) {
let errorMessage = 'Failed to update profile';
if (error.message.includes('password')) {
errorMessage = 'Current password is incorrect';
} else if (error.message.includes('email')) {
errorMessage = 'Email is already in use';
}
notifications.show({
title: 'Error',
message: errorMessage,
color: 'red',
});
return { success: false, error: error.message };
} finally {
setLoading(false);
}
}, []);
const handleAccountDeletion = useCallback(async (password) => {
setLoading(true);
try {
await deleteProfile(password);
notifications.show({
title: 'Success',
message: 'Account deleted successfully',
color: 'green',
});
return { success: true };
} catch (error) {
notifications.show({
title: 'Error',
message: error.message || 'Failed to delete account',
color: 'red',
});
return { success: false, error: error.message };
} finally {
setLoading(false);
}
}, []);
return {
loading,
updateProfile: handleProfileUpdate,
deleteAccount: handleAccountDeletion,
};
}

View File

@@ -0,0 +1,88 @@
import { useState, useCallback } from 'react';
import { notifications } from '@mantine/notifications';
import { updateProfile, deleteUser } from '../api/user';
import { User } from '../types/authApi';
import { UpdateProfileRequest } from '../types/userApi';
interface UseProfileSettingsResult {
loading: boolean;
updateProfile: (updates: UpdateProfileRequest) => Promise<User | null>;
deleteAccount: (password: string) => Promise<boolean>;
}
export function useProfileSettings(): UseProfileSettingsResult {
const [loading, setLoading] = useState<boolean>(false);
const handleProfileUpdate = useCallback(
async (updates: UpdateProfileRequest): Promise<User | null> => {
setLoading(true);
try {
const updatedUser = await updateProfile(updates);
notifications.show({
title: 'Success',
message: 'Profile updated successfully',
color: 'green',
});
return updatedUser;
} catch (error) {
let errorMessage = 'Failed to update profile';
if (error instanceof Error) {
if (error.message.includes('password')) {
errorMessage = 'Current password is incorrect';
} else if (error.message.includes('email')) {
errorMessage = 'Email is already in use';
}
}
notifications.show({
title: 'Error',
message: errorMessage,
color: 'red',
});
return null;
} finally {
setLoading(false);
}
},
[]
);
const handleAccountDeletion = useCallback(
async (password: string): Promise<boolean> => {
setLoading(true);
try {
await deleteUser(password);
notifications.show({
title: 'Success',
message: 'Account deleted successfully',
color: 'green',
});
return true;
} catch (error) {
notifications.show({
title: 'Error',
message:
error instanceof Error ? error.message : 'Failed to delete account',
color: 'red',
});
return false;
} finally {
setLoading(false);
}
},
[]
);
return {
loading,
updateProfile: handleProfileUpdate,
deleteAccount: handleAccountDeletion,
};
}