mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-05 23:44:22 +00:00
Migrate useProfileSettings hook
This commit is contained in:
@@ -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,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
88
app/src/hooks/useProfileSettings.ts
Normal file
88
app/src/hooks/useProfileSettings.ts
Normal 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,
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user