Spaces:
Sleeping
Sleeping
| 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); | |
| }; | |