×
×
cart-icon

You have no items in your shopping cart.

product image - slider
product image - slider
product image - slider
product image - slider
product image - slider
50% OFF
superdry-product-image
HOODED PARKA COAT

₹ 9,999

[50% OFF]

MRP : ₹19,999 [Save ₹ 10,000]
Price inclusive of all taxes

Out of Stock

This item is currently out of stock.
Check pin code serviceability
-

Description

The parka is a winter classic, and this reimagining of its timeless comfort comes with contemporary innovation. Embracing the spirit of adventure by being a practical, minimalist piece, this hooded coat makes for a versatile layer that can effortlessly complement your cold-weather looks. It features luxuriously soft padding that'll cushion you from the cold no matter what the day has in store. Whether you're taking on the outdoors or just heading to the office and fancy some weighty warmth, this piece makes for a go-to winter companion. Relaxed fit – the classic Superdry fit. Not too slim, not too loose, just right. Go for your normal size, Lined hood with bungee cord adjustment, Two-way zip and popper fastening, Seven external pockets, Ribbed cuffs, Superdry badge on right shoulder, Bungee cord adjustable hem, Fully lined, Three internal pockets, Bungee cord waist adjuster, accessible inside.

Specification

+

Size Guide

+

Additional Info

+

Specification

+

Size Guide

+

Additional Info

+
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer',"GTM-55MBBMF"); // Data layer script const listener = () => { const FPI_EVENTS = { //USER LOG_IN: 'user.login', LOG_OUT: 'user.logout', //USER PROFILE_UPDATE: 'user.update', //PLP PRODUCT_LIST_VIEW: 'product_list.view', COLLECTION_LIST_VIEW: 'collection_list.view', PRODUCT_LIST_CLICK: 'product_list.click', PRODUCT_FILTER: 'product_list.filter', PRODUCT_SORT: 'product_list.sort', // PDP PRODUCT_DETAIL_PAGE_VIEW: 'product.view', NOTIFY_PRODUCT: 'notify.product', ADD_TO_COMPARE: 'compare.add', REMOVE_FROM_COMPARE: 'compare.remove', ADD_TO_WISHLIST: 'wishlist.add', REMOVE_FROM_WISHLIST: 'wishlist.remove', // CART VIEW_CART: 'cart.view', ADD_TO_CART: 'cart.newProduct', REMOVE_FROM_CART: 'cart.remove', UPDATE_CART: 'cart.update', // ORDER ORDER_CHECKOUT: 'order.checkout', ADD_PAYMENT_INFORMATION: 'order.payment_information', ADD_ADDRESS_INFORMATION: 'order.address_information', ORDER_PROCESSED: 'order.processed', ORDER_TRACKING_VIEW: 'order_tracking.view', // REFUND REFUND_SUCCESS: 'refund.success', // SEARCH SEARCH_PRODUCTS: 'search.products', PINCODE_SERVICEABILITY: 'pincode.serviceablility' }; const getGTMEventName = (event) => { const GTM_EVENTS = { [FPI_EVENTS.PRODUCT_DETAIL_PAGE_VIEW]: 'view_item', [FPI_EVENTS.ADD_TO_CART]: 'add_to_cart', [FPI_EVENTS.REMOVE_FROM_CART]: 'remove_from_cart', [FPI_EVENTS.ORDER_CHECKOUT]: 'begin_checkout', [FPI_EVENTS.ORDER_PROCESSED]: 'purchase', [FPI_EVENTS.REFUND_SUCCESS]: 'refund', [FPI_EVENTS.PRODUCT_LIST_VIEW]: 'view_item_list', [FPI_EVENTS.COLLECTION_LIST_VIEW]:'view_collection', [FPI_EVENTS.ADD_TO_WISHLIST]: 'add_to_wishlist', [FPI_EVENTS.VIEW_CART]: 'view_cart', [FPI_EVENTS.SEARCH_PRODUCTS]: 'products_searched', [FPI_EVENTS.ADD_PAYMENT_INFORMATION] : 'add_payment_info', [FPI_EVENTS.ADD_ADDRESS_INFORMATION]: 'add_shipping_info', [FPI_EVENTS.LOG_IN]: 'login', [FPI_EVENTS.LOG_OUT]: 'logout', [FPI_EVENTS.PROFILE_UPDATE]: 'profile_update' } return GTM_EVENTS[event] || 'not_known' } const transformData = (event, eventData) => { let payload = {} switch (event) { case FPI_EVENTS.SEARCH_PRODUCTS: { const { search_text } = eventData; payload = { 'query': search_text } break; } case FPI_EVENTS.LOG_IN: { const { user_id, login_value, method, gender, phone_number, email } = eventData; payload = { 'user_id': user_id, 'login_value': login_value, 'method': method, 'gender': gender, 'email': email, 'phone_number': phone_number } break; } case FPI_EVENTS.LOG_OUT: { const { user_id, phone, email } = eventData; payload = { 'user_id': user_id, 'phone': phone, 'email': email } break; } case FPI_EVENTS.PROFILE_UPDATE: { const { gender, email, phone_number, user_id} = eventData; payload = { 'user_id': user_id, 'gender': gender, 'email': email, 'phone_number': phone_number } break; } case FPI_EVENTS.ADD_TO_WISHLIST: { const { item } = eventData; let item_category = "" if(item.categories && item.categories.length) { item_category = item.categories[0].name } payload.items = [{ 'item_id': item.uid, 'item_name': item.name, 'currency': "INR", 'discount': item.discount, 'item_brand': item.brand? item.brand.name : '', item_category, 'price': item.price ? item.price.effective.max : '', 'quantity': 1 }]; break; } case FPI_EVENTS.REMOVE_FROM_WISHLIST: { const { item } = eventData; let item_category = "" if(item.categories && item.categories.length) { item_category = item.categories[0].name } payload.items = [{ 'item_id': item.uid, 'item_name': item.name, 'currency': "INR", 'discount': item.discount, 'item_brand': item.brand.name, item_category, 'price': item.price && item.price.effective.max, 'quantity': 1 }]; break; } case FPI_EVENTS.PRODUCT_DETAIL_PAGE_VIEW: { const { product } = eventData; payload.items = [{ 'item_name': product.name, 'item_id': product.uid, 'item_brand': product.brand.name, 'item_category': product.category.name, 'price': product.price.max, 'quantity': 1, 'currency': 'INR' }] break; } case FPI_EVENTS.PRODUCT_LIST_VIEW: { const {items} = eventData; const itemsOfListing = []; items.forEach(item => { let item_category = "" if(item.categories && item.categories.length) { item_category = item.categories[0].name } let objectToBePushed = { 'item_id': item.item_code ? item.item_code : '', 'item_name': item.name ? item.name : '', 'currency': 'INR', 'discount': item.discount ? item.discount : '', 'item_brand': item.brand.name ? item.brand.name : '', 'price': item.price.effective.max ? item.price.effective.max : '', 'quantity': 1, 'item_list_name': eventData.name || 'Product Listing', 'item_list_id': eventData.slug || eventData.url || 'listing_page', 'item_uid': item.uid ? item.uid : '', item_category }; itemsOfListing.push(objectToBePushed); }) payload.item_list_name = eventData.name || 'Product Listing'; payload.item_list_id = eventData.slug || eventData.url || 'listing_page'; payload.items = itemsOfListing; break; } case FPI_EVENTS.COLLECTION_LIST_VIEW: { payload.items = [ { item_list_name: eventData.name || 'Product Listing', item_list_id: eventData.slug || eventData.url || 'listing_page' } ] break; } case FPI_EVENTS.ADD_TO_CART: { const {cart_id, products} = eventData; let itemsToBePushed = []; products.forEach(product => itemsToBePushed.push({ 'item_id': product.uid, 'item_name': product.name, 'currency': 'INR', 'item_brand': product.brand.name, 'price': product.price.effective, 'quantity': product.quantity.current, 'item_category': product.category.name })) payload.items = itemsToBePushed; payload.cart_id = cart_id; break; } case FPI_EVENTS.ORDER_CHECKOUT: { const { products, cart_id, breakup_values } = eventData; const itemsOfBag = []; products.forEach(product => { let objectToBePushed = { 'item_id': product.uid, 'item_name': product.name, 'currency': 'INR', 'discount': product.discount, 'item_brand': product.brand.name, 'price': product.price ? product.price.effective : '', 'quantity': product.quantity.current, 'item_category': product.category.name }; itemsOfBag.push(objectToBePushed); }) payload.value = breakup_values.raw.subtotal payload.cart_id = cart_id; payload.items = itemsOfBag; payload.coupon = breakup_values.raw.coupon; payload.coupon_code = breakup_values.coupon.code; payload.shipping = breakup_values.raw.delivery_charge; payload.discount = breakup_values.raw.discount; payload.currency = 'INR'; break; } case FPI_EVENTS.ADD_PAYMENT_INFORMATION: { const payment_information = eventData; payload.currency = "INR"; payload.value = payment_information.value; payload.coupon = payment_information.coupon.coupon_code; payload.payment_type = payment_information.payment.payment_type; payload.shipping = payment_information.delivery_charges; payload.cart_id = payment_information.cart.cart_id; break; } case FPI_EVENTS.ADD_ADDRESS_INFORMATION: { const payment_information = eventData; payload.currency = "INR"; payload.value = payment_information.value; payload.coupon = payment_information.coupon.coupon_code; payload.pincode = payment_information.pincode; payload.cart_id = payment_information.cart.cart_id; break; } case FPI_EVENTS.REMOVE_FROM_CART: { const {cart_id, products} = eventData; let itemsToBePushed = []; products.forEach(product => itemsToBePushed.push({ 'item_id': product.uid, 'item_name': product.name, 'currency': 'INR', 'discount': product.discount, 'item_brand': product.brand.name, 'price': product.price ? product.price.effective : '', 'quantity': product.quantity.current, 'item_category': product.category.name })) payload.items = itemsToBePushed; payload.cart_id = cart_id; break; } case FPI_EVENTS.VIEW_CART: { const { cart_id, products, breakup_values_raw } = eventData; payload.cart_id = cart_id; let itemsToBePushed = []; products.forEach(product => { let objectToBePushed = { 'item_id': product.uid, 'item_name': product.name, 'currency': 'INR', 'discount': product.discount, 'item_brand': product.brand.name, 'price': product.price ? product.price.effective : '', 'quantity': product.quantity.current, 'item_category': product.category.name }; itemsToBePushed.push(objectToBePushed); }) payload.currency = 'INR'; payload.value = breakup_values_raw.subtotal payload.items = itemsToBePushed; break; } case FPI_EVENTS.UPDATE_CART: { const { cart_id, products, operation } = eventData; payload.items = products.map(product => { const price = product.price_per_unit.converted.effective const quantity = product.quantity.current; return { 'item_name': product.name, 'item_id': product.uid, 'item_brand': product.brand.name, 'item_category': product.category.name, 'price': !isNaN(price * quantity) ? (price * quantity).toFixed(2) : '', 'quantity': product.quantity.current, 'currency': 'INR', } }) payload.cart_id = cart_id; payload.event_action = operation === 'increment_quantity' ? FPI_EVENTS.ADD_TO_CART : operation === 'decrement_quantity' ? FPI_EVENTS.REMOVE_FROM_CART : event break; } case FPI_EVENTS.ORDER_PROCESSED: { const order_data = eventData; payload.transaction_id = order_data.order_id, payload.value = order_data.breakup_values_raw.total; payload.shipping = order_data.breakup_values_raw.delivery_charges; payload.currency = 'INR'; payload.coupon = order_data.breakup_values_raw.coupon payload.items = order_data.items.map(product => { return { 'item_name': product.name, 'item_id': product.id, 'item_brand': product.brand.name, 'item_price': product.price, 'item_quantity': product.quantity, 'item_category': product.l1_categories || [], 'item_category2': product.l2_categories || [], 'item_category3': product.l3_category_name ? [product.l3_category_name] : [], } }) break; } case FPI_EVENTS.REFUND_SUCCESS: { const { refund_data } = eventData; const shipments = refund_data.statuses[0].shipments payload.transaction_id = Object.keys(shipments)[0]; break; } default: payload = eventData } return payload; } const pushToDataLayer = (event, eventData) => { const payload = transformData(event, eventData); event = payload.event_action ? payload.event_action : event; event = getGTMEventName(event); if(event === 'not_known') return dataLayer.push({ ecommerce: null }); payload.userAgent = window.navigator.userAgent; dataLayer.push({ event, ecommerce: payload, }); }; function getSkipEvents (){ let result = []; try { result = gtmeGetFPISkipEvents(); } catch(e){ console.log("NO_FILTERED_LOGIC_FOUND"); result = [] } return result; } if (FPI) { Object.keys(FPI_EVENTS).filter((ev) => { const skipEvents = getSkipEvents(); return skipEvents && skipEvents.includes(ev)? false: true }).forEach((event) => { FPI.event.on(FPI_EVENTS[event], (eventData) => { console.log(`FPI ${event}`); pushToDataLayer(FPI_EVENTS[event], eventData); }); }); } } listener() /* -------- Documentation: https://gofynd.quip.com/Lu4pAbvzN0Uu/GTM-Extension Events Reference: https://partners.fynd.com/help/docs/partners/themes/events CUSTOM EVENTS - Need to be fired from the Theme repo (How to? - Check the documentation above) -------- */ const GTM_EVENT_KEYS = { ADD_ADDRESS_INFORMATION: "order.address_information", ADD_PAYMENT_INFORMATION: "order.payment_information", CART_ADD: "cart.newProduct", CART_REMOVE: "cart.remove", CART_UPDATE: "cart.update", CART_VIEW: "cart.view", CHECKOUT: "order.checkout", COLLECTION_LISTING: "collection_list.view", CUSTOM_PRODUCT_LISTING: "custom.product_list.view", //SEPHORA__CUSTOM_EVENT DY_CART_ADD: "custom.DY.cart.newProduct", //SEPHORA__CUSTOM_DY_CART_ADD LOGIN: "user.login", ORDER_PROCESSED: "order.processed", PAGE_LOAD: "custom.page.onLoad", //SEPHORA__CUSTOM_EVENT PINCODE_SERVICEABILITY: "pincode.serviceablility", PLP_PRODUCT_CLICK: "custom.productClick", // CUSTOM_EVENT PRODUCT_COMPARE_ADD: "compare.add", PRODUCT_COMPARE_REMOVE: "compare.remove", PRODUCT_DESCRIPTION: "product.view", CUSTOM_PRODUCT_DESCRIPTION: "custom.product.view", //SEPHORA__CUSTOM_EVENT // PRODUCT_LISTING: "product_list.view", // SEPHORA__USE_CASE SEARCH_PRODUCT: "search.product", WISHLIST_ADD: "wishlist.add", WISHLIST_REMOVE: "wishlist.remove", }; const GTM_UTILS = { getExistingCartItemsGtm: () => { const existingCartItems = GTM_UTILS.getExistingCartItems(); if (!Object.keys(existingCartItems).length === 0) return {}; return existingCartItems.value.items.map((cartItem) => { return { name: cartItem?.product?.name, productId: cartItem?.product?.uid?.toString(), brand: cartItem?.product?.brand?.name, itemPrice: cartItem?.price_per_unit?.base?.effective, mrp: cartItem?.price_per_unit?.base?.effective, variant: cartItem?.article?.size?.toString(), quantity: cartItem?.quantity, category: { item_category: cartItem?.product?.attributes?.['custom-attribute-1'], item_category_1: cartItem?.product?.attributes?.['custom-attribute-2'], item_category_2: cartItem?.product?.attributes?.['custom-attribute-3'] }, }; }); }, getAllCookies: () => { const cookies = {}; const decodedCookie = decodeURIComponent(document.cookie); const cookieArray = decodedCookie.split(';'); for (let i = 0; i < cookieArray.length; i++) { const cookie = cookieArray[i].trim(); const separatorIndex = cookie.indexOf('='); const cookieName = cookie.substring(0, separatorIndex); const cookieValue = cookie.substring(separatorIndex + 1); cookies[cookieName] = cookieValue; } return cookies; }, getExistingCartItems: () => JSON.parse(localStorage.getItem("m_usercart")) || {}, getViewCartData: () => { const existingCartItems = GTM_UTILS.getExistingCartItems(); const getProductDiscount = (item) => { const discount = item?.discount; if (!discount) return 0; return parseInt(discount.split("%")[0]); }; if (!Object.keys(existingCartItems).length === 0) return {}; return existingCartItems.value.items.map((cartItem) => { return { name: cartItem?.product?.name, pid: cartItem?.product?.uid?.toString(), id: cartItem?.product?.uid, price: cartItem?.price?.converted?.effective, mrp: cartItem?.price?.converted?.marked, variant: cartItem?.article?.size?.toString(), quantity: cartItem?.quantity, discount_percentage: getProductDiscount(cartItem), brand: cartItem?.product?.brand?.name, category: cartItem?.product?.categories?.[0]?.name, category_id: cartItem?.product?.categories?.[0]?.uid?.toString(), }; }); }, customDelay: (sec) => { return new Promise((res) => setTimeout(res, sec * 1000)); }, getPricePerUnit: (eventData) => { const quantity = eventData?.products?.[0]?.quantity?.current; const effectivePrice = eventData?.products?.[0]?.price?.effective; return quantity > 1 ? Math.round(effectivePrice / quantity) : effectivePrice; }, cartItems: {}, bagListenerAttached: false, addToBagQuantity: 1, getBagQuantity: () => { const quantityCopy = GTM_UTILS.addToBagQuantity || 1; GTM_UTILS.addToBagQuantity = 1; return quantityCopy; }, cartItemsBeforeRemoveFromCart: {} }; const GTM_FUNCTIONS = { ADD_ADDRESS_INFORMATION: (eventData) => { return { eventData, }; }, ADD_PAYMENT_INFORMATION: (eventData) => ({ event: "AddPaymentInfo", code: eventData?.payment?.payment_type, event_id: eventData?.cart?.cart_id, }), CART_ADD: (eventData, isFromCartUpdate = false) => { const cartProductsGtm = GTM_UTILS.getExistingCartItemsGtm(); const existingCartItems = GTM_UTILS.getExistingCartItems(); GTM_UTILS.cartItemsBeforeRemoveFromCart = existingCartItems; const presentCartItem = existingCartItems?.value?.items?.filter((item) => { return item.product?.item_code === eventData?.products?.[0]?.item_code; })?.[0] || {}; return { event: "addToCart", action: "addToCart", category: { item_category: presentCartItem?.product?.attributes?.['custom-attribute-1'], item_category_1: presentCartItem?.product?.attributes?.['custom-attribute-2'], item_category_2: presentCartItem?.product?.attributes?.['custom-attribute-3'] }, ecommerce: { currencyCode: eventData?.products?.[0]?.price?.currency_code, add: { actionField: { revenue: isFromCartUpdate ? eventData?.products?.[0]?.price_per_unit?.base?.effective : GTM_UTILS.getPricePerUnit(eventData), action: "add", }, products: [ { name: eventData?.products?.[0]?.name, id: eventData?.products?.[0]?.uid.toString(), price: eventData?.products?.[0]?.price_per_unit?.base?.effective ?? GTM_UTILS.getPricePerUnit(eventData), brand: eventData?.products?.[0]?.brand?.name, variant: eventData?.products?.[0]?.size?.toString(), category: { item_category: presentCartItem?.product?.attributes?.['custom-attribute-1'], item_category_1: presentCartItem?.product?.attributes?.['custom-attribute-2'], item_category_2: presentCartItem?.product?.attributes?.['custom-attribute-3'] }, quantity: GTM_UTILS.getBagQuantity(), }, ], cart_products: cartProductsGtm, }, }, }; }, CART_REMOVE: (eventData, isFromCartUpdate = false) => { const cartProductsGtm = GTM_UTILS.getExistingCartItemsGtm(); const existingCartItems = GTM_UTILS.cartItemsBeforeRemoveFromCart; const presentCartItem = existingCartItems?.value?.items?.filter((item) => { return item.product?.item_code === eventData?.products?.[0]?.item_code; })?.[0] || {}; GTM_UTILS.cartItemsBeforeRemoveFromCart = GTM_UTILS?.getExistingCartItems(); return { event: "removeFromCart", action: "removeFromCart", ecommerce: { remove: { actionField: { revenue: isFromCartUpdate ? eventData?.products?.[0]?.price_per_unit?.base?.effective : eventData?.products?.[0]?.price?.effective, action: "remove", }, product: [ { name: eventData?.products?.[0]?.name, id: eventData?.products?.[0]?.uid.toString(), price: isFromCartUpdate ? eventData?.products?.[0]?.price_per_unit?.base?.effective : eventData?.products?.[0]?.price?.effective, brand: eventData?.products?.[0]?.brand?.name, variant: eventData?.products?.[0]?.size?.toString(), category: { item_category: presentCartItem?.product?.attributes?.['custom-attribute-1'], item_category_1: presentCartItem?.product?.attributes?.['custom-attribute-2'], item_category_2: presentCartItem?.product?.attributes?.['custom-attribute-3'] }, quantity: isFromCartUpdate ? 1 : eventData?.products?.[0]?.quantity?.current, }, ], cart_products: cartProductsGtm, }, }, }; }, CART_UPDATE: (eventData) => { if (eventData?.operation === "increment_quantity") { return GTM_FUNCTIONS.CART_ADD(eventData, true); } if (eventData?.operation === "decrement_quantity") { return GTM_FUNCTIONS.CART_REMOVE(eventData, true); } return {}; }, CART_VIEW: (eventData) => { const cartProductsGtm = GTM_UTILS.getExistingCartItemsGtm(); const existingCartData = GTM_UTILS.getExistingCartItems(); GTM_UTILS.cartItemsBeforeRemoveFromCart = existingCartData; const cartIsEmpty = !existingCartData || !existingCartData?.value?.items?.length; return { event: "Cart", action: "Cart", ecommerce: { currencyCode: existingCartData?.value?.currency?.code ?? "INR", add: { actionField: { revenue: cartIsEmpty ? 0 : existingCartData?.value?.breakup_values?.display?.[2]?.value, }, products: cartIsEmpty ? [] : cartProductsGtm, }, }, }; }, CHECKOUT: (eventData, step) => { let actionField; switch (step) { case 1: actionField = { step: "1", cart_amount: eventData?.breakup_values?.display?.[0]?.value, event_id: eventData?.cart_id, action: "checkout", }; break; case 2: actionField = { step: "2", cart_amount: eventData?.breakup_values?.display?.[0]?.value, option: "Login", action: "checkout", }; break; case 3: actionField = { step: "3", cart_amount: eventData?.breakup_values?.display?.[0]?.value, option: "shipping address", action: "checkout", }; break; case 4: actionField = { step: "4", cart_amount: eventData?.breakup_values?.display?.[0]?.value, option: "address selected", action: "checkout", }; break; case 5: actionField = { step: "5", cart_amount: GTM_UTILS.cartItems?.breakup_values?.display?.[0]?.value, option: eventData?.payment?.payment_type, action: "checkout", }; break; } return { event: "checkout", ecommerce: { checkout: { actionField, products: GTM_UTILS.cartItems?.products?.map((item, index) => ({ name: `${item?.name}|${item?.uid}`, id: item?.uid, pid: item?.uid?.toString(), price: item?.price?.effective, mrp: item?.price?.marked, discount_percentage: item?.discount ?? 0, variant: item?.size?.toString(), category: item?.category?.name, category_id: item?.category?.uid, quantity: item?.quantity?.current, brand: item?.brand?.name, position: index + 1, })), }, }, }; }, CUSTOM_PRODUCT_LISTING: (eventData) => { const allCookies = GTM_UTILS.getAllCookies(); return { event: "impressionSent", action: "Product Impression", label: "Product List page", ecommerce: { currencyCode: "INR", index: eventData.items?.[0]?._custom_json?.["algolia_index_name"], queryID: eventData.items?.[0]?._custom_json?.["algolia_query_id"], anonymous_user_id: allCookies?.['_ALGOLIA'], user_id: FPI?.state?.user?._data?.user?.user_id || null, impressions: eventData.items.map((item, index) => ({ // index: item?._custom_json?.["algolia_index_name"], // queryID: item?._custom_json?.["algolia_query_id"], name: item?.name, brand: item?.brand?.name, id: item?.uid?.toString(), price: item?.price?.effective?.min?.toString(), category: { item_category: item?.attributes?.['custom-attribute-1'], item_category_1: item?.attributes?.['custom-attribute-2'], item_category_2: item?.attributes?.['custom-attribute-3'] }, position: item?.productPosition ?? index + 1, })), }, }; }, DY_CART_ADD: (eventData) => { const cartProductsGtm = GTM_UTILS.getExistingCartItemsGtm(); return { event: "addToCart", category: eventData?.products?.[0]?.category?.name, action: "addToCart", ecommerce: { currencyCode: eventData?.products?.[0]?.price?.currency_code, add: { actionField: { revenue: eventData?.products?.[0]?.price_per_unit?.base?.effective, action: "add", }, products: [ { name: eventData?.products?.[0]?.name, id: eventData?.products?.[0]?.uid.toString(), price: eventData?.products?.[0]?.price_per_unit?.base?.effective, brand: eventData?.products?.[0]?.brand, variant: eventData?.products?.[0]?.size?.toString(), category: eventData?.products?.[0]?.category?.name, quantity: 1, }, ], cart_products: cartProductsGtm, }, }, }; }, LOGIN: (eventData) => { const gtm = { userid: eventData?.user_id, email: eventData?.email, name: (eventData?.user?.first_name || "") + " " + (eventData?.user?.last_name || ""), telephone: eventData?.phone_number, event: "login", type: eventData?.method, }; return gtm; }, ORDER_PROCESSED: (eventData) => { return { event: "transaction", ecommerce: { purchase: { actionField: { id: eventData?.order_id?.toString(), order_id: eventData?.order_id?.toString(), option: "Order success", step: "6", affiliation: "Online Store", revenue: eventData?.breakup_values_raw?.total, // tax: "TBD!", shipping: eventData?.breakup_values_raw?.delivery_charges, payment_method: eventData?.shipments?.[0]?.payment_mode, total_quantity: eventData?.items?.length, cart_amount: eventData?.breakup_values_raw?.total, // coupon_applied: "TBD!", coupon_value: eventData?.breakup_values_raw?.coupon.toString(), // coupon: "TBD!", action: "purchase", }, products: GTM_UTILS.cartItems?.items?.map((item, index) => ({ name: `${item?.name}`, discount_percentage: item?.discount ?? 0, variant: item?.size?.toString(), brand: item?.brand?.name, position: index + 1, productId: item?.id, pid: item?.id?.toString(), price: item?.price, mrp: item?.price, category: { item_category: item?.attributes?.['custom-attribute-1'], item_category_1: item?.attributes?.['custom-attribute-2'], item_category_2: item?.attributes?.['custom-attribute-3'] }, category_id: item?.category?.uid, quantity: item?.quantity, })), }, }, }; }, PAGE_LOAD: () => { const allCookies = GTM_UTILS.getAllCookies(); return { event: "pageLoad", action: "pageLoad", ecommerce: { anonymous_user_id: allCookies?.['_ALGOLIA'], user_id: FPI?.state?.user?._data?.user?.user_id || null, }, } }, PLP_PRODUCT_CLICK: (eventData) => { const allCookies = GTM_UTILS.getAllCookies(); const userToken = FPI?.state?.user?._data?.user?.user_id ?? allCookies?.['_ALGOLIA'] ?? ''; return { userToken, index: eventData?.product?._custom_json?.["algolia_index_name"], queryID: eventData?.product?._custom_json?.["algolia_query_id"], objectIDs: eventData?.product?._custom_json?.["algolia_object_id"], event: "productClick", action: "productClick", category: eventData?.product?.attributes?.["custom-attribute-3"], label: "Product List page", ecommerce: { click: { actionField: { action: "click", list: "list", }, products: [ { name: eventData?.product?.name, id: eventData?.product?.uid?.toString(), price: eventData?.product?.price?.effective?.min, category: eventData?.product?.categories?.[0]?.name, position: eventData?.productPosition || 0, //This productPosition should be explicitly sent via eventData coming from the THEME code item_list_name: eventData?.product?.attributes?.["custom-attribute-3"], }, ], }, }, } }, CUSTOM_PRODUCT_DESCRIPTION: (eventData) => { return { event: "ProductDetail", action: "Product Detail", category: eventData?.product?.category?.uid?.toString(), ecommerce: { detail: { products: [ { name: eventData?.product?.name, id: eventData?.product?.uid?.toString(), price: eventData?.product?.price?.min?.toString(), category: { item_category: eventData?.product?.attributes?.['custom-attribute-1'], item_category_1: eventData?.product?.attributes?.['custom-attribute-2'], item_category_2: eventData?.product?.attributes?.['custom-attribute-3'] }, brand: eventData?.product?.brand?.name }, ], }, }, }; }, PRODUCT_DESCRIPTION: (eventData) => { return { event: "ProductDetail", action: "Product Detail", category: eventData?.product?.category?.uid?.toString(), ecommerce: { detail: { products: [ { name: eventData?.product?.name, id: eventData?.product?.uid?.toString(), price: eventData?.product?.price?.min?.toString(), category: eventData?.product?.category?.uid?.toString(), brand: eventData?.product?.brand?.name }, ], }, }, }; }, PRODUCT_LISTING: (eventData) => { return { event: "impressionSent", action: "Product Impression", label: "Product List page", ecommerce: { currencyCode: "INR", impressions: eventData.items.map((item, index) => ({ index: item?._custom_json?.["algolia_index_name"], queryID: item?._custom_json?.["algolia_query_id"], name: item?.name, id: item?.uid?.toString(), price: item?.price?.effective?.min?.toString(), category: item?.categories?.[0]?.name?.toString(), position: index + 1, })), }, }; }, WISHLIST_ADD: (eventData) => { return { event: "addToWishlist", category: eventData?.item?.categories?.[0]?.name, action: "addToWishlist", ecommerce: { currencyCode: "INR", add: { products: [ { name: eventData?.item?.name, id: eventData?.item?.uid?.toString(), brand: eventData?.item?.brand?.name, category: { item_category: eventData?.item?.attributes?.['custom-attribute-1'], item_category_1: eventData?.item?.attributes?.['custom-attribute-2'], item_category_2: eventData?.item?.attributes?.['custom-attribute-3'] }, position: 1, price: eventData?.item?.price?.effective?.max, }, ], }, }, }; }, WISHLIST_REMOVE: (eventData) => { return { event: "removeFromWishlist", category: eventData?.item?.categories?.[0]?.name, action: "removeFromWishlist", ecommerce: { currencyCode: "INR", add: { products: [ { name: eventData?.item?.name, id: eventData?.item?.uid?.toString(), brand: { name: eventData?.item?.brand?.name, uid: eventData?.item?.brand?.uid, }, category: eventData?.item?.categories?.[0]?.name, position: 1, price: eventData?.item?.price?.effective?.max, }, ], }, }, }; }, }; // ** MAIN EXECUTION ** function initializeEvent(EVENT_KEY) { let gtmEventKey = GTM_EVENT_KEYS?.[EVENT_KEY]; let getGtmData = GTM_FUNCTIONS?.[EVENT_KEY]; if (!gtmEventKey || !getGtmData) return; if (!GTM_UTILS.bagListenerAttached) { GTM_UTILS.bagListenerAttached = true; document.addEventListener('addToBagClicked', (data) => { GTM_UTILS.addToBagQuantity = data?.detail?.quantity || 1; }) } GTM_UTILS.cartItemsBeforeRemoveFromCart = GTM_UTILS?.getExistingCartItems() || {}; FPI.event.on(gtmEventKey, async (eventData) => { console.log(gtmEventKey, eventData); //Checkout step 1-3 if (gtmEventKey === "order.checkout" || gtmEventKey === "order.processed") { GTM_UTILS.cartItems = eventData; } if (gtmEventKey === "order.checkout") { for (let step = 1; step <= 3; step++) { dataLayer.push(getGtmData(eventData, step)); } return; } //Checkout step 4 else if (gtmEventKey === "order.address_information") { getGtmData = GTM_FUNCTIONS?.CHECKOUT; dataLayer.push(getGtmData(eventData, 4)); return; } //Checkout step 5 else if (gtmEventKey === "order.payment_information") { getGtmData = GTM_FUNCTIONS?.CHECKOUT; dataLayer.push(getGtmData(eventData, 5)); return; } else if ( gtmEventKey === "cart.update" || gtmEventKey === "cart.remove" || gtmEventKey === "cart.newProduct" ) { await GTM_UTILS.customDelay(0.3); } dataLayer.push(getGtmData(eventData)); }); } Object.keys(GTM_EVENT_KEYS).map(initializeEvent); -->