// Page Code for /checkout-link import { cart } from 'wix-stores'; import wixLocation from 'wix-location'; /** * Accepts `products` query parameter in Meta format: * - Encoded: products=112233%3A1%2C445566%3A2 * - Unencoded: products=112233:1,445566:2 (still works) * * Each entry is ID:QTY. Colons/commas may be RFC 3986-escaped. * Example final URL for Meta: * https://mysticalcrow.com/checkout-link?products=112233%3A1%2C445566%3A2 */ function parseProductsParam(rawParam) { if (!rawParam || typeof rawParam !== 'string') return []; // Try to decode once; if it throws or changes nothing, we still continue safely let decoded = rawParam; try { // decodeURIComponent will convert %3A -> ":", %2C -> "," decoded = decodeURIComponent(rawParam); } catch (_e) { // If decoding fails, we’ll proceed with the original string } // Split by commas (now that we normalized to ":" and ",") // Trim spaces just in case. return decoded .split(',') .map(s => s.trim()) .filter(Boolean) .map(pair => { const [id, qty] = pair.split(':').map(x => (x || '').trim()); const quantity = Number(qty); return (id && !Number.isNaN(quantity) && quantity > 0) ? { productId: id, quantity } : null; }) .filter(Boolean); } async function addAllToCart(items) { // Wix Stores cart.addProducts accepts an array of product objects. // We’ll add one by one to ensure each promise resolves, but you can batch if desired. for (const item of items) { // If a product has variants/options, you’ll need to pass the relevant // selection data here (e.g., options: [{ optionName, selection }]). // For simple products, productId + quantity is sufficient. await cart.addProducts([{ productId: item.productId, quantity: item.quantity }]); } } $w.onReady(async function () { const { products } = wixLocation.query; if (!products) { // No parameter present; go to cart so the user isn't stuck. wixLocation.to('/cart'); return; } const items = parseProductsParam(products); if (!items.length) { // Parameter present but invalid/empty after parsing wixLocation.to('/cart'); return; } try { await addAllToCart(items); // Success: go straight to checkout wixLocation.to('/checkout'); } catch (_err) { // If anything fails (bad ID, etc.), fall back to cart wixLocation.to('/cart'); } });
top of page

Elevate your writing experience with this exquisite Hard Backed Journal. Designed to inspire creativity, it showcases vibrant prints that pop with color, making each page a canvas for your thoughts and ideas. The journal's casewrap binding ensures it lies flat, providing a seamless writing experience on any surface. Perfectly sized at 5.2" x 7.4", it’s ideal for journaling, sketching, or note-taking on the go. 

Please Note: This item is made to order and fulfilled by a trusted print partner. It will ship separately from the rest of your Mystical Crow treasures and may arrive in its own magical timing. Thank you for supporting small artists and handcrafted magic.

Product features
- Vibrant prints offer bright and crisp colors for your designs
- Designs can be added to both sides for added creativity
- Flexible spine allows journal to lie flat when opened
- Compact size of 5.2" x 7.4" makes it portable
- Available with 128 pages of ruled, graph, or blank paper

Care instructions
- Use a soft, clean and dry cloth to gently brush any dust or dirt off from the center of the journal outwards.

Gothic Rose Hard Backed Journal

$20.83Price
Quantity
    bottom of page