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:
Frane Polić
2025-02-19 08:08:25 +00:00
committed by GitHub
parent 0e6ffad30f
commit 0c530e90c5
5 changed files with 460 additions and 33 deletions
@@ -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,
}
})
)