pmtool / src /utils /assetRequestNotifications.ts
devarshia5's picture
Upload 487 files
d97b8f9 verified
Raw
History Blame Contribute Delete
4.56 kB
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);
};