feat: enhance project and mentor management features
- Updated MentorProjectCard to provide more detailed success/error messages upon archiving and completing projects. - Adjusted layout for certificate generation to improve visual alignment. - Introduced resolveErrorMessage utility to standardize error message handling across the application. - Enhanced customToast functionality to handle hook failures more gracefully. - Refactored useCertificates hook to return structured responses for certificate claims and generation. - Updated useMentors hook to improve error handling and response structure for mentor operations. - Improved useNotification hook to return structured responses for marking notifications as read. - Refactored useProjects hook to provide structured responses for project creation, updates, and member assignments. - Enhanced useTasks hook to return structured responses for task creation, updates, and deletions. - Updated services to return structured responses with messages for various API calls related to certificates, mentors, notifications, projects, tasks, and user management. - Moved mentor-related types to a dedicated user.types file for better organization.
This commit is contained in:
@@ -53,6 +53,16 @@ export const customToast = {
|
||||
const loadingId = toast.loading(messages.loading);
|
||||
try {
|
||||
const data = await promise;
|
||||
const isHookFailure = typeof data === 'object' && data !== null && 'success' in data && (data as { success?: boolean }).success === false;
|
||||
|
||||
if (isHookFailure) {
|
||||
toast.dismiss(loadingId);
|
||||
const result = data as { success: boolean; message?: string };
|
||||
const { title, description } = messages.error(result);
|
||||
customToast.error(title, description ?? result.message);
|
||||
throw new Error(result.message ?? 'Operasi gagal.');
|
||||
}
|
||||
|
||||
toast.dismiss(loadingId);
|
||||
const { title, description } = messages.success(data);
|
||||
customToast.success(title, description);
|
||||
@@ -60,7 +70,7 @@ export const customToast = {
|
||||
} catch (err) {
|
||||
toast.dismiss(loadingId);
|
||||
const { title, description } = messages.error(err);
|
||||
customToast.error(title, description);
|
||||
customToast.error(title, description ?? (err as Error)?.message);
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user