import { AdminGetInventoryItemsParams, DecoratedInventoryItemDTO, } from "@medusajs/medusa" import { ControlProps, OptionProps, SingleValue } from "react-select" import Control from "../select/next-select/components/control" import { NextSelect } from "../select/next-select" import SearchIcon from "../../fundamentals/icons/search-icon" import { useAdminInventoryItems } from "medusa-react" import { useDebounce } from "../../../hooks/use-debounce" import { useState } from "react" type Props = { onItemSelect: (item: DecoratedInventoryItemDTO) => void clearOnSelect?: boolean filters?: AdminGetInventoryItemsParams } type ItemOption = { label: string | undefined value: string | undefined inventoryItem: DecoratedInventoryItemDTO } const ItemSearch = ({ onItemSelect, clearOnSelect, filters = {} }: Props) => { const [itemSearchTerm, setItemSearchTerm] = useState() const debouncedItemSearchTerm = useDebounce(itemSearchTerm, 500) const queryEnabled = !!debouncedItemSearchTerm?.length const { isLoading, inventory_items } = useAdminInventoryItems( { q: debouncedItemSearchTerm, ...filters, }, { enabled: queryEnabled } ) const onChange = (item: SingleValue) => { if (item) { onItemSelect(item.inventoryItem) } } const options = inventory_items?.map( (inventoryItem: DecoratedInventoryItemDTO) => ({ label: inventoryItem.title || inventoryItem.variants?.[0]?.product?.title || inventoryItem.sku, value: inventoryItem.id, inventoryItem, }) ) as ItemOption[] const filterOptions = () => true return (
"No items found"} openMenuOnClick={!!inventory_items?.length} onChange={onChange} value={null} isLoading={queryEnabled && isLoading} filterOption={filterOptions} // TODO: Remove this when we can q for inventory item titles />
) } const ProductOption = ({ innerProps, data }: OptionProps) => { return (

{data.label}

{data.inventoryItem.sku}

{`${data.inventoryItem.stocked_quantity} stock`}

{`${ data.inventoryItem.stocked_quantity - data.inventoryItem.reserved_quantity } available`}

) } const SearchControl = ({ children, ...props }: ControlProps) => ( {children} ) export default ItemSearch