Xperience the difference


Trusted by 50 Million Happy Customers

/collections/eid-sale-1
Impex Trust Bar

Impex is a Global Consumer Appliances Brand

50 Million+
Happy Families
25+
Years of Trust
10+
Countries
` // kwikpass icon for mobile - if user is not logged in const KwikpassNotLoggedIconMobile = `
${userIcon}
` // dropdown for desktop (opens on clicking kwikpass icon if user logged in) const drawerhtmlDesktop = ``; // dropdown for mobile (opens on clicking kwikpass icon if user logged in) const drawerhtmlMobile = ``; const kwikpassLoggedInIcon = `
${userIcon}
`; const kwikpassLoggedInIconMobile = `
${userIcon}
`; // It will change based on theme - Desktop const profileButtonElement = document.querySelector('.account-button.header-actions__action') const personIconElement = profileButtonElement?.parentElement const html = ` ${KwikpassNotLoggedIcon} ${kwikpassLoggedInIcon} ${drawerhtmlDesktop} `; if(!document.getElementsByClassName("header--icon")?.[0]){ // Detect theme const isOldTheme = document.querySelector('.account-popover') !== null; const kwipassDesktopNode = document.createElement('div') // Add theme-specific class kwipassDesktopNode.className = isOldTheme ? "header--icon kp-old-theme" : "header--icon kp-new-theme" kwipassDesktopNode.innerHTML = html // Hide original and insert Kwikpass button (works for both themes) if(personIconElement && profileButtonElement) { profileButtonElement.style.display = 'none'; personIconElement.insertBefore(kwipassDesktopNode, profileButtonElement); } } //mobile - Get the second instance of account button const allAccountButtons = document.querySelectorAll('.account-button.header-actions__action') const profileButtonElementMbl = allAccountButtons[1] // Second instance (mobile) const personIconElementMbl = profileButtonElementMbl?.parentElement const htmlmobile = ` ${KwikpassNotLoggedIconMobile} ${kwikpassLoggedInIconMobile} ${drawerhtmlMobile} `; if(!document.getElementsByClassName("header--icon--mobile")?.[0]){ // Detect theme const isOldThemeMobile = document.querySelector('.account-drawer') !== null; const kwipassMobileNode = document.createElement('div') // Add theme-specific class kwipassMobileNode.className = isOldThemeMobile ? "header--icon--mobile kp-old-theme" : "header--icon--mobile kp-new-theme" kwipassMobileNode.innerHTML = htmlmobile // Hide original and insert Kwikpass button (works for both themes) if(personIconElementMbl && profileButtonElementMbl) { profileButtonElementMbl.style.display = 'none'; personIconElementMbl.insertBefore(kwipassMobileNode, profileButtonElementMbl); } } } function addLoginButtonForHorizon(){ function updateDOM(isKwikpassLogin = true) { token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); const isLogout = sessionStorage.getItem('isLogout'); const phoneNumber = getValueFromCookiesOrLocalStorage('notify_phone_number'); if ((!token && !isLogout) || (token && !phoneNumber)) { openIframe('kp_sso_token') } const drawerElementMobile = document.getElementById("kwikpass-drawer-mobile") if(drawerElementMobile){ if(token){ document.getElementById("kp-login-button-header-logo-mobile").style.display = "none" document.getElementById("loggedin-icons-mobile").style.display = "block" }else{ document.getElementById("kp-login-button-header-logo-mobile").style.display = "flex" document.getElementById("loggedin-icons-mobile").style.display = "none" drawerElementMobile.style.display = "none" } } const drawerElement = document.getElementById("kwikpass-drawer-desktop") if(drawerElement){ if(token){ document.getElementById("kp-login-button-header-logo").style.display = "none" document.getElementById("loggedin-icons").style.display = "block" }else{ document.getElementById("kp-login-button-header-logo").style.display = "flex" document.getElementById("loggedin-icons").style.display = "none" drawerElement.style.display = "none" } } // shopify logout const logoutLink = document.querySelectorAll('a[href*="/account/logout"]'); logoutLink.forEach((element) => { element.addEventListener("click", (event) => { event.preventDefault() handleLogout() }) }); const logoutElement = document.getElementById('logout-button-desktop') if(logoutElement) logoutElement.addEventListener('click', handleLogout); //mobile const logoutElementMobile = document.getElementById('logout-button-mobile') if(logoutElementMobile) logoutElementMobile.addEventListener('click', handleLogout); } let isElementsWithAccountClickable = true; // Add a click event listener to the document document.addEventListener('click', function(event) { const dropdownButton = document.getElementsByClassName('header--icon') ?. [0] // Check if the clicked element is the dropdown button or inside the dropdown menu const isClickInsideDropdown = dropdownButton?.contains(event.target); // If the click is outside the dropdown, hide the dropdown const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); const crossIconElement = document.getElementById("icon-close-kwikpass") const drawerElement = document.getElementById("kwikpass-drawer-desktop") if (! isClickInsideDropdown && isDropdownVisible && token) { drawerElement.style.display = "none"; crossIconElement.style.display = "none"; kwikpassLoggedInElement.style.display = "flex"; isDropdownVisible = ! isDropdownVisible; } //mobile const dropdownButtonMbl = document.getElementsByClassName('header--icon--mobile')?.[0] // Check if the clicked element is the dropdown button or inside the dropdown menu const isClickInsideDropdownMbl = dropdownButtonMbl?.contains(event.target); // If the click is outside the dropdown, hide the dropdown const kwikpassLoggedInElementMbl = document.getElementById("icon-kwikpass-mobile"); const crossIconElementMbl = document.getElementById("icon-close-kwikpass-mobile") const drawerElementMbl = document.getElementById("kwikpass-drawer-mobile") if (! isClickInsideDropdownMbl && isDropdownMobileVisible && token) { drawerElementMbl.style.display = "none"; crossIconElementMbl.style.display = "none"; kwikpassLoggedInElementMbl.style.display = "flex"; isDropdownMobileVisible = !isDropdownMobileVisible; } }); document.addEventListener('DOMContentLoaded', function() { updateDOM(); }); window.addEventListener('update-dom', function() { const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); const crossIconElement = document.getElementById("icon-close-kwikpass") const drawerElement = document.getElementById("kwikpass-drawer-desktop") if(drawerElement) drawerElement.style.display = "none"; if(crossIconElement) crossIconElement.style.display="none"; if(kwikpassLoggedInElement) kwikpassLoggedInElement.style.display="flex"; const kwikpassLoggedInElementMbl = document.getElementById("icon-kwikpass-mobile"); const crossIconElementMbl = document.getElementById("icon-close-kwikpass-mobile") const drawerElementMbl = document.getElementById("kwikpass-drawer-mobile") if(drawerElementMbl) drawerElementMbl.style.display = "none"; if(crossIconElementMbl) crossIconElementMbl.style.display="none"; if(kwikpassLoggedInElementMbl) kwikpassLoggedInElementMbl.style.display="flex"; updateDOM(); }); addProfileIconInHorizon() updateDOM(); } function handleDrawer1() { const token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); if (token) { const kwikpassLoggedInElement = document.getElementById("icon-kwikpass"); const crossIconElement = document.getElementById("icon-close-kwikpass"); const drawerElement = document.getElementById("kwikpass-drawer-desktop"); // display cross icon and hide icon-kwikpass if isDropdownVisible = true else display icon-kwikpass and hide cross icon if(isDropdownVisible){ drawerElement.style.display = "none"; crossIconElement.style.display="none"; kwikpassLoggedInElement.style.display="flex"; }else{ drawerElement.style.display = "block"; crossIconElement.style.display="flex"; kwikpassLoggedInElement.style.display="none"; } isDropdownVisible = !isDropdownVisible; } } function addLoginButton(){ function updateDOM() { token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); const isLogout = sessionStorage.getItem('isLogout'); const phoneNumber = getValueFromCookiesOrLocalStorage('notify_phone_number'); if ((!token && !isLogout) || (token && !phoneNumber)) { openIframe('kp_sso_token') } const drawerElement = document.getElementById("kwikpass-drawer-desktop") if(drawerElement){ if(token){ document.getElementById("kp-login-button-header-logo").style.display = "none" document.getElementById("loggedin-icons").style.display = "block" }else{ document.getElementById("kp-login-button-header-logo").style.display = "flex" document.getElementById("loggedin-icons").style.display = "none" drawerElement.style.display = "none" } } // shopify logout const logoutLink = document.querySelectorAll('a[href*="/account/logout"]'); logoutLink.forEach((element) => { element.addEventListener("click", (event) => { event.preventDefault() handleLogout() }) }); const logoutElement = document.getElementById('logout-button-desktop') if(logoutElement) logoutElement.addEventListener('click', handleLogout); } const elementsWithAccount = document.querySelectorAll('a[href="/account"]'); elementsWithAccount.forEach((element) => { element.addEventListener('click', async (e) => { e.preventDefault(); const customerId = getCustomerId() token = getValueFromCookiesOrLocalStorage(XGokwikCoreToken(window.merchantInfo.environment)); kpHandleLogin('/account'); }); }); document.addEventListener('DOMContentLoaded', function() { updateDOM(); }); window.addEventListener('update-dom', function() { updateDOM(); }); //TODO: update this with a query for the required button const loader = ` ` /*removing existing profile(person) icon - person icon is not present in this store*/ const profileButtonElement = document.querySelector(ICON_SELECT_QUERY) || document.querySelector(HORIZON_PROFILE_ICON); // defining css and add it to style tag in head function appendCss() { let css = ` .kploader { display: none; animation: rotate 1.5s linear infinite; } @keyframes rotate { 100% { transform: rotate(360deg); } } .kp-disabled-text-color{ cursor: not-allowed; } #logout-button-desktop{ cursor: pointer; display: flex; justify-content: center; align-items: center; gap: 8px; font-size: 14px; color: #344054; font-style: normal; font-weight: 600; line-height: 20px; width: 100%; border-radius: 8px; padding: 8px 14px;; border: 1px solid var(--gray-300, #d0d5dd); background: var(--base-white, #fff); box-shadow: 0px 1px 2px 0px rgba(16, 24, 40, 0.05); } #loggedin-icons{ align-self: center; display: none; } #kwikpass-drawer-desktop{ padding: 16px; display: none; right: 0%; width: 18rem; position: absolute; top: 100%; box-shadow: 0px 0px 32px 0px rgba(16, 24, 40, 0.32); border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; z-index: 999; background:#fff!important; } #kwikpass-drawer-desktop > ul{ margin: 0px 0px 10px 0px; padding: 0; width: 100%; } #kwikpass-drawer-desktop >ul >a{ cursor: pointer; width: 100%; display: flex!important; justify-content: space-between; align-items: center; padding: 0; color: inherit; margin-left:0!important; text-decoration: none; } #kwikpass-drawer-desktop >ul >a:hover , #kwikpass-drawer-desktop >ul >a:focus { text-decoration: none; } #kwikpass-drawer-desktop >ul >a:focus,#kwikpass-drawer-desktop >ul >a:active { text-decoration: none; } #kwikpass-drawer-desktop >ul >a:focus .kploader { display: block; } #kwikpass-drawer-desktop >ul >a:not(:focus) .kploader { display: none; } #kwikpass-drawer-desktop > ul > a > p { font-size: 14px; font-style: normal; font-weight: 500; line-height: 142.857%; display: inline-flex; gap: 8px; align-items: center; margin: 10px 0 10px 0; color: #000; } .header--icon{ cursor: pointer; position: relative; display: inline-flex; } path#svgkp-path { stroke-width: 1; } #icon-close-kwikpass{ display: none; border-radius: 50px; border: 1px solid; margin: 0; padding: 2px; align-items: center; justify-content: center; margin-left:3px; } `; var style = document.createElement('style'); style.innerHTML = css; document.getElementsByTagName('head')[0].appendChild(style); } // function call to append css to style tag appendCss() // existing user icon to show in the header // TODO : fetch user icon form backend const userIcon = ` `; // kwikpass icon for desktop - if user is not logged in const KwikpassNotLoggedIcon = `` // dropdown for desktop (opens on clicking kwikpass icon if user logged in) const drawerhtmlDesktop = ``; const kwikpassLoggedInIcon = `
${userIcon}
`; // It will change based on theme const personIconElement = document.querySelector(ICON_SELECT_QUERY)?.parentElement || document.querySelector(HORIZON_PROFILE_ICON)?.parentElement const html = ` ${KwikpassNotLoggedIcon} ${kwikpassLoggedInIcon} ${drawerhtmlDesktop} `; if(!document.getElementsByClassName("header--icon")?.[0]){ const kwipassDesktopNode = document.createElement('div') kwipassDesktopNode.className="header--icon" kwipassDesktopNode.innerHTML = html personIconElement?.replaceChild(kwipassDesktopNode,profileButtonElement) } let timerId=null; document.getElementById('kp-login-button-header-logo')?.addEventListener('click', () => { clearTimeout(timerId); timerId = null; handleKpAndShopifyLogin(); }); const kwikpassMobileIconElement = document.getElementById('kp-login-button-header-logo-mobile'); if (kwikpassMobileIconElement) { kwikpassMobileIconElement.addEventListener('click', () => { clearTimeout(timerId); timerId = null; handleKpAndShopifyLogin(); }); } updateDOM(); } let isdomReady = false; document.addEventListener('DOMContentLoaded', function() { isdomReady = true; }, { once: true }); function handleManualIntegration(){ if(isdomReady){ handleDOMUpdate(); }else{ document.addEventListener('DOMContentLoaded', function() { handleDOMUpdate(); }); } window.addEventListener('update-dom', function() { handleDOMUpdate(); }); } function handleNewVersionsOfHorizon(){ const headerEl = document.querySelector("header"); if (headerEl) { // Create an observer to watch attribute changes const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if ( mutation.type === "attributes" && mutation.attributeName === "data-hydrated" ) { const newValue = headerEl.getAttribute("data-hydrated"); if (newValue === "true") { addProfileIconInHorizon(); const drawerElementMobile = document.getElementById("kwikpass-drawer-mobile") if(drawerElementMobile){ if(token){ document.getElementById("kp-login-button-header-logo-mobile").style.display = "none" document.getElementById("loggedin-icons-mobile").style.display = "block" }else{ document.getElementById("kp-login-button-header-logo-mobile").style.display = "flex" document.getElementById("loggedin-icons-mobile").style.display = "none" drawerElementMobile.style.display = "none" } } const drawerElement = document.getElementById("kwikpass-drawer-desktop") if(drawerElement){ if(token){ document.getElementById("kp-login-button-header-logo").style.display = "none" document.getElementById("loggedin-icons").style.display = "block" }else{ document.getElementById("kp-login-button-header-logo").style.display = "flex" document.getElementById("loggedin-icons").style.display = "none" drawerElement.style.display = "none" } } const logoutElement = document.getElementById('logout-button-desktop') if(logoutElement) logoutElement.addEventListener('click', handleLogout); //mobile const logoutElementMobile = document.getElementById('logout-button-mobile') if(logoutElementMobile) logoutElementMobile.addEventListener('click', handleLogout); // Stop observing once done (optional) observer.disconnect(); } } } }); observer.observe(headerEl, { attributes: true }); setTimeout(() => { observer.disconnect(); }, 10000); } } function addScripts(){ var kwikpassCoreFnUrl="https://pdp.gokwik.co/kwikpass/kwikpass-core-functions-min.js" var kwikpassMerchantV2Url="https://pdp.gokwik.co/kwikpass/plugin/build/kp-merchant-v2.js"; var kwikpassSDKUrl="https://pdp.gokwik.co/kwikpass/plugin/build/kp-shopify-app-sdk.js"; var kpCoreFnScript = document.createElement('script'); kpCoreFnScript.src = kwikpassCoreFnUrl; kpCoreFnScript.async=false; kpCoreFnScript.onload = () => { if(document.querySelector(ICON_SELECT_QUERY)){ addLoginButton(); }else if(document.querySelector(HORIZON_PROFILE_ICON)){ handleNewVersionsOfHorizon(); addLoginButtonForHorizon(); }else{ handleManualIntegration(); } }; var kpMerchantV2Script = document.createElement('script'); kpMerchantV2Script.src = kwikpassMerchantV2Url; kpMerchantV2Script.async=false; var kpMerchantV2SDKScript = document.createElement('script'); kpMerchantV2SDKScript.src = kwikpassSDKUrl; kpMerchantV2SDKScript.async=false; document.body.appendChild(kpCoreFnScript); document.body.appendChild(kpMerchantV2Script); document.body.appendChild(kpMerchantV2SDKScript); } const __kp_mid = "256iiimjb222op"; if(!__kp_mid){ window.merchantInfo = { ...window.merchantInfo, environment: "production", type: "merchantInfo", integrationType: "PLUGIN", } var updateThemeMetaFieldGet = 'https://gkx.gokwik.co/kp/api/v1/shopify-app/update-theme-meta-field'; const options = { method: 'GET', headers: {accept: 'application/json', shop: window.Shopify.shop } }; fetch(updateThemeMetaFieldGet, options) .then(response => response.json()) .then(response => { var data = response.data; window.merchantInfo["mid"] = data?.mid; addScripts(); }) .catch(err => console.error(err)); }else{ window.merchantInfo = { ...window.merchantInfo, mid: __kp_mid, environment: "production", type: "merchantInfo", integrationType: "PLUGIN", } addScripts(); }