feat(MED-131): update location in action so cart is always reloaded properly

This commit is contained in:
2025-08-04 11:52:22 +03:00
parent 959646a319
commit 12cd61840c
2 changed files with 45 additions and 11 deletions

View File

@@ -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<typeof AnalysisLocationSchema>) => {
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`),

View File

@@ -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,
},
});
}