feat(MED-131): update location in action so cart is always reloaded properly
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import { useForm } from "react-hook-form";
|
import { useForm } from "react-hook-form";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { updateLineItem } from "@lib/data/cart"
|
|
||||||
import { StoreCart, StoreCartLineItem } from "@medusajs/types"
|
import { StoreCart, StoreCartLineItem } from "@medusajs/types"
|
||||||
import { Form } from "@kit/ui/form";
|
import { Form } from "@kit/ui/form";
|
||||||
import { Trans } from '@kit/ui/trans';
|
import { Trans } from '@kit/ui/trans';
|
||||||
@@ -18,6 +17,7 @@ import {
|
|||||||
SelectTrigger,
|
SelectTrigger,
|
||||||
SelectValue,
|
SelectValue,
|
||||||
} from '@kit/ui/select';
|
} from '@kit/ui/select';
|
||||||
|
import { updateCartPartnerLocation } from '../../_lib/server/update-cart-partner-location';
|
||||||
|
|
||||||
const AnalysisLocationSchema = z.object({
|
const AnalysisLocationSchema = z.object({
|
||||||
locationId: z.string().min(1),
|
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 onSubmit = async ({ locationId }: z.infer<typeof AnalysisLocationSchema>) => {
|
||||||
const promise = Promise.all(analysisPackages.map(async ({ id, quantity }) => {
|
const promise = updateCartPartnerLocation({
|
||||||
await updateLineItem({
|
cartId: cart.id,
|
||||||
lineId: id,
|
lineIds: analysisPackages.map(({ id }) => id),
|
||||||
quantity,
|
partnerLocationId: locationId,
|
||||||
metadata: {
|
partnerLocationName: MOCK_LOCATIONS.find((location) => location.id === locationId)?.name ?? '',
|
||||||
partner_location_name: MOCK_LOCATIONS.find((location) => location.id === locationId)?.name ?? '',
|
});
|
||||||
partner_location_id: locationId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
toast.promise(promise, {
|
toast.promise(promise, {
|
||||||
success: t(`cart:items.analysisLocation.success`),
|
success: t(`cart:items.analysisLocation.success`),
|
||||||
|
|||||||
38
app/home/(user)/_lib/server/update-cart-partner-location.ts
Normal file
38
app/home/(user)/_lib/server/update-cart-partner-location.ts
Normal 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,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user