{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/frontend/lang/constants.mjs","webpack:///./src/EbaySweden.TouchWeb/static/script/packages/debounce.js","webpack:///./src/EbaySweden.TouchWeb/static/script/packages/format.js","webpack:///./src/frontend/utils/nextjs.js","webpack:///./src/EbaySweden.TouchWeb/static/script/packages/logger.js","webpack:///./node_modules/@tradera/blueprint/theme/icons-colored/google.svg","webpack:///./src/frontend/lang/translate.jsx","webpack:///./src/frontend/constants/endpoints.js","webpack:///./src/frontend/lang/boot-languages.js","webpack:///./src/frontend/utils/window.js","webpack:///./src/frontend/utils/date.js","webpack:///./src/frontend/services/socket-io-channel.js","webpack:///./node_modules/underscore/modules/defaults.js","webpack:///./node_modules/underscore/modules/allKeys.js","webpack:///./node_modules/underscore/modules/template.js","webpack:///./node_modules/underscore/modules/templateSettings.js","webpack:///./src/frontend/components/toasts/item-toast.module.scss","webpack:///./src/frontend/components/toasts/item-toast.jsx","webpack:///./src/frontend/components/toasts/message-toast.jsx","webpack:///./src/frontend/services/toasts.js","webpack:///./src/frontend/services/toast-queue.js","webpack:///./node_modules/@tradera/blueprint/theme/icons2/network-apple.svg","webpack:///./src/frontend/utils/http.js","webpack:///./src/frontend/constants/hosts.js","webpack:///./src/frontend/utils/url.js","webpack:///./src/frontend/utils/format.js","webpack:///./src/frontend/services/boot-site-wide-notifications.js","webpack:///./src/EbaySweden.TouchWeb/static/script/app.js","webpack:///./src/frontend/apps/tradera/configure-dayjs.js","webpack:///./src/frontend/utils/time-api.js","webpack:///./src/frontend/utils/server-date.js","webpack:///./src/EbaySweden.TouchWeb/static/script/packages/init-data.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/password-validator.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/track-login-event.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/sms-check-ui.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/data/sms-check-service.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/login-button-ui.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/get-login-locale-from-language.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/apple-login-button.jsx","webpack:///./node_modules/@tradera/blueprint/theme/icons2/facebook.svg","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/facebook-login-button.jsx","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/google-login-button.jsx","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/social-logins.jsx","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/bank-id-verification-modal.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/bank-id-verification.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/login.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/pages/change-password.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/pages/enter-cellphone-verification-code.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/pages/password-recovery.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/pages/login.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/pages/verify-bank-id.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/pages/bank-id-password-recovery.js","webpack:///./src/frontend/apps/syi/script/app_react/utils/language.js","webpack:///./src/EbaySweden.TouchWeb/static/script/utils/modules.js","webpack:///./src/frontend/utils/versions.js","webpack:///./src/frontend/state/environment/reducer.js","webpack:///./src/frontend/state/environment/initial-state.js","webpack:///./src/frontend/utils/api.js","webpack:///./src/EbaySweden.TouchWeb/Areas/Login/static/script/app/ui/bank-id-recovery-ui.js","webpack:///./node_modules/@tradera/blueprint/theme/icons2/info.svg","webpack:///./src/frontend/services/global-socket.js","webpack:///./src/frontend/utils/object.js","webpack:///./src/frontend/state/environment/actions.js","webpack:///./src/frontend/components/alink/alink.jsx","webpack:///./src/EbaySweden.TouchWeb/static/script/utils/environment.js","webpack:///./src/EbaySweden.TouchWeb/static/script/app/ui/google-tagmanager-helper.js","webpack:///./src/frontend/hooks/use-is-mobile.js","webpack:///./src/frontend/utils/is-prerender.js","webpack:///./src/frontend/utils/script.js","webpack:///./src/EbaySweden.TouchWeb/static/script/packages/analytics.js","webpack:///./src/EbaySweden.TouchWeb/static/script/app/ui/google-tagmanager-service.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","exports","module","l","e","promises","Promise","resolve","reject","href","fullhref","p","existingLinkTags","document","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onerror","onload","event","errorType","realHref","target","err","Error","code","request","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","src","jsonpScriptSrc","error","clearTimeout","chunk","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","NS_TOUCHWEB","NS_ATTRIBUTES","DEFAULT_LANGUAGE","URL_LANGUAGES","I18N_NAMESPACES","SUPPORTED_LANGUAGES","TRANS_SUFFIX","debounce","func","wait","immediate","context","this","args","arguments","later","callNow","isLocaleFormattingSupportedInBrowser","toLocaleString","toLocaleStringSupportsLocales","Intl","NumberFormat","formatNumber","number","format","formatMe","isServer","isNextJs","getElementById","logger","scope","sentryException","JSON","stringify","Sentry","_extends","source","styles","props","React","viewBox","xmlns","clipRule","fillRule","fill","useTranslator","useTranslation","ready","wrappedT","useCallback","i18nKey","withTranslator","WrappedComponent","WithTranslator","displayName","withUrlLocalizer","WithUrlLocalizer","toLocalizedUrl","useUrlLocalizer","useCurrentLanguage","i18n","language","urlLocalizer","useRef","url","current","Trans","children","defaults","getSiteBaseUrl","getWindow","location","host","protocol","webApiUrl","initData","touchWebUrl","AVAILABLE_SHIPPING_COUNTRIES","BANK_ID_AUTHENTICATE","BANK_ID_PROGRESS","BRAND_LIST_PAGE","BRAND_PAGE","CAMPAIGN","campaignId","replace","CART_UPDATE_SUMMARY","CART_OVERVIEW_VIEW","CART_ADD_ITEM","CART_REMOVE_ITEMS","CART_SET_ITEM_QUANTITY","CHARITY_EARNINGS_TICKER","CMS_API","cmsApiUrl","COMBINED_SHIPPING_UPSELL","FAVORITE_SELLER_ADD","FAVORITE_SELLER_REMOVE","FAVOURITE_SELLERS","GEO_PUBLIC_API_URL","process","NEXT_PUBLIC_GEO_PUBLIC_API_BASE_URL","geoPublicApiUrl","GET_PROFILE_FEEDBACK_ITEMS","HYPERWALLET_PAYOUT_COMPLETE","HYPERWALLET_PAYOUT_TOKEN","HYPERWALLET_PAYOUT","INTERNATIONAL_SHIPPING_CALCULATOR","ITEM_DESCRIPTION","itemId","ITEM_DISCOUNT_QUOTA","LAST_CHANCE","MEMBER_PAYOUT_SETTINGS_REMOVE","MEMBER_PAYOUT_SETTINGS","MEMBER_SYSTEM_MESSAGES","ORDER_CHECKOUT_CONFIRMATION","ORDER_CHECKOUT_PAYMENT","orderCheckoutPaymentUrl","ORDER_CHECKOUT_REQUEST_COMBINED_PRICE","ORDER_CHECKOUT_CREATE_UNCOMMITTED_PURCHASE_ORDER","ORDER_PURCHASE_SHOP_ITEMS","PAYMENT_SWISH_OPTOUT","PERSONALISED_SUGGESTIONS","SEARCH_SUGGESTIONS","SEARCH","SELLING_CAMPAING_CODE","SELLING_DRAFT_LOAD_FROM_TEMPLATE","SELLING_DRAFT_SAVE","SELLING_DRAFT","draftId","SELLING_DRAFTS_DELETE","SELLING_DRAFTS","SELLING_ITEM_PUBLISH","SELLING_ITEM_STATUS","SELLING_ITEM_UPDATE","SELLING_PREVIEW","SELLING_SCRIBE_DURATION","SELLING_SCRIBE_INCREMENT","SELLING_SCRIBE_SESSION_DURATION","SELLING_SCRIBE_SESSION_START","SELLING_SCRIBE_VALIDATION_ERRORS","SELLING_SHIPPING_CALCULATOR","SELLING_TEMPLATE_SAVE","SELLING_TEMPLATE","templateId","SELLING_TEMPLATES_COUNT","SELLING_TEMPLATES_DELETE","SELLING_TEMPLATES","SETTINGS","SHIPPING_PROVIDERS","SWISH_APP2APP_CALLBACK","SWISH_APP2APP_CALLBACK_MARK_AS_PAID","TOUCHWEB_URL","TRANSLATE_PROFILE_FEEDBACKITEMS","WEB_API","WISHLIST","WISHLIST_ADD","WISHLIST_REMOVE","START_OFF_PLATFORM_CHECKOUT","UPI","purchaseOrderId","INR","PURCHASE_ORDER","MARKETING_PUBLIC_API","i18nInitialized","bootLanguages","translations","touchwebTranslations","attributeTranslations","translationResources","map","namespace","attributeResources","resources","concat","prev","use","initReactI18next","LanguageDetector","init","initOptions","detection","order","htmlTag","html","defaultNS","fallbackLng","debug","keySeparator","nsSeparator","interpolation","escape","str","formatNumberWithSeparators","react","useSuspense","missingKeyLoggingConfig","saveMissing","saveMissingTo","missingKeyHandler","missingInterpolationHandler","text","whenInitialized","getCurrentLanguage","windowForServer","cookie","innerWidth","navigator","userAgent","dayjs","extend","utc","timezone","swedishTimeZoneDate","date","tz","formatUtcDateAsSwedishTimeZoneDate","getTimeSpanParts","seconds","options","optionsWithDefaults","startUnit","endUnit","parts","remaining","started","TIME_SPAN_UNIT_LENGTHS","part","Math","floor","TIME_SPAN_UNITS","DAYS","HOURS","MINUTES","SECONDS","MissingSocketIoServerUrl","ReferenceError","MissingRoomId","isAllowedToConnect","isPrerender","SocketIoChannel","constructor","socketIoServerUrl","autoConnect","socket","io","events","rooms","on","forEach","room","join","payload","Type","callback","Event","contexts","socketIo","connect","isConnected","emit","has","add","leave","rejoinOnConnect","delete","addEventListener","removeEventListener","off","connected","disconnect","obj","isObject","keys","noMatch","templateSettings","evaluate","interpolate","escapes","escapeRegExp","escapeChar","match","bareIdentifier","settings","oldSettings","matcher","RegExp","index","offset","render","argument","variable","test","Function","template","ItemToast","imageUrl","itemUrl","shortDescription","eventData","useLink","className","title","alt","ToastMessage","newLeadingBidAmount","price","timeLeftMinutes","MessageToast","header","items","inProgress","queuedToasts","item","ttlInMinutes","timeStamp","Date","now","next","itemData","notifyDone","isInProgress","getLength","openNextToast","a","nextItem","queueLength","toastOptions","autoClose","max","onClose","webApiClient","response","toast","handleNotification","visibilityState","showItemOutbiddedToast","showItemFirstBidToast","showItemSoldToast","showItemWonToast","showItemPaidToast","showItemWishListReminderToast","showSuccessToast","TYPE","SUCCESS","showErrorToast","ERROR","httpClient","baseUrl","shouldLocalizeUrl","axiosWrapper","httpClientConfig","axiosCaller","cancelTokenId","axiosConfig","version","utilizeCancelToken","cancel","cancelToken","safeUrl","substring","getSafeUrl","localizedUrl","getLanguage","axiosWithTokenRefresh","checkResponseVersion","finalizeResponse","catch","handleError","axiosConfigs","authenticated","axios","config","post","put","trpcClient","endpoint","client","unpackResponse","command","commandName","query","queryName","defaultClient","touchWebClient","ENDPOINTS","marketingApiClient","memberIdentificationClient","translationOnDemandClient","SPA_PATH_REGEX","formatQueryParams","queryParams","categoryId","formattedQueryParams","isSpaLink","urlOrPath","pathname","stripCategoryIdFromQueryParameters","stripHost","HOSTS","stripItmFromQueryParameters","itm_source","itm_medium","stripPaginationFromQueryParameters","spage","paging","page","fe","stripSavedQueryNameFromQueryParameters","savedQueryName","toAbsoluteUrl","relativeUrl","toAbsoluteUrlFromObject","search","languageCodeIso2","find","domain","indexOf","isAbsolute","isAbsoluteUrl","urlObject","origin","localisedPathname","setLanguagePrefix","toQueryParameters","qs","parse","ignoreQueryPrefix","toRelativeTraderaUrl","toSearchString","addQueryPrefix","encode","skipNulls","arrayFormat","path","languagePrefix","matches","firstMatch","getLanguagePrefixFromUrl","getBackToHereRedirectUrl","forceRedirect","round","random","formatEndDate","endDateInput","nowDateInput","endDate","isSameOrAfter","hours","diff","minutes","timeParts","count","isAfter","separator","toString","Number","formatSellerDsrAverage","locale","minimumFractionDigits","maximumFractionDigits","formatPrice","formattedPrice","opts","style","currency","currencyDisplay","useGrouping","formatDateWithDayOfWeek","dateString","weekday","year","month","day","DateTimeFormat","refreshLoginState","isLoggedIn","isBetween","getServerDate","gtm","loadGtmScript","featureSwitches","socketUrl","joinMemberRoom","getGlobalSocket","isRetry","success","ItemId","NewLeadingBidAmount","Price","TimeLeftMinutes","bootSiteWideNotifications","webLiveUrl","memberId","split","isSpaModule","loadSpaModule","initModule","default","loadModule","loadedModule","runModule","body","handleModuleError","queryServerTime","retryCount","latencyLimit","maxRetries","requestStart","currentTime","start","latency","getServerTime","_minServerCheckInterval","_serverDiff","_didGetServerResponse","_lastCheckAtMs","updateServerDiff","serverTimeObject","timeNowOnServer","getTime","_initialPromise","initDataEL","getInitData","component","defaultAttrs","passwordInput","passwordConfirmInput","errorMessageCopy","errorMessageNode","_validatePasswordLength","val","_validatePasswordEquality","_validatePasswordMainField","removeClass","addClass","_validatePassword","after","select","eventType","categoryName","errorMessage","_triggerPasswordRecoveryEvents","_triggerErrorEvent","trigger","category","action","label","InitData","pageName","userTriggered","_triggerLoginEvent","attr","smsSid","_getSmsCheckPayload","sid","_triggerSmsCheck","_showError","evt","successful","_smsCheck","_post","WithAjax","_loginSubmit","loginButton","$node","prop","LOCALES","sv","en","de","da","getLoginLocaleFromLanguage","AppleLoginButton","appleClientId","compact","disabled","isModal","onError","tabIndex","useState","isLoading","setIsLoading","onClick","loadScript","AppleID","auth","clientId","redirectURI","state","usePopup","Analytics","trackEvent","signIn","appleSignInResponse","user","localStore","setItem","STORAGE_KEYS","APPLE_ID_USER","AccessToken","authorization","id_token","UserId","verifyResponse","parent","returnUrl","provider","propTypes","defaultProps","FacebookLoginButton","facebookAppId","FB","appId","loginAnalytics","set","LOGIN","FACEBOOK","login","loginResponse","status","accessToken","authResponse","userId","userID","LoginSignupEvents","GoogleLoginButton","googleAppId","getGoogleAuth2","gapi","promiseResolve","load","auth2","client_id","fetch_basic_profile","performLogin","googleUser","getAuthResponse","log","GOOGLE","top","SocialLogins","tabIndexStart","cookiesEnabled","GdprSettings","isFunctionalEnabled","isAnySocialLoginEnabled","setError","isMobile","useIsMobile","attributes","confirmButton","errorContainer","errorDiv","progressDiv","startDiv","bankIdAppLnk","successDiv","isBankIdCancelled","verifyBankId","self","$","purpose","displayBankIdError","pollProgress","autoStartToken","authenticationStarted","isMobileOrTablet","startBankIdApplication","msg","_get","isCompleted","vendor","opera","substr","_timer","bankIdAutoStartToken","showPopup","confirmPasswordModalTemplate","bankIdVerifyModal","showBankIdModal","content","getHtmlForModal","cssClass","nonDismissible","BankIdVerificationModal","attachTo","itemTitle","templateFn","warnIfDevBuild","currentOrSet","PasswordValidator","TrackLoginEvent","SmsCheckService","SmsCheckUI","LoginButtonUI","cookieUtil","expireDate","setTime","createCookie","socialLoginElement","ReactDOM","bootLayout","BankIdVerification","BankidVerificationUI","subModule","mod","toLocalizedRiotUrl","querySelector","isSinglePageApp","parseAppVersion","String","filter","isNaN","major","minor","patch","isSupportedMinimumVersion","appVersionString","minimumVersionString","appVersion","minimumVersion","createSlice","initialState","splitTestGroups","reducers","initialize","environment","isHybridAppContext","isNativeAppContext","isNativeAppWithApplyPaySupport","isNativeAppWithSwishCallbackSupport","splitTests","environmentHash","nullifyUndefinedProperties","isIOS","isMobileDevice","isMobileSafari","isSpaNavigationEnabled","frameElement","initializeServer","headers","featureToggles","getSelectorsByUserAgent","isAndroid","appOsVersion","hybridAppDevice","hybridAppVersion","Boolean","isHybridAppContextForAndroid","includes","isHybridAppContextForIos","getInitialServerState","setEnvironmentHash","setIsSpaNavigationEnabled","actions","reducer","API_ERRORS","IGNORE_ME","ABORTED","CANCELLED","NETWORK","TIMEOUT","VERSION_MISMATCH","LOGGED_OUT","defaultJsonRequestHeaders","Accept","withCredentials","notAuthenticated","isUnauthorized","statusCode","submitOriginalRequest","antiCacheRegExp","handleMissingAuthToken","refreshAccessToken","handleErrorAfterRefresh","errorAfterRefreshToken","handleUnauthorized","checkLoginState","errorResponseInterceptor","responseString","responseStatus","errorCode","isMissingAuthToken","axiosInstance","instance","interceptors","cancelTokens","tokenId","CancelToken","token","checkResponseLoggedOut","statusHandlers","isCancel","reloadOnUnauthorized","reload","logError","resetEmailLnk","divInProgress","divCompleted","hdnRoute","setNewPwdbtn","divError","divErrorContainer","showError","showComplete","startPolling","globalSocket","mapObject","isUndefined","updateEnvironmentHash","dispatch","getState","ALink","givenOnClick","otherProps","useDispatch","useSelector","to","isDev","moduleName","onModuleLoaded","isModuleLoaded","MutationObserver","mutationsList","attributeName","observe","buildInitialGtmDataLayerFromInitData","initialDataLayer","userLanguage","memberEmail","memberHashedEmail","memberEmailSha256","memberEmailMd5","memberFirstName","memberLastName","memberCountry","loginState","isNotInIframe","blueshiftEventApiKey","isQuantcastConsentEnabled","isDigitalAudienceTrackingEnabled","quantcastSite","useBreakpoint","timeoutTimer","async","pushToDataLayer","dataLayer","trackPageView","ga","isNonInteractive","analyticsData","trackTiming","eventCategory","eventAction","eventLabel","eventValue","eventNonInteractive","hitCallback","level","Info","spaPageViewTrackingEnabled","_newPageFromServer","w","f","insertBefore","_getDatalayerObject","output","entry","_reset","newPage","pageType","_hasPreviouslyTrackedPage","_pushInitialDataLayer","newSpaPage","legacyDataLayer","trackAction","nonInteractive","trackGtmEvent","eventName","trackLinkClickAndCallback","eventCallback","trackLinkClickAndGotoUrl"],"mappings":"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","file":"script/bundle-login.131793fa32.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t69: 0,\n \t\t19: 0\n \t};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t69: 0,\n \t\t19: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"script/chunks/chunk.\" + ({\"8\":\"vendors~campaign-page~category-page~cause~causes-landing-page~mytradera~profile-page~search-page~sel~1393ec79\",\"11\":\"campaign-page~category-page~cause~causes-landing-page~profile-page~search-page\",\"14\":\"vendors~quick-view~selling~tradera\",\"20\":\"checkout2\",\"27\":\"basic\",\"28\":\"bidding\",\"29\":\"bin-form\",\"30\":\"cart-checkout\",\"31\":\"checkout-select-payment\",\"32\":\"detailed-search\",\"33\":\"image-search\",\"34\":\"messages\",\"35\":\"messaging-iframe\",\"36\":\"tradera\",\"38\":\"humany-bot\",\"39\":\"quick-view\",\"40\":\"vendors~braintree-web\",\"42\":\"vendors~braintree-web-drop-in\",\"48\":\"brand-list-page\",\"49\":\"brand-page\",\"50\":\"campaign-page\",\"52\":\"category-list-page\",\"53\":\"category-page\",\"54\":\"cause\",\"55\":\"causes-info\",\"56\":\"causes-landing-page\",\"57\":\"checkout-confirmation-page\",\"58\":\"checkout-page\",\"59\":\"combined-shipping\",\"62\":\"favourite-sellers\",\"66\":\"inr\",\"67\":\"landing-stadiumxtradera\",\"68\":\"landing_gantxtradera\",\"71\":\"profile-page\",\"73\":\"report-item-page\",\"75\":\"search-page\",\"78\":\"shippingcalculator\",\"82\":\"swish-app2app-callback-page\",\"83\":\"tradera-shop\",\"84\":\"upi\",\"85\":\"valuation-page\",\"86\":\"vendors~causes-info\",\"87\":\"vendors~checkout-page\",\"89\":\"verify-page\",\"90\":\"view-item-page\"}[chunkId]||chunkId) + \".\" + {\"8\":\"d1e25c1915\",\"9\":\"fea2cda53f\",\"11\":\"8c7b2445e7\",\"13\":\"820fd80fbf\",\"14\":\"3760760238\",\"20\":\"9017a3bd17\",\"21\":\"13aa50dbb5\",\"27\":\"3ddcf9474f\",\"28\":\"fb904c270d\",\"29\":\"9f3467fae3\",\"30\":\"98235d6ca4\",\"31\":\"7cec0fe6e9\",\"32\":\"f5ec29798c\",\"33\":\"a064bd2fe9\",\"34\":\"1f4be8cda7\",\"35\":\"8a7324ea0e\",\"36\":\"5c678fe203\",\"37\":\"1a76a5f624\",\"38\":\"48c3291f9f\",\"39\":\"52b27d073d\",\"40\":\"95ab885c3c\",\"42\":\"4465e4ba61\",\"43\":\"49c7b1c451\",\"44\":\"c25ecda80b\",\"45\":\"5def92e59c\",\"48\":\"650489dd6c\",\"49\":\"508e348a04\",\"50\":\"be16bcee4d\",\"52\":\"5357b1aef7\",\"53\":\"950172edc1\",\"54\":\"28cbc21699\",\"55\":\"3737c31b3c\",\"56\":\"0d685b73c2\",\"57\":\"f67239da8f\",\"58\":\"d4825acb08\",\"59\":\"340de8f5a6\",\"62\":\"b365765681\",\"66\":\"41fc1e735b\",\"67\":\"a831cb006c\",\"68\":\"02c8b4f004\",\"71\":\"eae73d0ba5\",\"73\":\"474686e92f\",\"75\":\"904493e5a8\",\"78\":\"3280885d84\",\"82\":\"ff5a2055ef\",\"83\":\"1f7789bd1b\",\"84\":\"c633bb4eff\",\"85\":\"2e1d6c89cd\",\"86\":\"5ae73b17be\",\"87\":\"5b19e006ed\",\"89\":\"2a86d0824d\",\"90\":\"ec9bd463de\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"11\":1,\"21\":1,\"32\":1,\"33\":1,\"36\":1,\"37\":1,\"39\":1,\"43\":1,\"44\":1,\"48\":1,\"49\":1,\"50\":1,\"52\":1,\"54\":1,\"55\":1,\"56\":1,\"57\":1,\"58\":1,\"59\":1,\"62\":1,\"66\":1,\"67\":1,\"68\":1,\"71\":1,\"73\":1,\"78\":1,\"82\":1,\"83\":1,\"84\":1,\"85\":1,\"86\":1,\"90\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"style/\" + ({\"8\":\"vendors~campaign-page~category-page~cause~causes-landing-page~mytradera~profile-page~search-page~sel~1393ec79\",\"11\":\"campaign-page~category-page~cause~causes-landing-page~profile-page~search-page\",\"14\":\"vendors~quick-view~selling~tradera\",\"20\":\"checkout2\",\"27\":\"basic\",\"28\":\"bidding\",\"29\":\"bin-form\",\"30\":\"cart-checkout\",\"31\":\"checkout-select-payment\",\"32\":\"detailed-search\",\"33\":\"image-search\",\"34\":\"messages\",\"35\":\"messaging-iframe\",\"36\":\"tradera\",\"38\":\"humany-bot\",\"39\":\"quick-view\",\"40\":\"vendors~braintree-web\",\"42\":\"vendors~braintree-web-drop-in\",\"48\":\"brand-list-page\",\"49\":\"brand-page\",\"50\":\"campaign-page\",\"52\":\"category-list-page\",\"53\":\"category-page\",\"54\":\"cause\",\"55\":\"causes-info\",\"56\":\"causes-landing-page\",\"57\":\"checkout-confirmation-page\",\"58\":\"checkout-page\",\"59\":\"combined-shipping\",\"62\":\"favourite-sellers\",\"66\":\"inr\",\"67\":\"landing-stadiumxtradera\",\"68\":\"landing_gantxtradera\",\"71\":\"profile-page\",\"73\":\"report-item-page\",\"75\":\"search-page\",\"78\":\"shippingcalculator\",\"82\":\"swish-app2app-callback-page\",\"83\":\"tradera-shop\",\"84\":\"upi\",\"85\":\"valuation-page\",\"86\":\"vendors~causes-info\",\"87\":\"vendors~checkout-page\",\"89\":\"verify-page\",\"90\":\"view-item-page\"}[chunkId]||chunkId) + \".\" + {\"8\":\"31d6cfe0d1\",\"9\":\"31d6cfe0d1\",\"11\":\"d8fd01ddc0\",\"13\":\"31d6cfe0d1\",\"14\":\"31d6cfe0d1\",\"20\":\"31d6cfe0d1\",\"21\":\"708f8a6518\",\"27\":\"31d6cfe0d1\",\"28\":\"31d6cfe0d1\",\"29\":\"31d6cfe0d1\",\"30\":\"31d6cfe0d1\",\"31\":\"31d6cfe0d1\",\"32\":\"d4f9a7c0a1\",\"33\":\"aa742db1cb\",\"34\":\"31d6cfe0d1\",\"35\":\"31d6cfe0d1\",\"36\":\"684ef9b859\",\"37\":\"8d62760a20\",\"38\":\"31d6cfe0d1\",\"39\":\"30cbf6d42a\",\"40\":\"31d6cfe0d1\",\"42\":\"31d6cfe0d1\",\"43\":\"bede5e8a32\",\"44\":\"c1ac8c638b\",\"45\":\"31d6cfe0d1\",\"48\":\"b60f8ea5c1\",\"49\":\"93b8cfae50\",\"50\":\"c768cc6245\",\"52\":\"2992f78fb8\",\"53\":\"31d6cfe0d1\",\"54\":\"d9d08b5500\",\"55\":\"8b1bedb731\",\"56\":\"ea63b6b532\",\"57\":\"ab5816f0c4\",\"58\":\"fb20652966\",\"59\":\"b80053e9c7\",\"62\":\"a1e512d216\",\"66\":\"b937d91c7b\",\"67\":\"563e9afa5a\",\"68\":\"178e49f0ca\",\"71\":\"4342326de2\",\"73\":\"7641ecf8e8\",\"75\":\"31d6cfe0d1\",\"78\":\"00e013f41e\",\"82\":\"ab5816f0c4\",\"83\":\"eac1c316c9\",\"84\":\"b937d91c7b\",\"85\":\"e377a076ea\",\"86\":\"c98f4deabf\",\"87\":\"31d6cfe0d1\",\"89\":\"31d6cfe0d1\",\"90\":\"7bdbc69f7b\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tvar onLinkComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks.\n \t\t\t\t\tlinkTag.onerror = linkTag.onload = null;\n \t\t\t\t\tif (event.type === 'load') {\n \t\t\t\t\t\tresolve();\n \t\t\t\t\t} else {\n \t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n \t\t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n \t\t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\t\terr.type = errorType;\n \t\t\t\t\t\terr.request = realHref;\n \t\t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\t\treject(err);\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tdocument.head.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//static.tradera.net/touchweb/static/output/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([8,0,1,2,4,5,7,10,3,6]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export const NS_TOUCHWEB = 'touchWeb';\nexport const NS_ATTRIBUTES = 'attributes';\n\nexport const DEFAULT_LANGUAGE = 'sv';\nexport const URL_LANGUAGES = ['en', 'de', 'da'];\n\nexport const I18N_NAMESPACES = [NS_TOUCHWEB, NS_ATTRIBUTES];\nexport const NAMESPACE_PROJECTID = {\n [NS_TOUCHWEB]: '414441505e1db31fcaa776.55234720',\n [NS_ATTRIBUTES]: '9959867960be20fdc7d187.66761514'\n};\n\nexport const SUPPORTED_LANGUAGES = [DEFAULT_LANGUAGE, ...URL_LANGUAGES];\n\nexport const TRANS_SUFFIX = 'Trans';\n","/**\n * Debounce function\n * Borrowed from underscore;\n */\nconst debounce = function(func, wait, immediate) {\n let timeout;\n return function() {\n let context = this,\n args = arguments;\n let later = function() {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n let callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n};\n\nexport default debounce;\n","// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\nfunction toLocaleStringSupportsLocales() {\n let number = 0;\n try {\n number.toLocaleString('i');\n } catch (e) {\n return e.name === 'RangeError';\n }\n return false;\n}\n\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\nfunction toLocaleStringSupportsOptions() {\n return !!(\n typeof Intl === 'object' &&\n Intl &&\n typeof Intl.NumberFormat === 'function'\n );\n}\n\nconst isLocaleFormattingSupportedInBrowser =\n toLocaleStringSupportsLocales() && toLocaleStringSupportsOptions();\n\nexport const formatPrice = price => {\n if (!isLocaleFormattingSupportedInBrowser) {\n return typeof price !== 'number'\n ? `${parseInt(price)} kr`\n : `${price} kr`;\n }\n\n const format = formatMe =>\n formatMe.toLocaleString('sv-SE', {\n symbol: ' kr',\n symbolPosition: 'end',\n decimal: ',',\n comma: '.'\n });\n return typeof price !== 'number'\n ? `${format(parseInt(price))} kr`\n : `${format(price)} kr`;\n};\n\nexport const formatNumber = number => {\n if (!isLocaleFormattingSupportedInBrowser) {\n return typeof number !== 'number' ? `${parseInt(number)}` : `${number}`;\n }\n\n const format = formatMe => formatMe.toLocaleString('sv-SE');\n\n return number !== undefined\n ? typeof number !== 'number'\n ? format(parseInt(number))\n : format(number)\n : '';\n};\n\nexport const formatUserRating = rating => {\n if (!rating) return;\n const number = parseFloat(rating);\n if (number <= 0) return '0.0';\n if (number >= 5) return '5.0';\n return number.toFixed(1);\n};\n","export const isServer = typeof window === 'undefined';\n\nexport const isClientApiRequest = req =>\n Boolean(req?.url?.startsWith('/_next/data'));\n\nexport const isNextJs = isServer || document.getElementById('__next') !== null;\n","import * as Sentry from '@sentry/react';\n\n/**\n * @param {object} error - takes an exception and logs to Sentry or the console in development\n * @param {object} [scope] - Sentry CaptureContext created with new Sentry.Scope() or plain object\n * @desc logger is designed for logging errors. It will accept an argument of any type and create a stacktrace containing a reference to the callee.\n * @TODO Migrate this functionality to a logging module that handles different levels of logs\n */\nconst logger = (error, scope) => {\n let sentryException;\n if (error instanceof Error) {\n sentryException = error;\n } else if (typeof error === 'string') {\n sentryException = new Error(error);\n } else {\n sentryException = new Error(JSON.stringify(error));\n }\n if (scope) {\n Sentry.captureException(sentryException, scope);\n } else {\n Sentry.captureException(sentryException);\n }\n};\n\nexport default logger;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/React.createElement(\"g\", {\n clipRule: \"evenodd\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.7 8.2c0-.6-.1-1.1-.1-1.6H8.2v3h4.2c-.2 1-.7 1.8-1.6 2.4v2h2.5c1.6-1.4 2.4-3.4 2.4-5.8z\",\n fill: \"#4285f4\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.2 15.9c2.1 0 3.9-.7 5.2-1.9l-2.5-2c-.7.5-1.6.8-2.7.8-2.1 0-3.8-1.4-4.4-3.2H1.1v2c1.3 2.5 4 4.3 7.1 4.3z\",\n fill: \"#34a853\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.8 9.5c-.2-.5-.3-1-.3-1.5s.1-1 .2-1.5v-2H1.1C.6 5.5.3 6.7.3 8s.3 2.5.8 3.5z\",\n fill: \"#fbbc05\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.2 3.3c1.2 0 2.2.4 3 1.2l2.3-2.3A7.48 7.48 0 008.2.1a7.9 7.9 0 00-7 4.3l2.6 2c.6-1.8 2.3-3.1 4.4-3.1z\",\n fill: \"#ea4335\"\n}))));","import React, { useCallback, useRef } from 'react';\nimport { useTranslation, Trans as TransComponent } from 'react-i18next';\nimport { toLocalizedUrl } from 'tradera-utils/url';\nimport { NS_TOUCHWEB, I18N_NAMESPACES, TRANS_SUFFIX } from './constants.mjs';\n\n/**\n * i18next translation wrappers for translating static text in react components\n * When to use what?\n * -----\n * 1. For functional components use `useTranslator()` hook\n * 2. For class components use `withTranslator()` HOC\n */\n\n/**\n * Translation hook, wrapper for react-i18next\n * @return {{t: Function}}\n */\n\nexport const useTranslator = () => {\n const { t, ready } = useTranslation(I18N_NAMESPACES, {\n wait: true\n });\n const wrappedT = useCallback(\n (...args) => {\n const i18nKey = args[0];\n if (i18nKey.endsWith(TRANS_SUFFIX)) {\n throw new Error(\n `t function keys should not have \"Trans\" suffix, got key \"${i18nKey}\". Use Trans component instead.`\n );\n }\n return t(...args);\n },\n [t]\n );\n return { t: ready ? wrappedT : () => '...' };\n};\n\n/**\n * Translation HOC, wrapper for react-i18next\n * @param {Component} WrappedComponent\n * @return {Component} The wrapped component.\n */\nexport function withTranslator(WrappedComponent) {\n function WithTranslator(props) {\n const { t } = useTranslator();\n return ;\n }\n\n WithTranslator.displayName = `withTranslator(${WrappedComponent.displayName ||\n WrappedComponent.name}`;\n return WithTranslator;\n}\n\n/**\n * Localization HOC, wrapper for URL-localizer\n * @param {Component} WrappedComponent\n */\nexport function withUrlLocalizer(WrappedComponent) {\n function WithUrlLocalizer(props) {\n const { toLocalizedUrl } = useUrlLocalizer();\n return ;\n }\n\n WithUrlLocalizer.displayName = `withUrlLocalizer(${WrappedComponent.displayName ||\n WrappedComponent.name}`;\n\n return WithUrlLocalizer;\n}\n\n/**\n * Current language hook, wrapper for react-i18next\n * @return {{language: string}}\n */\nexport const useCurrentLanguage = () => {\n const { i18n, ready } = useTranslation(undefined, { wait: true });\n return {\n language: ready ? i18n.language : null\n };\n};\n\n/**\n * Returns function to append language prefix to link\n * @return {{toLocalizedUrl: function}}\n */\nexport const useUrlLocalizer = () => {\n const { i18n, ready } = useTranslation(undefined, { wait: true });\n const urlLocalizer = useRef(url => toLocalizedUrl(url, i18n.language));\n return { toLocalizedUrl: ready ? urlLocalizer.current : url => url };\n};\n\nexport const Trans = props => {\n const { t, ready } = useTranslation(I18N_NAMESPACES, {\n wait: true\n });\n const { i18nKey, children, defaults } = props;\n if (!i18nKey) {\n throw new Error('Trans component key must have a i18nKey property');\n }\n if (!i18nKey.endsWith(TRANS_SUFFIX)) {\n throw new Error(\n `Trans component key must have the \"Trans\" suffix, got key \"${i18nKey}\"`\n );\n }\n if (children) {\n throw new Error(\n `Trans component must not have children, use components or t('${i18nKey}') function instead`\n );\n }\n if (defaults) {\n throw new Error(\n 'Trans components must not have defaults, use lokalise instead.'\n );\n }\n if (!ready) {\n return '...';\n }\n return ;\n};\n","import initData from 'init-data';\nimport { isNextJs } from 'tradera-utils/nextjs';\nimport { getWindow } from 'tradera-utils/window';\n\nconst getSiteBaseUrl = () => {\n const { host, protocol } = getWindow().location;\n return `${protocol}//${host}`;\n};\n\nconst webApiUrl = isNextJs\n ? `${getSiteBaseUrl()}/api/webapi`\n : initData.webApiUrl;\nconst touchWebUrl = isNextJs ? `${getSiteBaseUrl()}/` : initData.touchWebUrl;\n\nexport default {\n AVAILABLE_SHIPPING_COUNTRIES:\n webApiUrl + '/member/getavailablecountriesforshipping',\n BANK_ID_AUTHENTICATE: touchWebUrl + 'bankid/authenticate',\n BANK_ID_PROGRESS: touchWebUrl + 'bankid/progress',\n BRAND_LIST_PAGE: touchWebUrl + 'brands/api',\n BRAND_PAGE: touchWebUrl + 'brand/api/',\n CAMPAIGN: campaignId =>\n touchWebUrl +\n 'campaign/api/{campaignId}'.replace('{campaignId}', campaignId),\n CART_UPDATE_SUMMARY: touchWebUrl + 'shopping/managecart/updatecartsummary',\n CART_OVERVIEW_VIEW: webApiUrl + '/shopping/checkout/cartoverview',\n CART_ADD_ITEM: webApiUrl + '/shopping/cart/item',\n CART_REMOVE_ITEMS: webApiUrl + '/shopping/cart/removeitems',\n CART_SET_ITEM_QUANTITY: webApiUrl + '/shopping/cart/setitemquantity',\n CHARITY_EARNINGS_TICKER:\n touchWebUrl + 'cache/kampanjer/earningsticker/earnings',\n CMS_API: initData.cmsApiUrl,\n COMBINED_SHIPPING_UPSELL: touchWebUrl + 'combined-shipping-upsell/items',\n FAVORITE_SELLER_ADD: touchWebUrl + 'my/favourite-sellers/add',\n FAVORITE_SELLER_REMOVE: touchWebUrl + 'my/favourite-sellers/remove',\n FAVOURITE_SELLERS: webApiUrl + `/discover/favouritesellers-and-items2`,\n GEO_PUBLIC_API_URL: isNextJs\n ? `${process.env.NEXT_PUBLIC_GEO_PUBLIC_API_BASE_URL}/api/country`\n : initData.geoPublicApiUrl,\n GET_PROFILE_FEEDBACK_ITEMS: touchWebUrl + 'profile/model',\n HYPERWALLET_PAYOUT_COMPLETE:\n webApiUrl + '/member/paymentprovider/completehyperwallettransfermethod',\n HYPERWALLET_PAYOUT_TOKEN:\n webApiUrl + '/member/paymentprovider/hyperwalletauthenticationtoken',\n HYPERWALLET_PAYOUT:\n webApiUrl +\n '/member/paymentprovider/hyperwallettransfermethodviewmodel',\n INTERNATIONAL_SHIPPING_CALCULATOR:\n webApiUrl + '/browse/internationalshippingcalculator',\n ITEM_DESCRIPTION: itemId =>\n `${webApiUrl}/browse/item/${itemId}/description`,\n ITEM_DISCOUNT_QUOTA: touchWebUrl + 'profile/shop-item-settings/quotas',\n LAST_CHANCE: touchWebUrl + 'StartPage/LastChance',\n MEMBER_PAYOUT_SETTINGS_REMOVE:\n webApiUrl + '/member/profile/removetraderapaypayoutdestination',\n MEMBER_PAYOUT_SETTINGS:\n webApiUrl + '/member/paymentprovider/memberpayoutsettingsviewmodel',\n MEMBER_SYSTEM_MESSAGES: webApiUrl + '/member/system-messages',\n ORDER_CHECKOUT_CONFIRMATION:\n webApiUrl +\n '/shopping/ordercheckout/purchaseordercheckoutconfirmationviewmodel',\n ORDER_CHECKOUT_PAYMENT: initData.orderCheckoutPaymentUrl,\n ORDER_CHECKOUT_REQUEST_COMBINED_PRICE:\n webApiUrl + '/shopping/ordercheckout/requestcombinedshippingprice',\n ORDER_CHECKOUT_CREATE_UNCOMMITTED_PURCHASE_ORDER:\n webApiUrl + '/shopping/ordercheckout/createuncommittedpurchaseorder',\n ORDER_PURCHASE_SHOP_ITEMS:\n webApiUrl + '/shopping/ordercheckout/purchaseshopitems',\n PAYMENT_SWISH_OPTOUT: touchWebUrl + 'my/payments2/OptOut',\n PERSONALISED_SUGGESTIONS: '/api/personalised-suggestions',\n SEARCH_SUGGESTIONS: touchWebUrl + 'search/suggestions',\n SEARCH: touchWebUrl + 'search',\n SELLING_CAMPAING_CODE: touchWebUrl + 'selling/api/campaign',\n SELLING_DRAFT_LOAD_FROM_TEMPLATE:\n touchWebUrl + 'selling/api/drafts/from-template',\n SELLING_DRAFT_SAVE: touchWebUrl + 'selling/api/drafts/',\n SELLING_DRAFT: draftId => touchWebUrl + `selling/api/drafts/${draftId}`,\n SELLING_DRAFTS_DELETE: touchWebUrl + 'selling/api/drafts/delete',\n SELLING_DRAFTS: touchWebUrl + 'selling/api/drafts/',\n SELLING_ITEM_PUBLISH: touchWebUrl + 'selling/api/items',\n SELLING_ITEM_STATUS: itemId =>\n touchWebUrl + `selling/api/items/${itemId}/status`,\n SELLING_ITEM_UPDATE: itemId =>\n touchWebUrl + `selling/api/items/${itemId}/update`,\n SELLING_PREVIEW: draftId =>\n touchWebUrl + `selling/api/drafts/preview/${draftId}`,\n SELLING_SCRIBE_DURATION: touchWebUrl + 'selling/api/scribe/duration',\n SELLING_SCRIBE_INCREMENT: touchWebUrl + 'selling/api/scribe/increment',\n SELLING_SCRIBE_SESSION_DURATION:\n touchWebUrl + 'selling/api/scribe/session-duration',\n SELLING_SCRIBE_SESSION_START:\n touchWebUrl + 'selling/api/scribe/session-start',\n SELLING_SCRIBE_VALIDATION_ERRORS:\n touchWebUrl + 'selling/api/scribe/form-validation-errors',\n SELLING_SHIPPING_CALCULATOR: touchWebUrl + 'selling/shippingcalculator',\n SELLING_TEMPLATE_SAVE: touchWebUrl + 'selling/api/templates',\n SELLING_TEMPLATE: templateId =>\n touchWebUrl + `selling/api/templates/${templateId}`,\n SELLING_TEMPLATES_COUNT: touchWebUrl + 'selling/api/templates-count',\n SELLING_TEMPLATES_DELETE: touchWebUrl + 'selling/api/templates/delete',\n SELLING_TEMPLATES: touchWebUrl + 'selling/api/templates',\n SETTINGS: touchWebUrl + 'profile/shop-item-settings/settings',\n SHIPPING_PROVIDERS: webApiUrl + '/selling/shippingproviderswithproducts',\n SWISH_APP2APP_CALLBACK: 'shopping/payment/swish',\n SWISH_APP2APP_CALLBACK_MARK_AS_PAID:\n webApiUrl + '/shopping/payment/swish-app2app-paymentcallback',\n TOUCHWEB_URL: touchWebUrl,\n TRANSLATE_PROFILE_FEEDBACKITEMS: webApiUrl + '/member/feedback/translated',\n WEB_API: webApiUrl,\n WISHLIST: touchWebUrl + 'my/api/wish-list',\n WISHLIST_ADD: touchWebUrl + 'shopping/wishlist/add',\n WISHLIST_REMOVE: touchWebUrl + 'shopping/wishlist/remove',\n START_OFF_PLATFORM_CHECKOUT:\n touchWebUrl + 'shopping/cartoverview/StartCheckoutSession',\n UPI: purchaseOrderId =>\n webApiUrl + '/member/uppo-strike/?PurchaseOrderId=' + purchaseOrderId,\n INR: purchaseOrderId =>\n webApiUrl + '/member/ponr-strike/?PurchaseOrderId=' + purchaseOrderId,\n PURCHASE_ORDER: purchaseOrderId =>\n webApiUrl + '/member/purchaseorder/?PurchaseOrderId=' + purchaseOrderId,\n MARKETING_PUBLIC_API: '/api/marketing'\n};\n","import i18n from 'i18next';\nimport { logger } from 'packages';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { toLocalizedUrl } from 'tradera-utils/url';\nimport { formatNumberWithSeparators } from 'tradera-utils/format';\nimport {\n NS_TOUCHWEB,\n NS_ATTRIBUTES,\n DEFAULT_LANGUAGE\n} from 'tradera-lang/constants.mjs';\nimport 'dayjs/locale/sv';\nimport 'dayjs/locale/da';\nimport 'dayjs/locale/de';\n\nlet i18nInitialized;\n\n/**\n * Initialize function for i18next\n * Must be run before doing any translations\n * @param {Array} [translations]\n * @param {Object} [options]\n * @returns {Promise} - a promise to the i18next t function\n */\nexport const bootLanguages = (\n translations = window.touchwebTranslations,\n attributeTranslations = window.attributeTranslations\n) => {\n const translationResources = Object.entries(translations).map(\n ([key, value]) => ({\n key,\n value,\n namespace: 'touchWeb'\n })\n );\n const attributeResources = Object.entries(\n attributeTranslations\n ).map(([key, value]) => ({ key, value, namespace: 'attributes' }));\n\n const resources = translationResources\n .concat(attributeResources)\n .reduce((prev, { key, value, namespace }) => {\n const s = prev[key] || {};\n s[namespace] = value;\n return {\n ...prev,\n [key]: s\n };\n }, {});\n\n i18nInitialized = i18n\n .use(initReactI18next)\n .use(LanguageDetector)\n .init(initOptions(resources), err => {\n if (err) {\n logger('error when loading translations', err);\n }\n });\n\n return i18nInitialized;\n};\n\nexport const initOptions = resources => ({\n detection: {\n order: ['htmlTag'],\n htmlTag: document.html\n },\n defaultNS: [NS_TOUCHWEB],\n ns: [NS_ATTRIBUTES],\n fallbackLng: DEFAULT_LANGUAGE,\n resources,\n debug: false,\n keySeparator: false,\n nsSeparator: ':::',\n interpolation: {\n escape: str => str.replace(/{{/g, '').replace(/}}/g, ''),\n format: (value, format) => {\n if (format === 'formatNumber') {\n return formatNumberWithSeparators(value);\n }\n\n return value;\n }\n },\n react: {\n useSuspense: false // loading from file currently breaks if this is true\n },\n ...missingKeyLoggingConfig\n});\n\nconst missingKeyLoggingConfig = {\n saveMissing: true,\n saveMissingTo: 'current',\n missingKeyHandler: (language, namespace, key) => {\n logger(\n `TranslationMissing (javascript) - Unable to find key ${key} (namespace ${namespace}) in language ${language}!`\n );\n },\n missingInterpolationHandler: (text, value) => {\n logger(\n `InterpolationFailure (javascript) - Unable to interpolate the text \"${text}\" fully. The following placeholder values were missing: ${JSON.stringify(\n value\n )}`\n );\n return undefined;\n }\n};\n\n/**\n * This function helps you make sure that i18next init has completed before continuing\n */\nexport const whenInitialized = () => {\n if (!i18nInitialized) {\n throw new Error(\n \"Can't call boot-languages whenInitialized before init!\"\n );\n }\n return i18nInitialized.then(t => ({\n t,\n toLocalizedUrl: url => toLocalizedUrl(url, i18n.language)\n }));\n};\n\n/**\n * Only required for Storybook, do not use.\n */\nexport const changeLanguage = language => i18n.changeLanguage(language);\n\nexport const getCurrentLanguage = () => i18n.language;\n","const windowForServer = {\n document: { cookie: '' },\n innerWidth: 0,\n location: {},\n navigator: {\n userAgent: ''\n }\n};\n\nexport const setLocationForServer = (protocol, host, pathname) => {\n windowForServer.location = new URL(`${protocol}://${host}${pathname}`);\n};\n\nexport const setUserAgentForServer = userAgent => {\n windowForServer.navigator.userAgent = userAgent;\n};\n\nexport const setCookieForServer = cookie => {\n windowForServer.document.cookie = cookie;\n};\n\nexport const getWindow = () => {\n if (typeof window !== 'undefined') {\n return window;\n }\n return windowForServer;\n};\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\nexport const swedishTimeZoneDate = date => dayjs(date).tz('Europe/Stockholm');\n\nexport const formatDate = date => dayjs(date).format('D MMM HH:mm');\n\nexport const formatUtcDateAsSwedishTimeZoneDate = date =>\n swedishTimeZoneDate(date).format('D MMM HH:mm');\n\n/**\n * Format a number of seconds to an object of time units\n *\n * @param {number} seconds\n * @param {object} [options]\n * @param {string} [options.startUnit] - Time part to start counting from, empty for all parts\n * @param {string} [options.endUnit] - Time part to stop counting on, empty for all parts\n * @returns {{string: integer}}\n */\nexport const getTimeSpanParts = (seconds, options = {}) => {\n const optionsWithDefaults = {\n startUnit: '',\n endUnit: '',\n ...options\n };\n const parts = {};\n let remaining = seconds;\n let started = !optionsWithDefaults.startUnit;\n for (const [part, length] of Object.entries(TIME_SPAN_UNIT_LENGTHS)) {\n if (!started && part === optionsWithDefaults.startUnit) started = true;\n if (started) {\n if (remaining >= length) {\n parts[part] = Math.floor(remaining / length);\n }\n remaining %= length;\n if (remaining === 0 || optionsWithDefaults.endUnit === part) break;\n }\n }\n return parts;\n};\n\nexport const TIME_SPAN_UNITS = {\n DAYS: 'days',\n HOURS: 'hours',\n MINUTES: 'minutes',\n SECONDS: 'seconds'\n};\n\nconst TIME_SPAN_UNIT_LENGTHS = {\n [TIME_SPAN_UNITS.DAYS]: 24 * 60 * 60,\n [TIME_SPAN_UNITS.HOURS]: 60 * 60,\n [TIME_SPAN_UNITS.MINUTES]: 60,\n [TIME_SPAN_UNITS.SECONDS]: 1\n};\n","import io from 'socket.io-client';\nimport logger from 'packages/logger';\nimport { isPrerender } from 'tradera-utils/is-prerender';\nimport { isServer } from 'tradera-utils/nextjs';\n\nexport class MissingSocketIoServerUrl extends ReferenceError {}\nexport class MissingRoomId extends ReferenceError {}\n\nconst isAllowedToConnect =\n !isServer && !isPrerender(window?.navigator?.userAgent || '');\n\n/**\n * Connect to a socket.io channel & add callbacks for events it broadcasts\n * @param {string} socketIoServerUrl\n */\nexport class SocketIoChannel {\n constructor(socketIoServerUrl, autoConnect = false) {\n if (!socketIoServerUrl) {\n throw new MissingSocketIoServerUrl();\n }\n this.socket = io(socketIoServerUrl, {\n autoConnect: isAllowedToConnect && autoConnect\n });\n this.events = {};\n this.rooms = new Set();\n\n this.socket.on('connect', () => {\n // Rejoin room on reconnect if network connection is lost\n this.rooms.forEach(room => this.join(room));\n });\n\n this.socket.on('clientEvent', payload => {\n if (!payload.Type) {\n logger('socket.io missing clientEvent Type', {\n contexts: {\n socketIo: {\n payload\n }\n }\n });\n return;\n }\n const callback = this.events[payload.Type];\n if (callback) {\n callback(payload.Event, this);\n } else {\n logger(`socket.io unknown clientEvent type`, {\n contexts: {\n socketIo: {\n type: payload.Type\n }\n }\n });\n }\n });\n }\n\n connect() {\n if (isAllowedToConnect && !this.isConnected()) this.socket.connect();\n }\n\n join(room) {\n if (!room) {\n throw new MissingRoomId();\n }\n if (this.isConnected()) {\n this.socket.emit('join', room);\n }\n if (!this.rooms.has(room)) {\n // Queue join until connect\n this.rooms.add(room);\n }\n }\n\n leave(room, rejoinOnConnect = false) {\n if (!room) {\n throw new MissingRoomId();\n }\n if (this.isConnected() && this.rooms.has(room)) {\n this.socket.emit('leave', room);\n }\n if (!rejoinOnConnect) {\n this.rooms.delete(room);\n }\n }\n\n addEventListener(event, callback) {\n this.events[event] = callback;\n }\n\n removeEventListener(event) {\n delete this.events[event];\n }\n\n on(event, callback) {\n this.socket.on(event, callback);\n }\n\n off(event, callback) {\n this.socket.off(event, callback);\n }\n\n isConnected() {\n return this.socket?.connected;\n }\n\n disconnect() {\n if (!this || !this.isConnected()) return;\n this.rooms.forEach(room => this.leave(room, true));\n this.socket.disconnect();\n }\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"item-toast\":\"item-toast--QaLFk\",\"itemToast\":\"item-toast--QaLFk\",\"item-toast-image\":\"item-toast-image--i_l4w\",\"itemToastImage\":\"item-toast-image--i_l4w\"};","import React from 'react';\nimport { formatNumberWithSeparators } from 'tradera-utils/format';\nimport ALink from 'tradera-components/alink/alink';\nimport { useTranslator, useUrlLocalizer } from 'tradera-lang/translate';\nimport styles from './item-toast.module.scss';\n\nexport const ItemToast = ({\n imageUrl,\n itemUrl,\n shortDescription,\n type,\n eventData\n}) => {\n const { toLocalizedUrl } = useUrlLocalizer();\n\n return (\n \n
\n \n \n
\n
\n );\n};\n\nconst ToastMessage = ({ type, shortDescription, eventData }) => {\n const { t } = useTranslator();\n let message;\n switch (type) {\n case 'ItemOutbidded':\n message = t('siteWideNotifications_itemOutbidded', {\n newLeadingBidAmount: formatNumberWithSeparators(\n eventData.newLeadingBidAmount\n ),\n shortDescription\n });\n break;\n case 'ItemFirstBid':\n message = t('siteWideNotifications_itemFirstBid', {\n shortDescription\n });\n break;\n case 'ItemSold':\n message = t('siteWideNotifications_itemSold', {\n price: formatNumberWithSeparators(eventData.price),\n shortDescription\n });\n break;\n case 'ItemWon':\n message = t('siteWideNotifications_itemWon', {\n price: formatNumberWithSeparators(eventData.price),\n shortDescription\n });\n break;\n case 'ItemPaid':\n message = t('siteWideNotifications_itemPaid', {\n shortDescription\n });\n break;\n case 'ItemWishListReminder':\n message = t('siteWideNotifications_itemWishListReminder', {\n shortDescription,\n timeLeftMinutes: eventData.timeLeftMinutes\n });\n }\n return
{message}
;\n};\n","import React from 'react';\nimport { useTranslator } from 'tradera-lang/translate';\n\nconst MessageToast = ({ message, header }) => {\n const { t } = useTranslator();\n\n return (\n
\n {header &&

{t(header)}

}\n {message && (\n {t(message)}\n )}\n
\n );\n};\n\nexport default MessageToast;\n","import React from 'react';\nimport { toast } from 'react-toastify';\n\nimport { ItemToast } from 'tradera-components/toasts/item-toast';\nimport MessageToast from 'tradera-components/toasts/message-toast';\nimport { webApiClient } from '../utils/http';\nimport { createQueue } from './toast-queue';\n\nconst queuedToasts = createQueue();\n\nexport const ToastTestButton = () => (\n {\n showItemWishListReminderToast(85391643, 3);\n showItemOutbiddedToast(85391639, 99);\n showItemFirstBidToast(85391639);\n showItemSoldToast(85391639, 1234);\n showItemWonToast(85391639, 1234);\n showItemPaidToast(85391639);\n showSuccessToast(\n 'checkout_shipping_requestCombinedShippingPriceInfo',\n 'checkout_shipping_combinedShippingPriceRequested'\n );\n showErrorToast('siteWideNotifications_profileUpdateFailed');\n }}>\n Test\n \n);\n\nconst openNextToast = async () => {\n if (queuedToasts.isInProgress()) {\n return;\n }\n const nextItem = queuedToasts.next();\n if (nextItem) {\n try {\n const queueLength = queuedToasts.getLength();\n const toastOptions = {\n autoClose: Math.max(2, 5 - queueLength) * 1000,\n onClose: () => {\n queuedToasts.notifyDone();\n openNextToast();\n }\n };\n if (nextItem.eventData.itemId) {\n const response = await webApiClient.get(\n `/browse/item-basic-info/${nextItem.eventData.itemId}`\n );\n const {\n imageUrl,\n itemUrl,\n shortDescription\n } = response.data.item;\n toast(\n React.createElement(ItemToast, {\n imageUrl,\n itemUrl,\n shortDescription,\n type: nextItem.type,\n eventData: nextItem.eventData\n }),\n toastOptions\n );\n } else if (nextItem.eventData.message) {\n const { message, header } = nextItem.eventData;\n toast(\n React.createElement(MessageToast, {\n message,\n header\n }),\n { ...toastOptions, type: nextItem.eventData.type }\n );\n }\n } catch (e) {\n queuedToasts.notifyDone();\n openNextToast();\n throw e;\n }\n }\n};\n\nconst handleNotification = async (type, eventData, ttlInMinutes = 10) => {\n if (document.visibilityState !== 'visible') {\n // We don't want to show messages if page is not visible. If we do they will queue up!\n return;\n }\n\n queuedToasts.add({ type, eventData }, ttlInMinutes);\n openNextToast();\n};\n\nexport const showItemOutbiddedToast = (itemId, newLeadingBidAmount) =>\n handleNotification('ItemOutbidded', {\n itemId,\n newLeadingBidAmount\n });\n\nexport const showItemFirstBidToast = itemId =>\n handleNotification('ItemFirstBid', { itemId });\n\nexport const showItemSoldToast = (itemId, price) =>\n handleNotification('ItemSold', { itemId, price });\n\nexport const showItemWonToast = (itemId, price) =>\n handleNotification('ItemWon', { itemId, price });\n\nexport const showItemPaidToast = itemId =>\n handleNotification('ItemPaid', { itemId });\n\nexport const showItemWishListReminderToast = (itemId, timeLeftMinutes) =>\n handleNotification(\n 'ItemWishListReminder',\n { itemId, timeLeftMinutes },\n timeLeftMinutes > 10 ? 10 : 2\n );\n\nexport const showSuccessToast = (message, header) => {\n handleNotification('Message', {\n message,\n header,\n type: toast.TYPE.SUCCESS\n });\n};\n\nexport const showErrorToast = (message, header) => {\n handleNotification('Message', {\n message,\n header,\n type: toast.TYPE.ERROR\n });\n};\n","/**\n * A queue with a that handled max age (ttl) for messages.\n * @returns\n */\nexport const createQueue = () => {\n const items = [];\n const dayInMinutes = 60 * 24;\n const add = (item, ttlInMinutes = dayInMinutes) => {\n const timeStamp = Date.now();\n items.push({ item, ttlInMinutes, timeStamp });\n };\n const isAlive = ({ ttlInMinutes, timeStamp }) => {\n return timeStamp + ttlInMinutes * 60 * 1000 >= Date.now();\n };\n let inProgress = null;\n return {\n add,\n next: () => {\n let itemData = items.shift();\n while (itemData && !isAlive(itemData)) {\n itemData = items.shift();\n }\n inProgress = itemData?.item || null;\n return inProgress;\n },\n notifyDone: () => {\n inProgress = null;\n },\n isInProgress: () => inProgress !== null,\n getLength: () => items.length\n };\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 16 16\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8.5c0-.6.2-1.2.5-1.7s.7-1 1.3-1.3c-.4-.5-.8-.9-1.3-1.2s-1.1-.4-1.7-.4c-1.2-.2-2.4.7-3.1.7-.6 0-1.6-.7-2.7-.7-.7 0-1.3.2-1.9.6s-1 .8-1.3 1.4C.4 8.4 1.4 12 2.8 14c.7 1 1.5 2.1 2.5 2 1 0 1.4-.7 2.6-.7 1.2 0 1.6.7 2.6.6 1.1 0 1.8-1 2.4-2 .5-.7.9-1.5 1.1-2.3-.6-.3-1.2-.7-1.6-1.3-.2-.4-.4-1.1-.4-1.8zm-2-5.9c.6-.7.9-1.6.8-2.6-.9.1-1.7.5-2.3 1.2-.3.4-.6.7-.7 1.2-.2.4-.2.8-.2 1.3.5 0 .9-.1 1.3-.3.4-.2.8-.5 1.1-.8z\"\n})));","import ENDPOINTS from 'tradera-constants/endpoints';\nimport {\n axiosWithTokenRefresh,\n checkResponseVersion,\n finalizeResponse,\n handleError,\n utilizeCancelToken,\n axiosConfigs\n} from 'tradera-utils/api';\nimport initData from 'init-data';\nimport { toLocalizedUrl } from 'tradera-utils/url';\nimport { getLanguage } from 'tradera-apps/syi/script/app_react/utils/language';\n\n// Prevents URL:s that begins with // when that was not intended.\nconst getSafeUrl = (baseUrl, url) => {\n if (baseUrl.endsWith('/') && url.startsWith('/')) {\n return baseUrl + url.substring(1);\n }\n return baseUrl + url;\n};\n\nconst httpClient = (baseUrl, shouldLocalizeUrl) => {\n const axiosWrapper = (url, httpClientConfig, axiosCaller) => {\n let { cancelTokenId, ...axiosConfig } = httpClientConfig;\n const version = initData.version;\n if (cancelTokenId) {\n const { cancel, cancelToken } = utilizeCancelToken(cancelTokenId);\n axiosConfig.cancelToken = cancelToken;\n if (cancel) {\n cancel();\n }\n }\n const safeUrl = getSafeUrl(baseUrl, url);\n const localizedUrl = shouldLocalizeUrl\n ? toLocalizedUrl(safeUrl, getLanguage())\n : safeUrl;\n return axiosCaller(axiosWithTokenRefresh(), localizedUrl, axiosConfig)\n .then(\n version ? checkResponseVersion(version) : response => response\n )\n .then(finalizeResponse())\n .catch(handleError());\n };\n\n return {\n get: (url, httpClientConfig = axiosConfigs.authenticated) => {\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.get(url, config)\n );\n },\n post: (url, payload, httpClientConfig = axiosConfigs.authenticated) => {\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.post(url, payload, config)\n );\n },\n put: (url, payload, httpClientConfig = axiosConfigs.authenticated) => {\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.put(url, payload, config)\n );\n }\n };\n};\n\nconst trpcClient = endpoint => {\n const client = httpClient(`/api/${endpoint}`, false);\n const unpackResponse = ({ data }) => data;\n return {\n command: (commandName, payload, httpClientConfig) =>\n client\n .post(`/commands/${commandName}`, payload, httpClientConfig)\n .then(unpackResponse),\n query: (queryName, httpClientConfig) =>\n client\n .get(`/queries/${queryName}`, httpClientConfig)\n .then(unpackResponse)\n };\n};\n\nexport const defaultClient = httpClient('');\nexport const touchWebClient = httpClient('/', true);\nexport const webApiClient = httpClient(ENDPOINTS.WEB_API);\nexport const cmsApiClient = httpClient(ENDPOINTS.CMS_API);\nexport const marketingApiClient = httpClient(ENDPOINTS.MARKETING_PUBLIC_API);\nexport const memberIdentificationClient = trpcClient('member-identification');\nexport const translationOnDemandClient = trpcClient('translation-on-demand');\n","export default {\n TRADERA: 'https://www.tradera.com'\n};\n","import qs from 'qs';\nimport HOSTS from 'tradera-constants/hosts';\nimport initData from 'init-data';\nimport logger from 'packages/logger';\nimport { URL_LANGUAGES } from 'tradera-lang/constants.mjs';\n\n// List of SPA paths for the regex match, without initial slash\nconst SPA_REGEX_PATHS = [\n 'search',\n 'campaign',\n 'charity',\n 'kategorier',\n 'profile\\\\/items',\n 'brand\\\\/.+',\n // Category\n '[a-z]+[\\\\w\\\\-]+[\\\\-|_]\\\\d+'\n];\nconst SPA_PATH_REGEX = new RegExp(\n `^(\\\\/en|\\\\/da|\\\\/de)?/(${SPA_REGEX_PATHS.join('|')})`\n);\n\n/**\n * Returns language parameter from url\n * @param {*} url\n */\nconst getLanguagePrefixFromUrl = url => {\n const matches = url.match(/\\/([a-z][a-z])((\\/.*$)|$)/);\n\n if (matches === null) {\n return null;\n }\n\n const firstMatch = matches.find((match, index) => index > 0 && match);\n\n if (URL_LANGUAGES.indexOf(firstMatch) !== -1) {\n return firstMatch;\n }\n\n return null;\n};\n\n/**\n * Format query params parsed from query string\n *\n * @param {object} queryParams\n * @returns {object}\n */\nconst formatQueryParams = queryParams => {\n const { categoryId, ...rest } = queryParams;\n const formattedQueryParams = rest;\n if (categoryId !== undefined) {\n formattedQueryParams.categoryId = parseInt(categoryId, 10);\n }\n return formattedQueryParams;\n};\n\n/**\n * Check if url is absolute\n *\n * @param {string} url\n * @returns {boolean}\n */\nconst isAbsoluteUrl = url => new RegExp('^(?:[a-z]+:)?//', 'i').test(url);\n\n/**\n * Tests if a given url or path is an SPA link or not\n *\n * @param {string} urlOrPath\n * @returns {boolean}\n */\nfunction isSpaLink(urlOrPath) {\n let pathname;\n if (/(^http)s?:\\/\\//i.test(urlOrPath)) {\n try {\n ({ pathname } = new URL(urlOrPath));\n } catch {\n return false;\n }\n } else {\n pathname = urlOrPath;\n }\n return SPA_PATH_REGEX.test(pathname);\n}\n\n/**\n * Takes an object and returns a new object without attribute properties\n * @param {object} queryParams\n * @returns {object}\n */\nconst stripAttributesFromQueryParameters = queryParams => {\n // Using object spread to exclude listed variables from 'rest'\n const { attributes, ...rest } = queryParams;\n return rest;\n};\n\n/**\n * Takes an object and returns a new object without pagination properties\n * @param {object} queryParams\n * @returns {object}\n */\nconst stripCategoryIdFromQueryParameters = queryParams => {\n // Using object spread to exclude listed variables from 'rest'\n const { categoryId, ...rest } = queryParams;\n return rest;\n};\n\n/**\n * Removes tradera base from a url, leaving path and query\n *\n * @param {string} url\n * @returns {string}\n */\nconst stripHost = url =>\n url.startsWith('http') ? url.replace(HOSTS.TRADERA, '') : url;\n\n/**\n * Takes an object and returns a new object without itm properties\n * Itm tags should no longer be used, so this method will then be obsolete\n * @param {object} queryParams\n * @returns {object}\n */\nconst stripItmFromQueryParameters = queryParams => {\n // Using object spread to exclude listed variables from 'rest'\n const { itm_source, itm_medium, ...rest } = queryParams;\n return rest;\n};\n\n/**\n * Takes an object and returns a new object without pagination properties\n * @param {object} queryParams\n * @returns {object}\n */\nconst stripPaginationFromQueryParameters = queryParams => {\n // Using object spread to exclude listed variables from 'rest'\n const { spage, paging, page, fe, ...rest } = queryParams;\n return rest;\n};\n\n/**\n * Takes an object and returns a new object without savedQueryName properties\n * @param {object} queryParams\n * @returns {object}\n */\nconst stripSavedQueryNameFromQueryParameters = queryParams => {\n // Using object spread to exclude listed variables from 'rest'\n const { savedQueryName, ...rest } = queryParams;\n return rest;\n};\n\n/**\n * Takes an url and adds tradera base url if it is not already an absolute url\n *\n * @param {string} relativeUrl\n * @returns {string}\n */\nconst toAbsoluteUrl = relativeUrl =>\n relativeUrl.startsWith('http')\n ? relativeUrl\n : `${HOSTS.TRADERA}${\n relativeUrl.startsWith('/') ? relativeUrl : '/' + relativeUrl\n }`;\n\n/**\n * From react router location object to absolute url string\n * @param {{pathname: string, search: string}} url\n * @returns {string}\n */\nconst toAbsoluteUrlFromObject = url =>\n toAbsoluteUrl(\n `${url.pathname ? url.pathname : ''}${url.search ? url.search : ''}`\n );\n\n/**\n * From URL to URL with language prefix\n * @param {*} url\n * @param {*} languageCodeIso2\n */\nconst toLocalizedUrl = (url, languageCodeIso2) => {\n if (url === null || url === undefined || url === '' || url === false) {\n return url;\n }\n\n const ignoredUrls = [initData.webApiUrl, '/api/webapi/'];\n const isIgnoredUrl = ignoredUrls.find(domain => url.indexOf(domain) !== -1);\n if (isIgnoredUrl) {\n return url;\n }\n\n if (!languageCodeIso2) {\n logger(`Missing language code for URL ${url}`);\n return url;\n }\n\n const isAbsolute = isAbsoluteUrl(url);\n\n const urlObject = isAbsolute\n ? new URL(url)\n : new URL(url, 'http://dummy.com');\n const origin = isAbsolute ? urlObject.origin : '';\n const localisedPathname = setLanguagePrefix(\n urlObject.pathname,\n languageCodeIso2\n );\n\n return `${origin}${localisedPathname}${urlObject.search}`;\n};\n\n/**\n * Creates query parameters object from search string\n * @param {string} search\n */\nconst toQueryParameters = search =>\n qs.parse(search, { ignoreQueryPrefix: true });\n\n/**\n * Removes the Tradera host from a url, making it relative\n * @param {string} url\n * @returns {string}\n */\nconst toRelativeTraderaUrl = url => {\n if (url.startsWith(HOSTS.TRADERA)) {\n return url.replace(HOSTS.TRADERA, '');\n } else {\n return url;\n }\n};\n\n/**\n * Creates search string from all properties in object\n * @param {object} queryParams\n * @param {{[addQueryPrefix]: bool, [encode]: bool, [skipNulls]: bool }}\n * @returns {string}\n */\nconst toSearchString = (\n queryParams,\n {\n addQueryPrefix = true,\n encode = true,\n skipNulls = true,\n arrayFormat = 'repeat' //qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) ==> 'a=b&a=c'\n } = {}\n) =>\n qs.stringify(queryParams, {\n addQueryPrefix: addQueryPrefix,\n encode: encode,\n skipNulls: skipNulls,\n arrayFormat: arrayFormat\n });\n\nconst setLanguagePrefix = (path, languageCodeIso2) => {\n const languagePrefix = getLanguagePrefixFromUrl(path);\n const defaultLanguage = 'sv';\n\n if (languagePrefix) {\n if (languageCodeIso2 === defaultLanguage) {\n return path.replace(`/${languagePrefix}`, '');\n } else {\n return path.replace(languagePrefix, languageCodeIso2);\n }\n } else {\n if (languageCodeIso2 === defaultLanguage) {\n return path;\n } else {\n return `/${languageCodeIso2}${path}`;\n }\n }\n};\n\nconst getBackToHereRedirectUrl = () => {\n // Add random query parameter to force reload when redirecting to this url\n // and only the hash differs\n const queryParams = {\n ...qs.parse(location.search, { ignoreQueryPrefix: true }),\n forceRedirect: Math.round(Math.random() * 100000)\n };\n return (\n location.protocol +\n '//' +\n location.host +\n location.pathname +\n qs.stringify(queryParams, { addQueryPrefix: true })\n );\n};\n\nexport {\n getLanguagePrefixFromUrl,\n formatQueryParams,\n getBackToHereRedirectUrl,\n isAbsoluteUrl,\n isSpaLink,\n stripAttributesFromQueryParameters,\n stripCategoryIdFromQueryParameters,\n stripHost,\n stripItmFromQueryParameters,\n stripPaginationFromQueryParameters,\n stripSavedQueryNameFromQueryParameters,\n toAbsoluteUrl,\n toAbsoluteUrlFromObject,\n toLocalizedUrl,\n toQueryParameters,\n toRelativeTraderaUrl,\n toSearchString\n};\n","import { swedishTimeZoneDate } from 'tradera-utils/date';\n\nfunction formatDuration(durationInSeconds, minuteBreakpoint = 60) {\n if (Number.isInteger(durationInSeconds)) {\n if (durationInSeconds > 24 * 60 * 60) return ''; // Show format from server\n\n if (durationInSeconds > 60 * 60)\n return `${Math.floor(\n durationInSeconds / 60 / 60\n )} tim ${Math.floor((durationInSeconds / 60) % 60)} min`;\n\n if (durationInSeconds > minuteBreakpoint)\n return `${Math.floor(durationInSeconds / 60)} min`;\n\n return `${durationInSeconds} s`;\n } else {\n return '';\n }\n}\n\nfunction formatEndDate(endDateInput, t, nowDateInput) {\n if (!endDateInput || !nowDateInput) return '';\n\n const endDate = swedishTimeZoneDate(endDateInput);\n const now = swedishTimeZoneDate(nowDateInput);\n if (endDate.isSameOrAfter(now.add(1, 'week'), 'day')) {\n return endDate.format('D MMM HH:mm');\n }\n if (endDate.isSameOrAfter(now.add(2, 'day'), 'day')) {\n return endDate.format('ddd HH:mm');\n }\n if (endDate.isSameOrAfter(now.add(1, 'day'))) {\n return `${t('vip_tomorrow')} ${endDate.format('HH:mm')}`;\n }\n if (endDate.isSameOrAfter(now.add(1, 'minute'))) {\n const hours = endDate.diff(now, 'hour');\n const minutes = endDate.diff(now, 'minute') % 60;\n const timeParts = [];\n if (hours > 0) {\n timeParts.push(t('vip_hours', { count: hours }));\n }\n if (minutes > 0) {\n timeParts.push(t('vip_minutes', { count: minutes }));\n }\n return timeParts.join(' ');\n }\n if (endDate.isAfter(now)) {\n return t('vip_less_than_1_min_left');\n }\n return t('vip_ended');\n}\n\nfunction formatNumberWithSeparators(number, separator = '\\u2006') {\n return number\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1' + separator);\n}\n\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\nfunction toLocaleStringSupportsLocales() {\n try {\n Number(0).toLocaleString('i');\n } catch (e) {\n return e.name === 'RangeError';\n }\n return false;\n}\n\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\nfunction toLocaleStringSupportsOptions() {\n return !!(\n typeof Intl === 'object' &&\n Intl &&\n typeof Intl.NumberFormat === 'function'\n );\n}\n\nconst isLocaleFormattingSupportedInBrowser =\n toLocaleStringSupportsLocales() && toLocaleStringSupportsOptions();\n\nfunction formatSellerDsrAverage(value, locale = 'sv-SE') {\n return value?.toLocaleString(locale, {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1\n });\n}\n\nfunction formatPrice(price, locale = 'sv-SE', options = {}) {\n if (!isLocaleFormattingSupportedInBrowser) {\n return `${typeof price === 'number' ? price : parseInt(price)} ${\n locale.startsWith('sv') ? 'kr' : 'SEK'\n }`;\n }\n let formattedPrice = typeof price !== 'number' ? parseInt(price) : price;\n const opts = {\n style: 'currency',\n currency: 'SEK',\n currencyDisplay: 'symbol',\n useGrouping: false,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n ...options\n };\n formattedPrice = formattedPrice.toLocaleString(locale, opts);\n formattedPrice = formatNumberWithSeparators(formattedPrice);\n return formattedPrice;\n}\n\nfunction formatDateWithDayOfWeek(dateString, locale) {\n if (!isLocaleFormattingSupportedInBrowser) {\n return dateString;\n }\n\n var options = {\n weekday: 'long',\n year: undefined,\n month: 'long',\n day: 'numeric'\n };\n return new Intl.DateTimeFormat(locale, options).format(\n Date.parse(dateString)\n );\n}\n\nexport {\n formatDuration,\n formatEndDate,\n formatNumberWithSeparators,\n formatPrice,\n formatSellerDsrAverage,\n formatDateWithDayOfWeek\n};\n","import {\n showItemFirstBidToast,\n showItemOutbiddedToast,\n showItemPaidToast,\n showItemSoldToast,\n showItemWishListReminderToast,\n showItemWonToast\n} from './toasts';\nimport axios from 'axios';\nimport ENDPOINTS from 'tradera-constants/endpoints';\nimport { getGlobalSocket } from './global-socket';\n\nconst refreshLoginState = async socket => {\n try {\n const response = await axios.get(\n ENDPOINTS.TOUCHWEB_URL + 'login/state'\n );\n\n if (!response.data?.isLoggedIn) {\n return;\n }\n\n socket.disconnect();\n socket.connect();\n } catch {\n // Could not get token.\n }\n};\n\nexport const bootSiteWideNotifications = ({ socketUrl, joinMemberRoom }) => {\n if (!joinMemberRoom) {\n return;\n }\n\n const socket = getGlobalSocket(socketUrl);\n let isRetry = false;\n socket.on('JoinMemberRoom', async ({ success }) => {\n // To avoid infinite loop\n if (success || isRetry) {\n isRetry = false;\n return;\n }\n\n isRetry = true;\n await refreshLoginState(socket);\n });\n socket.addEventListener('MemberItemOutbidded', data =>\n showItemOutbiddedToast(data.ItemId, data.NewLeadingBidAmount)\n );\n socket.addEventListener('MemberItemFirstBid', data =>\n showItemFirstBidToast(data.ItemId)\n );\n socket.addEventListener('MemberItemSold', data =>\n showItemSoldToast(data.ItemId, data.Price)\n );\n socket.addEventListener('MemberItemWon', data =>\n showItemWonToast(data.ItemId, data.Price)\n );\n socket.addEventListener('MemberItemPaid', data =>\n showItemPaidToast(data.ItemId)\n );\n socket.addEventListener('MemberItemWishListReminder', data =>\n showItemWishListReminderToast(data.ItemId, data.TimeLeftMinutes)\n );\n socket.join('member');\n};\n","import 'core-js/modules/es.promise.finally';\nimport 'core-js/modules/es.array.iterator';\nimport 'intersection-observer';\nimport 'custom-event-polyfill';\nimport 'whatwg-fetch';\n\nimport initData from 'init-data';\nimport {\n handleModuleError,\n isSpaModule,\n loadModule,\n loadSpaModule,\n runModule\n} from 'utils/modules';\nimport { bootLanguages } from 'tradera-lang/boot-languages';\nimport gtm from 'static/script/app/ui/google-tagmanager-service';\nimport { bootSiteWideNotifications } from 'tradera-services/boot-site-wide-notifications';\nimport { getServerDate } from 'tradera-utils/server-date';\nimport { configureDayjs } from 'tradera-apps/tradera/configure-dayjs';\nimport 'tradera-styles/global.scss';\n\nbootLanguages();\nconfigureDayjs();\ngetServerDate();\ngtm.loadGtmScript();\n\nif (initData) {\n if (initData.featureSwitches['site-wide-notifications']) {\n bootSiteWideNotifications({\n socketUrl: initData.webLiveUrl,\n joinMemberRoom: !!initData.memberId\n });\n }\n\n const module = initData.module.split('/')[4];\n let moduleLoader;\n if (isSpaModule(module, initData)) {\n moduleLoader = loadSpaModule(initData);\n } else {\n moduleLoader = import('./init-module')\n .then(initModule => initModule.default(initData))\n .then(() => loadModule(module, initData))\n .then(loadedModule => runModule(loadedModule, initData));\n }\n moduleLoader\n .then(() => {\n window.document.body.setAttribute('data-module-loaded', 'true');\n return;\n })\n .catch(handleModuleError);\n}\n","import dayjs from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport { getCurrentLanguage } from 'tradera-lang/boot-languages';\n\nexport const configureDayjs = () => {\n dayjs.locale(getCurrentLanguage());\n dayjs.extend(isBetween);\n dayjs.extend(isSameOrAfter);\n};\n","import axios from 'axios';\nimport { getCurrentLanguage } from 'tradera-lang/boot-languages';\nimport { toLocalizedUrl } from 'tradera-utils/url';\n\nconst timeDiffInMs = start => {\n return Date.now() - start;\n};\n\nconst queryServerTime = async retryCount => {\n const latencyLimit = 2000;\n const maxRetries = 2;\n const requestStart = Date.now();\n const {\n data: { currentTime }\n } = await axios.get(\n toLocalizedUrl(\n '/api/webapi/discover/server-time.json',\n getCurrentLanguage()\n )\n );\n const latency = timeDiffInMs(requestStart);\n\n if (latency < latencyLimit) {\n return { currentTime: Date.parse(currentTime), latency };\n } else if (retryCount < maxRetries) {\n return queryServerTime(retryCount + 1);\n } else {\n return null;\n }\n};\n\n/**\n * Requests server time and returns\n * { currentTime, latency }\n */\nexport const getServerTime = async () => {\n return await queryServerTime(0);\n};\n","import { getServerTime } from 'tradera-utils/time-api';\n\nlet _minServerCheckInterval = 1000 * 60 * 5;\nlet _serverDiff = 0;\nlet _didGetServerResponse = false;\nlet _lastCheckAtMs = null;\n\nconst updateServerDiff = async () => {\n _lastCheckAtMs = Date.now();\n const serverTimeObject = await getServerTime();\n if (serverTimeObject) {\n _didGetServerResponse = true;\n // We add the whole latency even though it may give a later\n // time than in reality since a later time gives less time\n // left until auctions expire. This is better than showing\n // too much time left.\n const timeNowOnServer = new Date(\n serverTimeObject.currentTime + serverTimeObject.latency\n );\n _serverDiff = timeNowOnServer.getTime() - Date.now();\n }\n};\n\nconst shouldCheckServer = () =>\n _lastCheckAtMs === null ||\n Date.now() - _lastCheckAtMs >= _minServerCheckInterval;\n\nlet _initialPromise = null;\n\n/**\n * Gets the date on the server and shall be used for calculating auction time left.\n * @returns The date or null if server did not respond at least once.\n */\nexport const getServerDate = async () => {\n if (shouldCheckServer()) {\n let promise = updateServerDiff();\n if (!_didGetServerResponse) {\n _initialPromise = promise;\n }\n }\n\n if (_initialPromise) {\n try {\n await _initialPromise;\n } catch {\n // Don't throw any errors.\n }\n _initialPromise = null;\n }\n\n return _didGetServerResponse ? new Date(Date.now() + _serverDiff) : null;\n};\n\nexport const resetForTesting = () => {\n _minServerCheckInterval = 0;\n _didGetServerResponse = null;\n};\n","/**\n * @returns initData as JSON;\n * Default\n */\nconst initData = function() {\n if (typeof window === 'undefined') {\n return {};\n } else if (!window.initData) {\n const initDataEL = document.getElementById('init-data');\n if (initDataEL) {\n const data = initDataEL.getAttribute('data-init-data');\n const parsed = JSON.parse(data);\n return parsed;\n } else {\n return null;\n }\n } else {\n return window.initData;\n }\n};\n\nexport const getInitData = initData;\nexport default new initData();\n","import { component } from 'flightjs';\n\nfunction PasswordValidator() {\n this.defaultAttrs({\n passwordInput: '#newPassword',\n passwordConfirmInput: '#newPasswordRepeated',\n errorMessageCopy: '#errorMessageCopy',\n errorMessageNode: '#errorMessage'\n });\n\n this._validatePasswordLength = function() {\n if (this.passwordInput.val().length > 7) {\n return true;\n } else {\n return false;\n }\n };\n\n this._validatePasswordEquality = function() {\n if (this.passwordInput.val() === this.passwordConfirmInput.val()) {\n return true;\n } else {\n return false;\n }\n };\n\n this._validatePasswordMainField = function() {\n if (this._validatePasswordLength()) {\n this.passwordInput.removeClass('security-box__form-field--invalid');\n this.errorMessageNode.addClass('hidden');\n return true;\n } else {\n this.passwordInput.addClass('security-box__form-field--invalid');\n this.errorMessageCopy.text(\n 'Ditt nya lösenord måste innehålla minst 8 tecken.'\n );\n this.errorMessageNode.removeClass('hidden');\n return false;\n }\n };\n\n this._validatePassword = function() {\n if (\n this._validatePasswordMainField() &&\n this._validatePasswordEquality()\n ) {\n this.passwordInput.removeClass('security-box__form-field--invalid');\n this.passwordConfirmInput.removeClass(\n 'security-box__form-field--invalid'\n );\n this.errorMessageNode.addClass('hidden');\n return true;\n } else {\n this.passwordConfirmInput.addClass(\n 'security-box__form-field--invalid'\n );\n this.errorMessageCopy.text(\n 'Försök igen och kontrollera att du har skrivit samma lösenord i båda fälten.'\n );\n this.errorMessageNode.removeClass('hidden');\n return false;\n }\n };\n\n this.after('initialize', function() {\n this.passwordInput = this.select('passwordInput');\n this.passwordConfirmInput = this.select('passwordConfirmInput');\n this.errorMessageCopy = this.select('errorMessageCopy');\n this.errorMessageNode = this.select('errorMessageNode');\n\n this.on(document, 'change', {\n passwordInput: this._validatePasswordMainField\n });\n\n this.on(document, 'change', {\n passwordConfirmInput: this._validatePassword\n });\n });\n}\n\nexport default component(PasswordValidator);\n","import { component } from 'flightjs';\nimport InitData from 'app/data/init-data';\n\nfunction TrackLoginEvent() {\n this.defaultAttrs({\n eventType: 'password-recovery',\n categoryName: '[data-login-flow-name]',\n errorMessage: '[data-input-error]'\n });\n\n this._triggerPasswordRecoveryEvents = function() {\n let categoryName = this.select('categoryName').data('login-flow-name');\n let errorMessage = this.select('errorMessage');\n\n if (\n errorMessage.length > 0 &&\n errorMessage.data('input-error').length > 0\n ) {\n this._triggerErrorEvent(categoryName, errorMessage);\n return;\n }\n\n this.trigger(document, 'analytics:track-event', {\n category: categoryName,\n action: 'Navigation',\n label: InitData.current().pageName,\n userTriggered: true\n });\n };\n\n this._triggerErrorEvent = function(categoryName, errorMessage) {\n this.trigger(document, 'analytics:track-event', {\n category: categoryName,\n action: 'Error',\n label:\n InitData.current().pageName +\n ' : ' +\n errorMessage.data('input-error'),\n userTriggered: true\n });\n };\n\n this._triggerLoginEvent = function() {\n let errorMessage = this.select('errorMessage');\n\n if (errorMessage.length > 0) {\n this._triggerErrorEvent('Login', errorMessage);\n return;\n }\n\n this.trigger(document, 'analytics:track-event', {\n category: 'Login',\n action: 'Navigation',\n label: 'Login Page (V2)',\n userTriggered: true\n });\n };\n\n this.after('initialize', function() {\n if (this.attr.eventType === 'password-recovery') {\n this._triggerPasswordRecoveryEvents();\n } else {\n this._triggerLoginEvent();\n }\n });\n}\n\nexport default component(TrackLoginEvent);\n","import { component } from 'flightjs';\n\nfunction SmsCheckUI() {\n this.defaultAttrs({\n smsSid: '[data-sms-sid]',\n errorMessage: '[data-sms-error]'\n });\n\n this._getSmsCheckPayload = function() {\n let smsSid = this.select('smsSid').data('smsSid');\n return { sid: smsSid };\n };\n\n this._triggerSmsCheck = function() {\n let payload = this._getSmsCheckPayload();\n\n if (payload.sid) {\n this.trigger(document, 'ui:sms-check:query', payload);\n }\n };\n\n this._showError = function(evt, payload) {\n if (!payload.successful) {\n this.select('errorMessage').removeClass('hidden');\n }\n };\n\n this.after('initialize', function() {\n this._triggerSmsCheck();\n this.on(document, 'data:sms-check:query', this._showError);\n });\n}\n\nexport default component(SmsCheckUI);\n","import { component } from 'flightjs';\nimport WithAjax from 'app/data/with-ajax';\n\nfunction SmsCheckService() {\n this._smsCheck = function(evt, payload) {\n this._post({\n url: '/login/smscheck',\n data: payload,\n success: 'data:sms-check:query'\n });\n };\n\n this.after('initialize', function() {\n this.on(document, 'ui:sms-check:query', this._smsCheck);\n });\n}\n\nexport default component(SmsCheckService, WithAjax);\n","import { component } from 'flightjs';\n\nfunction LoginButtonUI() {\n this._loginSubmit = function() {\n let loginButton = this.$node;\n setTimeout(function() {\n loginButton.prop('disabled', true);\n }, 1);\n return true;\n };\n\n this.after('initialize', function() {\n this.on('click', this._loginSubmit);\n });\n}\n\nexport default component(LoginButtonUI);\n","const LOCALES = {\n sv: 'sv_SE',\n en: 'en_GB',\n de: 'de_DE',\n da: 'da_DK'\n};\n\nexport const getLoginLocaleFromLanguage = language =>\n language in LOCALES ? LOCALES[language] : null;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\nimport { Analytics } from 'packages';\nimport logger from 'packages/logger';\nimport { loadScript } from 'tradera-utils/script';\nimport { localStore } from 'utils/storage';\nimport { STORAGE_KEYS } from 'tradera-constants/storage';\nimport {\n useCurrentLanguage,\n useTranslator,\n useUrlLocalizer\n} from 'tradera-lang/translate';\nimport AppleIcon from '@tradera/blueprint/theme/icons2/network-apple.svg?jsx';\nimport LoadingIcon from '@tradera/blueprint/theme/icons2/loading.svg?jsx';\nimport { getLoginLocaleFromLanguage } from './get-login-locale-from-language';\n\nconst AppleLoginButton = props => {\n const {\n appleClientId,\n className,\n compact,\n disabled,\n isModal,\n onError,\n tabIndex\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const { t } = useTranslator();\n const { toLocalizedUrl } = useUrlLocalizer();\n const { language } = useCurrentLanguage();\n const locale = getLoginLocaleFromLanguage(language);\n\n const onClick = async () => {\n if (disabled) {\n return;\n }\n\n setIsLoading(true);\n onError(null);\n try {\n await loadScript(\n `https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/${locale ||\n 'sv_SE'}/appleid.auth.js`\n );\n } catch {\n return;\n }\n\n const AppleID = window.AppleID;\n if (!AppleID) {\n logger('Apple SDK could not be loaded by Apple login button');\n return;\n }\n\n AppleID.auth.init({\n clientId: appleClientId,\n scope: 'name email',\n redirectURI: location.origin + '/login',\n state: '',\n usePopup: true\n });\n\n if (isModal) {\n Analytics.trackEvent({\n category: 'Top navigation',\n action: 'Login menu',\n label: 'Button - Apple login'\n });\n }\n\n try {\n const appleSignInResponse = await AppleID.auth.signIn();\n // User data is only provided on first login, so save it for eventual user registration\n // https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple\n if (appleSignInResponse?.user) {\n localStore.setItem(\n STORAGE_KEYS.APPLE_ID_USER,\n appleSignInResponse.user\n );\n }\n const verifyResponse = await axios.post('/login/apple/verify', {\n AccessToken: appleSignInResponse.authorization.id_token,\n UserId: 'NOT_USED'\n });\n window.parent.location = verifyResponse.data.returnUrl;\n } catch (error) {\n const message =\n error?.response?.data?.error || error?.message || error?.error;\n switch (message) {\n case 'popup_closed_by_user':\n break;\n case 'MemberAuth_IncorrectUserOrPassword':\n window.parent.location = toLocalizedUrl(\n '/login?connect=Apple'\n );\n break;\n default:\n onError(error);\n logger(message);\n break;\n }\n }\n\n setIsLoading(false);\n };\n\n return (\n \n {isLoading ? (\n \n ) : (\n \n )}\n {!compact && t('login_withProvider', { provider: 'Apple' })}\n \n );\n};\n\nAppleLoginButton.propTypes = {\n appleClientId: PropTypes.string,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n isModal: PropTypes.bool,\n tabIndex: PropTypes.number\n};\n\nAppleLoginButton.defaultProps = {\n className: '',\n tabIndex: 0\n};\n\nexport default AppleLoginButton;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.7 0H1.3C.6 0 0 .6 0 1.3v21.4c0 .7.6 1.3 1.3 1.3h11.5v-9.3H9.7v-3.6h3.1V8.4c0-3.1 1.9-4.8 4.7-4.8 1.3 0 2.5.1 2.8.1V7h-1.9c-1.5 0-1.8.7-1.8 1.8v2.3h3.6l-.5 3.6h-3.1V24h6.1c.7 0 1.3-.6 1.3-1.3V1.3c0-.7-.6-1.3-1.3-1.3z\"\n})));","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\n\nimport * as LoginSignupEvents from 'app/ui/layout/login-signup-events';\nimport * as loginAnalytics from 'app/ui/layout/login-signup-analytics';\nimport { Analytics } from 'packages';\nimport {\n useCurrentLanguage,\n useTranslator,\n useUrlLocalizer\n} from 'tradera-lang/translate';\nimport { loadScript } from 'tradera-utils/script';\nimport FacebookIcon from '@tradera/blueprint/theme/icons2/facebook.svg?jsx';\nimport LoadingIcon from '@tradera/blueprint/theme/icons2/loading.svg?jsx';\nimport { getLoginLocaleFromLanguage } from './get-login-locale-from-language';\n\nconst FacebookLoginButton = props => {\n const {\n facebookAppId,\n className,\n compact,\n disabled,\n isModal,\n onError,\n tabIndex\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const { t } = useTranslator();\n const { toLocalizedUrl } = useUrlLocalizer();\n const { language } = useCurrentLanguage();\n const locale = getLoginLocaleFromLanguage(language);\n\n const onClick = async () => {\n if (disabled) {\n return;\n }\n\n setIsLoading(true);\n onError(null);\n try {\n await loadScript(\n `//connect.facebook.net/${locale || 'sv_SE'}/sdk.js`,\n {\n timeout: 5000\n }\n );\n if (window.FB) {\n window.FB.init({\n appId: facebookAppId,\n version: 'v2.9'\n });\n } else {\n throw new Error('FB_SDK_LOAD_FAILED');\n }\n } catch (error) {\n onError(error);\n setIsLoading(false);\n return;\n }\n\n if (isModal) {\n Analytics.trackEvent({\n category: 'Top navigation',\n action: 'Login menu',\n label: 'Button - Facebook login'\n });\n }\n loginAnalytics.flow.set(loginAnalytics.FLOW.LOGIN);\n loginAnalytics.method.set(loginAnalytics.METHOD.FACEBOOK);\n loginAnalytics.trackEvent('user-login-submit');\n\n window.FB.login(\n async loginResponse => {\n if (loginResponse.status !== 'connected') {\n return;\n }\n try {\n const verifyResponse = await axios.post(\n '/login/facebook/verify' + window.location.search,\n {\n accessToken: loginResponse.authResponse.accessToken,\n userId: loginResponse.authResponse.userID\n }\n );\n LoginSignupEvents.trackLoginSuccess(\n verifyResponse.data.memberId\n );\n window.parent.location = verifyResponse.data.returnUrl;\n } catch (err) {\n onError(err);\n LoginSignupEvents.trackLoginFailure('facebook-auth');\n window.parent.location = toLocalizedUrl(\n '/login?connect=Facebook'\n );\n }\n },\n {\n scope: 'public_profile,email'\n }\n );\n setIsLoading(false);\n };\n\n return (\n \n {isLoading ? (\n \n ) : (\n \n )}\n {!compact && t('login_withProvider', { provider: 'Facebook' })}\n \n );\n};\n\nFacebookLoginButton.propTypes = {\n className: PropTypes.string,\n facebookAppId: PropTypes.string,\n isModal: PropTypes.bool,\n tabIndex: PropTypes.number\n};\n\nFacebookLoginButton.defaultProps = {\n className: '',\n tabIndex: 0\n};\n\nexport default FacebookLoginButton;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport axios from 'axios';\n\nimport logger from 'packages/logger';\nimport * as loginAnalytics from 'app/ui/layout/login-signup-analytics';\nimport { Analytics } from 'packages';\nimport { useTranslator, useUrlLocalizer } from 'tradera-lang/translate';\nimport { loadScript } from 'tradera-utils/script';\nimport GoogleIcon from '@tradera/blueprint/theme/icons-colored/google.svg?jsx';\nimport LoadingIcon from '@tradera/blueprint/theme/icons2/loading.svg?jsx';\n\nconst GoogleLoginButton = props => {\n const {\n googleAppId,\n className,\n compact,\n disabled,\n isModal,\n onError,\n tabIndex\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const { t } = useTranslator();\n const { toLocalizedUrl } = useUrlLocalizer();\n\n const getGoogleAuth2 = async () => {\n const gapi = window.gapi;\n let promiseResolve;\n let promise = new Promise(resolve => (promiseResolve = resolve));\n\n gapi.load('auth2', async () => {\n const auth2 = await gapi.auth2.init({\n client_id: googleAppId,\n fetch_basic_profile: true\n });\n promiseResolve(auth2);\n });\n return promise;\n };\n\n const performLogin = async () => {\n await loadScript(`https://apis.google.com/js/platform.js`, {\n timeout: 5000\n });\n const auth2 = await getGoogleAuth2();\n\n // signIn\n const googleUser = await auth2.signIn();\n const id_token = googleUser.getAuthResponse().id_token;\n\n try {\n const verifyResponse = await axios.post(\n '/login/google/verify' + window.location.search,\n {\n accessToken: id_token,\n UserId: 'NOT_USED'\n }\n );\n console.log('verifyResponse', verifyResponse);\n\n if (isModal) {\n Analytics.trackEvent({\n category: 'Top navigation',\n action: 'Login menu',\n label: 'Button - Google login'\n });\n }\n loginAnalytics.flow.set(loginAnalytics.FLOW.LOGIN);\n loginAnalytics.method.set(loginAnalytics.METHOD.GOOGLE);\n loginAnalytics.trackEvent('user-login-submit');\n\n window.top.location = verifyResponse.data.returnUrl;\n } catch (error) {\n const message =\n error?.response?.data?.error || error?.message || error?.error;\n switch (message) {\n case 'popup_closed_by_user':\n break;\n case 'MemberAuth_IncorrectUserOrPassword':\n window.top.location = toLocalizedUrl(\n '/login?connect=Google'\n );\n break;\n default:\n onError(error);\n logger(message);\n break;\n }\n }\n };\n\n const onClick = async () => {\n if (disabled) {\n return;\n }\n\n setIsLoading(true);\n onError(null);\n try {\n await performLogin();\n } catch (error) {\n onError(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n {isLoading ? (\n \n ) : (\n \n )}\n {!compact && t('login_withProvider', { provider: 'Google' })}\n \n );\n};\n\nGoogleLoginButton.propTypes = {\n className: PropTypes.string,\n googleAppId: PropTypes.string,\n isModal: PropTypes.bool,\n tabIndex: PropTypes.number\n};\n\nGoogleLoginButton.defaultProps = {\n className: '',\n tabIndex: 0\n};\n\nexport default GoogleLoginButton;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useTranslator } from 'tradera-lang/translate';\nimport useIsMobile from 'tradera-hooks/use-is-mobile';\nimport GdprSettings from 'tradera-utils/gdpr-settings';\nimport AppleLoginButton from 'areas/Login/static/script/app/ui/apple-login-button';\nimport ErrorIcon from '@tradera/blueprint/theme/icons2/alert.svg?jsx';\nimport FacebookLoginButton from 'areas/Login/static/script/app/ui/facebook-login-button';\nimport GoogleLoginButton from 'areas/Login/static/script/app/ui/google-login-button';\nimport InfoIcon from '@tradera/blueprint/theme/icons2/info.svg?jsx';\n\nconst SocialLogins = ({\n appleClientId,\n facebookAppId,\n className,\n googleAppId,\n isModal,\n tabIndexStart\n}) => {\n const cookiesEnabled = GdprSettings.isFunctionalEnabled();\n const isAnySocialLoginEnabled = appleClientId || facebookAppId;\n const [error, setError] = useState(null);\n const { t } = useTranslator();\n const isMobile = useIsMobile();\n if (isAnySocialLoginEnabled) {\n return (\n
\n {!cookiesEnabled && (\n
\n
\n \n

\n {t('login_cookieMissingWarningTitle')}\n

\n
\n\n

\n {t('login_cookieMissingWarning')}\n

\n
\n )}\n

\n {t('login_useSocialLogin')}\n

\n
\n {googleAppId && (\n setError(error)}\n tabIndex={tabIndexStart + 1}\n />\n )}\n {facebookAppId && (\n setError(error)}\n tabIndex={tabIndexStart}\n />\n )}\n {appleClientId && (\n setError(error)}\n tabIndex={tabIndexStart + 1}\n />\n )}\n
\n {error && (\n
\n

\n \n  {t('login_error')}\n

\n
\n )}\n

{t('login_orEnter')}

\n
\n );\n } else {\n return null;\n }\n};\n\nSocialLogins.propTypes = {\n appleClientId: PropTypes.string,\n facebookAppId: PropTypes.string,\n googleAppId: PropTypes.string,\n className: PropTypes.string,\n isModal: PropTypes.bool,\n tabIndexStart: PropTypes.number\n};\n\nSocialLogins.defaultProps = {\n className: '',\n tabIndexStart: 0\n};\n\nexport default SocialLogins;\n","/* eslint-disable no-useless-escape */\n\nimport { component } from 'flightjs';\nimport $ from 'jQuery';\nimport WithAjax from 'app/data/with-ajax';\n\nfunction BankIdVerificationModal() {\n this.attributes({\n confirmButton: '[data-confirm-button]',\n errorContainer: '[data-modal-error-container]',\n errorDiv: '[data-bankid-modal-error]',\n progressDiv: '[data-bankId-modal-progress]',\n startDiv: '[data-bankid-modal-start]',\n bankIdAppLnk: '[data-bankId-app-link]',\n successDiv: '[data-bankid-modal-success]'\n });\n\n this.isBankIdCancelled = false;\n\n this.after('initialize', function() {\n let self = this;\n this.on('click', {\n confirmButton: self.verifyBankId\n });\n });\n\n this.verifyBankId = function() {\n let self = this;\n $(this.attr.startDiv).addClass('hidden');\n $(this.attr.errorDiv).addClass('hidden');\n $(this.attr.progressDiv).removeClass('hidden');\n\n self._post({\n url: '/bankid/authenticate',\n data: { purpose: 'verify-profile' },\n success: function(data) {\n if (self.isBankIdCancelled) {\n return;\n }\n\n if (data.errorMessage) {\n self.displayBankIdError(\n 'Något gick fel, vänligen försök igen'\n );\n } else {\n self.pollProgress();\n $(self.attr.bankIdAppLnk).attr(\n 'href',\n 'bankid:///?autostarttoken=' +\n data.autoStartToken +\n '&redirect=null'\n );\n self.authenticationStarted = true;\n if (self.isMobileOrTablet()) {\n self.startBankIdApplication();\n }\n }\n },\n error: function(data) {\n if (data && data.errorMessage) {\n self.displayBankIdError(data.errorMessage);\n } else {\n self.displayBankIdError(\n 'Något gick fel, vänligen försök igen'\n );\n }\n }\n });\n };\n\n this.displayBankIdError = function(msg) {\n $(this.attr.progressDiv).addClass('hidden');\n $(this.attr.errorDiv).removeClass('hidden');\n $(this.attr.errorContainer).html(msg);\n };\n\n this.pollProgress = function() {\n let self = this;\n setTimeout(function() {\n self._get({\n url: '/bankid/progress?' + new Date().getTime(),\n error: function(data) {\n if (self.isBankIdCancelled) {\n return;\n }\n\n self.displayBankIdError(data.errorMessage);\n },\n success: function(data) {\n if (self.isBankIdCancelled) {\n return;\n }\n\n if (data.errorMessage) {\n self.displayBankIdError('Autentiseringen avbröts');\n } else if (data.isCompleted) {\n $(self.attr.progressDiv).addClass('hidden');\n $(self.attr.successDiv).removeClass('hidden');\n } else {\n self.pollProgress();\n }\n }\n });\n }, 3000);\n };\n\n this.isMobileOrTablet = function() {\n let e = navigator.userAgent || navigator.vendor || window.opera;\n return (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm(os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n e\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp(i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac(|\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg(g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-|)|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n e.substr(0, 4)\n )\n );\n };\n}\n\nexport default component(BankIdVerificationModal, WithAjax);\n","import { component } from 'flightjs';\nimport $ from 'jQuery';\nimport template from 'underscore/modules/template';\nimport BankIdVerificationModal from './bank-id-verification-modal';\n\nconst bankIdVerification = function() {\n this._timer = 0;\n this.isBankIdCancelled = false;\n this.bankIdAutoStartToken = null;\n\n this.defaultAttrs({\n showPopup: '[data-account-locked-show-poppup]',\n confirmPasswordModalTemplate: '[data-modal-account-locked-template]',\n bankIdVerifyModal: '[data-modal-account-locked]'\n });\n\n this.after('initialize', function() {\n let self = this;\n this.on('click', {\n showPopup: self.showBankIdModal\n });\n });\n\n this.showBankIdModal = function() {\n this.isBankIdCancelled = false;\n let modalHtml = this.getHtmlForModal();\n let payload = {\n content: modalHtml,\n cssClass: 'modal-default-new-style modal-background',\n nonDismissible: true\n };\n this.trigger(document, 'ui:modal:open', payload);\n BankIdVerificationModal.attachTo(this.attr.bankIdVerifyModal);\n };\n\n this.getHtmlForModal = function(itemId, itemTitle) {\n let html = $(this.attr.confirmPasswordModalTemplate).html();\n let templateFn = template(html);\n return templateFn({ itemId: itemId, itemTitle: itemTitle });\n };\n};\n\nexport default component(bankIdVerification);\n","import { warnIfDevBuild } from 'utils/environment';\nwarnIfDevBuild('login');\nimport 'app';\nimport InitData from 'app/data/init-data';\nimport ChangePassword from './app/pages/change-password';\nimport EnterCellphoneVerification from './app/pages/enter-cellphone-verification-code';\nimport PasswordRecovery from './app/pages/password-recovery';\nimport Login from './app/pages/login';\nimport VerifyBankId from './app/pages/verify-bank-id';\nimport BankIdPasswordRecovery from './app/pages/bank-id-password-recovery';\nimport { logger } from 'packages';\nimport '../style/module-includes';\n\nlet initData = InitData.currentOrSet();\n\nconst modules = {\n 'change-password': ChangePassword,\n 'enter-cellphone-verification-code': EnterCellphoneVerification,\n 'password-recovery': PasswordRecovery,\n login: Login,\n 'verify-bankId': VerifyBankId,\n 'bankId-password-recovery': BankIdPasswordRecovery\n};\n\nif (initData && initData.subModule) {\n let mod = initData.subModule.split('pages/');\n try {\n modules[mod[1]](initData);\n } catch (e) {\n logger(e);\n }\n}\n","import PasswordValidator from 'areas/Login/static/script/app/ui/password-validator';\nimport TrackLoginEvent from 'areas/Login/static/script/app/ui/track-login-event';\n\nexport default function() {\n PasswordValidator.attachTo('[data-password-validator]');\n TrackLoginEvent.attachTo(document);\n}\n","import SmsCheckUI from 'areas/Login/static/script/app/ui/sms-check-ui';\nimport SmsCheckService from 'areas/Login/static/script/app/data/sms-check-service';\nimport TrackLoginEvent from 'areas/Login/static/script/app/ui/track-login-event';\n\nexport default function() {\n SmsCheckService.attachTo(document);\n SmsCheckUI.attachTo(document);\n TrackLoginEvent.attachTo(document);\n}\n","import TrackLoginEvent from 'areas/Login/static/script/app/ui/track-login-event';\n\nexport default function() {\n TrackLoginEvent.attachTo(document);\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport qs from 'qs';\n\nimport TrackLoginEvent from 'areas/Login/static/script/app/ui/track-login-event';\nimport LoginButtonUI from 'areas/Login/static/script/app/ui/login-button-ui';\n\nimport SocialLogins from 'areas/Login/static/script/app/ui/social-logins';\nimport * as LoginSignupEvents from 'app/ui/layout/login-signup-events';\n\nexport default function() {\n TrackLoginEvent.attachTo(document, {\n eventType: 'login'\n });\n LoginButtonUI.attachTo('[data-login-submit]');\n\n const search = qs.parse(window.location.search, {\n ignoreQueryPrefix: true\n });\n\n if (search['ReturnUrl']) {\n // Delayed import of cookieUtil to avoid conflict with main module loader\n import('../../../../../../../frontend/utils/cookie')\n .then(({ default: cookieUtil }) => {\n const cookieName = 'signup_referral_path';\n const expireDate = new Date();\n const value = window.location.origin + search['ReturnUrl'];\n expireDate.setTime(expireDate.getTime() + 10 * 60 * 1000);\n cookieUtil.createCookie(cookieName, value, expireDate);\n return;\n })\n .catch(e => e);\n }\n\n const socialLoginElement = document.getElementById('social-login');\n if (socialLoginElement) {\n ReactDOM.render(\n ,\n socialLoginElement\n );\n }\n\n LoginSignupEvents.LoginWithPasswordButtonComponent.attachTo(\n '[data-login-submit]'\n );\n}\n","import BankIdVerification from '../ui/bank-id-verification';\nimport bootLayout from 'static/script/app/boot/boot-layout';\n\nexport default function(initData) {\n bootLayout(initData);\n BankIdVerification.attachTo('[data-account-locked-verify-bankId]');\n}\n","import BankidVerificationUI from 'areas/Login/static/script/app/ui/bank-id-recovery-ui';\n\nexport default function() {\n BankidVerificationUI.attachTo(document);\n}\n","import { toLocalizedUrl } from 'tradera-utils/url';\nimport { isServer } from 'tradera-utils/nextjs';\n\nexport const toLocalizedRiotUrl = url => toLocalizedUrl(url, getLanguage());\n\nlet language;\nexport const getLanguage = () => {\n if (isServer) {\n return;\n }\n if (language === '' || language === null || language === undefined) {\n language = document.querySelector('html').getAttribute('lang');\n }\n\n return language;\n};\n","import logger from 'logger';\n\nfunction isSpaModule(module, initData) {\n const { isSinglePageApp } = initData;\n switch (module) {\n case 'start-page':\n case 'brand':\n case 'brand-list':\n case 'category-list':\n case 'endless-recommendation':\n case 'favourite-sellers':\n case 'landing':\n case 'report-item':\n case 'profile':\n case 'verify-bankid':\n case 'tradera-shop':\n case 'category':\n case 'custom-results':\n case 'search-results':\n return true;\n\n default:\n return isSinglePageApp;\n }\n}\n\nasync function loadSpaModule(initData) {\n const module = await import(\n /* webpackChunkName: \"tradera\" */ '../../../../frontend/apps/tradera/'\n );\n return module.default(initData);\n}\n\nasync function loadModule(module) {\n switch (module) {\n // Fallback modules for when SPA is toggled off\n // TODO: Remove when fully incorporated in SPA\n case 'start-page':\n case 'brand':\n case 'brand-list':\n case 'category-list':\n case 'landing':\n case 'order-checkout':\n case 'verify-bankid':\n case 'profile':\n case 'cart':\n case 'upi':\n case 'inr':\n case 'cause':\n case 'causes':\n case 'causes-info':\n return await import(\n /* webpackChunkName: \"tradera\" */ '../../../../frontend/apps/tradera/'\n );\n\n // Non-SPA modules\n case 'basic':\n return await import(\n /* webpackChunkName: \"basic\" */ '../app/pages/basic'\n );\n case 'bidding':\n return await import(\n /* webpackChunkName: \"bidding\" */ '../app/pages/bidding'\n );\n case 'bin-form':\n return await import(\n /* webpackChunkName: \"bin-form\" */ '../app/pages/bin-form'\n );\n case 'cart-checkout':\n return await import(\n /* webpackChunkName: \"cart-checkout\" */ '../app/pages/cart-checkout'\n );\n case 'checkout-select-payment':\n return await import(\n /* webpackChunkName: \"checkout-select-payment\" */ '../app/pages/checkout-select-payment'\n );\n case 'checkout2':\n return await import(\n /* webpackChunkName: \"checkout2\" */ '../app/pages/checkout2'\n );\n case 'detailed-search':\n return await import(\n /* webpackChunkName: \"detailed-search\" */ '../app/pages/detailed-search'\n );\n case 'image-search':\n return await import(\n /* webpackChunkName: \"image-search\" */ 'tradera-apps/image-search'\n );\n case 'messages':\n return await import(\n /* webpackChunkName: \"messages\" */ '../app/pages/messages'\n );\n case 'messaging':\n return await import(\n /* webpackChunkName: \"messaging-iframe\" */ '../app/pages/messaging'\n );\n default:\n return await import(\n /* webpackChunkName: \"basic\" */ '../app/pages/basic'\n );\n }\n}\n\nfunction runModule(module, initData = {}) {\n if (!module.default) {\n console.error(`Cannot run module \"${module}\" without exported default`);\n }\n return module.default(initData);\n}\n\nconst handleModuleError = error => logger(error);\n\nexport { isSpaModule, loadSpaModule, loadModule, runModule, handleModuleError };\n","export const parseAppVersion = version => {\n const [major = 0, minor = 0, patch = 0] = String(version)\n .split('.')\n .map(Number)\n .filter(number => !Number.isNaN(number));\n return { major, minor, patch };\n};\n\nexport const isSupportedMinimumVersion = (\n appVersionString,\n minimumVersionString\n) => {\n const appVersion = parseAppVersion(appVersionString);\n const minimumVersion = parseAppVersion(minimumVersionString);\n if (appVersion.major > minimumVersion.major) {\n return true;\n }\n if (appVersion.major === minimumVersion.major) {\n if (appVersion.minor > minimumVersion.minor) {\n return true;\n }\n if (appVersion.minor === minimumVersion.minor) {\n if (appVersion.patch >= minimumVersion.patch) {\n return true;\n }\n }\n }\n\n return false;\n};\n","import { createSlice } from '@reduxjs/toolkit';\nimport getInitialState, { getInitialServerState } from './initial-state';\nexport const initialState = { featureSwitches: {}, splitTestGroups: {} };\n\nconst slice = createSlice({\n name: 'environment',\n initialState,\n reducers: {\n initialize: (state, { payload }) => {\n return getInitialState(payload);\n },\n initializeServer: (state, { payload }) => {\n return getInitialServerState(payload);\n },\n setEnvironmentHash: (state, { payload }) => {\n state.environmentHash = payload;\n },\n setIsSpaNavigationEnabled: (state, { payload }) => {\n state.isSpaNavigationEnabled = payload;\n }\n }\n});\n\nexport const {\n initialize,\n initializeServer,\n setEnvironmentHash,\n setIsSpaNavigationEnabled\n} = slice.actions;\nexport const reducer = slice.reducer;\n","import {\n isMobile,\n isMobileSafari,\n isIOS,\n getSelectorsByUserAgent\n} from 'react-device-detect';\nimport { getWindow } from 'tradera-utils/window';\nimport { nullifyUndefinedProperties } from 'tradera-utils/object';\nimport { isSupportedMinimumVersion } from 'tradera-utils/versions';\n\nexport const getInitialServerState = ({\n query = {},\n headers = {},\n featureToggles = {},\n splitTestGroups = {}\n} = {}) => {\n const debug = query.debug === '1'; // TODO: Also save in & read from session\n const userAgent = headers['user-agent'] || 'unknown';\n\n const {\n isMobile,\n isMobileSafari,\n isIOS,\n isAndroid\n } = getSelectorsByUserAgent(userAgent);\n\n const appOsVersion = headers['x-tradera-app-os-version'] || '';\n const hybridAppDevice = headers['x-tradera-app-device'] || '';\n const hybridAppVersion = headers['x-tradera-app-version'] || '';\n const isNativeAppContext = headers['x-tradera-app'] === 'Native';\n const isHybridAppContext = Boolean(headers['x-tradera-app']);\n const isHybridAppContextForAndroid = Boolean(\n isHybridAppContext && (hybridAppDevice.includes('android') || isAndroid)\n );\n const isHybridAppContextForIos = Boolean(\n isHybridAppContext &&\n (hybridAppDevice.includes('iphone') ||\n hybridAppDevice.includes('ipad') ||\n isIOS)\n );\n\n return {\n isHybridAppContextForAndroid, // For CSS body classes in _app\n isHybridAppContextForIos, // For CSS body classes in _app\n isNativeAppContext,\n hybridAppVersion,\n\n debug,\n environment: process.env.NODE_ENV,\n isHybridAppContext,\n isNativeAppWithApplyPaySupport:\n isNativeAppContext &&\n isHybridAppContextForIos &&\n isSupportedMinimumVersion(hybridAppVersion, '3.51') &&\n isSupportedMinimumVersion(appOsVersion, '13'),\n isNativeAppWithSwishCallbackSupport:\n isNativeAppContext &&\n isHybridAppContextForIos &&\n isSupportedMinimumVersion(hybridAppVersion, '3.57') &&\n isSupportedMinimumVersion(appOsVersion, '13'),\n isIOS,\n isMobileDevice: isMobile,\n isMobileSafari,\n isSpaNavigationEnabled: false, // react-router SPA navigation, never next/router\n featureSwitches: featureToggles,\n splitTestGroups\n // TODO: Fetch values for below\n // environmentHash,\n // splitTests,\n // version\n };\n};\n\nexport const initEnvironment = () => {\n return nullifyUndefinedProperties({});\n};\n\nexport default initData => {\n const {\n debug,\n environment,\n featureSwitches,\n isHybridAppContext,\n isNativeAppContext,\n isNativeAppWithApplyPaySupport,\n isNativeAppWithSwishCallbackSupport,\n isSinglePageApp,\n splitTests,\n splitTestGroups,\n version,\n environmentHash\n } = initData;\n return nullifyUndefinedProperties({\n debug,\n environment,\n featureSwitches,\n environmentHash,\n isHybridAppContext,\n isNativeAppWithApplyPaySupport,\n isNativeAppWithSwishCallbackSupport,\n isIOS,\n isNativeAppContext,\n isMobileDevice: isMobile,\n isMobileSafari,\n isSpaNavigationEnabled:\n isSinglePageApp && !isHybridAppContext && !getWindow().frameElement\n ? true\n : false, // No SPA navigation in native apps or iFrame\n splitTests,\n splitTestGroups,\n version\n });\n};\n","import axios from 'axios';\n\nimport { logger } from 'packages/index';\nimport ENDPOINTS from 'tradera-constants/endpoints';\n\n/**\n * Standardized api error codes\n */\nconst API_ERRORS = {\n IGNORE_ME: 'IGNORE_ME',\n ABORTED: 'ABORTED',\n CANCELLED: 'CANCELLED',\n NETWORK: 'NETWORK',\n TIMEOUT: 'TIMEOUT',\n VERSION_MISMATCH: 'VERSION_MISMATCH',\n LOGGED_OUT: 'LOGGED_OUT'\n};\n\nconst defaultJsonRequestHeaders = {\n // Force json response\n Accept: 'application/json',\n // For WebAPI and RequiresAuthorization to handle ajax request\n 'X-Requested-With': 'XMLHttpRequest'\n};\n\n/**\n * Standard Axios configs\n */\nconst axiosConfigs = {\n // Requests to endpoints with authentication\n authenticated: {\n // Send auth cookies\n withCredentials: true,\n headers: defaultJsonRequestHeaders\n },\n notAuthenticated: {\n // Dont send auth cookies\n withCredentials: false,\n headers: defaultJsonRequestHeaders\n }\n};\n\nconst isMissingAuthToken = responseString => {\n try {\n const responseObject = JSON.parse(responseString);\n const isMissing =\n responseObject.responseStatus.errorCode === 'MissingAuthToken';\n return isMissing;\n } catch {\n return false;\n }\n};\n\nconst isUnauthorized = statusCode => statusCode === 401;\n\nconst addAntiCacheParam = url => {\n const antiCacheRegExp = /([?&]_=)[^&]*/;\n return antiCacheRegExp.test(url)\n ? url.replace(antiCacheRegExp, '$1' + new Date().getTime())\n : url + (/\\?/.test(url) ? '&' : '?') + '_=' + new Date().getTime();\n};\n\nconst submitOriginalRequest = async error =>\n axios({\n ...error.config,\n url: addAntiCacheParam(error.config.url)\n });\n\nconst handleMissingAuthToken = async error => {\n const refreshAccessToken = async () =>\n axios.get(ENDPOINTS.TOUCHWEB_URL + 'login/state');\n const handleErrorAfterRefresh = async errorAfterRefreshToken => {\n if (isUnauthorized(errorAfterRefreshToken.request?.status)) {\n error.message = API_ERRORS.LOGGED_OUT;\n }\n return Promise.reject(error);\n };\n return refreshAccessToken()\n .then(() => submitOriginalRequest(error))\n .catch(handleErrorAfterRefresh);\n};\n\nconst handleUnauthorized = async error => {\n const checkLoginState = async () =>\n axios.get(ENDPOINTS.TOUCHWEB_URL + 'login/state');\n return checkLoginState().then(response => {\n const isLoggedIn = response.data?.isLoggedIn;\n if (isLoggedIn) {\n return submitOriginalRequest(error);\n }\n error.message = API_ERRORS.LOGGED_OUT;\n // eslint-disable-next-line promise/no-return-wrap\n return Promise.reject(error);\n });\n};\n\nconst errorResponseInterceptor = error => {\n if (isMissingAuthToken(error.request?.response)) {\n return handleMissingAuthToken(error);\n } else if (isUnauthorized(error.request?.status)) {\n return handleUnauthorized(error);\n }\n return Promise.reject(error);\n};\n\n/**\n * Create Axios instance or decorate existing instance with interceptor for expired token responses\n *\n * @param {AxiosInstance} [axiosInstance]\n * @returns {AxiosInstance}\n */\nfunction axiosWithTokenRefresh(axiosInstance) {\n let instance;\n if (axiosInstance === undefined) {\n instance = axios.create();\n } else {\n instance = axiosInstance;\n }\n instance.interceptors.response.use(\n response => response,\n errorResponseInterceptor\n );\n return instance;\n}\n\nconst cancelTokens = {};\n\n/**\n * Create new or return existing cancellation function\n *\n * Usage:\n * const { cancel, cancelToken } = utilizeCancelToken('tokenId')\n * if (cancel) cancel();\n * axios.get('http://api.com/...', { cancelToken });\n *\n * @param {string} tokenId - A string ID shared between requests that cancel together\n * @returns {{ cancel: function, cancelToken: function }}\n */\nfunction utilizeCancelToken(tokenId) {\n let cancel;\n if (tokenId in cancelTokens) {\n cancel = cancelTokens[tokenId].cancel;\n }\n cancelTokens[tokenId] = axios.CancelToken.source();\n return {\n cancel,\n cancelToken: cancelTokens[tokenId].token\n };\n}\n\n/**\n * Check response version and throw error if different from current\n *\n * @param {string} version\n * @return {function(*): object|void}\n */\nfunction checkResponseVersion(version = '12.0.0') {\n return response => {\n if (\n response.headers &&\n response.headers['X-Tradera-Version'] &&\n response.headers['X-Tradera-Version'] !== version\n ) {\n throw new Error(API_ERRORS.VERSION_MISMATCH);\n } else {\n return response;\n }\n };\n}\n\n/**\n * Checks redirect response for logged out user\n * This is an old solution. New solutions return a 401 response instead (see handleError).\n * Requires Axios config to include { withCredentials: true }\n *\n * @returns {Function}\n */\nfunction checkResponseLoggedOut() {\n return response => {\n if (\n response.data &&\n typeof response.data === 'string' &&\n response.data.includes('Logga in')\n ) {\n throw new Error(API_ERRORS.LOGGED_OUT);\n } else {\n return response;\n }\n };\n}\n\n/**\n * Final standardized formatting of an api response\n *\n * @returns { function(*): { data: *, status: integer }}\n */\nfunction finalizeResponse() {\n return response => {\n const { data, status } = response;\n return {\n data,\n status\n };\n };\n}\n\n/**\n * Common network request error handling\n *\n * @param {Object.} statusHandlers - { code: message }\n * @returns {function(*=): Promise}\n */\nfunction handleError(statusHandlers = {}) {\n return error => {\n let status = error.response && error.response.status;\n let message = error.message ? error.message : error.toString();\n if (axios.isCancel(error)) {\n error.message = API_ERRORS.CANCELLED;\n } else if (message.includes('timeout') || status === 408) {\n error.message = API_ERRORS.TIMEOUT;\n } else if (message.includes('Network')) {\n error.message = API_ERRORS.NETWORK;\n } else if (message.includes('Request aborted')) {\n error.message = API_ERRORS.ABORTED;\n } else if (status === 401) {\n error.message = API_ERRORS.LOGGED_OUT;\n } else if (status in statusHandlers) {\n error.message = statusHandlers[status];\n }\n throw error;\n };\n}\n\nfunction reloadOnUnauthorized(error) {\n switch (error.message) {\n case API_ERRORS.LOGGED_OUT:\n window.location.reload();\n break;\n default:\n throw error;\n }\n}\n\nfunction logError(error) {\n switch (error.message) {\n case API_ERRORS.IGNORE_ME:\n case API_ERRORS.CANCELLED:\n case API_ERRORS.NETWORK:\n case API_ERRORS.TIMEOUT:\n break;\n default:\n logger(error);\n break;\n }\n}\n\nexport {\n addAntiCacheParam,\n API_ERRORS,\n axiosConfigs,\n axiosWithTokenRefresh,\n checkResponseVersion,\n checkResponseLoggedOut,\n defaultJsonRequestHeaders,\n errorResponseInterceptor,\n finalizeResponse,\n handleError,\n logError,\n reloadOnUnauthorized,\n utilizeCancelToken\n};\n","import { component } from 'flightjs';\nimport WithAjax from 'app/data/with-ajax';\n\nfunction BankIdRecoveryUi() {\n this.attributes({\n bankIdAppLnk: '[data-bankId-restore-app-link]',\n resetEmailLnk: '[data-bankId-reset-email-lnk]',\n divInProgress: '[data-bankId-restore-inProgress]',\n divCompleted: '[data-bankId-restore-complete]',\n hdnRoute: '[data-bankId-restore-changePwdRoute]',\n setNewPwdbtn: '[data-bankId-restore-set-new-pwd]',\n divError: '[data-bankId-restore-error]',\n divErrorContainer: '[data-bankId-restore-error-cnt]'\n });\n\n this.pollProgress = function() {\n let self = this;\n setTimeout(function() {\n self._get({\n url: '/login/verifybankIdProgress',\n error: function() {\n self.showError('Avbruten');\n },\n success: function(data) {\n if (data.errorMessage) {\n self.showError(/*data.errorMessage*/);\n } else if (data.isCompleted) {\n self.showComplete(data.token);\n } else {\n self.pollProgress();\n }\n }\n });\n }, 3000);\n };\n\n this.showComplete = function(token) {\n $(this.attr.divInProgress).addClass('hidden');\n $(this.attr.divCompleted).removeClass('hidden');\n $(this.attr.resetEmailLnk).attr(\n 'href',\n $(this.attr.resetEmailLnk).attr('href') + '?key=' + token\n );\n };\n\n this.showError = function() {\n $(this.attr.divInProgress).addClass('hidden');\n $(this.attr.divError).removeClass('hidden');\n };\n\n this.startPolling = function() {\n let error = $('.security-box__message security-error');\n if (error.length === 0) {\n this.pollProgress();\n }\n };\n\n this.after('initialize', function() {\n this.startPolling();\n });\n}\n\nexport default component(BankIdRecoveryUi, WithAjax);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 16 16\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), /*#__PURE__*/React.createElement(\"path\", {\n clipRule: \"evenodd\",\n d: \"M1.5 8c0-3.6 2.9-6.5 6.5-6.5s6.5 2.9 6.5 6.5-2.9 6.5-6.5 6.5S1.5 11.6 1.5 8zM8 .5C3.9.5.5 3.9.5 8s3.4 7.5 7.5 7.5 7.5-3.4 7.5-7.5S12.1.5 8 .5zm.6 11.2c0 .3-.2.5-.6.5s-.5-.2-.6-.5V6.6c0-.3.2-.5.6-.5.3 0 .5.2.6.5zm.1-7.2c0 .4-.3.7-.7.7s-.7-.3-.7-.7.3-.7.7-.7.7.3.7.7z\",\n fillRule: \"evenodd\"\n})));","import { SocketIoChannel } from 'tradera-services/socket-io-channel';\n\nlet globalSocket = null;\n\nexport const getGlobalSocket = socketUrl => {\n if (!globalSocket) {\n globalSocket = new SocketIoChannel(socketUrl, true);\n }\n return globalSocket;\n};\n","import mapObject from 'underscore/modules/mapObject';\nimport isUndefined from 'underscore/modules/isUndefined';\n\nexport const nullifyUndefinedProperties = obj =>\n mapObject(obj, value => (isUndefined(value) ? null : value));\n","import axios from 'axios';\nimport { getCurrentLanguage } from 'tradera-lang/boot-languages';\nimport { toLocalizedUrl } from 'tradera-utils/url';\nimport { setEnvironmentHash, setIsSpaNavigationEnabled } from './reducer';\n\nexport const updateEnvironmentHash = () => async (dispatch, getState) => {\n const url = toLocalizedUrl('/ping', getCurrentLanguage());\n const response = await axios.get(url);\n const environmentHash = response.headers['x-tradera-environment'];\n const current = getState().environment.environmentHash;\n if (environmentHash !== current) {\n dispatch(setEnvironmentHash(environmentHash));\n dispatch(setIsSpaNavigationEnabled(false));\n }\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { updateEnvironmentHash } from 'tradera-state/environment/actions';\n\nconst ALink = ({\n useLink,\n href,\n children,\n onClick: givenOnClick,\n ...otherProps\n}) => {\n const dispatch = useDispatch();\n const isSpaNavigationEnabled = useSelector(\n state => state.environment.isSpaNavigationEnabled\n );\n if (isSpaNavigationEnabled && useLink) {\n // Strip away origin for local links\n let to = href;\n if (href?.startsWith(location.origin)) {\n const { pathname, search } = new URL(href);\n to = pathname + search;\n }\n return (\n {\n dispatch(updateEnvironmentHash());\n if (givenOnClick) givenOnClick(evt);\n }}>\n {children}\n \n );\n } else {\n return (\n \n {children}\n \n );\n }\n};\n\nALink.propTypes = {\n useLink: PropTypes.bool,\n href: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired,\n onClick: PropTypes.func\n};\n\nALink.defaultProps = {\n useLink: false,\n onClick: null\n};\n\nexport default ALink;\n","export const isDev = () =>\n process && process.env && process.env.NODE_ENV !== 'production';\n\nexport const warnIfDevBuild = moduleName => {\n if (isDev()) {\n console.log(\n `%c Warning: This is a Dev build of ${moduleName}`,\n 'background:red; color:white; font-size:18px;'\n );\n }\n};\n\n/**\n * helper function that is called after the header has been loaded. useful when you want to have the redux loaded before you start\n * to dispatch actions.\n * @param {func} callback\n */\nexport const onModuleLoaded = callback => {\n const isModuleLoaded = () =>\n window.document.body.getAttribute('data-module-loaded') === 'true';\n\n try {\n if (isModuleLoaded()) {\n callback();\n }\n let observer = new MutationObserver(mutationsList => {\n const element = mutationsList.filter(\n item => item.attributeName === 'data-module-loaded'\n );\n if (element !== null && isModuleLoaded()) {\n callback();\n }\n });\n observer.observe(window.document.body, { attributes: true });\n // eslint-disable-next-line no-empty\n } catch (error) {}\n};\n","import { isDev } from 'static/script/utils/environment';\n\nexport const buildInitialGtmDataLayerFromInitData = initData => {\n // ***** ATTENTION !!! *****\n // If you change anything here you must\n // also change in buildInitialGtmDataLayerFromState\n // so that they match. Otherwise values\n // between Touchweb and NextWeb don't match.\n const initialDataLayer = {\n memberId: initData.memberId || 0,\n userLanguage: initData.languageCodeIso2,\n memberEmail: initData.isLoggedIn ? initData.memberEmail : '',\n memberHashedEmail: initData.isLoggedIn\n ? initData.memberEmailSha256\n : '',\n 'criteo.hashedEmail': initData.isLoggedIn\n ? initData.memberEmailMd5\n : '',\n memberFirstName: initData.isLoggedIn ? initData.memberFirstName : '',\n memberLastName: initData.isLoggedIn ? initData.memberLastName : '',\n memberCountry: initData.isLoggedIn ? initData.memberCountry : '',\n loginState: initData.isLoggedIn ? 'logged in' : 'not logged in',\n isNotInIframe: window.self === window.top,\n 'blueshift.event-api-key': initData.blueshiftEventApiKey,\n isSinglePageApp: initData.isSinglePageApp,\n isNativeAppContext: initData.isNativeAppContext,\n isQuantcastConsentEnabled:\n initData.featureSwitches['quantcast-consent'],\n isDigitalAudienceTrackingEnabled:\n initData.featureSwitches['digital-audience-tracking'],\n quantcastSite: initData.quantcastSite\n };\n // add split tests to datalayer\n if (initData.splitTestGroups) {\n for (let [key, value] of Object.entries(initData.splitTestGroups)) {\n initialDataLayer[`splittest_${key}`] = value;\n }\n }\n return initialDataLayer;\n};\n\nexport const buildInitialGtmDataLayerFromState = state => {\n const quantcastSite = isDev() ? 'beta.tradera.com' : 'www.tradera.com';\n const { environment, language, member } = state;\n const { featureSwitches } = environment;\n const isQuantcastConsentEnabled = featureSwitches['quantcast-consent'];\n const isDigitalAudienceTrackingEnabled =\n featureSwitches['digital-audience-tracking'];\n const splitTestGroups = Object.entries(environment.splitTestGroups).reduce(\n (groups, [key, value]) => {\n return {\n ...groups,\n [`splittest_${key}`]: value\n };\n },\n {}\n );\n // ***** ATTENTION !!! *****\n // If you change anything here you must\n // also change in buildInitialGtmDataLayerFromInitData\n // so that they match. Otherwise values\n // between Touchweb and NextWeb don't match.\n return {\n memberId: member.memberId || 0,\n userLanguage: language.preferred.languageCodeIso2,\n memberEmail: member.memberEmail ?? '',\n memberHashedEmail: member.memberEmailSha256 ?? '',\n 'criteo.hashedEmail': member.memberEmailMd5 ?? '',\n memberFirstName: member.memberFirstName ?? '',\n memberLastName: member.memberLastName ?? '',\n memberCountry: member.memberCountry ?? '',\n loginState: member.isLoggedIn ? 'logged in' : 'not logged in',\n isNotInIframe: window.self === window.top,\n 'blueshift.event-api-key':\n process.env.NEXT_PUBLIC_BLUESHIFT_EVENT_API_KEY,\n isSinglePageApp: true,\n isNativeAppContext: environment.isNativeAppContext,\n isQuantcastConsentEnabled,\n isDigitalAudienceTrackingEnabled,\n quantcastSite,\n ...splitTestGroups\n };\n};\n","import {\n useBreakpoint,\n isMobile\n} from 'tradera-components/breakpoint/breakpoint';\n\nconst useIsMobile = () => isMobile(useBreakpoint());\n\nexport default useIsMobile;\n","export const isPrerender = userAgent =>\n userAgent.indexOf('Prerender (+https://github.com/prerender/prerender)') >\n -1;\n","/**\n * Inject a script in the head with given text content\n *\n * @param {string} text\n * @param {object} [attributes]\n * @returns {HTMLElement} - The injected script element\n */\nfunction injectScript(text, attributes) {\n const scriptElement = document.createElement('script');\n Array.from(Object.entries(attributes)).forEach(([name, value]) => {\n scriptElement.setAttribute(name, value);\n });\n scriptElement.appendChild(document.createTextNode(text));\n document.head.appendChild(scriptElement);\n return scriptElement;\n}\n\nfunction loadScript(src, options = {}) {\n const optionsWithDefaults = {\n timeout: options.timeout || 0\n };\n return new Promise((resolve, reject) => {\n if (document.querySelector(`head > script[src=\"${src}\"]`) !== null) {\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n\n let timeoutTimer;\n if (optionsWithDefaults.timeout > 0) {\n timeoutTimer = setTimeout(() => {\n script.onload = null;\n script.onerror = null;\n document.head.removeChild(script);\n reject(new Error('SCRIPT_LOAD_TIMEOUT'));\n }, optionsWithDefaults.timeout);\n }\n\n script.src = src;\n script.async = true;\n script.onload = () => {\n if (timeoutTimer) clearTimeout(timeoutTimer);\n resolve();\n };\n script.onerror = error => {\n if (timeoutTimer) clearTimeout(timeoutTimer);\n reject(error);\n };\n document.head.appendChild(script);\n });\n}\n\nexport { injectScript, loadScript };\n","/**\n OBSOLETE - use google tag manager service instead:\n src\\EbaySweden.TouchWeb\\static\\script\\app\\ui\\google-tagmanager-service.js\n\n\n * Ported from Applications/TouchWeb/src/EbaySweden.TouchWeb/static/script/app/ui/layout/google-tagmanager.js\n * Best way to import this module is `import * as Analytics from 'analytics'`\n */\n\nimport * as Sentry from '@sentry/react';\n\nexport const pushToDataLayer = payload => {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(payload);\n};\nexport const trackPageView = () =>\n window.ga\n ? ga('send', 'pageview', location.pathname)\n : pushToDataLayer({ event: 'trackPageview' });\nexport const isNonInteractive = analyticsData =>\n analyticsData.userTriggered === undefined\n ? true\n : !analyticsData.userTriggered;\n/**\n * trackTiming\n * @param {*} category\n * @param {*} variable\n * @param {*} value\n * @param {*} label\n */\nexport const trackTiming = (category, variable, value, label = '') =>\n window.ga ? ga('send', 'timing', category, variable, value, label) : false;\n\n/**\n * Track Analytics Event\n */\nexport const trackEvent = analyticsData => {\n if (!analyticsData) {\n return;\n }\n pushToDataLayer({\n event: 'trackEvent',\n eventCategory: analyticsData.category || '',\n eventAction: analyticsData.action || '',\n eventLabel: analyticsData.label || '',\n eventValue: analyticsData.value || '0',\n eventNonInteractive: isNonInteractive(analyticsData),\n hitCallback: analyticsData.hitCallback || []\n });\n\n Sentry.addBreadcrumb({\n type: 'default',\n level: Sentry.Severity.Info,\n category: isNonInteractive(analyticsData) ? 'tracking' : 'ui-action',\n message: 'Analytics Event',\n data: analyticsData\n });\n};\n\n// Export object for Sinon stubbing\nexport default {\n pushToDataLayer,\n trackEvent,\n trackPageView,\n trackTiming\n};\n","/**\n *\n * # track events:\n * import GtmService from 'static/script/app/ui/google-tagmanager-service';\n * GtmService.trackGtmEvent(\"zorro\", { marvel: false, black: true })\n *\n *\n *\n */\n\nimport * as Sentry from '@sentry/react';\nimport initData from 'init-data';\nimport { buildInitialGtmDataLayerFromInitData } from './google-tagmanager-helper';\n\n/**\n * SPA page view tracking becomes enabled after first\n * page view tracking which happens after the first\n * page is loaded from server.\n * This prevents reset of data layer after a SPA route has\n * changed (happens late after full page load) and prevents\n * duplicated trackPageView events.\n */\nlet spaPageViewTrackingEnabled = false;\n\nclass GoogleTagManagerService {\n loadGtmScript() {\n this._newPageFromServer();\n\n const accountId = 'GTM-5TMB2D';\n (function(w, d, s, l, i) {\n w[l] = w[l] || [];\n w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\n var f = d.getElementsByTagName(s)[0],\n j = d.createElement(s),\n dl = l != 'dataLayer' ? '&l=' + l : '';\n j.async = true;\n j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl;\n f.parentNode.insertBefore(j, f);\n })(window, document, 'script', 'dataLayer', accountId);\n }\n\n push(payload) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(payload);\n }\n\n _getDatalayerObject() {\n let output = {};\n if (window.dataLayer) {\n for (let entry of window.dataLayer) {\n output = { ...output, ...entry };\n }\n }\n return output;\n }\n\n /**\n * destroy datalayer from previous loading. this is really only useful in spa pages, it's backwards compatible so it doesnt do any harm on old pages\n */\n _reset() {\n if (!window.dataLayer) {\n return;\n }\n\n let data = this._getDatalayerObject();\n for (let key of Object.keys(data)) {\n data[key] = undefined;\n }\n window.dataLayer.push({ ...data, event: 'reset' });\n }\n\n _hasPreviouslyTrackedPage = () =>\n !!window.dataLayer?.find(item => item.event === 'trackPageview');\n\n newPage(pageType, initialDataLayer) {\n if (this._hasPreviouslyTrackedPage()) {\n this._reset();\n }\n this._pushInitialDataLayer(initialDataLayer);\n this.push({ event: 'pageType', 'page.pageType': pageType });\n }\n\n /**\n * Same as newPage but with logic for case in Touchweb where initial\n * datalayer was set on server and already tracked on landing page.\n * This function does nothing until after first call to trackPageView\n * (e.g. after a SPA-navigation away from the landing page).\n * @param {*} pageType\n * @param {*} initialDataLayer\n * @returns\n */\n newSpaPage(pageType, initialDataLayer) {\n if (!spaPageViewTrackingEnabled) {\n return;\n }\n this.newPage(pageType, initialDataLayer);\n }\n\n _newPageFromServer() {\n const initialDataLayer = buildInitialGtmDataLayerFromInitData(initData);\n this._pushInitialDataLayer(initialDataLayer);\n // ------------------------------------------------\n // backwards compatibility\n // get old datalayer info and push it in\n if (window.legacyDataLayer) {\n for (let entry of window.legacyDataLayer) {\n window.dataLayer.push({\n event: 'legacyDataLayer',\n ...entry\n });\n }\n }\n }\n\n _pushInitialDataLayer(initialDataLayer) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push({\n ...initialDataLayer,\n event: 'initialDataLayer'\n });\n }\n\n /**\n * tracks a google analytics event\n * @param {string} category ga category\n * @param {string} action ga action what happens, ie: \"Filter box - open/close\"\n * @param {string} label ga label what the value of the action was, ie \"close\"\n * @param {integer} [value] ga interger value of the action.\n */\n trackAction(category, action, label, value = 0, nonInteractive = false) {\n this.push({\n event: 'trackEvent',\n eventCategory: category || '',\n eventAction: action || '',\n eventLabel: label || '',\n eventValue: value || '0',\n eventNonInteractive: nonInteractive\n });\n\n Sentry.addBreadcrumb({\n type: 'default',\n level: Sentry.Severity.Info,\n category: nonInteractive ? 'tracking' : 'ui-action',\n message: 'Analytics Event',\n data: {\n category,\n action,\n label,\n value\n }\n });\n }\n\n /**\n * google tag manager event. Note: if you want to send google analytics events use trackAction instead\n * @param {string} eventName\n * @param {object} [event] data\n */\n trackGtmEvent(eventName, data = {}) {\n this.push({\n event: eventName,\n ...data\n });\n }\n\n /**\n * Track a pageview. Use this script in SPA's to make sure that analytics gets pageview information.\n * This creates a virtual page view since google analytics by default doesn't track changes to url via\n * push state.\n */\n trackPageView() {\n this.trackGtmEvent('trackPageview');\n spaPageViewTrackingEnabled = true;\n }\n\n /**\n *\n * @param {string} category\n * @param {string} action\n * @param {string} label\n * @param {string} callback\n * @param {} value\n */\n trackLinkClickAndCallback(category, action, label, callback, value = 0) {\n this.push({\n event: 'trackEvent',\n eventCategory: category || '',\n eventAction: action || '',\n eventLabel: label || '',\n eventValue: value || '0',\n eventNonInteractive: false,\n eventCallback: callback // part of google tag manager api to execute code after all tags in datalayer have been executed\n });\n }\n\n trackLinkClickAndGotoUrl(category, action, label, url, value = 0) {\n const callback = () => {\n location.href = url;\n };\n this.trackLinkClickAndCallback(\n category,\n action,\n label,\n callback,\n value\n );\n }\n}\n\nexport default new GoogleTagManagerService();\n"],"sourceRoot":""}