Skip to content

Commit ffb0fd7

Browse files
committed
--wip-- [skip ci]
1 parent d0acf47 commit ffb0fd7

2 files changed

Lines changed: 44 additions & 15 deletions

File tree

core/app/[locale]/(default)/cart/_actions/update-line-item.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,11 @@ export const updateLineItem = async (
363363

364364
case 'delete': {
365365
try {
366-
await removeItem({ lineItemEntityId: submission.value.id });
366+
const ids = submission.value.id.split(',');
367+
368+
console.log('ids', ids);
369+
370+
await Promise.all(ids.map((id) => removeItem({ lineItemEntityId: id })));
367371
} catch (error) {
368372
// eslint-disable-next-line no-console
369373
console.error(error);
@@ -384,10 +388,12 @@ export const updateLineItem = async (
384388
return { ...prevState, lastResult: submission.reply({ formErrors: [String(error)] }) };
385389
}
386390

387-
const deletedItem = submission.value;
391+
const deletedItems = new Set(submission.value.id.split(','));
392+
393+
console.log(prevState.lineItems.filter((item) => !deletedItems.has(item.id)));
388394

389395
return {
390-
lineItems: prevState.lineItems.filter((item) => item.id !== deletedItem.id),
396+
lineItems: prevState.lineItems.filter((item) => !deletedItems.has(item.id)),
391397
lastResult: submission.reply({ resetForm: true }),
392398
};
393399
}

core/vibes/soul/sections/cart/client.tsx

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
useActionState,
1111
useEffect,
1212
useOptimistic,
13+
useRef,
1314
} from 'react';
1415
import { useFormStatus } from 'react-dom';
1516

@@ -175,6 +176,8 @@ export function CartClient<LineItem extends CartLineItem>({
175176
shipping,
176177
}: CartProps<LineItem>) {
177178
const events = useEvents();
179+
const requestedLineItemsToDelete = useRef<string[]>([]);
180+
const batchDeleteTimeout = useRef<NodeJS.Timeout | null>(null);
178181
const [state, formAction] = useActionState(lineItemAction, {
179182
lineItems: cart.lineItems,
180183
lastResult: null,
@@ -314,27 +317,47 @@ export function CartClient<LineItem extends CartLineItem>({
314317
lineItem={lineItem}
315318
onSubmit={(formData) => {
316319
startTransition(() => {
317-
formAction(formData);
318320
setOptimisticLineItems(formData);
319321

320322
const intent = formData.get('intent');
321323

322-
if (intent === 'increment') {
323-
formData.set('quantity', '1');
324-
325-
events.onAddToCart?.(formData);
324+
if (intent === 'delete') {
325+
if (batchDeleteTimeout.current) {
326+
clearTimeout(batchDeleteTimeout.current);
327+
}
328+
329+
batchDeleteTimeout.current = setTimeout(() => {
330+
startTransition(() => {
331+
formData.set('id', requestedLineItemsToDelete.current.join(','));
332+
formAction(formData);
333+
events.onRemoveFromCart?.(formData);
334+
});
335+
336+
requestedLineItemsToDelete.current = [];
337+
}, 1000);
338+
339+
const id = formData.get('id');
340+
341+
if (id) {
342+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
343+
requestedLineItemsToDelete.current.push(id as string);
344+
}
326345
}
327346

328-
if (intent === 'decrement') {
329-
formData.set('quantity', '1');
347+
if (intent !== 'delete') {
348+
formAction(formData);
330349

331-
events.onRemoveFromCart?.(formData);
332-
}
350+
if (intent === 'increment') {
351+
formData.set('quantity', '1');
333352

334-
if (intent === 'delete') {
335-
formData.set('quantity', lineItem.quantity.toString());
353+
events.onAddToCart?.(formData);
354+
}
355+
356+
if (intent === 'decrement') {
357+
formData.set('quantity', '1');
336358

337-
events.onRemoveFromCart?.(formData);
359+
events.onRemoveFromCart?.(formData);
360+
}
338361
}
339362
});
340363
}}

0 commit comments

Comments
 (0)