Spaces:
Sleeping
Sleeping
File size: 4,564 Bytes
d97b8f9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | import { toast } from 'sonner';
import { AssetRequest } from '@/types/asset-request';
/**
* Notification utility for asset request events
* Provides toast notifications for immediate feedback on asset request actions
*/
/**
* Show notification when an asset request is submitted
* @param request - The submitted asset request
*/
export const notifyRequestSubmitted = (request: AssetRequest) => {
toast.success('Asset Request Submitted', {
description: `Your request for ${request.requestedAssets.length} item(s) has been submitted successfully. Request ID: ${request.requestID}`,
duration: 5000,
});
};
/**
* Show notification to admins when a new request is received
* This would typically be called in a polling/websocket context
* @param request - The new asset request
*/
export const notifyAdminNewRequest = (request: AssetRequest) => {
toast.info('New Asset Request', {
description: `${request.employeeName} has submitted a new asset request. Request ID: ${request.requestID}`,
duration: 7000,
});
};
/**
* Show notification when an asset request is approved
* @param request - The approved asset request
*/
export const notifyRequestApproved = (request: AssetRequest) => {
const adminComment = request.adminComments
? ` - ${request.adminComments}`
: '';
toast.success('Asset Request Approved', {
description: `Your asset request #${request.requestID} has been approved by ${request.reviewerName || 'an administrator'}${adminComment}`,
duration: 7000,
});
};
/**
* Show notification when an asset request is rejected
* @param request - The rejected asset request
*/
export const notifyRequestRejected = (request: AssetRequest) => {
const adminComment = request.adminComments
? ` Reason: ${request.adminComments}`
: '';
toast.error('Asset Request Rejected', {
description: `Your asset request #${request.requestID} has been rejected by ${request.reviewerName || 'an administrator'}.${adminComment}`,
duration: 10000,
});
};
/**
* Show notification when assets are assigned to a request
* @param request - The asset request with assigned assets
*/
export const notifyAssetsAssigned = (request: AssetRequest) => {
const assetTypes = request.requestedAssets
.map(item => `${item.quantity}x ${item.assetType}`)
.join(', ');
toast.success('Assets Assigned', {
description: `Assets have been assigned to your request #${request.requestID}: ${assetTypes}. Assigned by ${request.assignerName || 'an administrator'}.`,
duration: 10000,
});
};
/**
* Show notification when an admin approves a request (for admin feedback)
* @param request - The approved asset request
*/
export const notifyAdminApprovalSuccess = (request: AssetRequest) => {
toast.success('Request Approved', {
description: `Asset request #${request.requestID} for ${request.employeeName} has been approved successfully.`,
duration: 5000,
});
};
/**
* Show notification when an admin rejects a request (for admin feedback)
* @param request - The rejected asset request
*/
export const notifyAdminRejectionSuccess = (request: AssetRequest) => {
toast.success('Request Rejected', {
description: `Asset request #${request.requestID} for ${request.employeeName} has been rejected.`,
duration: 5000,
});
};
/**
* Show notification when an admin assigns assets (for admin feedback)
* @param request - The asset request with assigned assets
*/
export const notifyAdminAssignmentSuccess = (request: AssetRequest) => {
toast.success('Assets Assigned', {
description: `Assets have been successfully assigned to ${request.employeeName} for request #${request.requestID}.`,
duration: 5000,
});
};
/**
* Show error notification for failed operations
* @param operation - The operation that failed
* @param error - The error message
*/
export const notifyError = (operation: string, error: string) => {
toast.error(`${operation} Failed`, {
description: error,
duration: 7000,
});
};
/**
* Show loading notification for async operations
* @param message - The loading message
* @returns Toast ID for dismissal
*/
export const notifyLoading = (message: string) => {
return toast.loading(message);
};
/**
* Dismiss a notification by ID
* @param toastId - The toast ID to dismiss
*/
export const dismissNotification = (toastId: string | number) => {
toast.dismiss(toastId);
};
|