Files
hms-licht-ton/frontend/plugins/pinia-persist.client.ts
T

42 lines
1.2 KiB
TypeScript
Raw Normal View History

import type { Plugin } from "nuxt/app";
/**
* Client-side Pinia persistence plugin.
* Syncs the cart store to localStorage on every mutation and hydrates on load.
*/const STORAGE_KEY = "hms-cart";
export default defineNuxtPlugin(({ pinia }) => {
// Hydrate from localStorage on plugin load
if (import.meta.client) {
try {
const stored = localStorage.getItem(STORAGE_KEY);
if (stored) {
const parsed = JSON.parse(stored);
if (parsed && Array.isArray(parsed.items)) {
const cartStore = pinia._s.get("cart");
if (cartStore) {
cartStore.$patch({ items: parsed.items });
}
}
}
} catch (e) {
console.warn("Failed to hydrate cart from localStorage:", e);
}
// Subscribe to cart store changes and persist
const cartStore = pinia._s.get("cart");
if (cartStore) {
cartStore.$subscribe((_mutation, state) => {
try {
localStorage.setItem(
STORAGE_KEY,
JSON.stringify({ items: state.items }),
);
} catch (e) {
console.warn("Failed to persist cart to localStorage:", e);
}
});
}
}
}) as Plugin;