fix(admin-ui): inventory item deletion when removing product (#5727)

This commit is contained in:
Philip Korsholm
2023-11-27 13:42:55 +00:00
committed by GitHub
parent 2e6b110316
commit 3bcf08c0cb
3 changed files with 64 additions and 9 deletions

View File

@@ -1,17 +1,25 @@
import { Product } from "@medusajs/medusa"
import { useAdminDeleteProduct, useAdminUpdateProduct } from "medusa-react"
import { useNavigate } from "react-router-dom"
import { useTranslation } from "react-i18next"
import useImperativeDialog from "../../../hooks/use-imperative-dialog"
import useNotification from "../../../hooks/use-notification"
import { getErrorMessage } from "../../../utils/error-messages"
import {
adminInventoryItemsKeys,
useAdminDeleteProduct,
useAdminUpdateProduct,
useMedusa,
} from "medusa-react"
import { ActionType } from "../../molecules/actionables"
import DuplicateIcon from "../../fundamentals/icons/duplicate-icon"
import EditIcon from "../../fundamentals/icons/edit-icon"
import { Product } from "@medusajs/medusa"
import PublishIcon from "../../fundamentals/icons/publish-icon"
import TrashIcon from "../../fundamentals/icons/trash-icon"
import UnpublishIcon from "../../fundamentals/icons/unpublish-icon"
import { ActionType } from "../../molecules/actionables"
import { getErrorMessage } from "../../../utils/error-messages"
import useCopyProduct from "./use-copy-product"
import { useFeatureFlag } from "../../../providers/feature-flag-provider"
import useImperativeDialog from "../../../hooks/use-imperative-dialog"
import { useNavigate } from "react-router-dom"
import useNotification from "../../../hooks/use-notification"
import { useQueryClient } from "@tanstack/react-query"
import { useTranslation } from "react-i18next"
const useProductActions = (product: Product) => {
const { t } = useTranslation()
@@ -21,6 +29,9 @@ const useProductActions = (product: Product) => {
const copyProduct = useCopyProduct()
const deleteProduct = useAdminDeleteProduct(product?.id)
const updateProduct = useAdminUpdateProduct(product?.id)
const queryClient = useQueryClient()
const { isFeatureEnabled } = useFeatureFlag()
const { client } = useMedusa()
const handleDelete = async () => {
const shouldDelete = await dialog({
@@ -32,6 +43,22 @@ const useProductActions = (product: Product) => {
})
if (shouldDelete) {
if (isFeatureEnabled("inventoryService")) {
const { variants } = await client.admin.variants.list({
id: product.variants.map((v) => v.id),
expand: "inventory_items",
})
variants
.filter(({ inventory_items }) => !!inventory_items?.length)
.map(({ inventory_items }) =>
client.admin.inventoryItems.delete(
inventory_items![0].inventory_item_id
)
)
queryClient.invalidateQueries(adminInventoryItemsKeys.lists())
}
deleteProduct.mutate()
}
}