From 12cd61840c095d19c69bdc313c0680ef8a5a5605 Mon Sep 17 00:00:00 2001 From: k4rli Date: Mon, 4 Aug 2025 11:52:22 +0300 Subject: [PATCH] feat(MED-131): update location in action so cart is always reloaded properly --- .../_components/cart/analysis-location.tsx | 18 ++++----- .../server/update-cart-partner-location.ts | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 app/home/(user)/_lib/server/update-cart-partner-location.ts diff --git a/app/home/(user)/_components/cart/analysis-location.tsx b/app/home/(user)/_components/cart/analysis-location.tsx index b6128e7..ff1ff0e 100644 --- a/app/home/(user)/_components/cart/analysis-location.tsx +++ b/app/home/(user)/_components/cart/analysis-location.tsx @@ -3,7 +3,6 @@ import { toast } from 'sonner'; import { useForm } from "react-hook-form"; import { z } from "zod"; -import { updateLineItem } from "@lib/data/cart" import { StoreCart, StoreCartLineItem } from "@medusajs/types" import { Form } from "@kit/ui/form"; import { Trans } from '@kit/ui/trans'; @@ -18,6 +17,7 @@ import { SelectTrigger, SelectValue, } from '@kit/ui/select'; +import { updateCartPartnerLocation } from '../../_lib/server/update-cart-partner-location'; const AnalysisLocationSchema = z.object({ locationId: z.string().min(1), @@ -40,16 +40,12 @@ export default function AnalysisLocation({ cart, analysisPackages }: { cart: Sto }); const onSubmit = async ({ locationId }: z.infer) => { - const promise = Promise.all(analysisPackages.map(async ({ id, quantity }) => { - await updateLineItem({ - lineId: id, - quantity, - metadata: { - partner_location_name: MOCK_LOCATIONS.find((location) => location.id === locationId)?.name ?? '', - partner_location_id: locationId, - }, - }); - })); + const promise = updateCartPartnerLocation({ + cartId: cart.id, + lineIds: analysisPackages.map(({ id }) => id), + partnerLocationId: locationId, + partnerLocationName: MOCK_LOCATIONS.find((location) => location.id === locationId)?.name ?? '', + }); toast.promise(promise, { success: t(`cart:items.analysisLocation.success`), diff --git a/app/home/(user)/_lib/server/update-cart-partner-location.ts b/app/home/(user)/_lib/server/update-cart-partner-location.ts new file mode 100644 index 0000000..0ad1c6f --- /dev/null +++ b/app/home/(user)/_lib/server/update-cart-partner-location.ts @@ -0,0 +1,38 @@ +"use server"; + +import { retrieveCart, updateCart, updateLineItem } from "@lib/data/cart"; + +export const updateCartPartnerLocation = async ({ + cartId, + lineIds, + partnerLocationId, + partnerLocationName, +}: { + cartId: string; + lineIds: string[]; + partnerLocationId: string; + partnerLocationName: string; +}) => { + const cart = await retrieveCart(cartId); + if (!cart) { + throw new Error("Cart not found"); + } + + for (const lineItemId of lineIds) { + await updateLineItem({ + lineId: lineItemId, + quantity: 1, + metadata: { + partner_location_name: partnerLocationName, + partner_location_id: partnerLocationId, + }, + }); + } + await updateCart({ + id: cartId, + metadata: { + partner_location_name: partnerLocationName, + partner_location_id: partnerLocationId, + }, + }); +}