feat(admin-ui): refresh products when a BatchJob is completed (#4840)

This commit is contained in:
Frane Polić
2023-08-25 07:34:48 +00:00
committed by GitHub
parent f07dc0384f
commit 0c7c2eeeab
12 changed files with 121 additions and 31 deletions
@@ -0,0 +1,42 @@
import React, { PropsWithChildren, useEffect } from "react"
import { adminProductKeys } from "medusa-react"
import { usePolling } from "./polling-provider"
import { queryClient } from "../constants/query-client"
import useNotification from "../hooks/use-notification"
/**
* Provider for refreshing product/pricing lists after batch jobs are complete
*/
export const ImportRefresh = ({ children }: PropsWithChildren) => {
const { batchJobs } = usePolling()
const notification = useNotification()
useEffect(() => {
if (!batchJobs) {
return
}
const productListQuery = Object.entries(
queryClient.getQueryCache().queriesMap
).find(([k, v]) => k.includes("admin_products"))?.[1]
if (productListQuery) {
const refreshedTimestamp = productListQuery.state.dataUpdatedAt
const completedJobs = batchJobs.filter(
(job) => job.status === "completed" && job.type === "product-import"
)
for (const job of completedJobs) {
const jobCompletedTimestamp = new Date(job.completed_at).getTime()
if (jobCompletedTimestamp > refreshedTimestamp) {
queryClient.invalidateQueries(adminProductKeys.all)
notification("Success", "Product import completed", "success")
}
}
}
}, [batchJobs])
return <>{children}</>
}