From b7de679e9b665368074d406ac5d9b3fbb0187a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frane=20Poli=C4=87?= <16856471+fPolic@users.noreply.github.com> Date: Mon, 28 Aug 2023 20:21:42 +0200 Subject: [PATCH] feat(admin-ui): batch job completed notification (#4886) --- .changeset/hot-tools-breathe.md | 5 +++++ .../ui/src/providers/import-refresh.tsx | 21 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 .changeset/hot-tools-breathe.md diff --git a/.changeset/hot-tools-breathe.md b/.changeset/hot-tools-breathe.md new file mode 100644 index 0000000000..8ee18d3484 --- /dev/null +++ b/.changeset/hot-tools-breathe.md @@ -0,0 +1,5 @@ +--- +"@medusajs/admin-ui": patch +--- + +feat(admin-ui): batch job completed notification diff --git a/packages/admin-ui/ui/src/providers/import-refresh.tsx b/packages/admin-ui/ui/src/providers/import-refresh.tsx index 8d57705aa4..2263194535 100644 --- a/packages/admin-ui/ui/src/providers/import-refresh.tsx +++ b/packages/admin-ui/ui/src/providers/import-refresh.tsx @@ -4,6 +4,9 @@ import { adminProductKeys } from "medusa-react" import { usePolling } from "./polling-provider" import { queryClient } from "../constants/query-client" import useNotification from "../hooks/use-notification" +import { capitalize } from "lodash" + +let lastDisplayedNotificationAt = Date.now() /** * Provider for refreshing product/pricing lists after batch jobs are complete @@ -25,14 +28,26 @@ export const ImportRefresh = ({ children }: PropsWithChildren) => { const refreshedTimestamp = productListQuery.state.dataUpdatedAt const completedJobs = batchJobs.filter( - (job) => job.status === "completed" && job.type === "product-import" + (job) => job.status === "completed" ) for (const job of completedJobs) { const jobCompletedTimestamp = new Date(job.completed_at).getTime() - if (jobCompletedTimestamp > refreshedTimestamp) { + + if (jobCompletedTimestamp > lastDisplayedNotificationAt) { + notification( + "Success", + capitalize(`${job.type.split("-").join(" ")} batch job completed`), + "success" + ) + lastDisplayedNotificationAt = Date.now() + } + + if ( + job.type === "product-import" && + jobCompletedTimestamp > refreshedTimestamp + ) { queryClient.invalidateQueries(adminProductKeys.all) - notification("Success", "Product import completed", "success") } } }