feat: keep the mailbox imports menu live and self-explaining (deferred rather than dropped progress events, a five-second refresh while an import runs, each import's state and what it waits on in words, a badge for imports that need you, and an × that hides an import for the workspace through POST /emails/imports/:id/dismiss with migration 000211, stopping a running one first), show the vendor's own status and the Microsoft and Google time expectations on rows being authorized, record a vendor row's mail host so it gets its provider icon and a working Sign in, drop the Fix button from rows the vendor is authorizing, and count warming mailboxes rather than connected ones in the pool banner, refreshed when mailboxes change

This commit is contained in:
Matthew Meszaros
2026-09-24 17:46:46 +02:00
parent c1f2f31322
commit 06f4a270cc
21 changed files with 371 additions and 84 deletions
+20
View File
@@ -280,6 +280,26 @@ func (h *Handler) CancelMailboxImport(c *gin.Context) {
c.JSON(http.StatusOK, imp)
}
// DismissMailboxImport is POST /emails/imports/:id/dismiss: hides the import
// from the recent list, stopping it first when it is still running. A repeat
// changes nothing, so it needs no Idempotency-Key.
func (h *Handler) DismissMailboxImport(c *gin.Context) {
orgID, id, ok := importID(c)
if !ok {
return
}
userID, err := middleware.GetUserUUID(c)
if err != nil {
errx.Handle(c, errx.ErrUser)
return
}
if xerr := h.MailboxImportService.Dismiss(c.Request.Context(), orgID, userID, id); xerr != nil {
errx.Handle(c, xerr)
return
}
c.Status(http.StatusNoContent)
}
// DownloadMailboxImportFailures is GET /emails/imports/:id/failed.csv.
func (h *Handler) DownloadMailboxImportFailures(c *gin.Context) {
orgID, id, ok := importID(c)