Fix(admin-ui): delete inventory item when variant is deleted (#3585)

This commit is contained in:
Philip Korsholm
2023-03-29 16:23:22 +02:00
committed by GitHub
parent 15a43c1cc0
commit 0d00903385
3 changed files with 56 additions and 12 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@medusajs/admin-ui": patch
---
fix(admin-ui): minor fixes for inventory items
@@ -1,26 +1,34 @@
import { Product, ProductVariant } from "@medusajs/medusa"
import OptionsProvider, { useOptionsContext } from "./options-provider" import OptionsProvider, { useOptionsContext } from "./options-provider"
import { Product, ProductVariant, VariantInventory } from "@medusajs/medusa"
import { useState } from "react"
import useEditProductActions from "../../../hooks/use-edit-product-actions"
import useToggleState from "../../../hooks/use-toggle-state"
import EditIcon from "../../fundamentals/icons/edit-icon"
import GearIcon from "../../fundamentals/icons/gear-icon"
import PlusIcon from "../../fundamentals/icons/plus-icon"
import { ActionType } from "../../molecules/actionables" import { ActionType } from "../../molecules/actionables"
import Section from "../../organisms/section"
import AddVariantModal from "./add-variant-modal" import AddVariantModal from "./add-variant-modal"
import EditIcon from "../../fundamentals/icons/edit-icon"
import EditVariantInventoryModal from "./edit-variant-inventory-modal" import EditVariantInventoryModal from "./edit-variant-inventory-modal"
import EditVariantModal from "./edit-variant-modal" import EditVariantModal from "./edit-variant-modal"
import EditVariantsModal from "./edit-variants-modal" import EditVariantsModal from "./edit-variants-modal"
import GearIcon from "../../fundamentals/icons/gear-icon"
import OptionsModal from "./options-modal" import OptionsModal from "./options-modal"
import PlusIcon from "../../fundamentals/icons/plus-icon"
import Section from "../../organisms/section"
import VariantsTable from "./table" import VariantsTable from "./table"
import useEditProductActions from "../../../hooks/use-edit-product-actions"
import { useFeatureFlag } from "../../../providers/feature-flag-provider"
import { adminInventoryItemsKeys, useMedusa } from "medusa-react"
import { useQueryClient } from "@tanstack/react-query"
import { useState } from "react"
import useToggleState from "../../../hooks/use-toggle-state"
type Props = { type Props = {
product: Product product: Product
} }
const ProductVariantsSection = ({ product }: Props) => { const ProductVariantsSection = ({ product }: Props) => {
const queryClient = useQueryClient()
const { client } = useMedusa()
const { isFeatureEnabled } = useFeatureFlag()
const [variantToEdit, setVariantToEdit] = useState< const [variantToEdit, setVariantToEdit] = useState<
| { | {
base: ProductVariant base: ProductVariant
@@ -71,8 +79,23 @@ const ProductVariantsSection = ({ product }: Props) => {
const { onDeleteVariant } = useEditProductActions(product.id) const { onDeleteVariant } = useEditProductActions(product.id)
const handleDeleteVariant = (variantId: string) => { const handleDeleteVariant = async (variantId: string) => {
onDeleteVariant(variantId) let variantInventory: VariantInventory | undefined
if (isFeatureEnabled("inventoryService")) {
const { variant } = await client.admin.variants.getInventory(variantId)
variantInventory = variant
}
onDeleteVariant(variantId, async () => {
if (
isFeatureEnabled("inventoryService") &&
variantInventory?.inventory[0]?.id
) {
await client.admin.inventoryItems.delete(
variantInventory.inventory[0].id
)
queryClient.invalidateQueries(adminInventoryItemsKeys.lists())
}
})
} }
const handleEditVariant = (variant: ProductVariant) => { const handleEditVariant = (variant: ProductVariant) => {
@@ -1,7 +1,7 @@
import { Column, useTable } from "react-table" import { Column, useTable } from "react-table"
import { ProductVariant } from "@medusajs/medusa" import { ProductVariant } from "@medusajs/medusa"
import { useMemo } from "react" import { useMemo, useState } from "react"
import { useFeatureFlag } from "../../../providers/feature-flag-provider" import { useFeatureFlag } from "../../../providers/feature-flag-provider"
import BuildingsIcon from "../../fundamentals/icons/buildings-icon" import BuildingsIcon from "../../fundamentals/icons/buildings-icon"
import DuplicateIcon from "../../fundamentals/icons/duplicate-icon" import DuplicateIcon from "../../fundamentals/icons/duplicate-icon"
@@ -9,6 +9,7 @@ import EditIcon from "../../fundamentals/icons/edit-icon"
import TrashIcon from "../../fundamentals/icons/trash-icon" import TrashIcon from "../../fundamentals/icons/trash-icon"
import Actionables from "../../molecules/actionables" import Actionables from "../../molecules/actionables"
import Table from "../../molecules/table" import Table from "../../molecules/table"
import DeletePrompt from "../delete-prompt"
type Props = { type Props = {
variants: ProductVariant[] variants: ProductVariant[]
@@ -87,6 +88,7 @@ const VariantsTable = ({ variants, actions }: Props) => {
const { isFeatureEnabled } = useFeatureFlag() const { isFeatureEnabled } = useFeatureFlag()
const hasInventoryService = isFeatureEnabled("inventoryService") const hasInventoryService = isFeatureEnabled("inventoryService")
const columns = useVariantsTableColumns(hasInventoryService) const columns = useVariantsTableColumns(hasInventoryService)
const [showDelete, setShowDelete] = useState(false)
const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
useTable({ useTable({
@@ -132,7 +134,7 @@ const VariantsTable = ({ variants, actions }: Props) => {
}, },
{ {
label: "Delete Variant", label: "Delete Variant",
onClick: () => deleteVariant(variant.id), onClick: () => setShowDelete(true),
icon: <TrashIcon size="20" />, icon: <TrashIcon size="20" />,
variant: "danger", variant: "danger",
}, },
@@ -177,6 +179,20 @@ const VariantsTable = ({ variants, actions }: Props) => {
<Table.Cell> <Table.Cell>
<div className="float-right"> <div className="float-right">
<Actionables forceDropdown actions={actionables} /> <Actionables forceDropdown actions={actionables} />
{showDelete && (
<DeletePrompt
onDelete={async () => deleteVariant(row.original.id)}
handleClose={() => setShowDelete(false)}
confirmText="Yes, delete"
heading="Delete variant"
text={`Are you sure you want to delete this variant? ${
isFeatureEnabled("inventoryService")
? " Note: Deleting the variant will also remove inventory items and levels"
: ""
}`}
successText={false}
/>
)}
</div> </div>
</Table.Cell> </Table.Cell>
</Table.Row> </Table.Row>