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);
};