diff --git a/.changeset/healthy-geese-worry.md b/.changeset/healthy-geese-worry.md new file mode 100644 index 0000000000..3592f68d59 --- /dev/null +++ b/.changeset/healthy-geese-worry.md @@ -0,0 +1,5 @@ +--- +"@medusajs/admin-ui": patch +--- + +fix(admin-ui): fix bug with create fulfillment and a couple of other minor tweaks diff --git a/packages/admin-ui/ui/src/components/forms/product/variant-form/variant-stock-form/index.tsx b/packages/admin-ui/ui/src/components/forms/product/variant-form/variant-stock-form/index.tsx index bf89f2d1bf..5d3b1a37f0 100644 --- a/packages/admin-ui/ui/src/components/forms/product/variant-form/variant-stock-form/index.tsx +++ b/packages/admin-ui/ui/src/components/forms/product/variant-form/variant-stock-form/index.tsx @@ -15,7 +15,6 @@ import clsx from "clsx" import { sum } from "lodash" import { useAdminStockLocations } from "medusa-react" import { useFeatureFlag } from "../../../../../providers/feature-flag-provider" -// import { InventoryLevelDTO, StockLocationDTO } from "@medusajs/medusa" export type VariantStockFormType = { manage_inventory?: boolean diff --git a/packages/admin-ui/ui/src/components/forms/product/variant-inventory-form/variant-stock-form/index.tsx b/packages/admin-ui/ui/src/components/forms/product/variant-inventory-form/variant-stock-form/index.tsx index e5b1692bc8..66fd5da831 100644 --- a/packages/admin-ui/ui/src/components/forms/product/variant-inventory-form/variant-stock-form/index.tsx +++ b/packages/admin-ui/ui/src/components/forms/product/variant-inventory-form/variant-stock-form/index.tsx @@ -38,7 +38,7 @@ const VariantStockForm = ({ form, locationLevels }: Props) => { const { stock_locations: locations, isLoading } = useAdminStockLocations() const locationsMap = useMemo(() => { - if (isLoading) { + if (isLoading || !locations) { return new Map() } diff --git a/packages/admin-ui/ui/src/domain/orders/details/allocations/allocate-items-modal.tsx b/packages/admin-ui/ui/src/domain/orders/details/allocations/allocate-items-modal.tsx index 77006e603e..f101f966f0 100644 --- a/packages/admin-ui/ui/src/domain/orders/details/allocations/allocate-items-modal.tsx +++ b/packages/admin-ui/ui/src/domain/orders/details/allocations/allocate-items-modal.tsx @@ -222,7 +222,7 @@ export const AllocationLineItem: React.FC<{ form.setValue(path("line_item_id"), item.id) useEffect(() => { - if (variant?.inventory) { + if (variant?.inventory?.length) { form.setValue(path("inventory_item_id"), variant.inventory[0].id) } }, [variant, form, path]) @@ -232,12 +232,14 @@ export const AllocationLineItem: React.FC<{ return {} } const { inventory } = variant - const locationInventory = inventory[0].location_levels?.find( + const locationInventory = inventory?.[0]?.location_levels?.find( (inv) => inv.location_id === locationId ) + if (!locationInventory) { return {} } + return { availableQuantity: locationInventory.available_quantity, inStockQuantity: locationInventory.stocked_quantity, diff --git a/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/index.tsx b/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/index.tsx index a7146eb1a5..163202ff97 100644 --- a/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/index.tsx +++ b/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/index.tsx @@ -223,6 +223,9 @@ const CreateFulfillmentModal: React.FC = ({ type="submit" loading={isSubmitting} onClick={createFulfillment} + disabled={ + !Object.values(quantities).some((quantity) => quantity > 0) + } > Create fulfillment diff --git a/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/item-table.tsx b/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/item-table.tsx index 8ca0eebb08..99f32b9806 100644 --- a/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/item-table.tsx +++ b/packages/admin-ui/ui/src/domain/orders/details/create-fulfillment/item-table.tsx @@ -64,7 +64,7 @@ const FulfillmentLine = ({ handleQuantityUpdate, setErrors, }: { - locationId: string + locationId?: string item: LineItem quantities: Record handleQuantityUpdate: (value: number, id: string) => void @@ -79,6 +79,7 @@ const FulfillmentLine = ({ item.variant_id as string, { enabled: isLocationFulfillmentEnabled } ) + React.useEffect(() => { if (isLocationFulfillmentEnabled) { refetch() @@ -86,6 +87,13 @@ const FulfillmentLine = ({ }, [isLocationFulfillmentEnabled, refetch]) const { availableQuantity, inStockQuantity } = useMemo(() => { + if (!isLocationFulfillmentEnabled) { + return { + availableQuantity: item.variant.inventory_quantity, + inStockQuantity: item.variant.inventory_quantity, + } + } + if (isLoading || !locationId || !variant) { return {} } @@ -104,7 +112,13 @@ const FulfillmentLine = ({ availableQuantity: locationInventory.available_quantity, inStockQuantity: locationInventory.stocked_quantity, } - }, [variant, locationId, isLoading]) + }, [ + isLoading, + locationId, + variant, + item.variant, + isLocationFulfillmentEnabled, + ]) const validQuantity = !locationId || diff --git a/packages/admin-ui/ui/src/domain/orders/details/detail-cards/summary.tsx b/packages/admin-ui/ui/src/domain/orders/details/detail-cards/summary.tsx index 7d876333c3..bce293ea10 100644 --- a/packages/admin-ui/ui/src/domain/orders/details/detail-cards/summary.tsx +++ b/packages/admin-ui/ui/src/domain/orders/details/detail-cards/summary.tsx @@ -1,5 +1,5 @@ import { DisplayTotal, PaymentDetails } from "../templates" -import { Order, ReservationItemDTO } from "@medusajs/medusa" +import { Order } from "@medusajs/medusa" import React, { useContext, useMemo } from "react" import { ActionType } from "../../../../components/molecules/actionables" @@ -13,6 +13,7 @@ import StatusIndicator from "../../../../components/fundamentals/status-indicato import { sum } from "lodash" import { useFeatureFlag } from "../../../../providers/feature-flag-provider" import useToggleState from "../../../../hooks/use-toggle-state" +import { ReservationItemDTO } from "@medusajs/types" type SummaryCardProps = { order: Order diff --git a/packages/admin-ui/ui/src/domain/orders/details/index.tsx b/packages/admin-ui/ui/src/domain/orders/details/index.tsx index 16707caa29..4502a2aa51 100644 --- a/packages/admin-ui/ui/src/domain/orders/details/index.tsx +++ b/packages/admin-ui/ui/src/domain/orders/details/index.tsx @@ -62,7 +62,7 @@ import useClipboard from "../../../hooks/use-clipboard" import { useHotkeys } from "react-hotkeys-hook" import useImperativeDialog from "../../../hooks/use-imperative-dialog" import useNotification from "../../../hooks/use-notification" -import { useEffect, useState } from "react" +import { useEffect, useMemo, useState } from "react" import useToggleState from "../../../hooks/use-toggle-state" import { useFeatureFlag } from "../../../providers/feature-flag-provider" @@ -154,7 +154,9 @@ const OrderDetails = () => { enabled: !!order?.region_id, }) const { isFeatureEnabled } = useFeatureFlag() - const inventoryEnabled = isFeatureEnabled("inventoryService") + const inventoryEnabled = useMemo(() => { + return isFeatureEnabled("inventoryService") + }, [isFeatureEnabled]) const { reservations, refetch: refetchReservations } = useAdminReservations( { @@ -541,7 +543,7 @@ const OrderDetails = () => { orderToFulfill={order as any} handleCancel={() => setShowFulfillment(false)} orderId={order.id} - onComplete={refetchReservations} + onComplete={inventoryEnabled ? refetchReservations : () => {}} /> )} {showRefund && ( diff --git a/packages/admin-ui/ui/src/hooks/use-stock-locations.ts b/packages/admin-ui/ui/src/hooks/use-stock-locations.ts index 2569c6e1f6..5820858adb 100644 --- a/packages/admin-ui/ui/src/hooks/use-stock-locations.ts +++ b/packages/admin-ui/ui/src/hooks/use-stock-locations.ts @@ -1,7 +1,22 @@ import { useAdminStockLocations } from "medusa-react" +import { useEffect } from "react" +import { useFeatureFlag } from "../providers/feature-flag-provider" const useStockLocations = () => { - const { stock_locations } = useAdminStockLocations() + const { isFeatureEnabled } = useFeatureFlag() + const isStockLocationsEnabled = isFeatureEnabled("stockLocationService") + const { stock_locations, refetch } = useAdminStockLocations( + {}, + { + enabled: isStockLocationsEnabled, + } + ) + + useEffect(() => { + if (isStockLocationsEnabled) { + void refetch() + } + }, [isStockLocationsEnabled, refetch]) const getLocationNameById = (locationId: string | null) => stock_locations?.find((stock_location) => stock_location.id === locationId)