26 lines
580 B
TypeScript
26 lines
580 B
TypeScript
import type { CartItem } from '#shared/types';
|
|
|
|
const KEY = 'w4c_cart';
|
|
|
|
/** Hydrate the cart from localStorage once, then persist every change. */
|
|
export default defineNuxtPlugin(() => {
|
|
const items = useState<CartItem[]>('cart-items', () => []);
|
|
try {
|
|
const raw = localStorage.getItem(KEY);
|
|
if (raw) items.value = JSON.parse(raw) as CartItem[];
|
|
} catch {
|
|
/* ignore */
|
|
}
|
|
watch(
|
|
items,
|
|
(value) => {
|
|
try {
|
|
localStorage.setItem(KEY, JSON.stringify(value));
|
|
} catch {
|
|
/* ignore */
|
|
}
|
|
},
|
|
{ deep: true },
|
|
);
|
|
});
|