Initial commit: Hoomat storefront with Meshkee API and static-image slots.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import {
|
||||
GUEST_CART_KEY,
|
||||
GUEST_CART_URL_PARAM,
|
||||
} from "@/lib/meshkee/config";
|
||||
import { normalizeGuestLines } from "@/lib/meshkee/format";
|
||||
import type { GuestCartLine } from "@/lib/meshkee/types";
|
||||
|
||||
function parseLines(raw: string | null): GuestCartLine[] {
|
||||
if (!raw) return [];
|
||||
try {
|
||||
const parsed = JSON.parse(raw);
|
||||
return Array.isArray(parsed) ? normalizeGuestLines(parsed) : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export function readGuestCart(): GuestCartLine[] {
|
||||
if (typeof window === "undefined") return [];
|
||||
return parseLines(localStorage.getItem(GUEST_CART_KEY));
|
||||
}
|
||||
|
||||
export function writeGuestCart(items: GuestCartLine[]) {
|
||||
if (typeof window === "undefined") return;
|
||||
const normalized = normalizeGuestLines(items);
|
||||
localStorage.setItem(GUEST_CART_KEY, JSON.stringify(normalized));
|
||||
}
|
||||
|
||||
export function clearGuestCart() {
|
||||
if (typeof window === "undefined") return;
|
||||
localStorage.removeItem(GUEST_CART_KEY);
|
||||
}
|
||||
|
||||
export function encodeGuestCartForUrl(items: GuestCartLine[]): string {
|
||||
const payload = normalizeGuestLines(items).map((item) => ({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
...(item.slug ? { slug: item.slug } : {}),
|
||||
price: item.price,
|
||||
image: item.image ?? null,
|
||||
quantity: item.quantity,
|
||||
}));
|
||||
return btoa(unescape(encodeURIComponent(JSON.stringify(payload))))
|
||||
.replace(/\+/g, "-")
|
||||
.replace(/\//g, "_")
|
||||
.replace(/=+$/g, "");
|
||||
}
|
||||
|
||||
export { GUEST_CART_URL_PARAM };
|
||||
Reference in New Issue
Block a user