mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
fix: add fallback icons for notifications (#17013)
Related: https://github.com/coder/internal/issues/522
This commit is contained in:
@ -16,6 +16,7 @@ import (
|
||||
"github.com/coder/coder/v2/coderd/database/dbtime"
|
||||
"github.com/coder/coder/v2/coderd/httpapi"
|
||||
"github.com/coder/coder/v2/coderd/httpmw"
|
||||
"github.com/coder/coder/v2/coderd/notifications"
|
||||
"github.com/coder/coder/v2/coderd/pubsub"
|
||||
markdown "github.com/coder/coder/v2/coderd/render"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
@ -28,9 +29,51 @@ const (
|
||||
notificationFormatPlaintext = "plaintext"
|
||||
)
|
||||
|
||||
var fallbackIcons = map[uuid.UUID]string{
|
||||
// workspace related notifications
|
||||
notifications.TemplateWorkspaceCreated: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceManuallyUpdated: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceDeleted: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceAutobuildFailed: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceDormant: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceAutoUpdated: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceMarkedForDeletion: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceManualBuildFailed: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceOutOfMemory: codersdk.FallbackIconWorkspace,
|
||||
notifications.TemplateWorkspaceOutOfDisk: codersdk.FallbackIconWorkspace,
|
||||
|
||||
// account related notifications
|
||||
notifications.TemplateUserAccountCreated: codersdk.FallbackIconAccount,
|
||||
notifications.TemplateUserAccountDeleted: codersdk.FallbackIconAccount,
|
||||
notifications.TemplateUserAccountSuspended: codersdk.FallbackIconAccount,
|
||||
notifications.TemplateUserAccountActivated: codersdk.FallbackIconAccount,
|
||||
notifications.TemplateYourAccountSuspended: codersdk.FallbackIconAccount,
|
||||
notifications.TemplateYourAccountActivated: codersdk.FallbackIconAccount,
|
||||
notifications.TemplateUserRequestedOneTimePasscode: codersdk.FallbackIconAccount,
|
||||
|
||||
// template related notifications
|
||||
notifications.TemplateTemplateDeleted: codersdk.FallbackIconTemplate,
|
||||
notifications.TemplateTemplateDeprecated: codersdk.FallbackIconTemplate,
|
||||
notifications.TemplateWorkspaceBuildsFailedReport: codersdk.FallbackIconTemplate,
|
||||
}
|
||||
|
||||
func ensureNotificationIcon(notif codersdk.InboxNotification) codersdk.InboxNotification {
|
||||
if notif.Icon != "" {
|
||||
return notif
|
||||
}
|
||||
|
||||
fallbackIcon, ok := fallbackIcons[notif.TemplateID]
|
||||
if !ok {
|
||||
fallbackIcon = codersdk.FallbackIconOther
|
||||
}
|
||||
|
||||
notif.Icon = fallbackIcon
|
||||
return notif
|
||||
}
|
||||
|
||||
// convertInboxNotificationResponse works as a util function to transform a database.InboxNotification to codersdk.InboxNotification
|
||||
func convertInboxNotificationResponse(ctx context.Context, logger slog.Logger, notif database.InboxNotification) codersdk.InboxNotification {
|
||||
return codersdk.InboxNotification{
|
||||
convertedNotif := codersdk.InboxNotification{
|
||||
ID: notif.ID,
|
||||
UserID: notif.UserID,
|
||||
TemplateID: notif.TemplateID,
|
||||
@ -54,6 +97,8 @@ func convertInboxNotificationResponse(ctx context.Context, logger slog.Logger, n
|
||||
}(),
|
||||
CreatedAt: notif.CreatedAt,
|
||||
}
|
||||
|
||||
return ensureNotificationIcon(convertedNotif)
|
||||
}
|
||||
|
||||
// watchInboxNotifications watches for new inbox notifications and sends them to the client.
|
||||
@ -147,7 +192,7 @@ func (api *API) watchInboxNotifications(rw http.ResponseWriter, r *http.Request)
|
||||
|
||||
// keep a safe guard in case of latency to push notifications through websocket
|
||||
select {
|
||||
case notificationCh <- payload.InboxNotification:
|
||||
case notificationCh <- ensureNotificationIcon(payload.InboxNotification):
|
||||
default:
|
||||
api.Logger.Error(ctx, "failed to push consumed notification into websocket handler, check latency")
|
||||
}
|
||||
|
Reference in New Issue
Block a user