feat(core-flows, types): add has missing inventory flag when listing shipping options (#11493)
**What** - add `insufficient_inventory` flag when listing shipping options for a cart - add `enabled_in_store` flag when creating/editing pickup options
This commit is contained in:
@@ -45,7 +45,14 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
|
||||
const cartQuery = useQueryGraphStep({
|
||||
entity: "cart",
|
||||
filters: { id: input.cart_id },
|
||||
fields: cartFieldsForPricingContext,
|
||||
fields: [
|
||||
...cartFieldsForPricingContext,
|
||||
"items.*",
|
||||
"items.variant.manage_inventory",
|
||||
"items.variant.inventory_items.inventory_item_id",
|
||||
"items.variant.inventory_items.inventory.requires_shipping",
|
||||
"items.variant.inventory_items.inventory.location_levels.*",
|
||||
],
|
||||
options: { throwIfKeyNotFound: true },
|
||||
}).config({ name: "get-cart" })
|
||||
|
||||
@@ -132,6 +139,7 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
|
||||
"data",
|
||||
"service_zone.fulfillment_set_id",
|
||||
"service_zone.fulfillment_set.type",
|
||||
"service_zone.fulfillment_set.location.id",
|
||||
"service_zone.fulfillment_set.location.address.*",
|
||||
|
||||
"type.id",
|
||||
@@ -154,15 +162,42 @@ export const listShippingOptionsForCartWorkflow = createWorkflow(
|
||||
}).config({ name: "shipping-options-query" })
|
||||
|
||||
const shippingOptionsWithPrice = transform(
|
||||
{ shippingOptions },
|
||||
({ shippingOptions }) =>
|
||||
{ shippingOptions, cart },
|
||||
({ shippingOptions, cart }) =>
|
||||
shippingOptions.map((shippingOption) => {
|
||||
const price = shippingOption.calculated_price
|
||||
|
||||
const locationId =
|
||||
shippingOption.service_zone.fulfillment_set.location.id
|
||||
|
||||
const itemsAtLocationWithoutAvailableQuantity = cart.items.filter(
|
||||
(item) => {
|
||||
if (!item.variant.manage_inventory) {
|
||||
return false
|
||||
}
|
||||
|
||||
return item.variant.inventory_items.some((inventoryItem) => {
|
||||
if (!inventoryItem.inventory.requires_shipping) {
|
||||
return false
|
||||
}
|
||||
|
||||
const level = inventoryItem.inventory.location_levels.find(
|
||||
(locationLevel) => {
|
||||
return locationLevel.location_id === locationId
|
||||
}
|
||||
)
|
||||
|
||||
return !level ? true : level.available_quantity < item.quantity
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
return {
|
||||
...shippingOption,
|
||||
amount: price?.calculated_amount,
|
||||
is_tax_inclusive: !!price?.is_calculated_price_tax_inclusive,
|
||||
insufficient_inventory:
|
||||
itemsAtLocationWithoutAvailableQuantity.length > 0,
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user