{"version":3,"file":"script/bundle-15.5ac4f6a45b.js","mappings":"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","sources":["webpack://touchweb/./src/blueprint/theme/icons2/arrow-down.svg","webpack://touchweb/./src/blueprint/theme/icons2/close.svg","webpack://touchweb/./src/blueprint/theme/icons2/loading.svg","webpack://touchweb/./src/apps/my-tradera/app/components/settings/selling/item-localization.tsx","webpack://touchweb/./src/apps/my-tradera/app/data/shipping-providers.ts","webpack://touchweb/./src/apps/my-tradera/saved-searches/saved-searches-api.ts","webpack://touchweb/./src/apps/registration/components/common/form/form-footer-logo.jsx","webpack://touchweb/./src/apps/registration/components/common/form/form-footer.jsx","webpack://touchweb/./src/components/site-header/hover-menu/constants.ts","webpack://touchweb/./src/components/site-header/hover-menu/hover-menu.module.scss","webpack://touchweb/./src/components/site-header/hover-menu/hover-menu.jsx","webpack://touchweb/./src/components/localization/language-select.module.scss","webpack://touchweb/./src/components/localization/translation-preferred-menu-item.module.scss","webpack://touchweb/./src/components/localization/translation-preferred-menu-item.tsx","webpack://touchweb/./src/components/localization/language-select.tsx","webpack://touchweb/./src/components/localization/shipping-country-select-dropdown.module.scss","webpack://touchweb/./src/components/localization/shipping-country-select-dropdown.tsx","webpack://touchweb/./src/components/localization/shipping-country-select.tsx","webpack://touchweb/./src/components/localization/localization-menu.tsx","webpack://touchweb/./src/components/site-header/localization-link.module.scss","webpack://touchweb/./src/components/site-header/localization-link.tsx","webpack://touchweb/./src/apps/registration/components/common/form/form-header.jsx","webpack://touchweb/./src/apps/registration/components/common/form/select-country.module.scss","webpack://touchweb/./src/components/separator/separator.tsx","webpack://touchweb/./src/apps/registration/components/common/form/select-country.jsx","webpack://touchweb/./src/apps/registration/components/common/kount-session-id-awaiter.js","webpack://touchweb/./src/apps/registration/components/common/user-reg-wrapper.module.scss","webpack://touchweb/./src/apps/registration/components/common/user-reg-wrapper.jsx","webpack://touchweb/./src/apps/registration/helpers/blueshift.js","webpack://touchweb/./src/apps/registration/helpers/event-emitter.js","webpack://touchweb/./src/apps/registration/helpers/get-available-user-registration-countries.js","webpack://touchweb/./src/apps/registration/services/google-tag-manager.js","webpack://touchweb/./src/apps/tradera/components/discover/helpers/search-gtm.js","webpack://touchweb/./src/apps/tradera/components/vip/api/vip-api-constants.ts","webpack://touchweb/./src/apps/tradera/state/wish-list-nudge/reducer.ts","webpack://touchweb/./src/components/item-card/item-card-parts/item-card-image-size.ts","webpack://touchweb/./src/components/messaging/firebase-api.ts","webpack://touchweb/./src/components/portals/loading-portal.jsx","webpack://touchweb/./src/components/quick-view/ajax-item-api.ts","webpack://touchweb/./src/components/quick-view/quick-view-reducer.ts","webpack://touchweb/./src/components/referral-modal/services/referral-modal-api.ts","webpack://touchweb/./src/constants/breakpoints.ts","webpack://touchweb/./src/constants/storage.js","webpack://touchweb/./src/constants/time.ts","webpack://touchweb/./src/constants/ui.ts","webpack://touchweb/./src/lang/translate.tsx","webpack://touchweb/./src/localization/countrycode.js","webpack://touchweb/./src/localization/languagecode.js","webpack://touchweb/./src/localization/use-localized-price-formatter.ts","webpack://touchweb/./src/services/toasts.tsx","webpack://touchweb/./src/state/categories/reducer.js","webpack://touchweb/./src/state/configure-store.tsx","webpack://touchweb/./src/state/discover/actions.js","webpack://touchweb/./src/state/discover/reducer.js","webpack://touchweb/./src/state/environment/selectors.ts","webpack://touchweb/./src/state/items/reducer.ts","webpack://touchweb/./src/state/member-storage/actions.ts","webpack://touchweb/./src/state/member-storage/reducer.ts","webpack://touchweb/./src/state/member/selectors.ts","webpack://touchweb/./src/state/personalisation/helpers.ts","webpack://touchweb/./src/state/personalisation/recent-searches-cookies.ts","webpack://touchweb/./src/state/personalisation/reducer.ts","webpack://touchweb/./src/state/push-notifications/push-notifications-slice.js","webpack://touchweb/./src/state/services/cart-api.ts","webpack://touchweb/./src/state/services/discover-api.ts","webpack://touchweb/./src/state/services/helpers/saved-searches-storage.js","webpack://touchweb/./src/state/services/member-api.ts","webpack://touchweb/./src/state/services/messaging-stats-api.ts","webpack://touchweb/./src/state/services/touchweb-search-api.ts","webpack://touchweb/./src/state/services/types/webapi-member-generated.ts","webpack://touchweb/./src/state/services/webapi-api.ts","webpack://touchweb/./src/state/services/wish-list-api.ts","webpack://touchweb/./src/state/services/wish-list-items-ending-today-api.ts","webpack://touchweb/./src/state/shipping-region/selectors.ts","webpack://touchweb/./src/state/status/reducer.ts","webpack://touchweb/./src/state/ui/actions.js","webpack://touchweb/./src/state/ui/reducer.ts","webpack://touchweb/./src/state/views/cart/reducer.js","webpack://touchweb/./src/state/views/checkout/initial-state.js","webpack://touchweb/./src/state/views/checkout/reducer.js","webpack://touchweb/./src/state/views/report-item/actions.js","webpack://touchweb/./src/state/views/report-item/constants.ts","webpack://touchweb/./src/state/views/report-item/reducer.js","webpack://touchweb/./src/state/views/shipping-calculator/reducer.js","webpack://touchweb/./src/state/views/tradera-shop/actions.js","webpack://touchweb/./src/state/views/tradera-shop/reducer.ts","webpack://touchweb/./src/state/views/view-item/reducer.ts","webpack://touchweb/./src/utils/allowed-buyer-region.ts","webpack://touchweb/./src/utils/api.ts","webpack://touchweb/./src/utils/date.js","webpack://touchweb/./src/utils/http.ts","webpack://touchweb/./src/utils/scheduler.ts","webpack://touchweb/./src/utils/script.ts","webpack://touchweb/./src/utils/string.ts","webpack://touchweb/./src/utils/url.ts"],"sourcesContent":["function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\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 d: \"M8 9.2l4.9-5 1.4 1.4L8 12 1.7 5.6l1.4-1.4z\"\n})));","function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\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 fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.58 1.58a.6.6 0 01.84 0l5.59 5.58 5.58-5.58a.6.6 0 11.84.84L8.85 8l5.58 5.59a.6.6 0 01-.84.84L8 8.85l-5.59 5.58a.6.6 0 01-.84-.84L7.16 8 1.58 2.42a.6.6 0 010-.84z\"\n})));","function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }\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.98 3.08a7 7 0 10-.06 9.9l-.77-.78a5.9 5.9 0 11.05-8.35l.78-.77z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.47 1.96L11.1 4.21l2.5.5-.12-2.76z\"\n})));","import { classNames } from 'tradera/utils/class-names';\nimport type { TFunction } from 'i18next';\nimport React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useCurrentLanguage, useTranslator } from 'tradera/lang/translate';\nimport { mapCountryCodeToCountryKey } from 'tradera/localization/countries';\nimport { mapLanguageCodeToLanguageKey } from 'tradera/localization/map-language-code-to-language-key';\nimport { webApiClient } from 'tradera/utils/http';\nimport { isSwedenCountryCodeOrUndefined } from 'tradera/localization/countrycode';\nimport { getLanguageFromCountryCode } from 'tradera/localization/languagecode';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport type { MemberSellerSettingsItemLocalizationApiDto } from 'tradera/state/services/types/webapi-member-generated';\n\ntype ItemLocalizationProps = {\n itemLocalization:\n | MemberSellerSettingsItemLocalizationApiDto\n | null\n | undefined;\n};\n\nexport const ItemLocalization = ({\n itemLocalization\n}: ItemLocalizationProps) => {\n const memberCountryCode = useSelector(selectShippingRegionCountryCodeIso2);\n const { defaultCountryCodeIso2, defaultLanguageCodeIso2 } =\n useDefaultItemLocalizationSettingValues();\n const [\n selectedDescriptionLanguageCodeIso2,\n setSelectedDescriptionLanguageCodeIso2\n ] = useState(\n itemLocalization?.selectedDescriptionLanguageCodeIso2 ||\n defaultLanguageCodeIso2\n );\n\n const [shippingFromCountryCodeIso2, setShippingFromCountryCodeIso2] =\n useState(\n itemLocalization?.shippingFromCountryCodeIso2 ||\n defaultCountryCodeIso2\n );\n\n if (isSwedenCountryCodeOrUndefined(memberCountryCode)) {\n return null;\n }\n\n const onSelectedDescriptionLanguageChange = (languageCodeIso2: string) => {\n webApiClient.put('/member/profile/selected-description-language', {\n languageCodeIso2\n });\n setSelectedDescriptionLanguageCodeIso2(languageCodeIso2);\n };\n\n const onShippingFromCountryChange = (countryCodeIso2: string) => {\n webApiClient.put('/member/profile/shipping-from-country', {\n countryCodeIso2\n });\n setShippingFromCountryCodeIso2(countryCodeIso2);\n };\n return (\n \n );\n};\n\nexport const getDefaultSelectedDescriptionLanguageCodeIso2 = (\n memberLanguageCodeIso2: string | null,\n memberCountryCodeIso2: string\n) => {\n const countryLanguageCode = getLanguageFromCountryCode(\n memberCountryCodeIso2\n );\n\n return memberLanguageCodeIso2 === countryLanguageCode\n ? countryLanguageCode\n : 'sv';\n};\n\nexport const getDefaultShippingFromCountryCodeIso2 = (\n memberCountryCodeCodeIso2: string\n) => {\n return ['DK', 'SE'].includes(memberCountryCodeCodeIso2)\n ? memberCountryCodeCodeIso2\n : null;\n};\n\nexport const useDefaultItemLocalizationSettingValues = (): {\n defaultCountryCodeIso2: string | null;\n defaultLanguageCodeIso2: string;\n} => {\n const countryCode = useSelector(selectShippingRegionCountryCodeIso2);\n const { language } = useCurrentLanguage();\n\n return {\n defaultCountryCodeIso2:\n getDefaultShippingFromCountryCodeIso2(countryCode),\n defaultLanguageCodeIso2: getDefaultSelectedDescriptionLanguageCodeIso2(\n language,\n countryCode\n )\n };\n};\n\ntype ItemLocalizationSettingsProps = {\n selectedDescriptionLanguageCodeIso2: string;\n shippingFromCountryCodeIso2: string | null;\n onSelectedDescriptionLanguageChange: (languageCodeIso2: string) => void;\n onShippingFromCountryChange: (countryCodeIso2: string) => void;\n narrowSelector?: boolean;\n};\nexport const ItemLocalizationSettings = ({\n selectedDescriptionLanguageCodeIso2,\n shippingFromCountryCodeIso2,\n onSelectedDescriptionLanguageChange,\n onShippingFromCountryChange,\n narrowSelector = false\n}: ItemLocalizationSettingsProps) => {\n const { t } = useTranslator();\n const memberCountryCode = useSelector(selectShippingRegionCountryCodeIso2);\n\n const descriptionLanguages = [\n ...new Set([getLanguageFromCountryCode(memberCountryCode), 'sv', 'en'])\n ].map((code) => getLanguageOption(code, t));\n\n const shippingFromCountries = [\n getCountryOption('SE', t),\n getCountryOption('DK', t)\n ];\n\n const labelClassName = classNames(\n 'col-12',\n narrowSelector ? 'col-md-8' : 'col-md-6'\n );\n const selectorClassName = classNames(\n 'col-12',\n narrowSelector ? 'col-md-4' : 'col-md-6'\n );\n\n const showShippingFrom = ['DK', 'SE'].includes(memberCountryCode);\n const topRowClassName = classNames('row', showShippingFrom && 'mb-4');\n\n return (\n
\n
\n
\n \n {t('myt_settings_selectedDescriptionLanguage')}\n \n
\n {t('myt_settings_selectedDescriptionLanguage_info')}\n
\n
\n
\n \n onSelectedDescriptionLanguageChange(e.target.value)\n }>\n {descriptionLanguages.map(({ value, text }) => (\n \n ))}\n \n
\n
\n {showShippingFrom && shippingFromCountryCodeIso2 && (\n
\n
\n \n {t('myt_settings_shippingFromCountry')}\n \n
\n {t('myt_settings_shippingFromCountry_info')}\n
\n
\n
\n \n onShippingFromCountryChange(e.target.value)\n }>\n {shippingFromCountries.map(({ value, text }) => (\n \n ))}\n \n
\n
\n )}\n
\n );\n};\n\ntype Option = { value: string; text: string };\n\nconst getLanguageOption = (code: string, t: TFunction): Option => ({\n value: code,\n text: t(mapLanguageCodeToLanguageKey(code))\n});\n\nconst getCountryOption = (code: string, t: TFunction): Option => ({\n value: code,\n text: t(mapCountryCodeToCountryKey(code))\n});\n","import { SHIPPING_PROVIDERS } from 'tradera/components/shipping-product/shipping-providers';\nimport type { TranslationFunction } from 'tradera/lang/translate';\n\ninterface ShippingProvider {\n text: string;\n type: SHIPPING_PROVIDERS;\n logoImgUrl: string | null;\n}\n\nconst shippingProviders = (t: TranslationFunction): ShippingProvider[] => [\n {\n text: t('shippingProviders_schenkerPrivpak'),\n type: SHIPPING_PROVIDERS.SCHENKER,\n logoImgUrl: '/static/images/shipping/schenker.svg'\n },\n {\n text: t('shippingProviders_posten'),\n type: SHIPPING_PROVIDERS.POSTNORD,\n logoImgUrl: '/static/images/shipping/postnord.svg'\n },\n {\n text: t('shippingProviders_postNordParcel'),\n type: SHIPPING_PROVIDERS.POSTNORD_PARCEL,\n logoImgUrl: '/static/images/shipping/postnord.svg'\n },\n {\n text: t('shippingProviders_postNordStamp'),\n type: SHIPPING_PROVIDERS.POSTNORD_STAMP,\n logoImgUrl: '/static/images/shipping/postnord.svg'\n },\n {\n text: t('shippingProviders_postNordStamp'),\n type: SHIPPING_PROVIDERS.POSTNORD_STAMP_DENMARK,\n logoImgUrl: '/static/images/shipping/postnord.svg'\n },\n {\n text: t('shippingProviders_dhl'),\n type: SHIPPING_PROVIDERS.DHL,\n logoImgUrl: '/static/images/shipping/dhl.svg'\n },\n {\n text: t('shippingProviders_dhl'),\n type: SHIPPING_PROVIDERS.DHL_NETHERLANDS,\n logoImgUrl: '/static/images/shipping/dhl.svg'\n },\n {\n text: t('shippingProviders_bussgods'),\n type: SHIPPING_PROVIDERS.BUSSGODS,\n logoImgUrl: '/static/images/shipping/bussgods.svg'\n },\n {\n text: t('shippingProviders_bringDenmark'),\n type: SHIPPING_PROVIDERS.BRING_DENMARK,\n logoImgUrl: '/static/images/shipping/bring.svg'\n },\n {\n text: t('shippingProviders_alternative'),\n type: SHIPPING_PROVIDERS.ALTERNATIVE,\n logoImgUrl: null\n },\n {\n text: t('shippingProviders_alternative'),\n type: SHIPPING_PROVIDERS.ALTERNATIVE_DENMARK,\n logoImgUrl: null\n },\n {\n text: t('shippingProviders_alternative'),\n type: SHIPPING_PROVIDERS.ALTERNATIVE_NETHERLANDS,\n logoImgUrl: null\n },\n {\n text: t('shippingProviders_takeaway'),\n type: SHIPPING_PROVIDERS.TAKE_AWAY,\n logoImgUrl: null\n },\n {\n text: t('shippingProviders_takeaway'),\n type: SHIPPING_PROVIDERS.TAKE_AWAY_ONLY,\n logoImgUrl: null\n },\n {\n text: t('shippingProviders_notSpecified_full'),\n type: SHIPPING_PROVIDERS.NOT_SPECIFIED,\n logoImgUrl: null\n }\n];\n\nconst shippingProvidersMap = (\n t: TranslationFunction\n): Record =>\n shippingProviders(t).reduce(\n (obj, provider) => ({\n ...obj,\n [provider.type]: provider\n }),\n {} as Record\n );\n\nexport const isStampProvider = (provider: SHIPPING_PROVIDERS): boolean =>\n [\n SHIPPING_PROVIDERS.POSTNORD_STAMP,\n SHIPPING_PROVIDERS.POSTNORD_STAMP_DENMARK\n ].indexOf(provider) !== -1;\n\nexport default {\n get: (t: TranslationFunction) => shippingProviders(t),\n map: (t: TranslationFunction) => shippingProvidersMap(t)\n};\n","import qs from 'qs';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport type {\n GetSavedSearchesWithItemsApiResponse,\n SavedsearchesitemsRequest,\n RemoveSavedSearchesApiResponse,\n RemoveSavedSearchesApiRequest,\n SavedSearchEmailNotificationApiRequest,\n SavedSearchEmailNotificationApiResponse\n} from 'tradera/state/services/types/webapi-discover-generated';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport { isServer } from 'tradera/utils/nextjs';\n\nenum Tags {\n SAVED_SEARCHES_LIST = 'SAVED_SEARCHES_LIST'\n}\n\n// This was previously a variable that would keep track of the latest cacheKey.\n// With that we would only update the latest cache key, so if the user goes\n// from page 1 to page 2, and back to page 1, the cache would not be updated for page\n// 1 since page 2 would be the latest cache key.\nconst cacheKeySet = new Set();\nexport const savedSearchesApi = createApi({\n reducerPath: 'savedSearchesApi',\n baseQuery: isomorphicWebApiBaseQuery,\n tagTypes: Object.keys(Tags),\n endpoints: (builder) => ({\n getSavedSearches: builder.query<\n GetSavedSearchesWithItemsApiResponse,\n SavedsearchesitemsRequest\n >({\n query: (params) => {\n cacheKeySet.add(params);\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/savedsearchesitems?${qs.stringify({\n ...params,\n sortBy: 'Alphabetical'\n })}`;\n },\n providesTags: [Tags.SAVED_SEARCHES_LIST]\n }),\n\n removeSavedSearches: builder.mutation<\n RemoveSavedSearchesApiResponse,\n RemoveSavedSearchesApiRequest\n >({\n query: (params) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return {\n url: `${baseUrl}/discover/removesavedsearches`,\n method: 'DELETE',\n body: params\n };\n },\n async onQueryStarted(params, { dispatch, queryFulfilled }) {\n for (const cacheKey of cacheKeySet) {\n const patchResult = dispatch(\n savedSearchesApi.util.updateQueryData(\n 'getSavedSearches',\n cacheKey,\n (draft) => {\n // eslint-disable-next-line better-mutation/no-mutation\n draft.savedSearches =\n draft.savedSearches?.filter(\n (item) =>\n !params?.ids?.includes(item.id)\n );\n }\n )\n );\n try {\n await queryFulfilled;\n } catch {\n patchResult.undo();\n }\n }\n },\n invalidatesTags: [Tags.SAVED_SEARCHES_LIST]\n }),\n\n toggleEmailNotification: builder.mutation<\n SavedSearchEmailNotificationApiResponse,\n SavedSearchEmailNotificationApiRequest\n >({\n query: (params) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return {\n url: `${baseUrl}/discover/savedsearchemailnotification`,\n method: 'POST',\n body: { ...params }\n };\n },\n async onQueryStarted(params, { dispatch, queryFulfilled }) {\n for (const cacheKey of cacheKeySet) {\n const patchResult = dispatch(\n savedSearchesApi.util.updateQueryData(\n 'getSavedSearches',\n cacheKey,\n (draft) => {\n draft.savedSearches?.forEach((item) => {\n if (item.id === params.savedSearchDto?.id) {\n Object.assign(item, {\n hasEnabledEmailNotifications:\n params.savedSearchDto.sendMail\n });\n }\n });\n }\n )\n );\n try {\n await queryFulfilled;\n } catch {\n patchResult.undo();\n }\n }\n }\n })\n })\n});\n\nexport const {\n useGetSavedSearchesQuery,\n useRemoveSavedSearchesMutation,\n useToggleEmailNotificationMutation\n} = savedSearchesApi;\n","import ALink from 'tradera/components/alink/alink';\nimport React from 'react';\nimport { useUrlLocalizer } from 'tradera/lang/translate';\nimport { TraderaLogo } from 'tradera/components/tradera-logo/tradera-logo';\n\nexport const FormFooterLogo = () => {\n const { toLocalizedUrl } = useUrlLocalizer();\n return (\n \n \n \n );\n};\n","import React from 'react';\nimport { Trans, useTranslator } from 'tradera/lang/translate';\nimport qs from 'qs';\nimport { FormFooterLogo } from 'tradera/apps/registration/components/common/form/form-footer-logo';\n\nexport const FormFooter = ({ registerLink, isCompanyLink, logoOnly }) => {\n const { t } = useTranslator();\n const countryCodeFromQs = qs.parse(window.location.search, {\n ignoreQueryPrefix: true\n }).countryCode;\n const countryCodeUrlSuffix = countryCodeFromQs\n ? `?countryCode=${countryCodeFromQs}`\n : '';\n\n return (\n
\n {!logoOnly && (\n <>\n
\n \n {isCompanyLink\n ? t('registration_company_link')\n : t('registration_private_link')}\n \n
\n
\n }}\n />\n
\n \n )}\n \n
\n );\n};\n","export const HOVER_MENUS = {\n WISHLIST: 'Wishlist',\n SELL: 'Selling',\n BUY: 'Buying',\n LOCALIZATION: 'Localization',\n CURRENCY: 'Currency',\n HOW_TRADERA_WORKS: 'HowTraderaWorks'\n} as const;\n","// extracted by mini-css-extract-plugin\nexport default {\"hover-menu-container-no-positioning\":\"hover-menu-container-no-positioning--KyovJ\",\"hoverMenuContainerNoPositioning\":\"hover-menu-container-no-positioning--KyovJ\",\"hover-menu-container\":\"hover-menu-container--GcmnO\",\"hoverMenuContainer\":\"hover-menu-container--GcmnO\",\"hover-menu-area-content\":\"hover-menu-area-content--FPHL6\",\"hoverMenuAreaContent\":\"hover-menu-area-content--FPHL6\",\"hover-menu-area\":\"hover-menu-area--E8KUU\",\"hoverMenuArea\":\"hover-menu-area--E8KUU\",\"align-right\":\"align-right--DF7Im\",\"alignRight\":\"align-right--DF7Im\",\"align-sm25-lg50\":\"align-sm25-lg50--S5oCs\",\"alignSm25Lg50\":\"align-sm25-lg50--S5oCs\",\"align-sm43-lg50\":\"align-sm43-lg50--oHu74\",\"alignSm43Lg50\":\"align-sm43-lg50--oHu74\"};","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styles from './hover-menu.module.scss';\nimport { classNames } from 'tradera/utils/class-names';\n\nclass HoverMenu extends Component {\n state = {\n show: false,\n hoverContainer: false\n };\n\n toggleShow = (show) => {\n window.clearTimeout(this.toggleShowTimeoutId);\n this.toggleShowTimeoutId = window.setTimeout(() => {\n if (this.state.show !== show) {\n this.setState({ show: show });\n }\n }, 10);\n };\n\n componentDidUpdate(prevProps) {\n if (this.props.showMenu !== prevProps.showMenu) {\n this.toggleShow(this.props.showMenu);\n }\n }\n\n render() {\n const {\n children,\n className = '',\n noContainerPositioningStyling\n } = this.props;\n\n return (\n this.state.show && (\n {})}>\n \n \n )\n );\n }\n}\n\nHoverMenu.propTypes = {\n showMenu: PropTypes.bool,\n className: PropTypes.string,\n noContainerPositioningStyling: PropTypes.bool\n};\n\nexport default HoverMenu;\n","// extracted by mini-css-extract-plugin\nexport default {\"language-select\":\"language-select--CAP5u\",\"languageSelect\":\"language-select--CAP5u\",\"language-select-row\":\"language-select-row--ESoX4\",\"languageSelectRow\":\"language-select-row--ESoX4\"};","// extracted by mini-css-extract-plugin\nexport default {\"translation-preferred-form-toggle-input\":\"translation-preferred-form-toggle-input--vxp2V\",\"translationPreferredFormToggleInput\":\"translation-preferred-form-toggle-input--vxp2V\"};","import { touchWebClient } from 'tradera/utils/http';\nimport { selectAutomaticTranslationPreferred } from 'tradera/state/language/selectors';\nimport styles from './translation-preferred-menu-item.module.scss';\nimport { setAutomaticTranslationPreferred } from 'tradera/state/language/reducer';\nimport { useTranslator } from 'tradera/lang/translate';\nimport { selectIsLoggedIn } from 'tradera/state/member/selectors';\nimport { useAppDispatch, useAppSelector } from 'tradera/state/hooks';\n\nexport const TranslationPreferredMenuItem = () => {\n const { t } = useTranslator();\n const dispatch = useAppDispatch();\n const automaticTranslationPreferred = useAppSelector(\n selectAutomaticTranslationPreferred\n );\n const isLoggedIn = useAppSelector(selectIsLoggedIn);\n\n const onAutomaticTranslationPreferredChanged = async (\n e: React.ChangeEvent\n ) => {\n const checked = e.target.checked;\n await touchWebClient.post(\n 'my/profile/save-automatic-translation-preferred-setting',\n { isAutomaticTranslationPreferred: checked }\n );\n\n dispatch(\n setAutomaticTranslationPreferred({\n automaticTranslationPreferred: checked\n })\n );\n };\n return isLoggedIn ? (\n
\n \n {t('profileMenu_translationPreferredHeading')}\n \n \n
\n {t('profileMenu_translationPreferredText')}\n
\n
\n ) : null;\n};\n","import React from 'react';\nimport {\n selectAvailableLanguages,\n selectPreferredLanguage\n} from 'tradera/state/language/selectors';\nimport { setPreferredLanguage } from 'tradera/state/language/actions';\nimport { useTranslator, useUrlLocalizer } from 'tradera/lang/translate';\nimport { SURVEYS } from 'tradera/constants/surveys';\nimport Flag from 'tradera/components/flag/flag';\nimport { getCountryCodeForFlagFromLanguage } from 'tradera/localization/languagecode';\nimport { useQualtive } from 'tradera/hooks/use-qualtive';\nimport CheckIcon from '@tradera/blueprint/theme/icons2/check.svg?jsx';\nimport styles from './language-select.module.scss';\nimport { TranslationPreferredMenuItem } from './translation-preferred-menu-item';\nimport { Button } from 'tradera/components/atoms/button/button';\nimport { useAppDispatch, useAppSelector } from 'tradera/state/hooks';\n\ntype PlainLanguageSelectProps = {\n inProfileMenu?: boolean;\n title?: string;\n};\n\nexport const LanguageSelect = ({\n inProfileMenu,\n title\n}: PlainLanguageSelectProps) => {\n const { t } = useTranslator();\n const { toLocalizedUrl } = useUrlLocalizer();\n const { isQualtiveEnabled, openQualtiveModal } = useQualtive();\n const dispatch = useAppDispatch();\n const availableLanguages = useAppSelector(selectAvailableLanguages);\n const preferredLanguage = useAppSelector(selectPreferredLanguage);\n\n const onLanguageChanged = (code: string) => {\n if (preferredLanguage?.languageCodeIso2 === code) {\n return;\n }\n dispatch(setPreferredLanguage(code, toLocalizedUrl));\n };\n return (\n
\n {title && (\n
\n {title}\n
\n )}\n {availableLanguages?.map(({ languageCodeIso2, displayName }) => (\n {\n onLanguageChanged(languageCodeIso2 || '');\n }}\n data-language-select={languageCodeIso2}>\n \n \n {preferredLanguage?.languageCodeIso2 ===\n languageCodeIso2 ? (\n {displayName}\n ) : (\n {displayName}\n )}\n \n {preferredLanguage?.languageCodeIso2 ===\n languageCodeIso2 && (\n \n )}\n \n ))}\n \n {isQualtiveEnabled && (\n
\n {t('siteHeader_languageDisclaimerShort')} \n openQualtiveModal(SURVEYS.language)}>\n {t('siteHeader_languageLeaveFeedBack')}\n \n
\n )}\n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"shipping-country-flag\":\"shipping-country-flag--awFdJ\",\"shippingCountryFlag\":\"shipping-country-flag--awFdJ\"};","import { useState } from 'react';\nimport { useTranslator } from 'tradera/lang/translate';\nimport Flag from 'tradera/components/flag/flag';\nimport { classNames } from 'tradera/utils/class-names';\nimport { SearchInput } from 'tradera/components/form-controls/search-input/search-input';\nimport { DropdownButton } from 'tradera/components/dropdown-button/dropdown-button';\n\nimport styles from './shipping-country-select-dropdown.module.scss';\n\ntype ShippingCountry = {\n name: string;\n countryCodeIso2: string;\n};\n\ntype ShippingCountrySelectDropdownProps = {\n shippingCountries: ShippingCountry[];\n selectedShippingCountryCodeIso2: string;\n onSelect: (countryCodeIso2: string) => void;\n className?: string;\n itemsBeforeScrollCount?: number;\n shippingCountryPlaceholder?: string;\n relative?: boolean;\n style?: React.CSSProperties;\n};\n\nexport const ShippingCountrySelectDropdown = ({\n shippingCountries,\n selectedShippingCountryCodeIso2,\n onSelect,\n className,\n itemsBeforeScrollCount = 5,\n shippingCountryPlaceholder,\n relative,\n style = {}\n}: ShippingCountrySelectDropdownProps) => {\n const { t } = useTranslator();\n const [search, setSearch] = useState('');\n const [isSearchEnabled, setIsSearchEnabled] = useState(false);\n const includesSearch = (v: string) =>\n v.toLowerCase().includes(search.toLowerCase());\n const filteredShippingCountries = shippingCountries.filter(\n ({ name, countryCodeIso2 }) =>\n includesSearch(name) || includesSearch(countryCodeIso2)\n );\n const selectedShippingCountryName = shippingCountries.find(\n (x) =>\n x.countryCodeIso2 === selectedShippingCountryCodeIso2.toLowerCase()\n )?.name;\n\n const paddingHeight = 7;\n const listLength =\n filteredShippingCountries.length === 0\n ? 1\n : filteredShippingCountries.length;\n const minOfListOrItemsBeforeScrollCount = Math.min(\n listLength,\n itemsBeforeScrollCount\n );\n const height =\n paddingHeight +\n minOfListOrItemsBeforeScrollCount * 35 +\n (listLength <= itemsBeforeScrollCount ? 0 : 21);\n const listStyle: React.CSSProperties = {\n height: `${height}px`,\n width: '100%',\n zIndex: 1,\n overflowY: 'auto',\n ...style\n };\n\n return (\n
\n {!isSearchEnabled ? (\n {\n setIsSearchEnabled(true);\n }}\n icon={\n \n }>\n {selectedShippingCountryName}\n \n ) : (\n setSearch(e.target.value)}\n onBlur={() => {\n setTimeout(() => {\n setIsSearchEnabled(false);\n }, 100);\n }}\n onClear={() => setIsSearchEnabled(false)}\n />\n )}\n {isSearchEnabled && (\n
\n e.preventDefault()}\n style={listStyle}>\n
\n {filteredShippingCountries.length > 0 ? (\n <>\n {filteredShippingCountries.map(\n (shippingCountry) => (\n {\n setIsSearchEnabled(false);\n onSelect(\n shippingCountry.countryCodeIso2\n );\n }}>\n \n {shippingCountry.name}\n
\n )\n )}\n \n ) : (\n
\n {t('siteHeader_shippingCountryNoResults')}\n
\n )}\n
\n
\n \n )}\n \n );\n};\n","import { useEffect, useMemo } from 'react';\nimport { useTranslator } from 'tradera/lang/translate';\nimport {\n selectAvailableShippingCountryCodes,\n selectShippingCountry,\n selectIsLoadingAvailableShippingCountries,\n selectHasLoadedAvailableShippingCountries\n} from 'tradera/state/shipping-region/selectors';\nimport {\n updateShippingRegion,\n getAvailableShippingCountries\n} from 'tradera/state/shipping-region/actions';\nimport { ShippingCountrySelectDropdown } from './shipping-country-select-dropdown';\nimport Load from '@tradera/blueprint/theme/icons2/loading.svg?jsx';\nimport { mapCountryCodeToCountryKey } from 'tradera/localization/countries';\nimport { useAppDispatch, useAppSelector } from 'tradera/state/hooks';\n\nexport const ShippingCountrySelect = () => {\n const { t } = useTranslator();\n const dispatch = useAppDispatch();\n const shippingCountry = useAppSelector(selectShippingCountry);\n const shippingCountryCodes = useAppSelector(\n selectAvailableShippingCountryCodes\n );\n const isLoadingAvailableShippingCountries = useAppSelector(\n selectIsLoadingAvailableShippingCountries\n );\n const showShippingCountries =\n useAppSelector(selectHasLoadedAvailableShippingCountries) &&\n !isLoadingAvailableShippingCountries;\n\n const shippingCountries = useMemo(\n () =>\n shippingCountryCodes.map((countryCodeIso2) => ({\n countryCodeIso2,\n name: t(mapCountryCodeToCountryKey(countryCodeIso2))\n })),\n [t, shippingCountryCodes]\n );\n useEffect(() => {\n dispatch(getAvailableShippingCountries());\n }, [dispatch]);\n\n return (\n
\n \n {t('siteHeader_shippingCountry')}\n \n {isLoadingAvailableShippingCountries && (\n
\n \n
\n )}\n {showShippingCountries && (\n {\n dispatch(updateShippingRegion(countryCodeIso2));\n }}\n />\n )}\n
\n );\n};\n","import { LanguageSelect } from './language-select';\nimport { ShippingCountrySelect } from './shipping-country-select';\nimport { useTranslator } from 'tradera/lang/translate';\n\ntype LocalizationMenuProps = {\n showRegionSelection: boolean;\n};\n\nexport const LocalizationMenu = ({\n showRegionSelection\n}: LocalizationMenuProps) => {\n const { t } = useTranslator();\n return (\n
\n {showRegionSelection && (\n <>\n \n
\n \n )}\n \n
\n
\n );\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"flag\":\"flag--TeCvn\"};","import { GtmService } from 'tradera/services/google-tagmanager-service';\nimport { HOVER_MENUS } from './hover-menu/constants';\nimport { selectPreferredLanguageCode } from 'tradera/state/language/selectors';\nimport {\n selectShowLocalizationRegionPicker,\n selectShowRegionSelection\n} from 'tradera/state/shipping-region/selectors';\nimport HoverMenu from './hover-menu/hover-menu';\nimport hoverMenuStyles from './hover-menu/hover-menu.module.scss';\nimport { LocalizationMenu } from 'tradera/components/localization/localization-menu';\nimport TranslateIcon from '@tradera/blueprint/theme/icons2/translate.svg?jsx';\nimport { getCountryCodeForFlagFromLanguage } from 'tradera/localization/languagecode';\nimport Flag from 'tradera/components/flag/flag';\nimport { useTranslator } from 'tradera/lang/translate';\nimport { classNames } from 'tradera/utils/class-names';\nimport { useAppSelector } from 'tradera/state/hooks';\n\nimport styles from './localization-link.module.scss';\n\ntype LocalizationLinkProps = {\n onClick: (e: React.MouseEvent, menu: string) => void;\n mouseOver: (menu: string) => void;\n mouseOut: () => void;\n showMenu: boolean;\n hideRegionSelection?: boolean;\n showIconAndTextInsteadOfFlag?: boolean;\n};\n\nexport const LocalizationLink = ({\n onClick,\n mouseOver,\n mouseOut,\n hideRegionSelection,\n showMenu,\n showIconAndTextInsteadOfFlag = false\n}: LocalizationLinkProps) => {\n const { t } = useTranslator();\n\n const preferredLanguageCode = useAppSelector(selectPreferredLanguageCode);\n const showRegionSelectionAppState = useAppSelector(\n selectShowRegionSelection\n );\n const showRegionSelection =\n !hideRegionSelection && showRegionSelectionAppState;\n const showLocalizationRegionPicker = useAppSelector(\n selectShowLocalizationRegionPicker\n );\n\n const countryCode = getCountryCodeForFlagFromLanguage(\n preferredLanguageCode\n );\n\n return (\n \n mouseOver(HOVER_MENUS.LOCALIZATION)}\n onMouseLeave={mouseOut}>\n {\n GtmService.trackAction(\n 'Top navigation',\n 'Localization menu',\n 'Open/Close'\n );\n onClick(e, HOVER_MENUS.LOCALIZATION);\n }}>\n {showIconAndTextInsteadOfFlag ? (\n \n \n {t('siteHeader_localizationLink_language')}\n \n ) : (\n \n \n \n )}\n \n \n \n \n
\n
\n );\n};\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { LocalizationLink } from 'tradera/components/site-header/localization-link';\nimport BackIcon from '@tradera/blueprint/theme/icons2/back.svg?jsx';\nimport { useTranslator } from 'tradera/lang/translate';\nimport useIsMobile from 'tradera/hooks/use-is-mobile';\nimport { Button } from 'tradera/components/atoms/button/button';\n\nexport const SwedenCountryCode = 'se';\n\nconst FormHeader = ({ showLanguageMenu, currentPage, onBack }) => {\n const { t } = useTranslator();\n const isMobile = useIsMobile();\n const [showMenu, setShowMenu] = useState(false);\n\n const isNativeAppContext = useSelector(\n (state) => state.environment.isNativeAppContext\n );\n\n return (\n
\n
\n {!!onBack && (\n \n )}\n
\n
\n {currentPage &&

{currentPage}/3

}\n {showLanguageMenu && !isNativeAppContext && (\n \n setShowMenu(true)}\n mouseOut={() => setShowMenu(false)}\n onClick={() => setShowMenu(!showMenu)}\n onBlur={() => setShowMenu(false)}\n showMenu={showMenu}\n transparentHeader={true}\n showIconAndTextInsteadOfFlag={true}\n hideRegionSelection={true}\n />\n \n )}\n
\n
\n );\n};\nexport default FormHeader;\n","// extracted by mini-css-extract-plugin\nexport default {\"country-select\":\"country-select--CeA2U\",\"countrySelect\":\"country-select--CeA2U\"};","import { classNames } from 'tradera/utils/class-names';\nimport React from 'react';\n\nimport styles from './separator.module.scss';\n\ntype SeparatorProps = { className?: string; thick?: boolean };\n\nexport const VerticalSeparator = ({\n className,\n thick = false\n}: SeparatorProps) => (\n \n);\n\nexport const HorizontalSeparator = ({\n className,\n thick = false\n}: SeparatorProps) => (\n \n);\n","import React from 'react';\nimport { useTranslator } from 'tradera/lang/translate';\nimport Flag from 'tradera/components/flag/flag';\nimport styles from './select-country.module.scss';\nimport { mapCountryCodeToCountryKey } from 'tradera/localization/countries';\nimport { classNames } from 'tradera/utils/class-names';\nimport { HorizontalSeparator } from 'tradera/components/separator/separator';\n\nexport const SelectCountry = ({\n availableCountries,\n selectedCountryCodeIso2,\n onCountrySelected,\n className\n}) => {\n const { t } = useTranslator();\n\n const filteredCountries = availableCountries.filter(\n ({ code }) => code !== selectedCountryCodeIso2\n );\n const onChange = (selectedValue) => {\n if (selectedValue.length !== 2) {\n return;\n }\n\n onCountrySelected(selectedValue);\n };\n\n return (\n <>\n \n
\n \n onChange(e.target.value)}>\n \n {filteredCountries.map((item, index) => (\n \n ))}\n \n
\n \n );\n};\n","export const waitForCountSessionId = async () => {\n const maxRetries = 3;\n let retryCount = 0;\n\n return new Promise((resolve) => {\n if (!window?.ka) {\n resolve();\n }\n\n const tryGetKountSessionId = () => {\n if (window.ka.collectEnd || retryCount > maxRetries) {\n resolve(window.ka.sessionId);\n }\n // eslint-disable-next-line better-mutation/no-mutation\n retryCount++;\n setTimeout(tryGetKountSessionId, 500 * retryCount);\n };\n tryGetKountSessionId();\n });\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"user-reg-wrapper\":\"user-reg-wrapper--QKYEl\",\"userRegWrapper\":\"user-reg-wrapper--QKYEl\",\"user-reg-wrapper-image\":\"user-reg-wrapper-image--BABgB\",\"userRegWrapperImage\":\"user-reg-wrapper-image--BABgB\",\"user-reg-content\":\"user-reg-content--rR19J\",\"userRegContent\":\"user-reg-content--rR19J\"};","import React from 'react';\nimport styles from './user-reg-wrapper.module.scss';\nimport { BREAKPOINT_SIZES, BREAKPOINTS } from 'tradera/constants/breakpoints';\nimport MediaQuery from 'react-responsive';\n\nexport const UserRegWrapper = ({ children }) => {\n return (\n
\n \n
\n \n
\n
\n \n {children}\n
\n \n );\n};\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { isServer } from 'tradera/utils/nextjs';\n\nif (isServer) {\n // Do not remove this without also removing the disable of eslint better-mutation/no-mutation at top of file.\n throw new Error(\n 'This implementation may not compatible with SSR where global properties are shared between server instances'\n );\n}\n\nlet acceptsMarketing = true;\n\nexport function setAcceptsMarketing(accepts = true) {\n acceptsMarketing = accepts;\n}\n\nexport function getAcceptsMarketing() {\n return !!acceptsMarketing;\n}\n\nexport function triggerUserSignedUpEvent(memberId, memberEmail) {\n const data = {\n event: 'blueshiftSignupEvent',\n memberId,\n memberEmail,\n memberMarketingSubscribed: acceptsMarketing\n };\n window.dataLayer.push(data);\n}\n","/* eslint-disable better-mutation/no-mutation */\n'use strict';\n\nimport { isServer } from 'tradera/utils/nextjs';\n\nif (isServer) {\n // Do not remove this without also removing the disable of eslint better-mutation/no-mutation at top of file.\n throw new Error(\n 'This implementation may not compatible with SSR where global properties are shared between server instances'\n );\n}\n\nconst EventEmitter = (function () {\n const _queue = {};\n\n const _dispatch = function (event, payload) {\n const callbacks = _queue[event];\n\n if (typeof callbacks === 'undefined') {\n return false;\n }\n\n callbacks.forEach(function (callback) {\n callback(payload);\n });\n\n return true;\n };\n\n const _subscribe = function (event, callback) {\n if (typeof _queue[event] === 'undefined') {\n _queue[event] = [];\n }\n\n _queue[event].push(callback);\n };\n\n return {\n dispatch: _dispatch,\n subscribe: _subscribe\n };\n})();\n\nexport default EventEmitter;\n","import {\n getAvailableCountries,\n mapCountryCodeToCountryKey\n} from 'tradera/localization/countries';\n\nconst topCountries = ['se', 'dk', 'fi', 'de', 'no', 'nl', 'fr'];\n\nexport const getAvailableUserRegistrationCountries = (t) => {\n return [\n ...topCountries.map((code) => ({\n code,\n name: t(mapCountryCodeToCountryKey(code))\n })),\n { code: null, name: ' ' },\n ...getAvailableCountries(t)\n ];\n};\n","'use strict';\n\nconst GoogleTagManager = {\n pushToDataLayer: function (payload) {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(payload);\n },\n\n trackEvent: function (analyticsData) {\n const payload = {\n event: 'trackEvent',\n eventCategory: analyticsData.category || '',\n eventAction: analyticsData.action || '',\n eventLabel: analyticsData.label || '',\n eventValue: analyticsData.value || '0',\n eventNonInteractive: this._isNonInteractive(analyticsData),\n hitCallback: analyticsData.hitCallback\n };\n\n if (analyticsData.memberId > 0) {\n payload['memberId'] = analyticsData.memberId.toString();\n }\n\n this.pushToDataLayer(payload);\n },\n\n trackPageView: function () {\n const payload = {\n event: 'trackPageview',\n customPageUrl: window.location.pathname + window.location.hash\n };\n this.pushToDataLayer(payload);\n },\n\n _isNonInteractive: function (analyticsData) {\n if (analyticsData.userTriggered === undefined) {\n return true;\n }\n return !analyticsData.userTriggered;\n }\n};\n\nexport default GoogleTagManager;\n","/**\n * This is a helper class for sending google analytics events for the search experience\n * This is a wrapper for the GtmService. Do not call GTM or GA directly but use the GtmService.\n * Events tracked by this file set all GA categories to \"Search\" to namespace events\n */\nimport { GtmService } from 'tradera/services/google-tagmanager-service';\n\nconst GA_EVENT_SEARCH_CATEGORY = 'Search';\nexport const GA_EVENT_SAVE_SEARCH = 'Saved Search';\nexport const GA_EVENT_SAVE_SEARCH_MODAL = 'Save search modal';\nexport const GA_EVENT_SAVE_SEARCH_RELATED = 'Save search related';\nexport const GA_EVENT_SAVE_SEARCH_STICKY = 'Save search sticky';\nexport const GA_EVENT_SAVE_SEARCH_BANNER = 'Save search banner';\n\nconst filterNameMappings = {\n itemCondition: 'Condition',\n itemType: 'Ad Format',\n sellerType: 'Seller Type',\n county: 'Geo - Selected',\n countyBox: 'Geo',\n itemStatus: 'Item Status',\n shoeTypes: 'Type',\n subDepartments: 'Department',\n shoeSizes: 'Size',\n brandTags: 'Brand',\n sortBy: 'Sorting',\n price: 'Price',\n Layout: 'Layout'\n};\n\n/**\n * Generic action tracker for things that happen in the Search.\n * @param {string} action\n * @param {string} label\n */\nexport const trackAction = (action, label) => {\n GtmService.trackAction(GA_EVENT_SEARCH_CATEGORY, action, label);\n};\n\nconst getFilterLabel = (key) => {\n if (key in filterNameMappings) {\n return filterNameMappings[key];\n } else {\n return key;\n }\n};\n\n/**\n * translates the tech names of the filters to ga friendly names. to see the techie names a filter has\n * see the URL paramters on a search or a browse page.\n * @param {string} filter the name of the filter\n * @param {string} value the value the filter gets\n */\nexport const trackFilter = (filter, value) => {\n const action = getFilterLabel(filter);\n trackAction(`Filter ${action}`, value);\n};\n\nexport const trackButton = (label) => {\n trackAction('Button', label);\n};\n\nexport const trackLink = (action, label) => {\n trackAction(`Link - ${action}`, label);\n};\n\nexport const trackPriceFilter = (fromPrice, toPrice) => {\n // get a label that represents the current selected value\n const lbl = [];\n if (fromPrice !== '1' && typeof fromPrice !== 'undefined') {\n lbl.push('Min set');\n }\n if (typeof toPrice !== 'undefined') {\n lbl.push('Max set');\n }\n if (lbl.length === 0) {\n lbl.push('All');\n }\n trackAction(`Filter Price`, lbl.join(' and '));\n};\n\n/**\n * Tracks to google tag manager that a new search was made\n * @param {object} searchResults data returned fromm ajax when doing a search or browsing.\n * Note: needs to be the normalized version.\n */\nexport const trackNewSearch = (categoryPath, itemIds, metaTitle) => {\n if (typeof categoryPath === 'undefined' || categoryPath.length === 0) {\n return;\n }\n\n const reverseCategoryPath = categoryPath\n .filter((c) => c.id > 0)\n .map((c) => c.name)\n .reverse();\n\n GtmService.trackGtmEvent('viewCategory', {\n category: reverseCategoryPath.join(' > ')\n });\n\n GtmService.push({\n 'page.content-group-2': reverseCategoryPath.slice(0, 3).join(' > '),\n categoryId: categoryPath.length > 0 ? categoryPath[0].id : null\n });\n\n if (itemIds && itemIds.length >= 3) {\n GtmService.trackGtmEvent('viewItems', {\n itemIds: itemIds.slice(0, 3),\n keywords: categoryPath[0].name\n });\n }\n\n GtmService.push({\n ga_page_title: metaTitle\n });\n};\n","enum BID_VALIDATION_RESULTS {\n AUCTION_HAS_ENDED = 'AuctionHasEnded',\n AUCTION_HAS_NOT_STARTED = 'AuctionHasNotStarted',\n BELOW_MINIMUM = 'BelowMinimum',\n BELOW_OWN_LEADING_BID = 'BelowOwnLeadingBid',\n BELOW_RESERVE_PRICE = 'BelowReservePrice',\n BID_NOT_FOUND = 'BidNotFound',\n BIDDER_IS_BLOCKED = 'BidderIsBlocked',\n BUYING_LIMIT_REACHED = 'BuyingLimitReached',\n EQUAL_OR_HIGHER_THAN_BUY_IT_NOW = 'EqualOrHigherThanBuyItNow',\n HIGHER_BIDDER_EXISTS = 'HigherBidderExists',\n ITEM_NO_LONGER_AVAILABLE = 'ItemNoLongerAvailable',\n ITEM_NOT_FOUND = 'ItemNotFound',\n LEADING_BIDDER = 'LeadingBidder',\n NO_LONGER_VALID = 'NoLongerValid',\n ONLY_EU_BUYERS_ACCEPTED = 'OnlyEUBuyersAccepted',\n ONLY_NORDIC_BUYERS_ACCEPTED = 'OnlyNordicBuyersAccepted',\n ONLY_SWEDISH_BUYERS_ACCEPTED = 'OnlySwedishBuyersAccepted',\n SUCCESSFULLY_CHANGED_AUTOBID = 'SuccessfullyChangedAutoBid',\n USER_IS_SUSPENDED = 'UserIsSuspended',\n MAX_PLACED_BIDS_LIMIT = 'MaxPlacedBidsLimit',\n BID_AMOUNT_LIMIT = 'BidAmountLimit',\n OFFLINE = 'Offline'\n}\n\nconst BID_VALIDATION_SUCCESSES: string[] = [\n BID_VALIDATION_RESULTS.LEADING_BIDDER,\n BID_VALIDATION_RESULTS.SUCCESSFULLY_CHANGED_AUTOBID\n];\n\nconst BID_VALIDATION_RETRY: string[] = [\n BID_VALIDATION_RESULTS.BELOW_MINIMUM,\n BID_VALIDATION_RESULTS.BELOW_RESERVE_PRICE,\n BID_VALIDATION_RESULTS.BELOW_OWN_LEADING_BID,\n BID_VALIDATION_RESULTS.OFFLINE\n];\n\nconst BIN_VALIDATION_RESULTS = {\n ITEM_NOT_FOUND: 'ItemNotFound',\n ONLY_EU_BUYERS_ACCEPTED: 'OnlyEUBuyersAccepted',\n ONLY_NORDIC_BUYERS_ACCEPTED: 'OnlyNordicBuyersAccepted',\n ONLY_SWEDISH_BUYERS_ACCEPTED: 'OnlySwedishBuyersAccepted',\n USER_IS_SUSPENDED: 'UserIsSuspended',\n BIDDER_IS_BLOCKED: 'BidderIsBlocked',\n ITEM_HAS_ENDED: 'ItemHasEnded',\n ITEM_ALREADY_PURCHASED_BY_OTHER_USER: 'ItemAlreadyPurchasedByOtherUser',\n PURCHASE_DID_NOT_SUCCEED: 'PurchaseDidNotSucceed'\n};\n\nexport {\n BID_VALIDATION_RESULTS,\n BID_VALIDATION_SUCCESSES,\n BID_VALIDATION_RETRY,\n BIN_VALIDATION_RESULTS\n};\n","/* eslint-disable better-mutation/no-mutation */\nimport { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport GdprSettings from 'tradera/utils/gdpr-settings';\nimport cookieUtil from 'tradera/utils/cookie';\nimport {\n WISH_LIST_NOTIFICATION_DISPLAY_COUNT,\n WISH_LIST_NOTIFICATION_HIDDEN\n} from 'tradera/constants/cookies';\n\nconst slice = createSlice({\n name: 'wishListNudge',\n initialState: { wishListNudgeHidden: false },\n reducers: {\n shouldShowWishListNudge: {\n reducer: (\n state,\n action: PayloadAction<{ wishListNudgeHidden: boolean }>\n ) => {\n const { payload } = action;\n state.wishListNudgeHidden = payload.wishListNudgeHidden;\n },\n prepare: () => {\n const isHidden =\n cookieUtil.readCookie(WISH_LIST_NOTIFICATION_HIDDEN) ===\n 'true' || GdprSettings.isFunctionalEnabled() === false;\n\n if (isHidden) return { payload: { wishListNudgeHidden: true } };\n return { payload: { wishListNudgeHidden: false } };\n }\n },\n hideWishListNudge: {\n reducer: (state) => {\n state.wishListNudgeHidden = true;\n },\n prepare: () => {\n cookieUtil.createCookie(\n WISH_LIST_NOTIFICATION_HIDDEN,\n true,\n Infinity\n );\n cookieUtil.eraseCookie(WISH_LIST_NOTIFICATION_DISPLAY_COUNT);\n return { payload: {} };\n }\n }\n }\n});\n\nexport const { shouldShowWishListNudge, hideWishListNudge } = slice.actions;\n\nexport const wishListNudge = slice.reducer;\n","import { ITEM_LAYOUT } from 'tradera/constants/ui';\n\ntype PixelDensity = '1x' | '1.5x' | '2x' | '3x';\n// Resolutions are square (equal width & height) that match img-proxy nginx config\n// `small` is a 250px JPG fallback for Safari 14-15.6 on macOS 10.x - the rest are WEBP\ntype ItemImageResolution = 250 | 500 | 750 | 1000 | 'small';\n\nconst DEFAULT_RESOLUTION: ItemImageResolution = 500;\n\nexport type SrcSetMap = {\n [key in PixelDensity]?: ItemImageResolution;\n};\n\ntype PixelDensityResolution = {\n [key in ItemImageResolution]?: SrcSetMap;\n};\n\nconst pixelDensityResolution: PixelDensityResolution = {\n 250: {\n '1x': 250,\n '2x': 250,\n '3x': 500\n },\n 500: {\n '1x': 250,\n '1.5x': 250,\n '2x': 500\n },\n 750: {\n '1x': 500,\n '1.5x': 750\n }\n};\n\nconst pixelDensityResolutionDesktop: PixelDensityResolution = {\n 250: {\n '1x': 250,\n '2x': 500,\n '3x': 750\n },\n 500: {\n '1x': 500,\n '1.5x': 750,\n '2x': 1000\n },\n 750: {\n '1x': 750,\n '1.5x': 1000\n }\n};\n\ntype LayoutImageResolution = {\n [key in ITEM_LAYOUT]: ItemImageResolution;\n};\n\nconst layoutImageResolution: LayoutImageResolution = {\n [ITEM_LAYOUT.LIST]: 250,\n [ITEM_LAYOUT.GRID]: 250,\n [ITEM_LAYOUT.GRID_MEDIUM]: 500,\n [ITEM_LAYOUT.GRID_LARGE]: 750\n};\n\nconst fullWidthLayoutImageResolution: LayoutImageResolution = {\n [ITEM_LAYOUT.LIST]: 250,\n [ITEM_LAYOUT.GRID]: 500,\n [ITEM_LAYOUT.GRID_MEDIUM]: 750,\n [ITEM_LAYOUT.GRID_LARGE]: 750\n};\n\ntype ImageSizeArgs = {\n itemLayout?: ITEM_LAYOUT;\n isSiteWidthFull?: boolean;\n isMobile?: boolean;\n};\n\nexport const getItemLayoutSrcSet = ({\n itemLayout = ITEM_LAYOUT.GRID,\n isSiteWidthFull = false,\n isMobile = false\n}: ImageSizeArgs) => {\n const imageResolution = isSiteWidthFull\n ? fullWidthLayoutImageResolution[itemLayout]\n : layoutImageResolution[itemLayout];\n\n return isMobile\n ? pixelDensityResolution[imageResolution]\n : pixelDensityResolutionDesktop[imageResolution];\n};\n\nexport const getSrc = (\n src: string,\n placeholder: string | RegExp,\n resolution?: ItemImageResolution\n) => src.replace(placeholder, `${resolution || DEFAULT_RESOLUTION}-square`);\n\nexport const getSrcSet = (\n src: string,\n placeholder: string | RegExp,\n srcSetMap?: SrcSetMap\n) => {\n if (!srcSetMap) {\n return getSrc(src, placeholder, DEFAULT_RESOLUTION);\n }\n\n return Object.entries(srcSetMap)\n .map(\n ([pixelDensity, resolution]) =>\n `${getSrc(src, placeholder, resolution)} ${pixelDensity}`\n )\n .join(', ');\n};\n","import type {\n BaseQueryApi,\n BaseQueryFn,\n FetchArgs,\n FetchBaseQueryError\n} from '@reduxjs/toolkit/query/react';\nimport { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport type {\n AddMessageRequest,\n AddMessageResponse,\n GetProfileResponse,\n InitiateThreadRequest,\n InitiateThreadResponse,\n FirebaseIdToken,\n FirebaseRefreshedIdToken\n} from 'tradera/components/messaging/firebase.types';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport type { RootState } from '../../state/configure-store';\nimport { receivedFirebaseIdToken } from 'tradera/state/auth/reducer';\nimport { memberApi } from 'tradera/state/services/member-api';\nimport type { FirebaseConfiguration } from 'tradera/state/services/types/webapi-member-generated';\n\nconst identitytoolkitBaseQuery = fetchBaseQuery({\n prepareHeaders: (headers) => {\n headers.set('Accept', 'application/json');\n headers.set('Content-Type', 'application/json');\n return headers;\n },\n baseUrl: 'https://identitytoolkit.googleapis.com/v1/'\n});\n\nexport const firebaseBaseQueryFn: BaseQueryFn<\n FetchArgs & { firebaseConfiguration: FirebaseConfiguration },\n unknown,\n FetchBaseQueryError\n> = async (args, api, extraOptions) => {\n const firebaseConfiguration = args?.firebaseConfiguration;\n if (!firebaseConfiguration) {\n return {\n error: {\n status: 400,\n statusText: 'Bad Request',\n data: 'No Messaging configuration found'\n }\n };\n }\n\n const baseUrl = `https://${firebaseConfiguration.region}-${firebaseConfiguration.projectId}.cloudfunctions.net`;\n return firebaseBaseQuery(baseUrl)(args, api, extraOptions);\n};\n\nconst firebaseBaseQuery = (baseUrl: string) =>\n fetchBaseQuery({\n prepareHeaders: (headers, { getState }) => {\n const token = (getState() as RootState).auth.firebaseIdToken;\n if (token) {\n headers.set('authorization', `Bearer ${token.idToken}`);\n }\n headers.set('Accept', 'application/json');\n headers.set('Content-Type', 'application/json');\n return headers;\n },\n baseUrl\n });\n\nconst getToken = async (\n api: BaseQueryApi,\n extraOptions: object,\n firebaseConfiguration: FirebaseConfiguration\n): Promise => {\n const customTokenResult = (await isomorphicWebApiBaseQuery(\n {\n url: '/api/webapi/auth/firebase-token',\n method: 'POST',\n body: { projectId: firebaseConfiguration.projectId }\n },\n api,\n extraOptions\n )) as { data?: { token: string } };\n\n const result = await identitytoolkitBaseQuery(\n {\n url: `accounts:signInWithCustomToken?key=${firebaseConfiguration.apiKey}`,\n method: 'POST',\n body: {\n token: customTokenResult.data?.token ?? '',\n returnSecureToken: true\n }\n },\n api,\n extraOptions\n );\n return result.data as FirebaseIdToken;\n};\n\nexport const firebaseApi = createApi({\n reducerPath: 'firebaseApi',\n baseQuery: async (args, api, extraOptions) => {\n const currentIdToken = (api.getState() as RootState).auth\n .firebaseIdToken;\n const { data: messagingConfiguration = {} } = await api.dispatch(\n memberApi.endpoints.getMessagingConfiguration.initiate(undefined)\n );\n const firebaseConfiguration =\n messagingConfiguration?.firebaseConfiguration;\n if (!firebaseConfiguration) {\n return {\n error: {\n status: 400,\n statusText: 'Bad Request',\n data: 'No Messaging configuration found'\n }\n };\n }\n const argsWithFirebaseConfiguration = {\n ...args,\n firebaseConfiguration\n };\n\n let result;\n if (currentIdToken?.idToken) {\n result = await firebaseBaseQueryFn(\n argsWithFirebaseConfiguration,\n api,\n extraOptions\n );\n if (result.error && result.error.status === 401) {\n const refreshedIdTokenQuery = await identitytoolkitBaseQuery(\n {\n url: `token?key=${firebaseConfiguration.apiKey}`,\n method: 'POST',\n body: {\n grant_type: 'refresh_token',\n refresh_token: currentIdToken.refreshToken\n }\n },\n api,\n extraOptions\n );\n\n //Not sure why but when refreshing the token the object names have underscores instead of camelCase\n const refreshedTokenData =\n refreshedIdTokenQuery?.data as FirebaseRefreshedIdToken;\n api.dispatch(\n receivedFirebaseIdToken({\n idToken: refreshedTokenData.id_token,\n refreshToken: refreshedTokenData.refresh_token,\n expiresIn: refreshedTokenData.expires_in\n })\n );\n result = await firebaseBaseQueryFn(\n argsWithFirebaseConfiguration,\n api,\n extraOptions\n );\n }\n } else {\n const token = await getToken(\n api,\n extraOptions,\n firebaseConfiguration\n );\n api.dispatch(receivedFirebaseIdToken(token));\n result = await firebaseBaseQueryFn(\n argsWithFirebaseConfiguration,\n api,\n extraOptions\n );\n }\n return result;\n },\n endpoints: (builder) => ({\n addMessage: builder.mutation({\n query: (parameters) => {\n return {\n url: '/addMessage',\n method: 'POST',\n body: { data: parameters.data }\n };\n }\n }),\n initiateThread: builder.mutation<\n InitiateThreadResponse,\n InitiateThreadRequest\n >({\n query: (parameters) => {\n return {\n url: '/initiateThread',\n method: 'POST',\n body: { data: parameters.data }\n };\n }\n }),\n getProfile: builder.query({\n query: () => {\n return {\n url: '/getProfile',\n method: 'POST',\n //Firebase http function requires a body\n body: { data: {} }\n };\n }\n })\n })\n});\n\nexport const {\n useAddMessageMutation,\n useInitiateThreadMutation,\n useGetProfileQuery\n} = firebaseApi;\n","import { Component } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nexport default class LoadingPortal extends Component {\n static propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n };\n\n constructor() {\n super();\n this.el = document.createElement('div');\n this.loadingPortalRoot = document.getElementById('loading-portal');\n }\n\n componentDidMount() {\n if (this.loadingPortalRoot) {\n this.loadingPortalRoot.appendChild(this.el);\n setTimeout(() => {\n this.el.classList.add('loading-portal-visible');\n }, 0);\n }\n }\n\n componentWillUnmount() {\n if (this.loadingPortalRoot) {\n this.loadingPortalRoot.removeChild(this.el);\n }\n }\n\n render() {\n const { children, className = 'loading-portal' } = this.props;\n this.el.className = className;\n return ReactDOM.createPortal(children, this.el);\n }\n}\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport type { BrowseItemApiDto } from 'tradera/state/services/types/webapi-browse-generated';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport { toLocalizedUrl } from 'tradera/utils/url';\n\ntype AjaxItemDto = Pick<\n BrowseItemApiDto,\n | 'imageFormats'\n | 'shortDescription'\n | 'longDescription'\n | 'itemId'\n | 'itemCondition'\n | 'itemType'\n | 'endDate'\n | 'bidCount'\n | 'openingBid'\n | 'fixedPrice'\n | 'quantity'\n | 'shippingOptions'\n | 'paymentOptions'\n> & {\n url: string;\n auctionVisits: number;\n};\n\nexport const ajaxItemApi = createApi({\n reducerPath: 'ajaxItemApi',\n baseQuery: isomorphicWebApiBaseQuery,\n endpoints: (builder) => ({\n getAjaxItem: builder.query<\n AjaxItemDto,\n { itemId: number; languageCode: string }\n >({\n query: ({ itemId, languageCode }) =>\n toLocalizedUrl(`/ajax/item/${itemId}`, languageCode)\n })\n })\n});\n\nexport const { useGetAjaxItemQuery } = ajaxItemApi;\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\n\nimport type { PossibleItemTypes } from '../item-card/item-card';\n\ntype QuickViewState = {\n item?: PossibleItemTypes | null;\n items?: PossibleItemTypes[] | null;\n isOpen: boolean;\n openedFrom?: string | null;\n};\n\nexport const initialState: QuickViewState = {\n isOpen: false\n};\n\nexport const quickView = createSlice({\n name: 'quickView',\n initialState,\n reducers: {\n openQuickView: (\n state,\n {\n payload\n }: PayloadAction<{\n item?: PossibleItemTypes;\n items?: PossibleItemTypes[] | null;\n openedFrom?: string;\n }>\n ) => {\n const {\n items = state.items,\n item = state.item,\n openedFrom\n } = payload;\n\n state.item = item;\n state.items = items;\n state.isOpen = true;\n state.openedFrom = openedFrom;\n },\n closeQuickView: (state) => {\n state.item = null;\n state.items = null;\n state.isOpen = false;\n state.openedFrom = null;\n }\n }\n});\n\nexport const { openQuickView, closeQuickView } = quickView.actions;\n\nexport default quickView.reducer;\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport type {\n GenerateMemberReferralCodeApiRequest,\n GenerateMemberReferralCodeApiResponse\n} from 'tradera/state/services/types/webapi-member-generated';\n\nexport const referralModalApi = createApi({\n reducerPath: 'referralModalApi',\n baseQuery: isomorphicWebApiBaseQuery,\n endpoints: (builder) => ({\n getReferralCode: builder.query<\n GenerateMemberReferralCodeApiResponse,\n GenerateMemberReferralCodeApiRequest\n >({\n query: () => {\n return {\n url: '/api/webapi/member/referral-code',\n method: 'POST'\n };\n }\n })\n })\n});\n\nexport const { useGetReferralCodeQuery } = referralModalApi;\n","import BPOINT from '@tradera/blueprint/theme/scss/export/breakpoints.module.scss';\n\n// Explicit list of breakpoints for code completion\nexport enum BREAKPOINTS {\n XS = 'XS',\n SM = 'SM',\n MD = 'MD',\n LG = 'LG',\n XL = 'XL'\n}\n\nexport type BreakpointWidth = {\n name: BREAKPOINTS;\n min: number;\n max: number;\n};\n\nexport const BREAKPOINT_SIZES: Record =\n Object.fromEntries(\n Object.entries(BPOINT)\n .filter(([bp]) => BREAKPOINTS[bp as keyof typeof BREAKPOINTS])\n .map(([name, size], index, entries) => {\n const min = parseInt(size, 10);\n // Look ahead to next breakpoint entry and get its size minus one as current breakpoint's max size\n const max =\n index + 1 in entries\n ? parseInt(entries[index + 1][1], 10) - 1\n : 99999;\n return [\n name as keyof typeof BREAKPOINTS,\n {\n min,\n max,\n name: name as BREAKPOINTS\n }\n ];\n })\n );\n","const STORAGE_KEYS = {\n COOKIE_NOTIFICATION: 'cookieNotification',\n ITEMS_CLICK: 'items-click',\n SAVE_SEARCH_HINT: 'save-search-tooltip',\n SHARE_WISHLIST_TOOLTIP: 'share-wishlist-tooltip',\n SHARE_WISHLIST_TOOLTIP_SANTA: 'share-wishlist-tooltip-santa',\n SAVED_SEARCHES: 'saved-searches',\n SEARCH_RECENT: 'search-recent',\n RECENT_BRAND_ATTRIBUTES: 'recent-brand-attributes',\n WEB_PUSH_ACCEPTED: 'web_push_accepted',\n WEB_PUSH_SHOWN_MODALS: 'webPushModalsShown',\n SELLER_LIST_COMPACT_VIEW: 'sellerListCompactView',\n SYI_NEW_LAYOUT_INFO_DISMISSED: 'syiNewLayoutInfoDismissed',\n SYI_RESELL_SHOWN_FOR_DRAFT_IDS: 'syiResellShownForDraftIds',\n SYI_RESELL_ITEM_SHOWN_FOR_DRAFT_IDS: 'syiResellItemShownForDraftIds',\n SHIPPING_CONFIRMATION_PAGE_DIGITAL_STAMP_MODAL_DISMISSED_COUNT:\n 'shippingConfirmationPageDigitalStampModalDismissedCount',\n SELLER_LIST_MARK_AS_SENT_HINT: 'seller-list-mark-as-sent-tooltip',\n WISHLIST_BADGE_DATE_SHOWN: 'wishlist-badge-date-shown',\n ONBOARD_BUYER_CATEGORIES: 'onboard-buyer-categories',\n ONBOARD_SELLER_CLOSED: 'onboard-seller-closed',\n VIEWED_START_PAGE_COUNT: 'viewed-start-page-count',\n FEATURE_MODAL_MAO_ACTIVE: 'featureModalMaoActive',\n FEATURE_MODAL_MGM_ACTIVE: 'featureModalMgmActive',\n // State caches\n // NOTE: Even if these keys aren't used, we check for the values which are defined in utils/cache.js so don't remove these even if they looked unused\n CACHE_MESSAGING_BADGES: 'cache.messagingBadges',\n CACHE_SYSTEM_MESSAGES: 'cache.systemMessages',\n CACHE_SYSTEM_BADGE: 'cache.systemBadges',\n // Apple ID login user\n APPLE_ID_USER: 'appleId.user',\n\n USER_PROFILE: 'tradera--user-profile',\n HAS_SHOWED_MFA_VERIFICATION_MESSAGE: 'hasShowedMfaVerification'\n};\n\nconst STORAGE_VALUES = {\n SAVE_SEARCH_HINT_CLICKED: 'CLOSE_CLICKED',\n SHARE_WISHLIST_TOOLTIP_CLICKED: 'CLOSE_CLICKED',\n SHARE_WISHLIST_TOOLTIP_SANTA_CLICKED: 'CLOSE_CLICKED',\n SELLER_LIST_MARK_AS_SENT_HINT_CLICKED: 'CLOSE_CLICKED',\n FEATURE_MODAL_MAO_DISMISSED_CLICKED: 'CLOSE_CLICKED',\n FEATURE_MODAL_MGM_DISMISSED_CLICKED: 'CLOSE_CLICKED',\n ONBOARD_SELLER_CLOSED_CLICKED: 'CLOSE_CLICKED'\n};\n\nexport { STORAGE_KEYS, STORAGE_VALUES };\n","export const DAY_IN_SECONDS = 24 * 60 * 60;\nexport const HOUR_IN_SECONDS = 60 * 60;\nexport const MINUTE_IN_SECONDS = 60;\n\nexport const DAY_IN_MILLISECONDS = DAY_IN_SECONDS * 1000;\nexport const HOUR_IN_MILLISECONDS = HOUR_IN_SECONDS * 1000;\nexport const MINUTE_IN_MILLISECONDS = MINUTE_IN_SECONDS * 1000;\nexport const SECOND_IN_MILLISECONDS = 1000;\n","export enum MODAL_STATE {\n OPEN = 'OPEN',\n CLOSED = 'CLOSED'\n}\n\nexport enum ITEM_LAYOUT {\n GRID = 'layout-grid',\n LIST = 'layout-list',\n GRID_MEDIUM = 'layout-grid-medium',\n GRID_LARGE = 'layout-grid-large'\n}\n\nexport enum SITE_LAYOUT {\n DEFAULT = 'site-width-default',\n FULL_WIDTH = 'site-width-full'\n}\n","import React, { useRef } from 'react';\nimport { toLocalizedUrl } from 'tradera/utils/url';\nimport {\n NS_TOUCHWEB,\n I18N_FRONTEND_NAMESPACES,\n TRANS_SUFFIX\n} from './constants.mjs';\nimport { isServer } from 'tradera/utils/nextjs';\nimport {\n useAppSelector as useSelector,\n useAppDispatch\n} from 'tradera/state/hooks';\n\n// eslint-disable-next-line no-restricted-imports\nimport {\n type TFunction,\n type TranslationProps,\n useTranslation,\n Trans as TransComponent,\n I18nextProvider as NextI18nextProvider\n} from 'react-i18next';\nimport type { i18n } from 'i18next';\nimport type { AppDispatch, RootState } from 'tradera/state/configure-store';\nimport { addTranslationKey } from 'tradera/state/translations/reducer';\nimport { selectPreferredLanguageCode } from 'tradera/state/language/selectors';\nimport { useQuery } from 'tradera/hooks/use-query';\n\nexport type TranslationFunction = TFunction;\n\nexport const I18nextProvider = NextI18nextProvider;\n\nconst createWrappedT =\n (\n i18nObject: i18n,\n t: TranslationFunction,\n dispatch: AppDispatch,\n language: string,\n hasLoadedAllTranslations: boolean,\n throwOnTransSuffix?: boolean,\n isShowingTranslationKeysEnabled?: boolean\n ) =>\n (\n i18nKey: string,\n options?: TranslationProps | string,\n ...args: object[]\n ) => {\n if (\n typeof i18nKey === 'string' &&\n i18nKey.endsWith(TRANS_SUFFIX) &&\n throwOnTransSuffix\n ) {\n throw new Error(\n `t function keys should not have \"Trans\" suffix, got key \"${i18nKey}\". Use Trans component instead.`\n );\n }\n const translation = t(\n i18nKey,\n // @ts-ignore: TS2698 because I have no idea how these types from/using i18n work\n { ...options, lng: language, hasLoadedAllTranslations },\n // @ts-ignore: TS2345 because I have no idea how these types from/using i18n work\n ...args\n );\n if (isServer) {\n addTranslationForHydration(\n i18nKey,\n options,\n language,\n i18nObject,\n dispatch\n );\n }\n return isShowingTranslationKeysEnabled ? i18nKey : translation;\n };\n\nconst isQueryToggleEnabled = (query: string | null) => {\n if (query === null) return false;\n return ['1', 'true', ''].includes(query);\n};\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 */\nexport const useTranslator = () => {\n const dispatch = useAppDispatch();\n const [isShowingTranslationKeysEnabledQuery] = useQuery('translation-keys');\n const isShowingTranslationKeysEnabled = isQueryToggleEnabled(\n isShowingTranslationKeysEnabledQuery\n );\n const language = useSelector(selectPreferredLanguageCode);\n const loadedLanguages =\n useSelector((state: RootState) => state.status?.loadedLanguages) || [];\n const hasLoadedAllTranslations = loadedLanguages.includes(language);\n const { t, ready, i18n } = useTranslation(I18N_FRONTEND_NAMESPACES);\n const wrappedT: TranslationFunction = React.useMemo(\n () =>\n createWrappedT(\n i18n,\n t,\n dispatch,\n language,\n hasLoadedAllTranslations,\n true,\n isShowingTranslationKeysEnabled\n ),\n [\n hasLoadedAllTranslations,\n i18n,\n t,\n dispatch,\n language,\n isShowingTranslationKeysEnabled\n ]\n );\n return { t: ready ? wrappedT : () => '...', i18n };\n};\n\nconst addTranslationForHydration = (\n i18nKey: string,\n options = {},\n language: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n i18n: any,\n dispatch: AppDispatch\n) => {\n const { key, namespaces } = i18n.translator.extractFromKey(\n i18nKey,\n options\n );\n const namespace = namespaces[namespaces.length - 1];\n const { res, exactUsedKey } = i18n.translator.resolve(key, {\n ...options,\n lng: language,\n ns: namespace\n });\n const pluralizedKey = exactUsedKey || i18nKey;\n\n dispatch(\n addTranslationKey({ key: pluralizedKey, translation: res, namespace })\n );\n};\n\nexport type WithTranslatorProps = ReturnType['t'];\n\n/**\n * Translation HOC, wrapper for react-i18next\n */\nexport function withTranslator<\n TComponent extends WithTranslatorProps = WithTranslatorProps\n>(\n WrappedComponent: React.ComponentType\n): React.ComponentType {\n function WithTranslator(\n props: Omit\n ) {\n const { t } = useTranslator();\n return ;\n }\n\n WithTranslator.displayName = `withTranslator(${\n WrappedComponent.displayName || WrappedComponent.name\n }`;\n return WithTranslator;\n}\n\nexport type WithUrlLocalizerProps = ReturnType<\n typeof useUrlLocalizer\n>['toLocalizedUrl'];\n\n/**\n * Localization HOC, wrapper for URL-localizer\n * @param {Component} WrappedComponent\n */\nexport function withUrlLocalizer<\n TComponent extends WithUrlLocalizerProps = WithUrlLocalizerProps\n>(WrappedComponent: React.ComponentType) {\n function WithUrlLocalizer(\n props: Omit\n ) {\n const { toLocalizedUrl } = useUrlLocalizer();\n return ;\n }\n\n WithUrlLocalizer.displayName = `withUrlLocalizer(${\n WrappedComponent.displayName || WrappedComponent.name\n }`;\n\n return WithUrlLocalizer;\n}\n\n/**\n * Current language hook, wrapper for react-i18next\n */\nexport const useCurrentLanguage = () => {\n const preferredLanguage = useSelector(selectPreferredLanguageCode);\n // Using language from Redux instead of i18n.language since that\n // will always be 'sv' if we don't clone the instance.\n return {\n language: preferredLanguage\n };\n};\n\n/**\n * Returns function to append language prefix to link\n */\nexport const useUrlLocalizer = () => {\n const preferredLanguage = useSelector(selectPreferredLanguageCode);\n const urlLocalizer = useRef(function toLocalizedUrlWrapper(\n url: T\n ): T | string {\n return toLocalizedUrl(url, preferredLanguage);\n });\n return {\n toLocalizedUrl: urlLocalizer.current\n };\n};\n\nexport type TransProps = Omit<\n React.ComponentProps,\n 'i18nKey'\n> & {\n i18nKey: string;\n};\n\nexport const Trans = (props: TransProps) => {\n const dispatch = useAppDispatch();\n const language = useSelector(selectPreferredLanguageCode);\n const [isShowingTranslationKeysEnabledQuery] = useQuery('translation-keys');\n const isShowingTranslationKeysEnabled = isQueryToggleEnabled(\n isShowingTranslationKeysEnabledQuery\n );\n const loadedLanguages =\n useSelector((state: RootState) => state.status?.loadedLanguages) || [];\n const hasLoadedAllTranslations = loadedLanguages.includes(language);\n const { t, ready, i18n } = useTranslation(I18N_FRONTEND_NAMESPACES);\n const { i18nKey, children, defaults } = props;\n const wrappedT = React.useMemo(\n () =>\n createWrappedT(\n i18n,\n t,\n dispatch,\n language,\n hasLoadedAllTranslations,\n false,\n isShowingTranslationKeysEnabled\n ),\n [\n hasLoadedAllTranslations,\n i18n,\n t,\n dispatch,\n language,\n isShowingTranslationKeysEnabled\n ]\n );\n\n // TODO: since we don't have TS everywhere we still need to check these things, when we have TS we can use TS to enforce most of it instead instead\n\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","export const isSwedenCountryCodeOrUndefined = (countryCodeIso2) =>\n countryCodeIso2 === undefined ||\n countryCodeIso2 === null ||\n countryCodeIso2.toLowerCase() === 'se';\n\nexport const isSwedenCountryNameOrUndefined = (countryName) =>\n countryName === undefined ||\n countryName === null ||\n countryName.toLowerCase() === 'sweden';\n\nexport const isDenmarkCountryCode = (countryCodeIso2) =>\n !isSwedenCountryCodeOrUndefined(countryCodeIso2) &&\n countryCodeIso2.toLowerCase() === 'dk';\n\nexport const isNetherlandsCountryCode = (countryCodeIso2) =>\n !isSwedenCountryCodeOrUndefined(countryCodeIso2) &&\n countryCodeIso2.toLowerCase() === 'nl';\n\nexport const areCountryCodesIso2Equal = (first, second) =>\n (first || 'SE').toUpperCase() === (second || 'SE').toUpperCase();\n","export const isSwedishOrUndefined = (languageCodeIso2) =>\n languageCodeIso2 === undefined || languageCodeIso2.toLowerCase() === 'sv';\n\nexport const getLanguageFromCountryCode = (countryCodeIso2) => {\n const key = countryCodeIso2?.toLowerCase() || 'se';\n const languageMap = {\n se: 'sv',\n dk: 'da',\n de: 'de',\n fr: 'fr',\n nl: 'nl'\n };\n return languageMap[key] || 'en';\n};\n\nexport const getCountryCodeForFlagFromLanguage = (languageCode) => {\n const key = languageCode?.toLowerCase() || 'sv';\n const countryMap = {\n en: 'gb', // We default to GB which isn't strictly correct\n da: 'dk',\n de: 'de',\n fr: 'fr',\n nl: 'nl'\n };\n return countryMap[key] || 'se';\n};\n\nexport const getCountryCodeFromLanguage = (languageCode) => {\n const key = languageCode?.toLowerCase() || 'sv';\n const countryMap = {\n da: 'dk',\n de: 'de',\n fr: 'fr',\n nl: 'nl'\n };\n return countryMap[key] || 'se';\n};\n\nexport const areLanguageCodesIso2Equal = (first, second) =>\n (first || 'SV').toUpperCase() === (second || 'SV').toUpperCase();\n","import { useCallback } from 'react';\nimport { useCurrentLanguage } from 'tradera/lang/translate';\nimport { useAppSelector } from 'tradera/state/hooks';\nimport { selectPreferredCurrency } from 'tradera/state/multi-currency/selectors';\nimport type {\n OverrideFormatPriceOptions,\n Price\n} from 'tradera/localization/format-price';\nimport { formatPrice } from 'tradera/localization/format-price';\n\n/**\n * Formats a price in the current language and currency.\n */\nexport const useLocalizedPriceFormatter = () => _useLocalizedPriceFormatter();\n\n/**\n * Same as useLocalizedPriceFormatter but it always rounds up. Needed for fixed prices,\n * so we never display a price that is lower than what the user will pay in the end.\n */\nexport const useLocalizedPriceFormatterRoundingUp = () =>\n _useLocalizedPriceFormatter({ roundUp: true });\n\n/**\n * Does not convert anything. If you for some reason are working with the local currency\n * it could be used but avoid it. Example of usage: in the bid-modal we want to display\n * the exact amount that was input\n */\nexport const useLocalizedPriceFormatterNoConversion = () =>\n _useLocalizedPriceFormatter({ conversion: false });\n\n/**\n * Makes the conversion but leaves the symbol. Used to compare local amounts to make a\n * decision in the code.\n */\nexport const useLocalizedPriceFormatterNoSymbol = () =>\n _useLocalizedPriceFormatter({ style: 'decimal' });\n\n/**\n * Formats a price in the current language and currency but forces the value to be\n * rendered using up to two decimals, even for currencies which are normally without\n * decimals.\n */\nexport const useLocalizedPriceFormatterAllowFractions = () =>\n _useLocalizedPriceFormatter({ allowFractions: true });\n\ntype LocalizedPriceFormatterOptions = {\n allowFractions?: boolean;\n conversion?: boolean;\n roundUp?: OverrideFormatPriceOptions['roundUp'];\n style?: OverrideFormatPriceOptions['style'];\n};\n\n/**\n * Internal to this module, needed to limit the scope of the API.\n */\nconst _useLocalizedPriceFormatter = ({\n conversion = true,\n style,\n roundUp,\n allowFractions\n}: LocalizedPriceFormatterOptions = {}) => {\n const { language } = useCurrentLanguage();\n const preferredCurrency = useAppSelector(selectPreferredCurrency);\n\n return useCallback(\n (price: Price) =>\n formatPrice(\n conversion ? preferredCurrency.rate * Number(price) : price,\n language,\n {\n currency: preferredCurrency.code,\n minimumFractionDigits: preferredCurrency.decimals,\n maximumFractionDigits: allowFractions\n ? 2\n : preferredCurrency.decimals,\n ...(style ? { style } : {}),\n ...(roundUp ? { roundUp } : {})\n }\n ),\n [\n conversion,\n language,\n preferredCurrency,\n roundUp,\n style,\n allowFractions\n ]\n );\n};\n","import { createElement } 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 { isServer } from 'tradera/utils/nextjs';\nimport { webApiClient } from '../utils/http';\nimport { createQueue } from './toast-queue';\nimport type { ItemBasicInfoApiResponse } from 'tradera/state/services/types/webapi-browse-generated';\n\nconst queuedToasts = createQueue();\n\nconst openNextToast = async () => {\n if (isServer) {\n return;\n }\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 =\n await webApiClient.get(\n `/browse/item-basic-info/${nextItem.eventData.itemId}`\n );\n const { imageUrl, itemUrl, shortDescription } =\n response.data.item || {};\n toast(\n // TODO: convert to JSX when we have a proper story for this\n 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, messageData, headerData } =\n nextItem.eventData;\n toast(\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 (\n type: string,\n eventData:\n | {\n message: string;\n header?: string | null;\n messageData: unknown;\n headerData: unknown;\n type: (typeof toast.TYPE)[keyof typeof toast.TYPE] | string;\n }\n | {\n itemId: number;\n newLeadingBidAmount?: number;\n price?: number;\n timeLeftMinutes?: number;\n },\n ttlInMinutes = 10\n) => {\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 queuedToasts.add({ type, eventData }, ttlInMinutes);\n openNextToast();\n};\n\nexport const showItemOutbiddedToast = (\n itemId: number,\n newLeadingBidAmount: number\n) =>\n handleNotification('ItemOutbidded', {\n itemId,\n newLeadingBidAmount\n });\n\nexport const showItemFirstBidToast = (itemId: number) =>\n handleNotification('ItemFirstBid', { itemId });\n\nexport const showItemSoldToast = (itemId: number, price: number) =>\n handleNotification('ItemSold', { itemId, price });\n\nexport const showItemWonToast = (itemId: number, price: number) =>\n handleNotification('ItemWon', { itemId, price });\n\nexport const showItemPaidToast = (itemId: number) =>\n handleNotification('ItemPaid', { itemId });\n\nexport const showItemWishListReminderToast = (\n itemId: number,\n timeLeftMinutes: number\n) =>\n handleNotification(\n 'ItemWishListReminder',\n { itemId, timeLeftMinutes },\n timeLeftMinutes > 10 ? 10 : 2\n );\n\n/**\n *\n * @param message The message translation key\n * @param header The header translation key\n * @param messageData Any data that's needed for the message translation key\n * @param headerData Any data that's needed for the header translation key\n */\nexport const showSuccessToast = (\n message: string,\n header?: string,\n messageData: unknown = null,\n headerData: unknown = null\n) => {\n handleNotification('Message', {\n message,\n header,\n messageData,\n headerData,\n type: toast.TYPE.SUCCESS\n });\n};\n\nexport const showErrorToast = (\n message: string,\n header?: string | null,\n messageData: unknown = null,\n headerData: unknown = null\n) => {\n handleNotification('Message', {\n header,\n message,\n messageData,\n headerData,\n type: toast.TYPE.ERROR\n });\n};\n\nexport const showInfoToast = (\n message: string,\n header?: string,\n messageData = null,\n headerData = null\n) => {\n handleNotification('Message', {\n message,\n header,\n messageData,\n headerData,\n type: toast.TYPE.INFO\n });\n};\n\n// export const ToastTestButton = () => (\n// {\n// e.preventDefault();\n// showItemWishListReminderToast(85391643, 3);\n// showItemOutbiddedToast(85391639, 99);\n// showItemFirstBidToast(85391639);\n// showItemSoldToast(85391639, 1234);\n// showItemWonToast(85391639, 1234);\n// showItemPaidToast(85391639);\n// }}>\n// Test\n// \n// );\n","/* eslint-disable better-mutation/no-mutation */\nimport initData from 'init-data';\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const initialState = {\n list: [],\n topLevelCategories: initData.allCategories || [],\n isFetching: false,\n error: null\n};\n\nconst categoriesSlice = createSlice({\n name: 'categories',\n initialState,\n reducers: {\n initialize: (state, { payload }) => {\n state.topLevelCategories =\n payload.topLevelCategories || state.topLevelCategories;\n },\n requestCategoryList: (state) => {\n state.isFetching = true;\n state.error = null;\n },\n receiveCategoryList: (state, action) => {\n state.list = action.payload;\n state.isFetching = false;\n state.error = null;\n },\n handleCategoryListError: (state, action) => {\n state.isFetching = false;\n state.error = action.payload;\n }\n }\n});\n\nexport const reducer = categoriesSlice.reducer;\n\nexport const {\n initialize,\n requestCategoryList,\n receiveCategoryList,\n handleCategoryListError\n} = categoriesSlice.actions;\n","import React from 'react';\nimport { configureStore } from '@reduxjs/toolkit';\nimport type { Store } from '@reduxjs/toolkit';\nimport { Provider } from 'react-redux';\nimport rootReducer from './root-reducer';\nimport { routerMiddleware } from 'connected-react-router';\nimport { getHistory } from 'tradera/utils/history';\nimport { sentryReduxEnhancer } from 'tradera/utils/sentry/redux';\nimport { initializeState } from './state-initializer';\nimport initData from 'tradera/legacy/static/packages/init-data';\nimport { isServer } from 'tradera/utils/nextjs';\nimport { discoverApi } from './services/discover-api';\nimport { feesApi } from './services/fees-api';\nimport { touchwebSearchApi } from './services/touchweb-search-api';\nimport { touchwebSyiApi } from './services/touchweb-syi-api';\nimport { cartApi } from './services/cart-api';\nimport { messagingStatsApi } from './services/messaging-stats-api';\nimport type { History } from 'history';\nimport { bidHistoryApi } from 'tradera/components/bid-history/bid-history-api';\nimport { draftsApi } from 'tradera/apps/syi/state/drafts-api';\nimport { templatesApi } from 'tradera/apps/syi/state/templates-api';\nimport { shippingComplaintApi } from './services/shipping-complaint-api';\nimport { savedSearchesApi } from 'tradera/apps/my-tradera/saved-searches/saved-searches-api';\nimport { pickListApi } from 'tradera/apps/my-tradera/pick-list2/services/pick-list-api';\nimport { referralModalApi } from 'tradera/components/referral-modal/services/referral-modal-api';\nimport { wishListApi } from './services/wish-list-api';\nimport { wishListItemsEndingTodayApi } from './services/wish-list-items-ending-today-api';\nimport { ajaxItemApi } from 'tradera/components/quick-view/ajax-item-api';\nimport { firebaseApi } from 'tradera/components/messaging/firebase-api';\nimport { webApi } from 'tradera/state/services/webapi-api';\nimport { topListsApi } from 'tradera/apps/tradera/components/top-lists/top-lists-api';\nimport { sellerListApi } from 'tradera/apps/my-tradera/app/components/seller-list/seller-list-api';\nimport { bookedShipmentsApi } from 'tradera/apps/my-tradera/app/containers/booked-shipment-api';\nimport { feedbackRemovalApi } from 'tradera/apps/tradera/resolution/feedback-removal/feedback-removal-api';\n\nif (isServer) {\n // Do not remove this without also removing the disable of eslint better-mutation/no-mutation at top of file.\n throw new Error(\n 'This implementation is not compatible with SSR as global properties are shared between server instances'\n );\n}\n\n// Hot reloading\nconst enableWebPackHotModuleReplacementForReducers = (\n // webpack modules are not typed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n module: any,\n store: Store\n) => {\n if (!module.hot) {\n return;\n }\n module.hot.accept('./root-reducer', () => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const nextRootReducer = require('./root-reducer');\n store.replaceReducer(nextRootReducer);\n });\n};\n\nconst initializeStore = (browserHistory: History) => {\n const isProd =\n typeof process === 'object' && process.env?.NODE_ENV === 'production';\n\n const reduxStore = configureStore({\n reducer: rootReducer(browserHistory),\n middleware: (getDefaultMiddleware) => {\n const middlewares = [\n discoverApi.middleware,\n feesApi.middleware,\n pickListApi.middleware,\n touchwebSearchApi.middleware,\n touchwebSyiApi.middleware,\n bidHistoryApi.middleware,\n cartApi.middleware,\n draftsApi.middleware,\n templatesApi.middleware,\n shippingComplaintApi.middleware,\n savedSearchesApi.middleware,\n referralModalApi.middleware,\n wishListApi.middleware,\n messagingStatsApi.middleware,\n firebaseApi.middleware,\n wishListItemsEndingTodayApi.middleware,\n ajaxItemApi.middleware,\n webApi.middleware,\n topListsApi.middleware,\n sellerListApi.middleware,\n bookedShipmentsApi.middleware,\n feedbackRemovalApi.middleware\n ];\n if (browserHistory) {\n middlewares.push(routerMiddleware(browserHistory));\n }\n return getDefaultMiddleware().concat(middlewares);\n },\n // If url contains ?debug-redux devtools will be enabled in production;\n devTools: !isProd || window.location.search.includes('debug-redux'),\n enhancers: [sentryReduxEnhancer]\n });\n\n enableWebPackHotModuleReplacementForReducers(module, reduxStore);\n return reduxStore;\n};\n\ntype SelectFn = (state: ReturnType) => RootState;\ntype OnChangeFn = (previousState: RootState, currentState: RootState) => void;\n\n// make it possible to observe state changes. used by syi\nexport const observeStore = function (select: SelectFn, onChange: OnChangeFn) {\n let currentState: RootState;\n function handleChange() {\n const nextState = select(store.getState());\n if (nextState !== currentState) {\n const previousState = currentState;\n // eslint-disable-next-line better-mutation/no-mutation\n currentState = nextState;\n onChange(previousState, currentState);\n }\n }\n\n const unsubscribe = store.subscribe(handleChange);\n handleChange();\n return unsubscribe;\n};\n\nconst store = initializeStore(getHistory());\n\ninitializeState(initData)(store.dispatch);\n\nexport default store;\n\n// Ref: https://redux-toolkit.js.org/tutorials/typescript\n// Infer the `RootState` and `AppDispatch` types from the store itself\nexport type RootState = ReturnType;\n// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState}\nexport type AppDispatch = typeof store.dispatch;\nexport type GetState = () => RootState;\n\n// Don't know how to type this properly...\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ProviderWithGlobalStore = (props: any) => (\n \n);\n","import { logger } from 'packages/logger';\n\nimport { getSearchResults } from './api';\nimport pageActions from '../page/actions';\nimport { API_ERRORS } from 'tradera/utils/api';\nimport { reload } from 'tradera/utils/location';\nimport { initialState } from './initial-state';\nimport * as discoverTracking from 'tradera/apps/tradera/components/discover/helpers/search-gtm';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport { replacePartInPath } from 'tradera/utils/url';\nimport {\n handleSearchResultsError,\n requestSearchResults,\n initialize as initReducer,\n receiveSearchResults as receiveSearchResultsReducerAction\n} from './reducer';\nimport { wishlistAddRange } from 'tradera/state/items/reducer';\n\nconst updatePageMetaForSearchResults = () => (dispatch, getState) => {\n const discover = getState().discover;\n const { reduxContainer } = discover;\n const { pageMeta } = reduxContainer;\n dispatch(\n pageActions.setPageMeta({\n ...pageMeta\n })\n );\n};\n\n/**\n *\n * @param {object} payload the normalized version of the response\n * @param {string} payload.endpoint\n * @param {object} payload.queryParams\n * @param {object} payload.result\n * @param {object} [?payload.result.categoryPath]\n * @param {object[]} [payload.result.items]\n * @param {object} [payload.result.itemsOnDisplay]\n * @param {object[]} [payload.result.itemsOnDisplay.items]\n * @param {object} [payload.result.reduxContainer]\n * @param {object} [payload.result.reduxContainer.ads]\n * @param {object} [payload.result.reduxContainer.pageMeta]\n */\nexport const receiveSearchResults =\n (payload, shippingRegionCountryCodeIso2) => (dispatch) => {\n dispatch(\n receiveSearchResultsReducerAction({\n ...payload,\n shippingRegionCountryCodeIso2\n })\n );\n const items = payload.result?.items || [];\n dispatch(\n wishlistAddRange(\n items\n .filter((item) => item.inWishList)\n .map((item) => item.itemId)\n )\n );\n };\n\nexport const fetchSearchResults = (\n endpoint,\n queryParams,\n pageType,\n onLoaded\n) => {\n return async (dispatch, getState) => {\n dispatch(requestSearchResults());\n const {\n environment: { version }\n } = getState();\n\n return getSearchResults(endpoint, queryParams, '', version)\n .then(({ data: result }) => {\n const { isRedirect, fromCategoryId, toCategoryId } = result;\n\n if (isRedirect) {\n const newPathname = replacePartInPath(\n window.location.pathname,\n `${fromCategoryId}`,\n `${toCategoryId}`\n );\n const newUrl = newPathname + window.location.search;\n window.location.replace(newUrl);\n return;\n }\n\n const searchResults = { result, endpoint, queryParams };\n const shippingRegionCountryCodeIso2 =\n selectShippingRegionCountryCodeIso2(getState());\n dispatch(\n receiveSearchResults(\n searchResults,\n shippingRegionCountryCodeIso2\n )\n );\n return searchResults;\n })\n .catch((error) => {\n switch (error.message) {\n case API_ERRORS.CANCELLED:\n break;\n case API_ERRORS.VERSION_MISMATCH:\n reload(true);\n break;\n default:\n dispatch(handleSearchResultsError(error.message));\n break;\n }\n switch (error.message) {\n case API_ERRORS.CANCELLED:\n case API_ERRORS.NETWORK:\n case API_ERRORS.TIMEOUT:\n case API_ERRORS.VERSION_MISMATCH:\n break;\n default:\n logger(error);\n break;\n }\n })\n .finally(() => {\n dispatch(afterReceiveSearchResults(pageType, onLoaded));\n });\n };\n};\n\nexport const afterReceiveSearchResults =\n (pageType, onLoaded) => (dispatch, getState) => {\n dispatch(updatePageMetaForSearchResults(pageType));\n dispatch(() => {\n trackNewSearch(getState);\n onLoaded();\n });\n };\n\nexport const initialize = () => (dispatch) => {\n dispatch(initReducer(initialState));\n};\n\nconst trackNewSearch = (getState) => {\n const state = getState();\n const { categoryPath, items, metaTitle } = state.discover;\n discoverTracking.trackNewSearch(\n categoryPath,\n items.map((x) => x.itemId),\n metaTitle\n );\n};\n","/* eslint-disable better-mutation/no-mutation */\nimport { createSlice } from '@reduxjs/toolkit';\nimport { normalize } from './helpers';\nimport { initialState } from './initial-state';\n\nconst slice = createSlice({\n name: 'discover',\n initialState,\n reducers: {\n initialize: (_state, { payload }) => {\n return { ...payload };\n },\n requestSearchResults: (state) => {\n state.error = null;\n },\n receiveSearchResults: (state, { payload }) => {\n const {\n result = {},\n endpoint = null,\n queryParams = null,\n shippingRegionCountryCodeIso2 = 'se'\n } = payload;\n\n return {\n ...state,\n endpoint,\n error: null,\n hasResult: true,\n queryParams,\n ...normalize(result, shippingRegionCountryCodeIso2)\n };\n },\n handleSearchResultsError: (state, { payload }) => {\n state = { ...normalize({}) };\n state.error = payload;\n state.hasResult = true;\n },\n setSingleFilterValue: (state, { payload }) => {\n state.filters = {\n ...state.filters,\n [payload.filter]: {\n ...state.filters[payload.filter],\n selectedValue: payload.value\n }\n };\n },\n updateItem: (state, { payload }) => {\n const { itemId, ...itemData } = payload;\n return {\n ...state,\n items: [\n ...state.items.map((x) =>\n x.itemId === itemId ? { ...x, ...itemData } : x\n )\n ],\n itemsOnDisplay: [\n ...state.itemsOnDisplay.map((x) =>\n x.itemId === itemId ? { ...x, ...itemData } : x\n )\n ]\n };\n },\n addItemOnDisplay: (state, { payload }) => {\n return state.itemsOnDisplay.some(\n (x) => x.itemId === payload.item.itemId\n )\n ? state\n : {\n ...state,\n itemsOnDisplay: [...state.itemsOnDisplay, payload.item]\n };\n },\n removeItemOnDisplay: (state, { payload }) => {\n return state.itemsOnDisplay.some(\n (x) => x.itemId === payload.item.itemId\n )\n ? {\n ...state,\n itemsOnDisplay: state.itemsOnDisplay.filter(\n (x) => x.itemId !== payload.item.itemId\n )\n }\n : state;\n },\n setCategoryPath: (state, { payload }) => {\n state.categoryPath = payload;\n state.currentCategoryId = (payload && payload[0].id) || 0;\n },\n setCurrentCategoryId: (state, { payload }) => {\n state.currentCategoryId = payload;\n },\n setIsFilterOpen: (state, { payload }) => {\n state.isFilterOpen = payload;\n },\n reset: (state, { payload }) => {\n state = payload.initialState;\n }\n }\n});\n\nexport const {\n initialize,\n requestSearchResults,\n receiveSearchResults,\n handleSearchResultsError,\n setSingleFilterValue,\n updateItem,\n addItemOnDisplay,\n removeItemOnDisplay,\n setCategoryPath,\n setIsFilterOpen,\n setCurrentCategoryId,\n reset\n} = slice.actions;\nexport const reducer = slice.reducer;\n","import type { RootState } from '../configure-store';\n\nexport const selectEnvironment = (state: RootState) => state.environment;\n\nexport const selectFeatureSwitches = (state: RootState) =>\n state?.environment?.featureSwitches;\nexport const selectIsFeatureEnabled =\n (featureName: string) => (state: RootState) =>\n selectFeatureSwitches(state)?.[featureName] === true;\n\nexport const selectEnvVariables = (state: RootState) =>\n state.environment.variables;\n\nexport const selectWebLiveUrl = (state: RootState) =>\n state.environment.variables.PUBLIC_WEB_LIVE_URL;\n\nexport const selectBrowserName = (state: RootState) =>\n state?.environment?.browserName;\n\nexport const selectIsNativeApp = (state: RootState) =>\n !!state?.environment?.isNativeAppContext;\n\nexport const selectNativeAppLanguage = (state: RootState) =>\n state?.environment?.appLanguage;\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { getInitialState } from './initial-state';\nimport type { InitData } from 'tradera/state/init-data/types';\n\n// The max size of the item cache\nconst RECENTLY_VIEWED_MAX_LENGTH = 20;\n\ntype ItemsState = {\n recentItemIds: number[];\n wishListItemIds: number[];\n wishListAddedCount: number;\n};\n\nexport const initialState: ItemsState = {\n recentItemIds: [],\n wishListItemIds: [],\n wishListAddedCount: 0\n};\n\nconst itemsSlice = createSlice({\n name: 'items',\n initialState,\n reducers: {\n addRecentlyViewed: (state, action) => {\n const { payload: itemId } = action;\n // Remove item if already present\n state.recentItemIds = state.recentItemIds.filter(\n (x) => x !== itemId\n );\n // Add to front of list\n state.recentItemIds.unshift(itemId);\n // Limit list length\n state.recentItemIds = state.recentItemIds.slice(\n 0,\n RECENTLY_VIEWED_MAX_LENGTH\n );\n },\n setRecentlyViewed: (state, action) => {\n const { payload } = action;\n state.recentItemIds = payload.slice(0, RECENTLY_VIEWED_MAX_LENGTH);\n },\n /**\n *\n * @param state\n * @param action { payload: { itemId: number; exists: boolean } } where exists is true if the item should be added to the wishlist, false if it should be removed\n */\n wishlist: (\n state,\n action: PayloadAction<{ itemId: number; exists: boolean }>\n ) => {\n const {\n payload: { itemId, exists }\n } = action;\n\n const wishListItemIds = new Set(state.wishListItemIds || []);\n if (exists) {\n wishListItemIds.add(itemId);\n } else {\n wishListItemIds.delete(itemId);\n }\n state.wishListItemIds = Array.from(wishListItemIds);\n },\n wishlistCountIncrement: (state) => {\n state.wishListAddedCount = state.wishListAddedCount + 1;\n },\n wishlistAddRange: (state, action: PayloadAction) => {\n const { payload: itemIds } = action;\n const wishListItemIds = new Set(state.wishListItemIds || []);\n itemIds?.forEach((itemId) => wishListItemIds.add(itemId));\n state.wishListItemIds = Array.from(wishListItemIds);\n },\n wishlistRemoveRange: (state, action: PayloadAction) => {\n const { payload: itemIds } = action;\n const wishListItemIds = new Set(state.wishListItemIds || []);\n itemIds?.forEach((itemId) => wishListItemIds.delete(itemId));\n state.wishListItemIds = Array.from(wishListItemIds);\n },\n initialize: (state, action: PayloadAction) => {\n state = getInitialState(action.payload);\n }\n }\n});\n\nexport const {\n addRecentlyViewed,\n setRecentlyViewed,\n wishlist,\n wishlistAddRange,\n wishlistRemoveRange,\n initialize,\n wishlistCountIncrement\n} = itemsSlice.actions;\n\nexport default itemsSlice.reducer;\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport type { AppDispatch, GetState } from 'tradera/state/configure-store';\nimport { setValue } from 'tradera/state/member-storage/reducer';\nimport type { MemberServerStorageListApiResponse } from 'tradera/state/services/types/webapi-member-generated';\nimport { webApiClient } from 'tradera/utils/http';\n\nexport const loadMemberServerStorageData = createAsyncThunk(\n 'memberStorage/loadMemberServerStorageData',\n async () => {\n const respone =\n await webApiClient.get(\n '/member/server-storage'\n );\n return respone.data;\n }\n);\n\nexport const saveMemberServerStorageValue =\n (key: string, value: string) =>\n async (dispatch: AppDispatch, getState: GetState) => {\n const currentValue = getState().memberStorage.data[key];\n // no need to save if value is the same\n if (currentValue === value) {\n return;\n }\n dispatch(setValue({ key, value }));\n await webApiClient.put('/member/server-storage', { key, value });\n };\n","/* eslint-disable better-mutation/no-mutation */\nimport { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport { loadMemberServerStorageData } from 'tradera/state/member-storage/actions';\n\nexport type MemberStorageState = {\n isUnitialized: boolean;\n isLoading: boolean;\n isError: boolean;\n isSuccess: boolean;\n data: Record;\n};\n\nconst initialState: MemberStorageState = {\n isUnitialized: true,\n isLoading: false,\n isError: false,\n isSuccess: false,\n data: {}\n};\n\nconst memberStorageSlice = createSlice({\n name: 'memberStorage',\n initialState,\n reducers: {\n setData: (state, action: PayloadAction>) => {\n state.isUnitialized = false;\n state.isLoading = false;\n state.isError = false;\n state.isSuccess = true;\n state.data = action.payload;\n },\n setValue: (\n state,\n action: PayloadAction<{ key: string; value: string }>\n ) => {\n state.data[action.payload.key] = action.payload.value;\n }\n },\n extraReducers: (builder) => {\n builder.addCase(loadMemberServerStorageData.pending, (state) => {\n state.isUnitialized = false;\n state.isLoading = true;\n state.isError = false;\n state.isSuccess = false;\n });\n builder.addCase(\n loadMemberServerStorageData.fulfilled,\n (state, action) => {\n state.isUnitialized = false;\n state.isLoading = false;\n state.isError = false;\n state.isSuccess = true;\n action.payload.rows?.forEach((row) => {\n if (row.key && row.value) {\n state.data[row.key] = row.value;\n }\n });\n }\n );\n builder.addCase(loadMemberServerStorageData.rejected, (state) => {\n state.isUnitialized = false;\n state.isLoading = false;\n state.isError = true;\n state.isSuccess = false;\n });\n }\n});\n\nexport const { setData, setValue } = memberStorageSlice.actions;\n\nexport default memberStorageSlice.reducer;\n","import { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport { areCountryCodesIso2Equal } from 'tradera/localization/countrycode';\nimport type { RootState } from '../configure-store';\nimport { RequirementTypeApi } from '../services/types/webapi-member-generated';\n\nexport const selectMember = (state: RootState) => state.member;\n\nexport const selectIsLoggedIn = (state: RootState) => state.member?.isLoggedIn;\n\nexport const selectGeolocation = (state: RootState) =>\n state.member?.geolocation;\n\nexport const selectMemberId = (state: RootState) => state?.member?.memberId;\n\nexport const selectMemberAlias = (state: RootState) =>\n state.member?.memberAlias;\n\nexport const selectMemberEmail = (state: RootState) =>\n state.member?.memberEmail;\n\nexport const selectMemberFirstName = (state: RootState) =>\n state.member?.memberFirstName;\n\nexport const selectMemberLastName = (state: RootState) =>\n state.member?.memberLastName;\n\nexport const selectMemberBirthdate = (state: RootState) =>\n state.member?.memberBirthdate;\n\nexport const selectCurrencyCode = (state: RootState) =>\n state.member?.currencyCode;\n\n// Prefer using selectShippingRegionCountryCodeIso2 to be safe for all users, non-logged in and logged in.\nexport const selectMemberCountryCodeIso2 = (state: RootState) =>\n state.member?.memberCountryCodeIso2;\n\nexport const selectIsOutsideSweden = (state: RootState) =>\n state.member?.geolocation?.isoCode &&\n state.member?.geolocation?.isoCode.toLowerCase() !== 'se';\n\nexport const showDanishFromCountry = (state: RootState) => {\n const fromCountry = selectShippingRegionCountryCodeIso2(state);\n return areCountryCodesIso2Equal(fromCountry, 'DK');\n};\n\nexport const selectMemberTown = (state: RootState) => state.member?.memberTown;\n\nexport const selectMemberPermissions = (state: RootState) =>\n state.member.permissions;\n\nexport const selectIsUnderage = (state: RootState) => {\n const permissions = selectMemberPermissions(state);\n return (\n permissions?.sellPermission?.isPermitted === false &&\n permissions?.sellPermission?.requirementsNotMet?.includes(\n RequirementTypeApi.IsOverMinimumAge\n )\n );\n};\n\nexport const selectIsCompany = (state: RootState) => state.member?.isCompany;\n\nexport const selectIsImpersonationSession = (state: RootState) =>\n state.member?.isImpersonationSession;\n\nexport const selectMemberState = (state: RootState) =>\n state.member?.memberState;\n\nexport const selectIsTrustedMember = (state: RootState) =>\n state.member?.isTrustedMember;\n","import StorageService from 'tradera/services/storage-service';\nimport { STORAGE_KEYS } from 'tradera/constants/storage';\nimport type { RecentSearch } from 'tradera/state/personalisation/reducer';\n\nconst recentSearchesService = new StorageService(STORAGE_KEYS.SEARCH_RECENT);\nconst recentBrandAttributesService = new StorageService(\n STORAGE_KEYS.RECENT_BRAND_ATTRIBUTES\n);\n\ntype RecentSearchFromLocalStorage = Omit;\n\ntype LegacyRecentSearchFromLocalStorage = number;\n\nexport const getRecentSearchesLocalStorage = (): RecentSearch[] => {\n const recentSearches = recentSearchesService\n .fetch<\n RecentSearchFromLocalStorage | LegacyRecentSearchFromLocalStorage\n >()\n .orderByTimestamp?.();\n\n const formattedRecentSearches = recentSearches?.map((recent) => {\n return {\n text: recent.key,\n count:\n typeof recent.value === 'number'\n ? recent.value\n : recent.value?.count,\n queryParams:\n typeof recent.value === 'object'\n ? recent.value?.queryParams\n : { q: recent.key }\n };\n });\n\n return formattedRecentSearches ?? [];\n};\n\nexport const setRecentSearchLocalStorage = (\n searchTerm: string,\n queryParams: object,\n count: number\n) => {\n recentSearchesService.set(searchTerm, {\n count,\n queryParams\n });\n};\n\nexport const removeRecentSearchLocalStorage = (searchTerm: string) => {\n if (!searchTerm || searchTerm.length < 3) {\n return;\n }\n recentSearchesService.remove(searchTerm);\n};\n\nexport const setRecentBrandAttributesLocalStorage = (\n filter: string,\n value: string\n) => {\n recentBrandAttributesService.set(filter, value);\n};\n\nexport const getRecentBrandAttributesLocalStorage = () => {\n const recentBrandAttributes = recentBrandAttributesService\n .fetch()\n .orderByTimestamp?.()\n .find((item) => item.value && item.key);\n const recentBrand = {\n filter: recentBrandAttributes?.key || null,\n value: recentBrandAttributes?.value || null\n };\n return recentBrand.filter && recentBrand.value ? recentBrand : {};\n};\n","import { RECENT_SEARCHES } from 'tradera/constants/cookies';\nimport { MAX_RECENT_SEARCHES_STORED_IN_COOKIES } from 'tradera/state/personalisation/constants';\nimport { getRecentSearchesLocalStorage } from 'tradera/state/personalisation/helpers';\nimport type { RecentSearch } from 'tradera/state/personalisation/reducer';\nimport cookieUtil from 'tradera/utils/cookie';\nimport {\n stripItmFromQueryParameters,\n formatQueryParams,\n toQueryParameters,\n toSearchString\n} from 'tradera/utils/url';\n\nexport const parseRecentSearchesFromCookiesString = (\n cookieString: string\n): RecentSearch[] => {\n if (!cookieString) {\n return [];\n }\n\n try {\n const json = JSON.parse(cookieString);\n\n return json.map((item: string) => {\n const queryParams = stripItmFromQueryParameters(\n formatQueryParams(toQueryParameters(item))\n );\n return {\n text: queryParams.q,\n queryParams: queryParams\n };\n });\n } catch {\n return [];\n }\n};\n\nconst mapToCookie = (\n recentSearches: RecentSearch[],\n limit: number\n): string[] => {\n const mapped = recentSearches.slice(0, limit).map((item) => {\n return toSearchString(item.queryParams);\n });\n\n return mapped;\n};\n\nexport const syncLocalStorageToCookies = () => {\n const recentSearches = getRecentSearchesLocalStorage();\n const mapped = mapToCookie(\n recentSearches,\n MAX_RECENT_SEARCHES_STORED_IN_COOKIES\n );\n const cookieString = JSON.stringify(mapped);\n cookieUtil.createCookie(RECENT_SEARCHES, cookieString, 365);\n return cookieString;\n};\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport {\n getRecentBrandAttributesLocalStorage,\n getRecentSearchesLocalStorage\n} from './helpers';\nimport { parseRecentSearchesFromCookiesString } from 'tradera/state/personalisation/recent-searches-cookies';\n\nexport type RecentSearch = {\n text: string;\n count: number;\n queryParams: Record;\n};\n\ntype PersonalisationState = {\n brands: {\n items: unknown[];\n status: string;\n };\n searches: {\n items: unknown[];\n status: string;\n };\n recentSearches: RecentSearch[];\n recentSearchesFromCookie: RecentSearch[];\n recentBrandAttributes: {\n value: string;\n filter: string;\n };\n};\n\nexport const initialState: PersonalisationState = {\n brands: {\n items: [],\n status: 'NOT_FETCHED'\n },\n searches: {\n items: [],\n status: 'NOT_FETCHED'\n },\n recentSearches: [],\n recentSearchesFromCookie: [],\n recentBrandAttributes: { value: '', filter: '' }\n};\n\nconst getInitialState = (recentSearchesCookieString: string) => {\n const recentSearches = getRecentSearchesLocalStorage() || [];\n const recentSearchesFromCookie = parseRecentSearchesFromCookiesString(\n recentSearchesCookieString\n );\n const recentBrandAttributes = getRecentBrandAttributesLocalStorage();\n\n return {\n ...initialState,\n recentSearches,\n recentSearchesFromCookie,\n recentBrandAttributes\n } as PersonalisationState;\n};\n\nconst personalisationSlice = createSlice({\n name: 'personalisation',\n initialState,\n reducers: {\n initialize: (_, { payload }: PayloadAction) => {\n return getInitialState(payload);\n },\n initializeRecentSearches: (\n state,\n { payload }: PayloadAction\n ) => {\n state.recentSearches = payload;\n },\n initializeRecentBrandAttributes: (state, { payload }) => {\n state.recentBrandAttributes = payload;\n },\n setPersonalisedSearches: (state, { payload }) => {\n state.searches = payload;\n },\n setPersonalisedSearchesStatus: (state, { payload }) => {\n state.searches.status = payload;\n },\n setRecentSearches: (state, { payload }) => {\n const recentSearchIndex = state.recentSearches.findIndex(\n (search) => search.text === payload.text\n );\n\n if (recentSearchIndex > -1) {\n state.recentSearches[recentSearchIndex].count = payload.count;\n state.recentSearches[recentSearchIndex].queryParams =\n payload.queryParams;\n\n // Move the search to the top of the list\n state.recentSearches.unshift(\n state.recentSearches.splice(recentSearchIndex, 1)[0]\n );\n } else {\n state.recentSearches.unshift(payload);\n }\n },\n removeRecentSearch: (state, { payload }) => {\n state.recentSearches = state.recentSearches.filter(\n (search) => search.text !== payload\n );\n },\n setRecentSearchesFromCookie: (\n state,\n { payload }: PayloadAction\n ) => {\n state.recentSearchesFromCookie =\n parseRecentSearchesFromCookiesString(payload);\n },\n setRecentBrandAttributes: (state, { payload }) => {\n state.recentBrandAttributes = payload;\n }\n }\n});\n\nexport const {\n initialize,\n initializeRecentSearches,\n initializeRecentBrandAttributes,\n setPersonalisedSearches,\n setPersonalisedSearchesStatus,\n setRecentSearches,\n removeRecentSearch,\n setRecentSearchesFromCookie,\n setRecentBrandAttributes\n} = personalisationSlice.actions;\n\nexport const reducer = personalisationSlice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\n\n/**\n * HOW IT WORKS\n *\n * urban airship has something called channels. A tradera member subscribes to a channel to get push notifications.\n * each channel has tags that indicate what kind of push notifications the member wants to receive. In the case of the wish list\n * reminder that particular setting subscribes the user to 2 different notifications: reminder 15 minutes before auction ends\n * and reminder 3 minutes before the auction ends. In order to be able to have 1 push notification setting that subscribes\n * to multiple push notifications at tradera we call these tag groups.\n *\n *\n * Urban airship docs:\n * https://docs.airship.com/reference/libraries/web-notify-sdk/latest/index.html\n *\n * web_version_2:\n * Version 1 of push notifications was just targetted at wish list reminders, 3 min and 15 min. When this release was done\n * the code did subscribe the user to all notifications even though the user only wanted to signup for wish list reminders.\n * Since the app push notifier only sent wishlist reminders for web push it was not a problem that the user was subscribed to all\n * kinds of notifications. In the next release when tradera wanted to offer all sorts of push notifications but wanted the users\n * to on their own sign up then we had to update all the current subscriptions. Since this is not possible via the urban airship\n * to update channels via the REST API and then see the updated reflected in the Web SDK we had to introduce the tag web_version_2\n * that indicates if the user has updated their push notification settings.\n *\n * opt-in dialog sample usage:\n * import uiActions from 'tradera/state/ui/actions';\n * import { MODAL_TYPES } from 'tradera/constants/push-notifications';\n *\n * uiActions.openNotificationOptinModalAction(\n * MODAL_TYPES.wishlistReminders\n * )\n *\n */\n\nimport { createSlice } from '@reduxjs/toolkit';\nimport { logger } from 'packages/logger';\nimport {\n CHANNEL_TAG_GROUPS,\n MODAL_TYPES\n} from 'tradera/state/push-notifications/constants';\nimport { localStore } from 'tradera/utils/storage';\nimport { STORAGE_KEYS } from 'tradera/constants/storage';\nimport {\n getUrbanSdk,\n getTagGroupsFromUrbanAirship,\n isPushEnabled\n} from './helpers';\n\nconst pushNotificationsSlice = createSlice({\n name: 'pushNotifications',\n initialState: {\n enabled: false,\n initDone: false,\n pushSupported: false,\n optedIn: false,\n tagGroups: {\n wishlistReminders: false,\n buyingListingOutbid: false,\n buyingListingWon: false,\n sellingListingFirstBid: false,\n sellingListingAllBids: false,\n sellingListingSold: false,\n sellingPaymentReceived: false\n },\n shownModals: {\n [MODAL_TYPES.wishlistReminders]: false,\n [MODAL_TYPES.default]: false,\n [MODAL_TYPES.selling]: false\n }\n },\n reducers: {\n setInitDone(state) {\n state.initDone = true;\n },\n setPushSupported(state, actions) {\n state.pushSupported = actions.payload;\n if (!state.pushSupported) {\n state.optedIn = false;\n }\n },\n setOptedInValue(state, action) {\n state.optedIn = action.payload;\n },\n setTagGroupsValue(state, action) {\n const tagGroups = action.payload;\n state.tagGroups = { ...state.tagGroups, ...tagGroups };\n },\n setShownModalTrue(state, action) {\n const modalType = action.payload;\n state.shownModals[modalType] = true;\n localStore.setItem(\n STORAGE_KEYS.WEB_PUSH_SHOWN_MODALS,\n state.shownModals\n );\n },\n setAllShownModals(state, action) {\n const shownModals = action.payload;\n state.shownModals = shownModals;\n localStore.setItem(\n STORAGE_KEYS.WEB_PUSH_SHOWN_MODALS,\n state.shownModals\n );\n },\n setEnabled(state, action) {\n const enabled = action.payload;\n state.enabled = enabled;\n }\n }\n});\n\nconst actions = pushNotificationsSlice.actions;\nexport const { setShownModalTrue } = actions;\nexport default pushNotificationsSlice.reducer;\n\n/**\n * this should be called as soon as the store is mounted\n */\nexport const init = () => async (dispatch, getState) => {\n let sdk = null;\n try {\n sdk = await getUrbanSdk();\n } catch (error) {\n // not able to init sdk\n }\n dispatch(\n actions.setPushSupported(\n sdk !== null && sdk.canRegister && sdk.isSupported\n )\n );\n\n if (sdk !== null && sdk.channel !== null) {\n dispatch(actions.setOptedInValue(sdk.channel.optedIn));\n\n // has this user been upgraded to version 2?\n if (!sdk.channel.tags.has('web_version_2')) {\n await sdk.channel.tags.set([\n 'wishlist_reminder_3_min_optin',\n 'wishlist_reminder_15_min_optin',\n 'web_version_2'\n ]);\n }\n const tagGroups = await getTagGroupsFromUrbanAirship();\n dispatch(actions.setTagGroupsValue(tagGroups));\n }\n dispatch(actions.setEnabled(sdk !== null && isPushEnabled(getState)));\n\n // load modal shown settings from local store\n const shownModals = localStore.getItem(STORAGE_KEYS.WEB_PUSH_SHOWN_MODALS);\n if (shownModals !== null) {\n dispatch(actions.setAllShownModals(shownModals));\n }\n dispatch(actions.setInitDone());\n};\n\nexport const optIn = () => async (dispatch, getState) => {\n try {\n dispatch(actions.setOptedInValue(true));\n const memberId = getState().member.memberId;\n const sdk = await getUrbanSdk();\n const channel = await sdk.register();\n await channel.namedUser.set(memberId.toString());\n return channel;\n } catch (error) {\n dispatch(actions.setOptedInValue(false));\n return null;\n }\n};\n\nexport const optOut = () => async (dispatch) => {\n try {\n dispatch(actions.setOptedInValue(false));\n const sdk = await getUrbanSdk();\n if (sdk !== null && sdk.channel !== null) {\n await sdk.channel.optOut();\n }\n } catch (error) {\n dispatch(actions.setOptedInValue(true));\n return null;\n }\n};\n\nconst saveTagsToUrbanAirshipAndUpdateState = async (\n channel,\n tagGroups,\n tagGroupValue,\n dispatch,\n getState\n) => {\n // check what tag groups to set and not set\n const tagGroupsToSet = { ...getState().pushNotifications.tagGroups };\n for (const t of tagGroups) {\n tagGroupsToSet[t] = tagGroupValue;\n }\n\n // get the actual tags that we want to get push notifications for and\n // register these tags in urban airship\n let channelTags = ['web_version_2'];\n for (const [group, enabled] of Object.entries(tagGroupsToSet)) {\n if (enabled) {\n channelTags = [...channelTags, ...CHANNEL_TAG_GROUPS[group]];\n }\n }\n\n dispatch(actions.setTagGroupsValue(tagGroupsToSet));\n await channel.tags.set(channelTags);\n};\n\nexport const addTagGroups = (tagGroupsToAdd) => async (dispatch, getState) => {\n try {\n // no sdk? then do nothing\n const sdk = await getUrbanSdk();\n if (sdk === null) {\n return;\n }\n\n let channel = sdk.channel;\n if (channel === null) {\n channel = await dispatch(optIn());\n if (channel === null) {\n dispatch(actions.setPushSupported(false));\n // seems user clicked on block notifications in the browser, abort\n return;\n }\n }\n\n saveTagsToUrbanAirshipAndUpdateState(\n channel,\n tagGroupsToAdd,\n true,\n dispatch,\n getState\n );\n } catch (error) {\n logger(error);\n }\n};\n\nexport const removeTagGroups =\n (tagGroupsToRemove) => async (dispatch, getState) => {\n try {\n // no sdk and no subscription? then do nothing\n const sdk = await getUrbanSdk();\n if (sdk === null || sdk.channel === null) {\n return;\n }\n saveTagsToUrbanAirshipAndUpdateState(\n sdk.channel,\n tagGroupsToRemove,\n false,\n dispatch,\n getState\n );\n } catch (error) {\n logger(error);\n }\n };\n","import qs from 'qs';\nimport type {\n CartRequest,\n CartSummaryApiResponse\n} from 'tradera/state/services/types/webapi-shopping-generated';\nimport { isomorphicWebApiBaseQuery } from './utils/webapi-base-query';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { isServer } from 'tradera/utils/nextjs';\n\nexport const tagTypes = { CartSummary: 'CartSummary' } as const;\n\n/**\n * Creates a query params object for RTK Query.\n * The query parameters for RTK Query is used as key for caching hence\n * must always be the same for the same query on server and client.\n */\nexport const getCartSummaryParams = (cartId: string): CartRequest => {\n return { cartId };\n};\n\nexport const cartApi = createApi({\n reducerPath: 'cartApi',\n baseQuery: isomorphicWebApiBaseQuery,\n tagTypes: Object.values(tagTypes),\n endpoints: (builder) => ({\n getCartSummary: builder.query({\n providesTags: [tagTypes.CartSummary],\n query: ({ cartId }) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/shopping/cart?${qs.stringify({ cartId })}`;\n }\n })\n })\n});\n\nexport const { useGetCartSummaryQuery, endpoints, util } = cartApi;\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { storeSavedSearch } from './helpers/saved-searches-storage';\nimport qs from 'qs';\nimport type {\n BlueshiftRecommendations4ApiResponse,\n GetFavouriteSellersAndItems2ApiResponse,\n ExecuteSavedSearchApiResponse,\n ExecuteSavedSearchForCurrentUserApiRequest,\n GetSavedSearchesApiResponse,\n FavouritesellersAndItems2Request,\n RecommendationsV4Request,\n ItemsByIdsApiResponse,\n ItemsItemsByIdsRequest,\n IndependentSearchApiRequest,\n IndependentSearchApiResponse,\n CategoryPageApiRequest,\n CategoryPageApiResponse,\n BrandSuggestionsApiResponse,\n IdeasApiResponse,\n TrendingSearchesApiResponse,\n TrendingSearchViewModel,\n CausePageApiRequest,\n CausePageApiResponse,\n StartPageSellersOfInterestRequest,\n SellersOfInterestApiResponse,\n StartPageIdeasRequest,\n StartPageTrendingSearchesRequest,\n InstagramFeedApiResponse,\n InstagramFeedApiRequest\n} from './types/webapi-discover-generated';\nimport { SearchSortOrderApiDto } from './types/webapi-discover-generated';\nimport { isServer } from 'tradera/utils/nextjs';\nimport { isomorphicBaseQueryForWishListableItems } from './utils/webapi-base-query';\n\nexport type RecommendationsQueryParams = {\n slot: string;\n userLanguage: string;\n automaticTranslationPreferred: boolean;\n shippingCountryCode: string;\n maxResults: number;\n pageNumber: number;\n};\n\nexport type SuggestedRecommendationsQueryParams = {\n slot: string;\n userLanguage: string;\n automaticTranslationPreferred: boolean;\n shippingCountryCode: string;\n maxResults?: number;\n pageNumber?: number;\n};\n\n/**\n * Creates a query params object for RTK Query.\n * The query parameters for RTK Query is used as key for caching hence\n * must always be the same for the same query on server and client.\n */\nexport const getRecommendationsQueryParams = ({\n slot,\n userLanguage,\n automaticTranslationPreferred,\n shippingCountryCode,\n maxResults = 36,\n pageNumber = 1\n}: SuggestedRecommendationsQueryParams): RecommendationsQueryParams => ({\n slot,\n maxResults,\n userLanguage: userLanguage.toLowerCase(),\n automaticTranslationPreferred,\n shippingCountryCode: shippingCountryCode.toUpperCase(),\n pageNumber\n});\n\ntype FavouriteSellersQueryParams = {\n shippingCountryCode: string;\n userLanguage: string;\n automaticTranslationPreferred: boolean;\n};\n\nexport type LastChanceQueryParams = {\n automaticTranslationPreferred: boolean;\n itemCount: number;\n shippingCountryCode: string;\n userLanguage: string;\n};\n\n/**\n * Creates a query params object for RTK Query.\n * The query parameters for RTK Query is used as key for caching hence\n * must always be the same for the same query on server and client.\n */\nexport const getFavouriteSellersQueryParams = ({\n shippingCountryCode,\n userLanguage,\n automaticTranslationPreferred\n}: FavouriteSellersQueryParams): FavouriteSellersQueryParams => ({\n shippingCountryCode: shippingCountryCode.toUpperCase(),\n userLanguage: userLanguage.toLowerCase(),\n automaticTranslationPreferred\n});\n\n/**\n * Creates a query params object for RTK Query.\n * The query parameters for RTK Query is used as key for caching hence\n * must always be the same for the same query on server and client.\n */\nexport const getInstagramQueryParams = () => ({});\n\n/**\n * Creates a query params object for RTK Query.\n * The query parameters for RTK Query is used as key for caching hence\n * must always be the same for the same query on server and client.\n */\nexport const getLastSearchQueryParams = (\n queryParams: Record | undefined\n) => {\n const modifiedParams = {\n ...queryParams,\n // We always want to sort on newest added to get a more \"alive\" feeling on the start page.\n // And it would be confusing for the user if they clicked the link to get to all search\n // results if they didn't see the same items on top as they did on the start page.\n sortBy: SearchSortOrderApiDto.AddedOn\n };\n return modifiedParams;\n};\n\nexport const getRecentlyViewedQueryParams = (\n languageCode: string,\n automaticTranslationPreferred: boolean,\n itemIds: number[]\n) => ({\n searchLanguageCodeIso2: languageCode,\n automaticTranslationPreferred,\n itemIds\n});\n\nexport const discoverApi = createApi({\n reducerPath: 'discoveryApi',\n baseQuery: isomorphicBaseQueryForWishListableItems,\n endpoints: (builder) => ({\n getBrandSuggestions: builder.query<\n BrandSuggestionsApiResponse,\n unknown\n >({\n query: () => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/web/start-page/brand-suggestions`;\n },\n extraOptions: {\n getWishListableItems: () => null\n }\n }),\n getFavouriteSellers: builder.query<\n GetFavouriteSellersAndItems2ApiResponse,\n FavouritesellersAndItems2Request\n >({\n query: ({\n shippingCountryCode,\n userLanguage,\n automaticTranslationPreferred,\n maxItemsPerFavouriteSeller = 3,\n maxItems = 20,\n maxFavouriteSellers = 20\n }) => {\n const query = qs.stringify({\n shippingCountryCode,\n userLanguage,\n automaticTranslationPreferred,\n maxItemsPerFavouriteSeller,\n maxItems,\n maxFavouriteSellers\n });\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/favouritesellers-and-items2?${query}`;\n },\n extraOptions: {\n getWishListableItems: () => null\n }\n }),\n getSellersOfInterest: builder.query<\n SellersOfInterestApiResponse,\n StartPageSellersOfInterestRequest\n >({\n query: ({ shippingCountryCode, maxSellers = 20 }) => {\n const query = qs.stringify({\n shippingCountryCode,\n maxSellers\n });\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/web/start-page/sellers-of-interest?${query}`;\n },\n extraOptions: {\n getWishListableItems: () => null\n }\n }),\n getIdeas: builder.query({\n query: ({ languageCodeIso2 }) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/web/start-page/ideas?languageCodeIso2=${languageCodeIso2}`;\n },\n extraOptions: {\n getWishListableItems: () => null\n }\n }),\n getInstagramFeed: builder.query<\n InstagramFeedApiResponse,\n InstagramFeedApiRequest\n >({\n query: () => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/web/start-page/instagram-feed`;\n },\n extraOptions: {\n getWishListableItems: () => null\n }\n }),\n getTrendingSearches: builder.query<\n TrendingSearchViewModel[],\n StartPageTrendingSearchesRequest\n >({\n query: ({ languageCodeIso2 }) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/web/start-page/trending-searches?languageCodeIso2=${languageCodeIso2}`;\n },\n extraOptions: {\n getWishListableItems: () => null\n },\n transformResponse: (response: TrendingSearchesApiResponse) => {\n return response.searches || [];\n }\n }),\n getSavedSearches: builder.query({\n query: () => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/savedsearches`;\n },\n extraOptions: {\n getWishListableItems: () => null\n }\n }),\n getRecommendations: builder.query<\n BlueshiftRecommendations4ApiResponse,\n RecommendationsV4Request\n >({\n query: ({\n slot,\n shippingCountryCode,\n userLanguage,\n automaticTranslationPreferred,\n maxResults,\n pageNumber\n }: RecommendationsQueryParams) => {\n const query = qs.stringify({\n slot,\n pageNumber,\n shippingCountryCode,\n userLanguage,\n automaticTranslationPreferred,\n maxResults\n });\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/discover/recommendations-v4?${query}`;\n },\n extraOptions: {\n getWishListableItems: (\n response: BlueshiftRecommendations4ApiResponse\n ) => response.items\n }\n }),\n getIndependentSearchResult: builder.query<\n IndependentSearchApiResponse,\n IndependentSearchApiRequest\n >({\n query: (parameters) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n\n return {\n url: `${baseUrl}/discover/web/independent-search`,\n method: 'POST',\n body: parameters\n };\n },\n extraOptions: {\n getWishListableItems: (\n response: IndependentSearchApiResponse\n ) => response.items\n }\n }),\n\n getCategoryResult: builder.query<\n CategoryPageApiResponse,\n CategoryPageApiRequest\n >({\n query: (parameters) => {\n return {\n url: '/api/webapi/discover/web/category-page',\n method: 'POST',\n body: parameters\n };\n },\n extraOptions: {\n getWishListableItems: (response: CategoryPageApiResponse) =>\n response.items\n }\n }),\n getSavedSearchResults: builder.query<\n ExecuteSavedSearchApiResponse,\n ExecuteSavedSearchForCurrentUserApiRequest\n >({\n query: (parameters) => {\n return {\n url: '/api/webapi/discover/savedsearches/search-v2',\n method: 'POST',\n body: parameters\n };\n },\n extraOptions: {\n //response.response?.result?.items are of type SearchResultItem2ApiDto which does not currently have the \"inWishList\" property\n getWishListableItems: () => null\n },\n transformResponse: (\n response: ExecuteSavedSearchApiResponse,\n meta,\n arg\n ) => {\n storeSavedSearch(arg.id, {\n totalItems: response.response?.result?.itemsMatched\n });\n return response;\n }\n }),\n getItemsByIds: builder.query<\n ItemsByIdsApiResponse,\n ItemsItemsByIdsRequest\n >({\n query: (params) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n\n const query = qs.stringify(params);\n return `${baseUrl}/discover/web/items/items-by-ids?${query}`;\n },\n extraOptions: {\n getWishListableItems: (response: ItemsByIdsApiResponse) =>\n response.items\n }\n }),\n getCausePage: builder.query({\n query: (params) => {\n return {\n url: '/api/webapi/discover/web/custom-result-pages/cause-page',\n method: 'POST',\n body: params\n };\n },\n extraOptions: {\n getWishListableItems: (response: ItemsByIdsApiResponse) =>\n response.items\n }\n })\n })\n});\n\n// KATS: break this up into more files, do not append more endpoints to this file,\n// we have decided that it's an anti-pattern to have a single file with all endpoints.\n// https://traderasweden.slack.com/archives/C01BUB6G7UJ/p1699018076088839?thread_ts=1698937051.165139&cid=C01BUB6G7UJ\nexport const {\n useGetBrandSuggestionsQuery,\n useGetIdeasQuery,\n useGetSellersOfInterestQuery,\n useGetInstagramFeedQuery,\n useGetIndependentSearchResultQuery,\n useGetCategoryResultQuery,\n useGetSavedSearchesQuery,\n useGetSavedSearchResultsQuery,\n useGetRecommendationsQuery,\n useGetFavouriteSellersQuery,\n useGetTrendingSearchesQuery,\n useGetItemsByIdsQuery,\n useGetCausePageQuery,\n endpoints\n} = discoverApi;\n\nexport const { updateQueryData } = discoverApi.util;\n","import StorageService from 'tradera/services/storage-service';\nimport { STORAGE_KEYS } from 'tradera/constants/storage';\n\nconst storageService = new StorageService(STORAGE_KEYS.SAVED_SEARCHES);\n\nexport const getSavedSearch = (id) => storageService.get(id);\n\nexport const storeSavedSearch = (id, data) => storageService.set(id, data);\n\nexport const removeSavedSearch = (id) => storageService.remove(id);\n","import qs from 'qs';\nimport type {\n GetKycPendingActionsApiResponse,\n QuestionnaireRequest,\n GetKycQuestionnairePageDefinitionApiResponse,\n GetMemberVerificationStatusApiResponse,\n InitializeQuestionnaireApiRequest,\n InitializeQuestionnaireApiResponse,\n CompleteQuestionnaireApiResponse,\n CompleteQuestionnaireApiRequest,\n GetMemberCompanyMoneyTransferLicenseStatusApiResponse,\n SetMakeAnOfferMemberEnabledApiResponse,\n SetMakeAnOfferMemberEnabledApiRequest,\n SetMessagingSilentApiRequest,\n SetMessagingSilentApiResponse,\n GetMessagingSilentApiResponse,\n GetMemberEmailNotificationsSettingsViewModelApiResponse,\n SetMessagingEmailNotifyApiResponse,\n SetMessagingEmailNotifyApiRequest,\n UpdateMemberEmailSettingsApiResponse,\n UpdateMemberEmailSettingsApiRequest,\n GetMemberCompanyDac7StatusApiResponse,\n UpdateMemberVatNumberApiRequest,\n UpdateMemberVatNumberApiResponse,\n GetMemberHasTaxIdentificationNumberApiResponse,\n UpdateMemberTaxIdentificationNumberApiRequest,\n UpdateMemberTaxIdentificationNumberApiResponse,\n GetMessagingConfigurationApiResponse,\n GetMemberShouldCollectTaxIdentificationNumberApiResponse,\n GetMagicalSyiEnabledApiResponse,\n GetMagicalSyiEnabledApiRequest,\n GetMemberGeoDataApiResponse\n} from './types/webapi-member-generated';\nimport { MessagingEmailNotification } from './types/webapi-member-generated';\nimport { webApi } from './webapi-api';\n\nexport const memberApi = webApi.injectEndpoints({\n endpoints: (builder) => ({\n getPendingKycActions: builder.query<\n GetKycPendingActionsApiResponse,\n void\n >({\n query: () => {\n return {\n url: '/api/webapi/member/kyc/pending-actions',\n method: 'GET'\n };\n }\n }),\n getQuestionnaire: builder.query<\n GetKycQuestionnairePageDefinitionApiResponse,\n QuestionnaireRequest\n >({\n query: (params) =>\n `/api/webapi/member/kyc/questionnaire?${qs.stringify(params)}`\n }),\n initializeQuestionnaire: builder.mutation<\n InitializeQuestionnaireApiResponse,\n InitializeQuestionnaireApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/kyc/initialize-questionnaire',\n method: 'POST',\n body: params\n };\n }\n }),\n completeQuestionnaire: builder.mutation<\n CompleteQuestionnaireApiResponse,\n CompleteQuestionnaireApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/kyc/complete-questionnaire',\n method: 'POST',\n body: params\n };\n }\n }),\n getVerificationStatus: builder.query<\n GetMemberVerificationStatusApiResponse,\n void\n >({\n query: () => '/api/webapi/member/verification-status'\n }),\n setMakeAnOfferEnabled: builder.mutation<\n SetMakeAnOfferMemberEnabledApiResponse,\n SetMakeAnOfferMemberEnabledApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/make-an-offer-enabled',\n method: 'PUT',\n body: params\n };\n }\n }),\n getSilentMessagingEnabled: builder.query<\n GetMessagingSilentApiResponse,\n void\n >({\n query: () => '/api/webapi/member/messaging/silent'\n }),\n setSilentMessagingEnabled: builder.mutation<\n SetMessagingSilentApiResponse,\n SetMessagingSilentApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/messaging/silent',\n method: 'PUT',\n body: params\n };\n },\n onQueryStarted(request, { dispatch }) {\n dispatch(\n memberApi.util.updateQueryData(\n 'getMemberEmailNotificationsSettingsViewModel',\n undefined,\n (draft) => {\n Object.assign(draft, {\n silentMessaging: {\n ...draft.silentMessaging,\n enabled: request.enabled\n }\n });\n }\n )\n );\n },\n invalidatesTags: ['memberemailnotificationssettingsviewmodel']\n }),\n getCompanyMoneyTransferLicenseStatus: builder.query<\n GetMemberCompanyMoneyTransferLicenseStatusApiResponse,\n void\n >({\n query: () =>\n '/api/webapi/member/company-money-transfer-license-status'\n }),\n getMemberEmailNotificationsSettingsViewModel: builder.query<\n GetMemberEmailNotificationsSettingsViewModelApiResponse,\n void\n >({\n query: () =>\n '/api/webapi/member/memberemailnotificationssettingsviewmodel',\n providesTags: ['memberemailnotificationssettingsviewmodel']\n }),\n setMessagingEmailNotify: builder.mutation<\n SetMessagingEmailNotifyApiResponse,\n SetMessagingEmailNotifyApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/messaging/emailnotify',\n method: 'PUT',\n body: params\n };\n },\n onQueryStarted(request, { dispatch }) {\n dispatch(\n memberApi.util.updateQueryData(\n 'getMemberEmailNotificationsSettingsViewModel',\n undefined,\n (draft) => {\n Object.assign(draft, {\n messaging: {\n ...draft.messaging,\n emailNotifyAll:\n request.emailNotify ===\n MessagingEmailNotification.All\n }\n });\n }\n )\n );\n },\n invalidatesTags: ['memberemailnotificationssettingsviewmodel']\n }),\n getMemberHasTaxIdentificationNumber: builder.query<\n GetMemberHasTaxIdentificationNumberApiResponse,\n void\n >({\n query: () => '/api/webapi/member/has-tin'\n }),\n getMemberShouldCollectTaxIdentificationNumber: builder.query<\n GetMemberShouldCollectTaxIdentificationNumberApiResponse,\n void\n >({\n query: () => '/api/webapi/member/should-collect-tin'\n }),\n setMemberTaxIdentificationNumber: builder.mutation<\n UpdateMemberTaxIdentificationNumberApiResponse,\n UpdateMemberTaxIdentificationNumberApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/tin',\n method: 'PUT',\n body: params\n };\n }\n }),\n updateMemberEmailSettings: builder.mutation<\n UpdateMemberEmailSettingsApiResponse,\n UpdateMemberEmailSettingsApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/email-settings',\n method: 'PUT',\n body: params\n };\n }\n }),\n getCompanyDac7Status: builder.query<\n GetMemberCompanyDac7StatusApiResponse,\n void\n >({\n query: () => '/api/webapi/member/company-dac7-status'\n }),\n setMemberVatNumber: builder.mutation<\n UpdateMemberVatNumberApiResponse,\n UpdateMemberVatNumberApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/vat-number',\n method: 'PUT',\n body: params\n };\n }\n }),\n setMagicalSyi: builder.mutation<\n GetMagicalSyiEnabledApiResponse,\n GetMagicalSyiEnabledApiRequest\n >({\n query: (params) => {\n return {\n url: '/api/webapi/member/seller-magical-syi-enabled',\n method: 'PUT',\n body: params\n };\n }\n }),\n getMagicalSyiEnabled: builder.query<\n GetMagicalSyiEnabledApiResponse,\n void\n >({\n query: () => '/api/webapi/member/seller-magical-syi-enabled'\n }),\n getMessagingConfiguration: builder.query<\n GetMessagingConfigurationApiResponse,\n void\n >({\n query: () => '/api/webapi/member/messaging/messaging-configuration'\n }),\n getMemberGeoData: builder.query({\n query: () => '/api/webapi/member/geo'\n })\n })\n});\n\nexport const {\n useGetPendingKycActionsQuery,\n useGetQuestionnaireQuery,\n useInitializeQuestionnaireMutation,\n useCompleteQuestionnaireMutation,\n useGetVerificationStatusQuery,\n useSetMakeAnOfferEnabledMutation,\n useGetSilentMessagingEnabledQuery,\n useSetSilentMessagingEnabledMutation,\n useGetCompanyMoneyTransferLicenseStatusQuery,\n useGetMemberEmailNotificationsSettingsViewModelQuery,\n useSetMessagingEmailNotifyMutation,\n useUpdateMemberEmailSettingsMutation,\n useGetCompanyDac7StatusQuery,\n useSetMemberVatNumberMutation,\n useGetMemberHasTaxIdentificationNumberQuery,\n useGetMemberShouldCollectTaxIdentificationNumberQuery,\n useSetMemberTaxIdentificationNumberMutation,\n useSetMagicalSyiMutation,\n useGetMagicalSyiEnabledQuery,\n useGetMessagingConfigurationQuery,\n useGetMemberGeoDataQuery,\n endpoints\n} = memberApi;\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport type { GetMessagingStatsApiResponse } from 'tradera/state/services/types/webapi-member-generated';\n\nexport const messagingStatsApi = createApi({\n reducerPath: 'messagingStatsApi',\n baseQuery: isomorphicWebApiBaseQuery,\n endpoints: (builder) => ({\n getMessagingStats: builder.query({\n query: () => '/api/webapi/member/messaging/stats'\n })\n })\n});\n\nexport const { useGetMessagingStatsQuery, util } = messagingStatsApi;\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport * as searchGtm from 'tradera/apps/tradera/components/discover/helpers/search-gtm';\nimport { httpClientBaseQuery } from './utils/http-client-base-query';\nimport { touchWebClient } from 'tradera/utils/http';\nimport { toSearchString } from 'tradera/utils/url';\n\nexport enum SortBy {\n Relevance = 'Relevance',\n AddedOn = 'AddedOn'\n}\n\ntype TouchwebSaveSearchRequest = {\n savedQueryName: string;\n categoryId?: number;\n};\n\ntype TouchwebSaveSearchResponse = {\n id: number;\n message?: string;\n};\n\nexport const touchwebSearchApi = createApi({\n reducerPath: 'touchwebSearchApi',\n baseQuery: httpClientBaseQuery({ client: touchWebClient }),\n endpoints: (builder) => ({\n saveSearch: builder.mutation<\n TouchwebSaveSearchResponse,\n TouchwebSaveSearchRequest\n >({\n query: (parameters) => {\n const payload = toSearchString(parameters, {\n addQueryPrefix: false\n });\n return {\n url: '/my/savedsearches/add',\n method: 'POST',\n body: payload,\n headers: {\n 'content-type': 'application/x-www-form-urlencoded'\n }\n };\n },\n async onQueryStarted() {\n searchGtm.trackAction(\n searchGtm.GA_EVENT_SAVE_SEARCH,\n 'Save POST Request'\n );\n }\n })\n })\n});\n\nexport const { useSaveSearchMutation } = touchwebSearchApi;\n","/* eslint-disable */\n/* tslint:disable */\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nexport interface ActivesummaryRequest {\n request?: MemberActiveItemsSummaryApiRequest;\n}\n\nexport interface AutoShipmentCheckoutEnabledUpdateParams {\n request?: SetAutoShipmentCheckoutMemberEnabledApiRequest;\n}\n\nexport interface BankIdPasswordRecoveryCancelCreateParams {\n request?: BankIdPasswordRecoveryCancelApiRequest;\n}\n\nexport interface BankIdProgressWithIdRequest {\n bankIdOrderRef?: string;\n /** @format int32 */\n memberid?: number;\n}\n\nexport interface BankIdRecoveryWithIdCreateParams {\n request?: BankIdBeginWithIdApiRequest;\n}\n\nexport interface BankaccountCreateParams {\n request?: SetBankAccountPayoutTransferMethodApiRequest;\n}\n\nexport interface BankaccountDeleteParams {\n request?: RemoveBankAccountPayoutTransferMethodApiRequest;\n}\n\nexport interface BankidVerificationRequest {\n /** @format int32 */\n fixedPrice?: number;\n}\n\nexport interface BlockedMembersCreateParams {\n request?: BlockMemberApiRequest;\n}\n\nexport interface BlockedMembersDeleteParams {\n request?: UnblockMemberApiRequest;\n}\n\nexport interface BlockedMembersRequest {\n request?: GetBlockedMembersApiRequest;\n}\n\nexport interface BlueshiftCredentialsRequest {\n request?: GetBlueshiftEventApiCredentialsApiRequest;\n}\n\nexport interface BraintreeOnboardingDetailsRequest {\n request?: GetBraintreeOnboardingDetailsApiRequest;\n}\n\nexport interface BuyerCreateParams {\n request?: SaveFeedbackAsBuyerApiRequest;\n}\n\nexport interface BuyerRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface BuyerTransactionVisibilityCreateParams {\n request?: SetBuyerTransactionVisibilityApiRequest;\n}\n\nexport interface ChangeStatusToAppealedCreateParams {\n request?: ChangeDisputeStatusToAppealedApiRequest;\n}\n\nexport interface ChangealiasCreateParams {\n request?: ChangeAliasApiRequest;\n}\n\nexport interface ChangeemailCreateParams {\n request?: ChangeEmailWithIdApiRequest;\n memberId: string;\n}\n\nexport interface ChangepasswordCreate2Params {\n request?: ChangePasswordWithIdApiRequest;\n memberId: string;\n}\n\nexport interface ChangepasswordCreateParams {\n request?: ChangePasswordApiRequest;\n}\n\nexport interface CombinedShippingDaysUpdateParams {\n request?: SetCombinedShippingMemberDaysApiRequest;\n}\n\nexport interface CombinedShippingEnabledUpdateParams {\n request?: SetCombinedShippingMemberEnabledApiRequest;\n}\n\nexport interface CommentCreateParams {\n request?: CommentFeedbackApiRequest;\n}\n\nexport interface CommitonpaymentEnabledUpdateParams {\n request?: SetCommitOnPaymentMemberEnabledApiRequest;\n}\n\nexport interface CompanyContactSsnRequest {\n request?: MemberHasCompanyContactSsnApiRequest;\n}\n\nexport interface CompanyContactSsnUpdateParams {\n request?: UpdateMemberCompanyContactSsnApiRequest;\n}\n\nexport interface CompanyDac7StatusRequest {\n request?: GetMemberCompanyDac7StatusApiRequest;\n}\n\nexport interface CompanyMoneyTransferLicenseStatusRequest {\n request?: GetMemberCompanyMoneyTransferLicenseStatusApiRequest;\n}\n\nexport interface CompleteQuestionnaireCreateParams {\n request?: CompleteQuestionnaireApiRequest;\n}\n\nexport interface CompletehyperwallettransfermethodCreateParams {\n request?: CompleteHyperwalletTransferMethodApiRequest;\n}\n\nexport interface ConfirmCreateParams {\n request?: ConfirmMutualFeedbackRemovalApiRequest;\n}\n\nexport interface ConfirmationValidationRequest {\n /** @format int32 */\n id?: number;\n}\n\nexport interface ConsentCreateParams {\n request?: SetMemberConsentApiRequest;\n}\n\nexport interface ContactSellerCreateParams {\n request?: ContactSellerApiRequest;\n}\n\nexport interface CreateCreateParams {\n request?: CreateFeedbackRemovalApiRequest;\n}\n\nexport interface CreateVerificationCodeCreateParams {\n request?: CreateVerificationCodeApiRequest;\n}\n\nexport interface CreateVerificationCodeWithMemberIdCreateParams {\n request?: CreateVerificationCodeWithMemberIdApiRequest;\n}\n\nexport interface CreationValidationRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface CurrencyUpdateParams {\n request?: UpdateMemberCurrencyApiRequest;\n}\n\nexport interface DeactivateaccountCreateParams {\n request?: DeactivateMemberAccountPermanentlyApiRequest;\n}\n\nexport interface DeactivateaccountRequest {\n request?: GetAccountDeactivationSettingsApiRequest;\n}\n\nexport interface DeactivateaccounttemporarilyCreateParams {\n request?: DeactivateMemberAccountTemporarilyApiRequest;\n}\n\nexport interface DenyCreateParams {\n request?: DenyMutualFeedbackRemovalApiRequest;\n}\n\nexport interface DetailsRequest {\n request?: MemberContactDetailsApiRequest;\n}\n\nexport interface DetailsUpdateParams {\n request?: UpdateMemberContactDetailsApiRequest;\n}\n\nexport interface DisputeCreateParams {\n request?: CreateDisputeApiRequest;\n}\n\nexport interface DisputeRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface DisputeMessageCreateParams {\n request?: AddDisputeMessageApiRequest;\n}\n\nexport interface DisputesRequest {\n transactionIds?: number[];\n}\n\nexport interface EmailSettingsRequest {\n request?: MemberEmailSettingsApiRequest;\n}\n\nexport interface EmailSettingsUpdateParams {\n request?: UpdateMemberEmailSettingsApiRequest;\n}\n\nexport interface EmailnotifyRequest {\n /** @format int32 */\n memberId?: number;\n}\n\nexport interface EmailnotifyUpdateParams {\n request?: SetMessagingEmailNotifyApiRequest;\n}\n\nexport interface EndingtodaycountRequest {\n request?: GetWishlistItemsEndingTodayCountApiRequest;\n}\n\nexport interface FeatureSummaryByIdsRequest {\n itemIds?: number[];\n}\n\nexport interface FeedbackRequest {\n /** @format int32 */\n memberId?: number;\n feedbackRoleFilter?: FeedbackRoleFilter;\n feedbackRatingFilter?: FeedbackRatingFilter;\n /** @format int32 */\n skip?: number;\n /** @format int32 */\n take?: number;\n}\n\nexport interface FeedbackRemovalDetailsRequest {\n /** @format int32 */\n feedbackRemovalRequestId?: number;\n}\n\nexport interface FeedbackRemovalsCreateParams {\n request?: FeedbackRemovalsApiRequest;\n}\n\nexport interface FeedbacksRequest {\n /** @format int32 */\n transactionId?: number;\n showDeleted?: boolean;\n}\n\nexport interface FindRequest {\n query?: string;\n /** @format int32 */\n page?: number;\n /** @format int32 */\n pageSize?: number;\n}\n\nexport interface GetGeoParams {\n request?: GetMemberGeoDataApiRequest;\n}\n\nexport interface GetSsnParams {\n request?: MemberHasSsnApiRequest;\n}\n\nexport interface GetavailablecountriesforshippingRequest {\n request?: GetAvailableCountriesForShippingApiRequest;\n}\n\nexport interface GetcreditmemobyencryptedidRequest {\n encryptedId?: string;\n}\n\nexport interface GetcreditmemopdfRequest {\n /** @format int64 */\n invoiceId?: number;\n creditMemoDocumentId?: string;\n}\n\nexport interface GetcreditmemopdfbyidRequest {\n /** @format int64 */\n creditMemoId?: number;\n}\n\nexport interface GethyperwalletmemberdetailsRequest {\n request?: GetHyperwalletMemberDetailsApiRequest;\n}\n\nexport interface GetinvoicecsvRequest {\n /** @format int64 */\n invoiceId?: number;\n}\n\nexport interface GetinvoicepdfRequest {\n /** @format int64 */\n invoiceId?: number;\n}\n\nexport interface GetinvoicepdfbyencryptedidRequest {\n encryptedId?: string;\n}\n\nexport interface GetinvoicesRequest {\n /** @format int32 */\n pageIndex?: number;\n /** @format int32 */\n itemsPerPage?: number;\n}\n\nexport interface GetiscombinedshippingenabledRequest {\n request?: GetIsCombinedShippingEnabledApiRequest;\n}\n\nexport interface GetistraderapayenabledRequest {\n request?: GetIsTraderaPayEnabledApiRequest;\n}\n\nexport interface GetshippinginvoicememberRequest {\n request?: GetShippingInvoiceMemberApiRequest;\n}\n\nexport interface GettraderapayonboardingdetailsRequest {\n request?: GetTraderaPayOnboardingDetailsApiRequest;\n}\n\nexport interface GradeTransactionsRequest {\n gradeIds?: number[];\n}\n\nexport interface HasTinRequest {\n request?: GetMemberHasTaxIdentificationNumberApiRequest;\n}\n\nexport interface HyperwalletauthenticationtokenRequest {\n request?: GetHyperwalletAuthenticationTokenApiRequest;\n}\n\nexport interface HyperwallettransfermethodviewmodelRequest {\n request?: GetHyperwalletTransferMethodViewModelApiRequest;\n}\n\nexport interface ImageUploadUrlRequest {\n contentType?: string;\n}\n\nexport interface InitializeQuestionnaireCreateParams {\n request?: InitializeQuestionnaireApiRequest;\n}\n\nexport interface ItemIdsRequest {\n request?: GetWishListItemIdsApiRequest;\n}\n\nexport interface ItemShippedCreateParams {\n request?: SetItemShippedApiRequest;\n}\n\nexport interface ItemShippingBookedCreateParams {\n request?: SetItemShippingBookedApiRequest;\n}\n\nexport interface ItemVisibilityCreateParams {\n request?: SetItemVisibilityApiRequest;\n}\n\nexport interface ItemsRequest {\n /** @format int32 */\n memberId?: number;\n role?: FeedbackRoleFilter;\n rating?: FeedbackRatingFilter;\n /** @format int32 */\n skip?: number;\n /** @format int32 */\n take?: number;\n}\n\nexport interface LanguageUpdateParams {\n request?: UpdateMemberLanguageApiRequest;\n}\n\nexport interface LastnotifiedCreateParams {\n request?: SetLastNotifiedApiRequest;\n}\n\nexport interface ListingFeeRequest {\n request?: MemberListingFeeApiRequest;\n}\n\nexport interface MakeAnOfferEnabledUpdateParams {\n request?: SetMakeAnOfferMemberEnabledApiRequest;\n}\n\nexport interface MarkAsEscalatedCreateParams {\n request?: MarkDisputeAsEscalatedApiRequest;\n}\n\nexport interface MarkAsSolvedCreateParams {\n request?: MarkDisputeAsSolvedApiRequest;\n}\n\nexport interface MarkedAsPaidBySellerCreateParams {\n request?: MarkAsPaidBySellerApiRequest;\n}\n\nexport interface MatchbankCreateParams {\n request?: MatchBankApiRequest;\n}\n\nexport interface McpStrikeConfirmCreateParams {\n request?: ConfirmMutualCancelOfPurchaseStrikeApiRequest;\n}\n\nexport interface McpStrikeCreateParams {\n request?: AddMutualCancelOfPurchaseStrikeApiRequest;\n}\n\nexport interface McpStrikeRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n}\n\nexport interface MemberLocalizationRequest {\n request?: GetMemberLocalizationApiRequest;\n}\n\nexport interface MemberconsentRequest {\n request?: GetMemberConsentApiRequest;\n}\n\nexport interface MemberemailnotificationssettingsviewmodelRequest {\n request?: GetMemberEmailNotificationsSettingsViewModelApiRequest;\n}\n\nexport interface MemberprofilesettingsviewmodelRequest {\n request?: GetMemberProfileSettingsViewModelApiRequest;\n}\n\nexport interface MembersecuritysettingsviewmodelRequest {\n request?: GetMemberSecuritySettingsViewModelApiRequest;\n}\n\nexport interface MembersellersettingsviewmodelRequest {\n request?: GetMemberSellerSettingsViewModelApiRequest;\n}\n\nexport interface MessagingConfigurationRequest {\n request?: GetMessagingConfigurationApiRequest;\n}\n\nexport interface MoneyTransferLicenseAgreementRequest {\n /** @format date-time */\n asOf?: string;\n}\n\nexport interface NewDisputePageRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n itemIds?: number[];\n}\n\nexport interface NotificationsRequest {\n /** @format int32 */\n take?: number;\n /** @format int32 */\n skip?: number;\n}\n\nexport interface PagedTransactionsRequest {\n /** @format int32 */\n skip?: number;\n /** @format int32 */\n take?: number;\n}\n\nexport interface PaymentproviderDeleteParams {\n request?: RemovePayoutTransferMethodApiRequest;\n}\n\nexport interface PayoutfrequencyRequest {\n request?: GetPayoutFrequencyApiRequest;\n}\n\nexport interface PayoutfrequencyoptionsRequest {\n request?: GetPayoutFrequencyOptionsApiRequest;\n}\n\nexport interface PayoutsettingsmodalviewmodelRequest {\n tinkRedirectPath?: string;\n}\n\nexport interface PayoutsettingsviewmodelRequest {\n request?: GetPayoutSettingsViewModelApiRequest;\n}\n\nexport interface PaypalCreateParams {\n request?: SetPayPalPayoutTransferMethodApiRequest;\n}\n\nexport interface PaypalDeleteParams {\n request?: RemovePayPalPayoutTransferMethodApiRequest;\n}\n\nexport interface PendingActionsRequest {\n request?: GetKycPendingActionsApiRequest;\n}\n\nexport interface PicklistRequest {\n /** @format int32 */\n pageIndex?: number;\n /** @format int32 */\n itemsPerPage?: number;\n retrieveHidden?: boolean;\n paidStatus?: PickListFilterPaidStatus;\n shippedStatus?: PickListFilterShippedStatus;\n /** @format date-time */\n from?: string;\n /** @format date-time */\n to?: string;\n}\n\nexport interface PicklistV2Request {\n /** @format int32 */\n skip?: number;\n /** @format int32 */\n take?: number;\n retrieveHidden?: boolean;\n paidStatus?: PickListFilterPaidStatus;\n shippedStatus?: PickListFilterShippedStatus;\n /** @format date-time */\n fromDate?: string;\n /** @format date-time */\n toDate?: string;\n}\n\nexport interface PonrStrikeCreateParams {\n request?: AddPurchaseOrderNotReceivedStrikeApiRequest;\n}\n\nexport interface PonrStrikeRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n}\n\nexport interface ProfilePageRequest {\n /** @format int32 */\n memberId?: number;\n languageCodeIso2?: string;\n}\n\nexport interface PublicProfileHeroImageDeleteParams {\n request?: RemoveMemberPublicProfileHeroImageApiRequest;\n}\n\nexport interface PublicProfileHeroImageUpdateParams {\n request?: UpdateMemberPublicProfileHeroImageApiRequest;\n}\n\nexport interface PublicProfileInformationUpdateParams {\n request?: UpdateMemberPublicProfileInformationApiRequest;\n}\n\nexport interface PublicprofileRequest {\n /** @format int32 */\n memberId?: number;\n toLanguageCodeIso2?: string;\n}\n\nexport interface PurchaseRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface PurchaseorderRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n}\n\nexport interface PurchaseorderitemRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n}\n\nexport interface PutSsnParams {\n request?: UpdateMemberSsnApiRequest;\n}\n\nexport interface PutTinParams {\n request?: UpdateMemberTaxIdentificationNumberApiRequest;\n}\n\nexport interface QuestionnaireRequest {\n actionType?: string;\n languageCodeIso2?: string;\n}\n\nexport interface ReferralCodeCreateParams {\n request?: GenerateMemberReferralCodeApiRequest;\n}\n\nexport interface RemovetraderapaypayoutdestinationCreateParams {\n request?: RemoveTraderaPayPayoutDestinationApiRequest;\n}\n\nexport interface ResendverificationCreateParams {\n request?: ResendPayoutTransferMethodVerificationCodeApiRequest;\n}\n\nexport interface RestartItemsSummaryRequest {\n itemIds?: number[];\n}\n\nexport interface SelectedDescriptionLanguageUpdateParams {\n request?: UpdateMemberSelectedDescriptionLanguageApiRequest;\n}\n\nexport interface SellerAutoFeedbackRequest {\n request?: SellerAutoFeedbackApiRequest;\n}\n\nexport interface SellerAutoFeedbackUpdateParams {\n request?: SaveSellerAutoFeedbackSettingsApiRequest;\n}\n\nexport interface SellerAutoPaymentReminderRequest {\n request?: SellerAutoPaymentReminderApiRequest;\n}\n\nexport interface SellerAutoPaymentReminderUpdateParams {\n request?: SaveSellerAutoPaymentReminderSettingsApiRequest;\n}\n\nexport interface SellerCreateParams {\n request?: SaveFeedbackAsSellerApiRequest;\n}\n\nexport interface SellerRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface SellerMagicalSyiEnabledRequest {\n request?: GetMagicalSyiEnabledApiRequest;\n}\n\nexport interface SellerMagicalSyiEnabledUpdateParams {\n request?: SetMagicalSyiEnabledApiRequest;\n}\n\nexport interface SelloprofileRequest {\n request?: MemberSelloProfileApiRequest;\n}\n\nexport interface ServerStorageRequest {\n request?: MemberServerStorageListApiRequest;\n}\n\nexport interface ServerStorageUpdateParams {\n request?: MemberServerStoragePutApiRequest;\n}\n\nexport interface SessionDataRequest {\n request?: MemberSessionDataApiRequest;\n}\n\nexport interface SethyperwalletpayeeverificationassubmittedCreateParams {\n request?: SetHyperwalletPayeeVerificationAsSubmittedApiRequest;\n}\n\nexport interface SetpayoutfrequencyCreateParams {\n request?: SetPayoutFrequencyApiRequest;\n}\n\nexport interface ShippingFeeRuleFreeShippingCostLimitUpdateParams {\n request?: SetShippingFeeRuleFreeShippingCostLimitApiRequest;\n}\n\nexport interface ShippingFeeRuleShippingOptionUpdateParams {\n request?: SetShippingFeeRuleShippingOptionApiRequest;\n}\n\nexport interface ShippingFromCountryUpdateParams {\n request?: UpdateMemberShippingFromCountryApiRequest;\n}\n\nexport interface ShopDetailsRequest {\n /** @format int32 */\n memberId?: number;\n}\n\nexport interface ShopitemOrderhistoryRequest {\n /** @format int32 */\n itemId?: number;\n}\n\nexport interface ShouldCollectTinRequest {\n request?: GetMemberShouldCollectTaxIdentificationNumberApiRequest;\n}\n\nexport interface SilentRequest {\n request?: GetMessagingSilentApiRequest;\n}\n\nexport interface SilentUpdateParams {\n request?: SetMessagingSilentApiRequest;\n}\n\nexport interface SmsCheckCreateParams {\n request?: SmsCheckApiRequest;\n}\n\nexport interface SmsVerificationCreateParams {\n request?: SendVerificationSmsApiRequest;\n}\n\nexport interface SmsVerificationRequest {\n action?: string;\n}\n\nexport interface SmsVerificationWithIdCreateParams {\n request?: SendVerificationSmsWithIdApiRequest;\n}\n\nexport interface SolditemsRequest {\n soldItemStateFilter?: string;\n soldItemOrderBy?: string;\n retrieveHidden?: boolean;\n /** @format int32 */\n take?: number;\n /** @format int32 */\n skip?: number;\n}\n\nexport interface SoldsummaryRequest {\n request?: MemberSoldItemsSummaryApiRequest;\n}\n\nexport interface StatsRequest {\n request?: GetMessagingStatsApiRequest;\n}\n\nexport interface StatsThisMonthRequest {\n request?: MemberStatsThisMonthApiRequest;\n}\n\nexport interface SummaryRequest {\n /** @format int32 */\n memberId?: number;\n}\n\nexport interface SuspendedUntilRequest {\n request?: GetMemberSuspendedUntilApiRequest;\n}\n\nexport interface SwishCreateParams {\n request?: SetSwishPayoutTransferMethodApiRequest;\n}\n\nexport interface SystemMessagesRequest {\n request?: GetSystemMessagesApiRequest;\n}\n\nexport interface TinImageUploadUrlCreateParams {\n request?: CreateTaxIdentificationImageUploadUrlApiRequest;\n}\n\nexport interface TinkBankaccountsRequest {\n code?: string;\n}\n\nexport interface TinkaccountCreateParams {\n request?: SetPayoutTransferMethodUsingTinkApiRequest;\n}\n\nexport interface ResponseError {\n errorCode?: string | null;\n fieldName?: string | null;\n message?: string | null;\n}\n\nexport interface ResponseError1 {\n transactionIds?: number[];\n}\n\nexport interface ResponseError5 {\n /** @format int32 */\n skip?: number;\n /** @format int32 */\n take?: number;\n}\n\nexport interface ResponseError7 {\n request?: WebChangeEmailWithIdApiRequest;\n}\n\nexport interface ResponseStatus {\n errorCode?: string | null;\n errors?: ResponseError[] | null;\n message?: string | null;\n stackTrace?: string | null;\n}\n\nexport interface BankIdAuthenticationBeginApiResponse {\n autoStartToken?: string | null;\n bankIdOrderRef?: string | null;\n qrData?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface BankIdAuthenticationCancelApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface BankIdAuthenticationProgressApiResponse {\n isCompleted: boolean;\n progress?: string | null;\n qrData?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ItemImageUrls {\n medium?: string | null;\n normal?: string | null;\n}\n\nexport enum ItemTransactionTypeApiDto {\n Auction = 'Auction',\n Bin = 'Bin',\n Cart = 'Cart',\n PurchaseOfferOnActive = 'PurchaseOfferOnActive',\n PurchaseOfferOnEnded = 'PurchaseOfferOnEnded'\n}\n\nexport enum ItemTypeApiDto {\n Auction = 'Auction',\n AuctionBin = 'AuctionBin',\n PureBin = 'PureBin',\n ShopItem = 'ShopItem'\n}\n\nexport interface BlockMemberApiRequest {\n aliasToBlock?: string | null;\n}\n\nexport interface BlockMemberApiResponse {\n /** @format int32 */\n blockedMemberId: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface AddDisputeMessageApiRequest {\n attachments?: string[] | null;\n message?: string | null;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface AddDisputeMessageApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ChangeDisputeStatusToAppealedApiRequest {\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface ChangeDisputeStatusToAppealedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CreateDisputeApiRequest {\n message?: string | null;\n /** @format int32 */\n reason: number;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface CreateDisputeApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetDisputeApiResponse {\n dispute?: DisputeApiDto | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetDisputesApiResponse {\n disputes?: DisputeApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MarkDisputeAsEscalatedApiRequest {\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface MarkDisputeAsEscalatedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MarkDisputeAsSolvedApiRequest {\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface MarkDisputeAsSolvedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CreateDisputeImageUploadUrlApiRequest {\n contentType?: string | null;\n}\n\nexport interface CreateDisputeImageUploadUrlApiResponse {\n objectName?: string | null;\n responseStatus?: ResponseStatus | null;\n uploadUrl?: string | null;\n}\n\nexport interface DisputeV2FormData {\n comment?: string | null;\n images?: DisputeV2Image[] | null;\n itemIds?: number[] | null;\n /** @format uuid */\n purchaseOrderId: string;\n reason?: string | null;\n status?: string | null;\n suggestedSolution?: string | null;\n}\n\nexport interface DisputeV2Image {\n fileName?: string | null;\n objectName?: string | null;\n}\n\nexport interface DisputeV2ItemData {\n /** @format int32 */\n disputeId: number;\n imageUrl?: string | null;\n /** @format int32 */\n itemId: number;\n itemUrl?: string | null;\n /** @format double */\n price: number;\n title?: string | null;\n}\n\nexport interface DisputeV2MemberData {\n alias?: string | null;\n /** @format int32 */\n memberId: number;\n}\n\nexport interface DisputeV2PurchaseOrderData {\n buyerMember?: DisputeV2MemberData | null;\n /** @format double */\n buyerProtectionCost: number;\n /** @format date-time */\n createdDate: string;\n /** @format int32 */\n orderNumber: number;\n /** @format uuid */\n purchaseOrderId: string;\n sellerMember?: DisputeV2MemberData | null;\n /** @format double */\n shippingCost: number;\n /** @format double */\n totalOrderAmount: number;\n}\n\nexport interface EscalateDisputeV2ApiRequest {\n /** @format int32 */\n disputeId: number;\n}\n\nexport interface EscalateDisputeV2ApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetDisputeDataV2ApiResponse {\n /** @format date-time */\n createdDate: string;\n /** @format int32 */\n disputeId: number;\n formData?: DisputeV2FormData | null;\n items?: DisputeV2ItemData[] | null;\n purchaseOrder?: DisputeV2PurchaseOrderData | null;\n responseStatus?: ResponseStatus | null;\n /** @format date-time */\n updatedDate: string;\n}\n\nexport interface MarkDisputeAsSolvedV2ApiRequest {\n /** @format int32 */\n disputeId: number;\n}\n\nexport interface MarkDisputeAsSolvedV2ApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SaveDisputeDataV2ApiRequest {\n formData?: DisputeV2FormData | null;\n}\n\nexport interface SaveDisputeDataV2ApiResponse {\n /** @format int32 */\n disputeId: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface DisputeApiDto {\n /** @format int32 */\n buyerMemberId: number;\n isHandledByExternalPart: boolean;\n /** @format int32 */\n itemId: number;\n message?: string | null;\n messages?: DisputeMessageDto[] | null;\n /** @format int32 */\n sellerMemberId: number;\n status: DisputeStatus;\n /** @format date-time */\n timeStamp: string;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface DisputeMessageDto {\n attachments?: string[] | null;\n /** @format date-time */\n created: string;\n /** @format uuid */\n id: string;\n sentBy: MessageSentBy;\n text?: string | null;\n}\n\nexport enum DisputeStatus {\n New = 'New',\n WaitingForSeller = 'WaitingForSeller',\n TraderaIsInvestigating = 'TraderaIsInvestigating',\n ToBeClosed = 'ToBeClosed',\n WaitingForBuyer = 'WaitingForBuyer',\n BuyerWonDispute = 'BuyerWonDispute',\n SellerWonDispute = 'SellerWonDispute',\n WaitingForReturn = 'WaitingForReturn',\n Appealed = 'Appealed',\n AvslutadUnder120Kr = 'AvslutadUnder120Kr',\n NotEscalated = 'NotEscalated',\n BuyerMarkedAsSolved = 'BuyerMarkedAsSolved',\n AvailableForPickupTradera = 'AvailableForPickupTradera',\n AvailableForPickupSeller = 'AvailableForPickupSeller',\n WaitingForKlarnaOrPayPal = 'WaitingForKlarnaOrPayPal',\n TheOffice = 'TheOffice',\n Other = 'Other'\n}\n\nexport enum MessageSentBy {\n CsAgent = 'CsAgent',\n Buyer = 'Buyer',\n Seller = 'Seller'\n}\n\nexport interface ItemStrikeSubmission {\n strikeSubmitted: boolean;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface AddPurchaseOrderNotReceivedStrikeApiRequest {\n comment?: string | null;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface AddPurchaseOrderNotReceivedStrikeApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface PurchaseOrderNotReceivedStrikeApiResponse {\n items?: ItemStrikeSubmission[] | null;\n responseStatus?: ResponseStatus | null;\n strikeSubmitted: boolean;\n}\n\nexport interface AddMutualCancelOfPurchaseStrikeApiRequest {\n comment?: string | null;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface AddMutualCancelOfPurchaseStrikeApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ConfirmMutualCancelOfPurchaseStrikeApiRequest {\n approved: boolean;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface ConfirmMutualCancelOfPurchaseStrikeApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MutualCancelOfPurchaseStrikeApiResponse {\n items?: StrikeItem[] | null;\n /** @format uuid */\n purchaseOrderId: string;\n responseStatus?: ResponseStatus | null;\n strikeConfirmed: boolean;\n strikeSubmitted: boolean;\n}\n\nexport interface StrikeItem {\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface AddUnpaidPurchaseOrderStrikeApiRequest {\n comment?: string | null;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface AddUnpaidPurchaseOrderStrikeApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UnpaidItemStrikeApiResponse {\n responseStatus?: ResponseStatus | null;\n strikeSubmitted: boolean;\n}\n\nexport interface UnpaidPurchaseOrderStrikeApiResponse {\n items?: ItemStrikeSubmission[] | null;\n responseStatus?: ResponseStatus | null;\n strikeSubmitted: boolean;\n}\n\nexport interface CommentFeedbackApiRequest {\n comment?: string | null;\n /** @format int32 */\n gradeId: number;\n /** @format int32 */\n memberId: number;\n}\n\nexport interface CommentFeedbackApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ContactSellerApiRequest {\n /** @format int32 */\n itemId: number;\n message?: string | null;\n sendCopytoSender: boolean;\n}\n\nexport interface ContactSellerApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface Country {\n countryCodeIso2?: string | null;\n countryNameEng?: string | null;\n countryNameSwe?: string | null;\n}\n\nexport interface BlockedMemberDto {\n alias?: string | null;\n /** @format date-time */\n createdDate: string;\n /** @format int32 */\n memberId: number;\n}\n\nexport interface BookedShipping {\n hasShipmentLabel: boolean;\n hasShipmentReceipt: boolean;\n /** @format uuid */\n shipmentCheckoutId: string;\n /** @format uuid */\n shipmentId: string;\n shippingType?: string | null;\n trackingId?: string | null;\n trackingLink?: string | null;\n}\n\nexport interface BuyerPaidDataDto {\n /** @format int32 */\n numberOfItems: number;\n /** @format uuid */\n purchaseOrderId: string;\n shipmentBookingType?: string | null;\n}\n\nexport interface BuyerProtectionApiDto {\n /** @format double */\n buyerProtectionCost: number;\n}\n\nexport interface ContactDetailsApiDto {\n countryCodeIso2?: string | null;\n alias?: string | null;\n companyName?: string | null;\n country?: string | null;\n email?: string | null;\n firstName?: string | null;\n fullName?: string | null;\n isCompany: boolean;\n lastName?: string | null;\n /** @format int32 */\n memberId: number;\n organizationNumber?: string | null;\n phoneNumber?: string | null;\n streetName?: string | null;\n town?: string | null;\n zipCode?: string | null;\n}\n\nexport interface CreditSafeLookupResult {\n firstName?: string | null;\n givenName?: string | null;\n lastName?: string | null;\n socialSecurityNumber?: string | null;\n}\n\nexport interface CreditSafeNameVerificationResult {\n lookupResult?: CreditSafeLookupResult | null;\n status: CreditSafeNameVerificationStatus;\n}\n\nexport enum CreditSafeNameVerificationStatus {\n Valid = 'Valid',\n Invalid = 'Invalid',\n SSNFail = 'SSNFail',\n NotFound = 'NotFound',\n Error = 'Error'\n}\n\nexport interface DetailedSellerRatingApiDto {\n /** @format double */\n averageRating: number;\n category?: string | null;\n /** @format int32 */\n categoryCount: number;\n}\n\nexport interface DetailedSellerRatingSummaryForMemberApiDto {\n communication?: DetailedSellerRatingApiDto | null;\n deliveryTime?: DetailedSellerRatingApiDto | null;\n /** @format double */\n detailedSellerRatingAverage: number;\n itemDescription?: DetailedSellerRatingApiDto | null;\n /** @format int32 */\n memberId: number;\n shippingCost?: DetailedSellerRatingApiDto | null;\n}\n\nexport interface DiscountDto {\n /** @format double */\n amount: number;\n /** @format date-time */\n created: string;\n type?: string | null;\n}\n\nexport interface FeatureSummaryApiDto {\n /** @format int32 */\n cost: number;\n /** @format int32 */\n count: number;\n name?: string | null;\n}\n\nexport interface FeedbackItemApiDto {\n feedbackMemberCountryCodeIso2?: string | null;\n /** @format date-time */\n created: string;\n feedbackMemberAlias?: string | null;\n /** @format int32 */\n feedbackMemberId: number;\n feedbackMemberRole: FeedbackRoleApiDto;\n /** @format int32 */\n gradeId: number;\n /** @format int32 */\n itemCategoryId: number;\n /** @format date-time */\n itemEndDate: string;\n /** @format int32 */\n itemId: number;\n /** @format int32 */\n itemMaxBid: number;\n itemShortDescription?: string | null;\n mutualFeedbackRemovalItem?: MutualFeedbackRemovalItemApiDto | null;\n rating: FeedbackRatingApiDto;\n reply?: string | null;\n text?: string | null;\n /** @format int32 */\n totalRating: number;\n}\n\nexport enum FeedbackRatingApiDto {\n None = 'None',\n Negative = 'Negative',\n Positive = 'Positive'\n}\n\nexport enum FeedbackRatingFilter {\n All = 'All',\n Positive = 'Positive',\n Negative = 'Negative'\n}\n\nexport interface FeedbackReminderDataDto {\n isSeller: boolean;\n}\n\nexport enum FeedbackRoleApiDto {\n Buyer = 'Buyer',\n Seller = 'Seller'\n}\n\nexport enum FeedbackRoleFilter {\n All = 'All',\n Seller = 'Seller',\n Buyer = 'Buyer',\n LeftBy = 'LeftBy'\n}\n\nexport interface FeedbackSummaryItemApiDto {\n /** @format int32 */\n totalNegative: number;\n /** @format int32 */\n totalPositive: number;\n}\n\nexport interface ItemTransactionApiDto {\n /** @format int32 */\n bidCount?: number | null;\n /** @format int32 */\n buyItNowPrice?: number | null;\n /** @format int32 */\n buyerMemberId: number;\n discounts?: DiscountDto[] | null;\n hasBuyerLeftFeedback: boolean;\n hasSellerLeftFeedback: boolean;\n hasTraderaAsMerchantOfRecord: boolean;\n imageUrl?: string | null;\n imageUrlTemplate?: string | null;\n isHidden: boolean;\n isPaid: boolean;\n isPaynovaPayment: boolean;\n /** @format int32 */\n itemCategoryId: number;\n /** @format int32 */\n itemId: number;\n /** @format int32 */\n itemPrice?: number | null;\n itemResellPublished: boolean;\n itemTitle?: string | null;\n itemTransactionType: ItemTransactionTypeApiDto;\n /** @format int32 */\n openingBid?: number | null;\n /** @format int32 */\n orderNumber: number;\n paidStatus?: string | null;\n /** @format uuid */\n purchaseOrderId: string;\n selectedShipping?: ShippingApiDto | null;\n sellerAlias?: string | null;\n /** @format int32 */\n sellerMemberId: number;\n /** @format int32 */\n sellerRating: number;\n trackingLink?: string | null;\n /** @format date-time */\n transactionDate: string;\n /** @format int32 */\n transactionId: number;\n}\n\nexport enum MemberAccountState {\n None = 'None',\n Active = 'Active',\n TemporarySuspended = 'TemporarySuspended',\n PermanentlySuspended = 'PermanentlySuspended',\n Deregistered = 'Deregistered'\n}\n\nexport interface MemberActiveItemsSummaryApiDto {\n /** @format int32 */\n auctionCount: number;\n /** @format int32 */\n bidCount: number;\n /** @format int32 */\n bidSum: number;\n /** @format int32 */\n buyItNowCount: number;\n /** @format int32 */\n itemCount: number;\n /** @format int32 */\n shopItemCount: number;\n /** @format int32 */\n sumOpeningBids: number;\n}\n\nexport interface MemberContactDetailsApiDto {\n countryCodeIso2?: string | null;\n alias?: string | null;\n country?: string | null;\n email?: string | null;\n firstName?: string | null;\n fullName?: string | null;\n lastName?: string | null;\n /** @format int32 */\n memberId: number;\n phoneNumber?: string | null;\n ssn?: string | null;\n streetName?: string | null;\n town?: string | null;\n zipCode?: string | null;\n}\n\nexport interface MemberLoginDetailDto {\n accountState: MemberAccountState;\n alias?: string | null;\n hasTraderMessage: boolean;\n heroImageUrl?: string | null;\n isCompanyUser: boolean;\n /** @format int32 */\n memberId: number;\n /** @format date-time */\n memberSince: string;\n /** @format int32 */\n totalRating: number;\n}\n\nexport interface MemberPermissionsApiDto {\n apiRegistrationPermission?: PermissionApiDto | null;\n sellPermission?: PermissionApiDto | null;\n}\n\nexport interface MemberSoldItemApiDto {\n /** @format int32 */\n bidCount?: number | null;\n bookedShipping?: BookedShipping | null;\n buyerContactDetails?: MemberContactDetailsApiDto | null;\n buyerMemberAlias?: string | null;\n /** @format int32 */\n buyerMemberId: number;\n /** @format int32 */\n buyerTotalRating: number;\n /** @format int32 */\n categoryId: number;\n discounts?: DiscountDto[] | null;\n /** @format int32 */\n fixedPrice?: number | null;\n hasBuyerLeftFeedback: boolean;\n hasSellerLeftFeedback: boolean;\n hiddenBySeller: boolean;\n isDiscountAfterPaymentSupported: boolean;\n isDiscountBeforePaymentSupported: boolean;\n isMarkedAsPaidByBuyer: boolean;\n isMarkedAsPaidBySeller: boolean;\n isMarkedAsShipped: boolean;\n /** @deprecated */\n isPaidWithIntegratedPaymentOption: boolean;\n isShippingBooked: boolean;\n /** @format int32 */\n itemId: number;\n itemTitle?: string | null;\n itemTransactionType: ItemTransactionTypeApiDto;\n /** @format int32 */\n leadingBid?: number | null;\n mainImage?: ItemImageUrls | null;\n mainImageTemplate?: string | null;\n offeredShippingOptions?: ShippingApiDto[] | null;\n /** @format int32 */\n openingBid?: number | null;\n paidStatus?: string | null;\n /** @deprecated */\n paymentProvider?: string | null;\n /** @format int32 */\n price: number;\n /** @format uuid */\n purchaseOrderId: string;\n /** @format int32 */\n reservedPrice?: number | null;\n selectedShipping?: ShippingApiDto | null;\n shippingDiscount?: ShippingDiscount | null;\n soldItemState?: string | null;\n /** @deprecated */\n trackingLink?: string | null;\n /** @format date-time */\n transactionDate: string;\n /** @format int32 */\n transactionId: number;\n userReference?: string | null;\n}\n\nexport interface MemberSoldItemsSummaryApiDto {\n /** @format int32 */\n auctionCount: number;\n /** @format int32 */\n bidCount: number;\n /** @format int32 */\n bidSum: number;\n /** @format int32 */\n buyItNowCount: number;\n /** @format int32 */\n itemCount: number;\n /** @format int32 */\n shopItemCount: number;\n /** @format int32 */\n sumOpeningBids: number;\n /** @format int32 */\n totalPrice: number;\n}\n\nexport interface MutualFeedbackRemovalItemApiDto {\n /** @format int32 */\n feedbackRemovalRequestId?: number | null;\n status: MutualFeedbackRemovalStatus;\n /** @deprecated */\n statusText?: string | null;\n /** @format int32 */\n transactionId: number;\n}\n\nexport enum MutualFeedbackRemovalStatus {\n Available = 'Available',\n Unavailable = 'Unavailable',\n Requested = 'Requested',\n Received = 'Received',\n Denied = 'Denied'\n}\n\nexport interface NotificationApiDto {\n /** @format int32 */\n amount: number;\n buyerPaidData?: BuyerPaidDataDto | null;\n feedbackReminderData?: FeedbackReminderDataDto | null;\n isRead: boolean;\n /** @format int32 */\n itemId: number;\n mainImage?: ItemImageUrls | null;\n mainImageTemplate?: string | null;\n /** @format int32 */\n memberId: number;\n purchaseOrderUnpaidData?: PurchaseOrderUnpaidDataDto | null;\n shipmentSentData?: ShipmentSentDataDto | null;\n /** @format date-time */\n timeStamp: string;\n title?: string | null;\n type?: string | null;\n wishListItemsEndingTodayData?: WishListItemsEndingTodayDataDto | null;\n wishlistItemPriceLoweredData?: WishlistItemPriceLoweredDataDto | null;\n}\n\nexport interface OfferedShippingOption {\n /** @format int32 */\n cost: number;\n type?: string | null;\n}\n\nexport interface PaymentOptionApiDto {\n displayName?: string | null;\n paymentType?: string | null;\n}\n\nexport interface PermissionApiDto {\n isPermitted: boolean;\n requirementsNotMet?: RequirementTypeApi[] | null;\n}\n\nexport interface PickListBuyerApiDto {\n buyerContactDetails?: MemberContactDetailsApiDto | null;\n buyerMemberAlias?: string | null;\n /** @format int32 */\n buyerMemberId: number;\n /** @format int32 */\n feedbackCount: number;\n items?: MemberSoldItemApiDto[] | null;\n}\n\nexport interface PickListBuyerV2ApiDto {\n buyerContactDetails?: ContactDetailsApiDto | null;\n buyerMemberAlias?: string | null;\n /** @format int32 */\n buyerMemberId: number;\n items?: PickListItemApiDto[] | null;\n}\n\nexport interface PickListItemApiDto {\n hasSellerLeftFeedback: boolean;\n hiddenBySeller: boolean;\n isMarkedAsPaidBySeller: boolean;\n isMarkedAsShipped: boolean;\n /** @format int32 */\n itemId: number;\n itemTitle?: string | null;\n itemUrl?: string | null;\n mainImage?: ItemImageUrls | null;\n mainImageTemplate?: string | null;\n offeredShippingOptions?: OfferedShippingOption[] | null;\n /** @format int32 */\n price: number;\n /** @format uuid */\n purchaseOrderId: string;\n selectedShipping?: SelectedShippingOption | null;\n temporaryShippingAddress?: Address | null;\n /** @format double */\n totalDiscountAmount: number;\n /** @format date-time */\n transactionDate: string;\n /** @format int32 */\n transactionId: number;\n userReference?: string | null;\n}\n\nexport interface PublicProfileApiDto {\n alias?: string | null;\n city?: string | null;\n country?: string | null;\n /** @format double */\n detailedSellerRating?: number | null;\n hasShop: boolean;\n isCompanyUser: boolean;\n /** @format int32 */\n memberId: number;\n /** @format int32 */\n totalRating: number;\n zipCode?: string | null;\n}\n\nexport interface PurchaseOrderUnpaidDataDto {\n /** @format int32 */\n numberOfItems: number;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport enum RequirementTypeApi {\n Unknown = 'Unknown',\n IsOverMinimumAge = 'IsOverMinimumAge'\n}\n\nexport interface SelectedShippingOption {\n /** @format int32 */\n cost: number;\n type?: string | null;\n}\n\nexport enum SellerAutoFeedbackCriteria {\n Manual = 'Manual',\n PositiveFeedback = 'PositiveFeedback',\n Paid = 'Paid'\n}\n\nexport interface ShipmentSentDataDto {\n /** @format int32 */\n numberOfItems: number;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface ShippingApiDto {\n fromCountryCodeIso2?: string | null;\n toCountryCodeIso2?: string | null;\n /** @format double */\n cost: number;\n isFreeShipping: boolean;\n isTakeaway: boolean;\n name?: string | null;\n partnerProvider?: string | null;\n /** @format int32 */\n productId?: number | null;\n type?: string | null;\n /** @format int32 */\n weight?: number | null;\n}\n\nexport interface TotalFeedbackSummaryForMemberApiDto {\n lastMonth?: FeedbackSummaryItemApiDto | null;\n lastSixMonths?: FeedbackSummaryItemApiDto | null;\n lastTwelveMonths?: FeedbackSummaryItemApiDto | null;\n /** @format int32 */\n memberId: number;\n sinceRegistration?: FeedbackSummaryItemApiDto | null;\n unique?: FeedbackSummaryItemApiDto | null;\n}\n\nexport interface TranslatedFeedbackItemApiDto {\n /** @format int32 */\n gradeId: number;\n reply?: string | null;\n text?: string | null;\n}\n\nexport interface WishListItemsEndingTodayDataDto {\n /** @format int32 */\n numberOfItems: number;\n}\n\nexport enum WishListStatusFilter {\n All = 'All',\n Active = 'Active',\n Ended = 'Ended'\n}\n\nexport interface WishlistItemPriceLoweredDataDto {\n currencyCode?: string | null;\n /** @format int32 */\n newPrice: number;\n}\n\nexport interface GetNotificationsApiResponse {\n items?: NotificationApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n /** @format int64 */\n unreadCount: number;\n}\n\nexport type GetUnreadNotificationsCountApiRequest = object;\n\nexport interface GetUnreadNotificationsCountApiResponse {\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n unreadCount: number;\n}\n\nexport type SetLastNotifiedApiRequest = object;\n\nexport interface SetLastNotifiedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CreditMemoByEncryptedIdApiResponse {\n /** @format byte */\n pdfFileContent?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CreditMemoDto {\n creditMemoDocumentId?: string | null;\n /** @format int64 */\n invoiceId: number;\n}\n\nexport interface GetBraintreeInvoicePaymentApiResponse {\n /** @format double */\n amount: number;\n /** @format int64 */\n invoiceId: number;\n orderId?: string | null;\n responseStatus?: ResponseStatus | null;\n status?: string | null;\n}\n\nexport interface GetCreditMemoPdfApiResponse {\n /** @format byte */\n pdfFileContent?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetInvoiceCsvApiResponse {\n /** @format byte */\n csvFileContent?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetInvoicePdfApiResponse {\n /** @format byte */\n pdfFileContent?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetInvoicesApiResponse {\n invoices?: InvoiceDto[] | null;\n isBillingUnderMaintenance: boolean;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface InvoiceDto {\n /** @format double */\n amountOwed: number;\n creditMemos?: CreditMemoDto[] | null;\n csvGenerated: boolean;\n /** @format date-time */\n dueDate: string;\n /** @format double */\n invoiceAmount: number;\n /** @format date-time */\n invoiceDate: string;\n /** @format int64 */\n invoiceId: number;\n /** @format int64 */\n ocr: number;\n paymentStatus?: string | null;\n}\n\nexport interface FindMembersApiResponse {\n members?: MemberLoginDetailDto[] | null;\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n totalCount: number;\n}\n\nexport interface GetAllItemsForLeaveFeedbackAsBuyerApiResponse {\n items?: ItemTransactionApiDto[] | null;\n /** @format int64 */\n itemsLeft: number;\n /** @format int64 */\n paidTotalCount: number;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface GetAllItemsForLeaveFeedbackAsSellerApiResponse {\n items?: MemberSoldItemApiDto[] | null;\n /** @format int64 */\n itemsLeft: number;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport type GetAvailableCountriesForShippingApiRequest = object;\n\nexport interface GetAvailableCountriesForShippingApiResponse {\n availableCountries?: Country[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetBlockedMembersApiRequest = object;\n\nexport interface GetBlockedMembersApiResponse {\n blockedMembers?: BlockedMemberDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetBlueshiftEventApiCredentialsApiRequest = object;\n\nexport interface GetBlueshiftEventApiCredentialsApiResponse {\n eventApiKey?: string | null;\n eventSignature?: string | null;\n responseStatus?: ResponseStatus | null;\n verificationKey?: string | null;\n}\n\nexport interface GetImageUploadUrlApiResponse {\n responseStatus?: ResponseStatus | null;\n signedUrl?: string | null;\n}\n\nexport type GetIsCombinedShippingEnabledApiRequest = object;\n\nexport interface GetIsCombinedShippingEnabledApiResponse {\n isEnabled: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetItemsForLeaveFeedbackAsBuyerApiResponse {\n responseStatus?: ResponseStatus | null;\n transactions?: ItemTransactionApiDto[] | null;\n}\n\nexport interface GetItemsForLeaveFeedbackAsSellerApiResponse {\n items?: MemberSoldItemApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberGeoDataApiRequest = object;\n\nexport interface GetMemberGeoDataApiResponse {\n /** @format double */\n latitude: number;\n /** @format double */\n longitude: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberSuspendedUntilApiRequest = object;\n\nexport interface GetMemberSuspendedUntilApiResponse {\n canAccessMessaging: boolean;\n responseStatus?: ResponseStatus | null;\n /** @format date-time */\n suspendedUntil?: string | null;\n}\n\nexport type GetMemberVatDetailsApiRequest = object;\n\nexport interface GetMemberVatDetailsApiResponse {\n memberIsSubjectToVat: boolean;\n responseStatus?: ResponseStatus | null;\n /** @format byte */\n selectableVatValues?: string | null;\n}\n\nexport interface GetMemberWithAliasApiResponse {\n alias?: string | null;\n hasShopAccount: boolean;\n isCompanyUser: boolean;\n /** @format int32 */\n memberId: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetSystemMessagesApiRequest = object;\n\nexport interface GetSystemMessagesApiResponse {\n items?: SystemMessage[] | null;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface GetTransactionFeedbacksApiResponse {\n feedbacks?: TransactionFeedbackApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GradeTransactionsApiResponse {\n gradesTransactions?: Record;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CompleteQuestionnaireApiRequest {\n languageCodeIso2?: string | null;\n fieldValues?: Record;\n /** @format int32 */\n questionnaireId: number;\n}\n\nexport interface CompleteQuestionnaireApiResponse {\n alias?: string | null;\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n ruleViolations?: Record;\n}\n\nexport type GetKycPendingActionsApiRequest = object;\n\nexport interface GetKycPendingActionsApiResponse {\n /** @format int32 */\n memberId: number;\n pendingActionActionTypes?: string[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetKycQuestionnairePageDefinitionApiResponse {\n alias?: string | null;\n /** @format int32 */\n memberId: number;\n pageDefinition?: any;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface InitializeQuestionnaireApiRequest {\n alias?: string | null;\n}\n\nexport interface InitializeQuestionnaireApiResponse {\n /** @format int32 */\n questionnaireId: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface LeaveFeedbackAsBuyerApiResponse {\n responseStatus?: ResponseStatus | null;\n transaction?: ItemTransactionApiDto | null;\n}\n\nexport interface LeaveFeedbackAsSellerApiResponse {\n responseStatus?: ResponseStatus | null;\n transaction?: ItemTransactionApiDto | null;\n}\n\nexport type MemberContactDetailsApiRequest = object;\n\nexport interface MemberContactDetailsApiResponse {\n countryCodeIso2?: string | null;\n alias?: string | null;\n country?: string | null;\n email?: string | null;\n firstName?: string | null;\n fullName?: string | null;\n lastName?: string | null;\n /** @format int32 */\n memberId: number;\n phoneNumber?: string | null;\n responseStatus?: ResponseStatus | null;\n ssn?: string | null;\n streetName?: string | null;\n town?: string | null;\n zipCode?: string | null;\n}\n\nexport type MemberEmailSettingsApiRequest = object;\n\nexport interface MemberEmailSettingsApiResponse {\n acceptsNewsLetter: boolean;\n acceptsOfferEmails: boolean;\n acceptsUnknownDeviceOrIpEmails: boolean;\n acceptsUpiInfoEmails: boolean;\n /** @format int32 */\n memberId: number;\n notifyBeforeWishListItemEnds: boolean;\n notifyOnFirstWinningBid: boolean;\n notifyWhenItemBecomesUnsold: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MemberFeedbackApiResponse {\n accountState: MemberAccountState;\n detailedSellerRatingSummaryForMember?: DetailedSellerRatingSummaryForMemberApiDto | null;\n items?: FeedbackItemApiDto[] | null;\n /** @format date-time */\n memberSince: string;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n totalFeedbackSummary?: TotalFeedbackSummaryForMemberApiDto | null;\n}\n\nexport interface MemberFeedbackItemsApiResponse {\n items?: FeedbackItemApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface MemberFeedbackSummaryApiResponse {\n accountState: MemberAccountState;\n detailedSellerRatingSummary?: DetailedSellerRatingSummaryForMemberApiDto | null;\n /** @format date-time */\n memberSince: string;\n responseStatus?: ResponseStatus | null;\n totalFeedbackSummary?: TotalFeedbackSummaryForMemberApiDto | null;\n}\n\nexport interface MemberPurchaseApiResponse {\n buyer?: MemberContactDetailsApiDto | null;\n item?: ItemTransactionApiDto | null;\n responseStatus?: ResponseStatus | null;\n seller?: MemberContactDetailsApiDto | null;\n}\n\nexport interface MemberPurchaseOrderApiResponse {\n buyer?: ContactDetailsApiDto | null;\n items?: ItemTransactionApiDto[] | null;\n paymentMethod?: string | null;\n responseStatus?: ResponseStatus | null;\n seller?: ContactDetailsApiDto | null;\n}\n\nexport interface MemberPurchaseOrderItemApiResponse {\n items?: ItemTransactionApiDto[] | null;\n paymentMethod?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type MemberSelloProfileApiRequest = object;\n\nexport interface MemberSelloProfileApiResponse {\n accountState: MemberAccountState;\n alias?: string | null;\n city?: string | null;\n /** @format int32 */\n combinedShippingDays: number;\n /** @format float */\n detailedSellerRatingAverage?: number | null;\n email?: string | null;\n firstName?: string | null;\n hasShop: boolean;\n isCompanyUser: boolean;\n isSwedishUser: boolean;\n /** @format int32 */\n memberId: number;\n /** @format date-time */\n memberSince: string;\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n totalRating: number;\n}\n\nexport type MemberServerStorageListApiRequest = object;\n\nexport interface MemberServerStorageListApiResponse {\n responseStatus?: ResponseStatus | null;\n rows?: Row[] | null;\n}\n\nexport interface MemberServerStoragePutApiRequest {\n key?: string | null;\n value?: string | null;\n}\n\nexport interface MemberServerStoragePutApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type MemberSessionDataApiRequest = object;\n\nexport interface MemberSessionDataApiResponse {\n countryCodeIso2?: string | null;\n languageCodeIso2?: string | null;\n /** @format int32 */\n age?: number | null;\n alias?: string | null;\n aliasSlug?: string | null;\n appleId?: string | null;\n automaticTranslationPreferred: boolean;\n birthDate?: string | null;\n blueshiftEventSignature?: string | null;\n city?: string | null;\n country?: string | null;\n currencyCode?: string | null;\n /** @format float */\n detailedSellerRating?: number | null;\n email?: string | null;\n facebookId?: string | null;\n firstName?: string | null;\n gender?: string | null;\n googleId?: string | null;\n hasTraderaPay: boolean;\n heroImageUrl?: string | null;\n isBuyer: boolean;\n isSeller: boolean;\n isTrustedMember: boolean;\n klarnaId?: string | null;\n lastName?: string | null;\n /** @format int32 */\n memberId: number;\n memberIdHash?: string | null;\n /** @format int32 */\n memberState: number;\n permissions?: MemberPermissionsApiDto | null;\n /** @format date-time */\n registrationDate: string;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MemberShopDetailsApiResponse {\n alias?: string | null;\n companyInfo?: string | null;\n contactInfo?: string | null;\n hasLogo: boolean;\n logoFormat?: string | null;\n /** @format int32 */\n memberId: number;\n purchaseTerms?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface FirebaseConfiguration {\n apiKey?: string | null;\n authDomain?: string | null;\n databaseUrl?: string | null;\n functionsEmulatorUrl?: string | null;\n projectId?: string | null;\n region?: string | null;\n storageBucket?: string | null;\n}\n\nexport type GetMessagingConfigurationApiRequest = object;\n\nexport interface GetMessagingConfigurationApiResponse {\n firebaseConfiguration?: FirebaseConfiguration | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetMessagingEmailNotifyApiResponse {\n emailNotify: MessagingEmailNotification;\n /** @format int32 */\n memberId: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetMessagingItemApiResponse {\n /** @format int32 */\n price: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMessagingSilentApiRequest = object;\n\nexport interface GetMessagingSilentApiResponse {\n enabled: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMessagingStatsApiRequest = object;\n\nexport interface GetMessagingStatsApiResponse {\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n threads: number;\n /** @format int32 */\n threadsUnread: number;\n}\n\nexport enum MessagingEmailNotification {\n All = 'All',\n Unread = 'Unread',\n None = 'None'\n}\n\nexport interface SetMessagingEmailNotifyApiRequest {\n emailNotify: MessagingEmailNotification;\n}\n\nexport interface SetMessagingEmailNotifyApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetMessagingSilentApiRequest {\n enabled: boolean;\n}\n\nexport interface SetMessagingSilentApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ConfirmMutualFeedbackRemovalApiRequest {\n /** @format int32 */\n feedbackRemovalRequestId: number;\n}\n\nexport interface ConfirmMutualFeedbackRemovalApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum ConfirmationStatus {\n ConfirmationAllowed = 'ConfirmationAllowed',\n RequestIsOlderThen30Days = 'RequestIsOlderThen30Days',\n RequestedBySubmitter = 'RequestedBySubmitter'\n}\n\nexport interface CreateFeedbackRemovalApiRequest {\n comment?: string | null;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface CreateFeedbackRemovalApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum CreationStatus {\n CreationAllowed = 'CreationAllowed',\n CreatedBySubmitter = 'CreatedBySubmitter',\n CanBeAcceptedByReceiver = 'CanBeAcceptedByReceiver'\n}\n\nexport interface DenyMutualFeedbackRemovalApiRequest {\n /** @format int32 */\n feedbackRemovalRequestId: number;\n}\n\nexport interface DenyMututalFeedbackRemovalApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum FeedbackRemovalFlowStatus {\n CanBeStarted = 'CanBeStarted',\n CanBeAccepted = 'CanBeAccepted',\n SubmittedAlready = 'SubmittedAlready',\n NotApplicable = 'NotApplicable'\n}\n\nexport enum FeedbackRemovalState {\n Pending = 'Pending',\n Accepted = 'Accepted',\n Rejected = 'Rejected'\n}\n\nexport interface FlowStatusRequest {\n /** @format int32 */\n feedbackMemberId: number;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface FlowStatusResponse {\n feedbacksRemovalRequest?: MutualFeedbackRemovalApiDto | null;\n flowStatus: FeedbackRemovalFlowStatus;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface MemberDetails {\n alias?: string | null;\n /** @format int32 */\n id: number;\n}\n\nexport interface MutualFeedbackRemovalApiDto {\n comment?: string | null;\n /** @format date-time */\n completed?: string | null;\n /** @format date-time */\n created: string;\n fromMember?: MemberDetails | null;\n /** @format int32 */\n id: number;\n isCompleted: boolean;\n /** @format int32 */\n itemId: number;\n status?: FeedbackRemovalState | null;\n toMember?: MemberDetails | null;\n /** @format int32 */\n transactionBuyerMemberId: number;\n /** @format int32 */\n transactionId: number;\n /** @format int32 */\n transactionSellerMemberId: number;\n}\n\nexport interface TransactionFeedbackApiDto {\n /** @format date-time */\n created: string;\n fromMemberAlias?: string | null;\n /** @format int32 */\n fromMemberId: number;\n memberRole: TransactionFeedbackRole;\n rating: TransactionFeedbackRating;\n text?: string | null;\n toMemberAlias?: string | null;\n /** @format int32 */\n toMemberId: number;\n}\n\nexport enum TransactionFeedbackRating {\n None = 'None',\n Negative = 'Negative',\n Positive = 'Positive'\n}\n\nexport enum TransactionFeedbackRole {\n Buyer = 'Buyer',\n Seller = 'Seller'\n}\n\nexport interface FeedbackRemovalApiResponse {\n feedbackRemovalRequest?: MutualFeedbackRemovalApiDto | null;\n feedbacks?: TransactionFeedbackApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface FeedbackRemovalsApiRequest {\n feedbacks?: FlowStatusRequest[] | null;\n}\n\nexport interface FeedbackRemovalsApiResponse {\n feedbacksRemovalRequests?: FlowStatusResponse[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ValidateConfirmationApiResponse {\n confirmationStatus: ConfirmationStatus;\n feedbackRemovalRequest?: MutualFeedbackRemovalApiDto | null;\n feedbacks?: TransactionFeedbackApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ValidateCreationApiResponse {\n creationStatus: CreationStatus;\n feedbackRemovalRequest?: MutualFeedbackRemovalApiDto | null;\n feedbacks?: TransactionFeedbackApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum AvailablePayoutOption {\n SwedishBankAccount = 'SwedishBankAccount',\n InternationalBankAccount = 'InternationalBankAccount',\n PayPal = 'PayPal',\n Swish = 'Swish',\n Tink = 'Tink',\n Unknown = 'Unknown'\n}\n\nexport interface CompleteHyperwalletTransferMethodApiRequest {\n transferMethodToken?: string | null;\n transferMethodType?: string | null;\n}\n\nexport interface CompleteHyperwalletTransferMethodApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetHyperwalletAuthenticationTokenApiRequest = object;\n\nexport interface GetHyperwalletAuthenticationTokenApiResponse {\n authenticationToken?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetHyperwalletMemberDetailsApiRequest = object;\n\nexport interface GetHyperwalletMemberDetailsApiResponse {\n payeeVerificationStatus?: string | null;\n responseStatus?: ResponseStatus | null;\n userToken?: string | null;\n}\n\nexport type GetHyperwalletTransferMethodViewModelApiRequest = object;\n\nexport interface GetHyperwalletTransferMethodViewModelApiResponse {\n responseStatus?: ResponseStatus | null;\n userToken?: string | null;\n widgetBaseUrl?: string | null;\n}\n\nexport type GetIsTraderaPayEnabledApiRequest = object;\n\nexport interface GetIsTraderaPayEnabledApiResponse {\n isEnabled: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetPayoutSettingsModalViewModelApiResponse {\n availablePayoutOptions?: AvailablePayoutOption[] | null;\n hyperwallet?: PayoutSettingsModalHyperwallet | null;\n member?: PayoutSettingsModalMember | null;\n payoutFrequencyOption?: string | null;\n responseStatus?: ResponseStatus | null;\n tink?: PayoutSettingsModalTink | null;\n}\n\nexport type GetPayoutSettingsViewModelApiRequest = object;\n\nexport interface GetPayoutSettingsViewModelApiResponse {\n hyperwalletOnboardingProblems?: HyperwalletOnboardingProblem[] | null;\n hyperwalletPayeeVerificationStatus?: string | null;\n payoutDestination?: string | null;\n payoutDestinationType?: string | null;\n payoutFrequencyOption?: string | null;\n payoutFrequencyOptions?: string[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetPayoutTransferMethodUpdateStatusApiResponse {\n errorCode?: string | null;\n responseStatus?: ResponseStatus | null;\n status?: string | null;\n}\n\nexport interface HyperwalletOnboardingProblem {\n details?: string | null;\n type?: string | null;\n}\n\nexport interface MatchBankApiRequest {\n bankAccountNumber?: string | null;\n clearingNumber?: string | null;\n}\n\nexport interface MatchBankApiResponse {\n bankFound: boolean;\n /** @deprecated */\n bankName?: string | null;\n ok: boolean;\n /** @deprecated */\n requireBankIdVerification: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface PayoutSettingsModalHyperwallet {\n userToken?: string | null;\n widgetBaseUrl?: string | null;\n}\n\nexport interface PayoutSettingsModalMember {\n emailAddress?: string | null;\n isCompany: boolean;\n /** @format int32 */\n memberId: number;\n phoneNumber?: string | null;\n requireBankIdVerification: boolean;\n}\n\nexport interface PayoutSettingsModalTink {\n tinkLinkUrl?: string | null;\n}\n\nexport type RemoveBankAccountPayoutTransferMethodApiRequest = object;\n\nexport interface RemoveBankAccountPayoutTransferMethodApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type RemovePayPalPayoutTransferMethodApiRequest = object;\n\nexport interface RemovePayPalPayoutTransferMethodApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type RemovePayoutTransferMethodApiRequest = object;\n\nexport interface RemovePayoutTransferMethodApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ResendPayoutTransferMethodVerificationCodeApiRequest {\n /** @format uuid */\n processCorrelationId: string;\n swishNumber?: string | null;\n}\n\nexport interface ResendPayoutTransferMethodVerificationCodeApiResponse {\n errorCode?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetBankAccountPayoutTransferMethodApiRequest {\n bankAccountNumber?: string | null;\n bankIdOrderRef?: string | null;\n clearingNumber?: string | null;\n}\n\nexport interface SetBankAccountPayoutTransferMethodApiResponse {\n errorCode?: string | null;\n /** @format uuid */\n processCorrelationId: string;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type SetHyperwalletPayeeVerificationAsSubmittedApiRequest = object;\n\nexport interface SetHyperwalletPayeeVerificationAsSubmittedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetPayPalPayoutTransferMethodApiRequest {\n bankIdOrderRef?: string | null;\n emailAddress?: string | null;\n}\n\nexport interface SetPayPalPayoutTransferMethodApiResponse {\n errorCode?: string | null;\n /** @format uuid */\n processCorrelationId: string;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetPayoutTransferMethodUsingTinkApiRequest {\n accountNumber?: string | null;\n bankIdOrderRef?: string | null;\n}\n\nexport interface SetPayoutTransferMethodUsingTinkApiResponse {\n errorCode?: string | null;\n /** @format uuid */\n processCorrelationId: string;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetSwishPayoutTransferMethodApiRequest {\n bankIdOrderRef?: string | null;\n swishNumber?: string | null;\n}\n\nexport interface SetSwishPayoutTransferMethodApiResponse {\n errorCode?: string | null;\n /** @format uuid */\n processCorrelationId: string;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface VerifyPayoutTransferMethodApiRequest {\n /** @format uuid */\n processCorrelationId: string;\n verificationCode?: string | null;\n}\n\nexport interface VerifyPayoutTransferMethodApiResponse {\n errorCode?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface BankIdBeginWithIdApiRequest {\n /** @format int32 */\n memberId: number;\n}\n\nexport interface BankIdPasswordRecoveryCancelApiRequest {\n bankIdOrderRef?: string | null;\n /** @format int32 */\n memberid: number;\n}\n\nexport interface ChangeAliasApiRequest {\n browser?: string | null;\n ipAddress?: string | null;\n location?: string | null;\n newAlias?: string | null;\n operatingSystem?: string | null;\n}\n\nexport interface ChangeAliasApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ChangeEmailWithIdApiRequest {\n bankIdOrderRef?: string | null;\n email?: string | null;\n /** @format int32 */\n memberId: number;\n userIpAddress?: string | null;\n}\n\nexport interface ChangeEmailWithIdApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ChangePasswordApiRequest {\n password?: string | null;\n}\n\nexport interface ChangePasswordApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ChangePasswordWithIdApiRequest {\n /** @format int32 */\n memberId: number;\n password?: string | null;\n}\n\nexport interface CreateTaxIdentificationImageUploadUrlApiRequest {\n contentType?: string | null;\n}\n\nexport interface CreateTaxIdentificationImageUploadUrlApiResponse {\n objectName?: string | null;\n responseStatus?: ResponseStatus | null;\n uploadUrl?: string | null;\n}\n\nexport type CreateVerificationCodeApiRequest = object;\n\nexport interface CreateVerificationCodeApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CreateVerificationCodeWithMemberIdApiRequest {\n /** @format int32 */\n memberId: number;\n recoveryFlowType: RecoveryFlowType;\n}\n\nexport interface CreateVerificationCodeWithMemberIdApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type DeactivateMemberAccountPermanentlyApiRequest = object;\n\nexport interface DeactivateMemberAccountPermanentlyApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface DeactivateMemberAccountTemporarilyApiRequest {\n comment?: string | null;\n}\n\nexport interface DeactivateMemberAccountTemporarilyApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GenerateMemberReferralCodeApiRequest = object;\n\nexport interface GenerateMemberReferralCodeApiResponse {\n /** @format double */\n amount: number;\n referralCode?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetAccountDeactivationSettingsApiRequest = object;\n\nexport interface GetAccountDeactivationSettingsApiResponse {\n isAccountDeactivationAllowed: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetBraintreeOnboardingDetailsApiRequest = object;\n\nexport interface GetBraintreeOnboardingDetailsApiResponse {\n isAccountDetailsSupplied: boolean;\n maskedBankAccount?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMagicalSyiEnabledApiRequest = object;\n\nexport interface GetMagicalSyiEnabledApiResponse {\n enabled: boolean;\n isChangeAllowed: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetMemberBankIdVerificationApiResponse {\n bankIdFormattedPersonalNumber?: string | null;\n /** @format date-time */\n lastVerifiedDate: string;\n /** @format date-time */\n manualIdentityVerificationValidTo: string;\n needInitialVerification: boolean;\n needsVerification: boolean;\n responseStatus?: ResponseStatus | null;\n supportsVerification: boolean;\n verificationReason: VerificationReason;\n}\n\nexport type GetMemberCompanyDac7StatusApiRequest = object;\n\nexport interface GetMemberCompanyDac7StatusApiResponse {\n isUnderDac7Requirements: boolean;\n hasRegisteredTaxIdentificationNumber: boolean;\n hasRegisteredVatNumber: boolean;\n responseStatus?: ResponseStatus | null;\n shouldProvideTaxBasis: boolean;\n /** @deprecated */\n shouldProvideVatNumber: boolean;\n}\n\nexport type GetMemberCompanyMoneyTransferLicenseStatusApiRequest = object;\n\nexport interface GetMemberCompanyMoneyTransferLicenseStatusApiResponse {\n hasApprovedMoneyTransferLicenseAgreement: boolean;\n hasCompanyContactSsn: boolean;\n /** @deprecated */\n isCompanyContactSignatory: boolean;\n isEligibleToSignMoneyTransferLicenseAgreement: boolean;\n /** @deprecated */\n isUnderLicense: boolean;\n moneyTransferLicenseAgreementName?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberConsentApiRequest = object;\n\nexport interface GetMemberConsentApiResponse {\n hasTraderaPayConsent: boolean;\n isEligibleToSignMoneyTransferLicenseAgreement: boolean;\n /** @deprecated */\n isUnderLicense: boolean;\n needsConsentOfTraderaPayAgreement?: string | null;\n responseStatus?: ResponseStatus | null;\n signatoryVerificationRequired: boolean;\n}\n\nexport type GetMemberEmailNotificationsSettingsViewModelApiRequest = object;\n\nexport interface GetMemberEmailNotificationsSettingsViewModelApiResponse {\n email?: MemberEmailNotificationsSettingsEmailApiDto | null;\n /** @format int32 */\n memberId: number;\n messaging?: MemberEmailNotificationsSettingsMessagingApiDto | null;\n responseStatus?: ResponseStatus | null;\n silentMessaging?: MemberSilentMessagingSettingApiDto | null;\n}\n\nexport type GetMemberHasTaxIdentificationNumberApiRequest = object;\n\nexport interface GetMemberHasTaxIdentificationNumberApiResponse {\n hasTaxIdentificationNumber: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberLocalizationApiRequest = object;\n\nexport interface GetMemberLocalizationApiResponse {\n languageCodeIso2?: string | null;\n automaticTranslationPreferred: boolean;\n currencyCode?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberProfileSettingsViewModelApiRequest = object;\n\nexport interface GetMemberProfileSettingsViewModelApiResponse {\n accountInformation?: MemberProfileSettingsAccountInformationApiDto | null;\n /** @format int32 */\n memberId: number;\n personalData?: MemberProfileSettingsPersonalDataApiDto | null;\n presentation?: MemberProfileSettingsPresentationApiDto | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberSecuritySettingsViewModelApiRequest = object;\n\nexport interface GetMemberSecuritySettingsViewModelApiResponse {\n accountDeactivation?: MemberSecuritySettingsAccountDeactivationApiDto | null;\n memberBlocking?: MemberSecuritySettingsMemberBlockingApiDto | null;\n /** @format int32 */\n memberId: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetMemberSellerSettingsViewModelApiRequest = object;\n\nexport interface GetMemberSellerSettingsViewModelApiResponse {\n autoFeedback?: MemberSellerSettingsAutoFeedbackApiDto | null;\n autoShipmentCheckout?: MemberSellerSettingsAutoShipmentCheckoutApiDto | null;\n combinedShipping?: MemberSellerSettingsCombinedShippingApiDto | null;\n commitOnPayment?: MemberSellerSettingsCommitOnPaymentApiDto | null;\n itemLocalization?: MemberSellerSettingsItemLocalizationApiDto | null;\n magicalSyi?: MemberSellerSettingsMagicalSyiApiDto | null;\n makeAnOffer?: MemberSellerSettingsMakeAnOfferApiDto | null;\n /** @format int32 */\n memberId: number;\n responseStatus?: ResponseStatus | null;\n shippingFeeRule?: MemberSellerSettingsShippingFeeRuleApiDto | null;\n}\n\nexport type GetMemberShouldCollectTaxIdentificationNumberApiRequest = object;\n\nexport interface GetMemberShouldCollectTaxIdentificationNumberApiResponse {\n responseStatus?: ResponseStatus | null;\n shouldCollectBirthDate: boolean;\n shouldCollectTaxIdentificationNumber: boolean;\n}\n\nexport type GetMemberVerificationStatusApiRequest = object;\n\nexport interface GetMemberVerificationStatusApiResponse {\n hasAnyActiveTraderaPayConsent: boolean;\n hasCompanyContactSsn: boolean;\n hasSsn: boolean;\n isEligibleToSignMoneyTransferLicenseAgreement: boolean;\n /** @deprecated */\n isUnderLicense: boolean;\n needsBankIdVerification: boolean;\n needsConsentOfTraderaPayAgreement?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetMoneyTransferLicenseAgreementApiResponse {\n agreementName?: string | null;\n /** @format date-time */\n inEffectAsOf: string;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetPayoutFrequencyApiRequest = object;\n\nexport type GetPayoutFrequencyOptionsApiRequest = object;\n\nexport type GetShippingInvoiceMemberApiRequest = object;\n\nexport interface GetShippingInvoiceMemberApiResponse {\n enabled: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type GetTraderaPayOnboardingDetailsApiRequest = object;\n\nexport interface GetTraderaPayOnboardingDetailsApiResponse {\n isBankAccountDetailsSupplied: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetTranslatedMemberFeedbackApiResponse {\n isTranslationOnDemandDisabled: boolean;\n items?: TranslatedFeedbackItemApiDto[] | null;\n providerName?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface HeroImageUrlApiDto {\n max?: string | null;\n med?: string | null;\n min?: string | null;\n}\n\nexport interface MemberEmailNotificationsSettingsEmailApiDto {\n acceptsNewsLetter: boolean;\n acceptsOfferEmails: boolean;\n acceptsUnknownDeviceOrIpEmails: boolean;\n acceptsUpiInfoEmails: boolean;\n notifyBeforeWishListItemEnds: boolean;\n notifyOnFirstWinningBid: boolean;\n notifyWhenItemBecomesUnsold: boolean;\n}\n\nexport interface MemberEmailNotificationsSettingsMessagingApiDto {\n emailNotifyAll: boolean;\n isAllowedToSetParticipation: boolean;\n participates: boolean;\n}\n\nexport type MemberHasCompanyContactSsnApiRequest = object;\n\nexport interface MemberHasCompanyContactSsnApiResponse {\n hasCompanyContactSsn: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type MemberHasSsnApiRequest = object;\n\nexport interface MemberHasSsnApiResponse {\n hasSsn: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MemberProfileSettingsAccountInformationApiDto {\n alias?: string | null;\n emailAddress?: string | null;\n}\n\nexport interface MemberProfileSettingsPersonalDataApiDto {\n countryCodeIso2?: string | null;\n city?: string | null;\n country?: string | null;\n firstName?: string | null;\n isNameChangeAllowed: boolean;\n lastName?: string | null;\n phoneNumber?: string | null;\n phoneNumberUnvalidated?: string | null;\n streetName?: string | null;\n zipCode?: string | null;\n}\n\nexport interface MemberProfileSettingsPresentationApiDto {\n heroImageUrls?: HeroImageUrlApiDto | null;\n information?: string | null;\n}\n\nexport interface MemberSecuritySettingsAccountDeactivationApiDto {\n isAccountDeactivationAllowed: boolean;\n}\n\nexport interface MemberSecuritySettingsBlockedMemberApiDto {\n alias?: string | null;\n /** @format int32 */\n memberId: number;\n}\n\nexport interface MemberSecuritySettingsMemberBlockingApiDto {\n blockedMembers?: MemberSecuritySettingsBlockedMemberApiDto[] | null;\n}\n\nexport interface MemberSellerSettingsAutoFeedbackApiDto {\n enabled: boolean;\n message?: string | null;\n type: SellerAutoFeedbackType;\n}\n\nexport interface MemberSellerSettingsAutoShipmentCheckoutApiDto {\n enabled: boolean;\n isChangeAllowed: boolean;\n}\n\nexport interface MemberSellerSettingsCombinedShippingApiDto {\n /** @format int32 */\n days: number;\n enabled: boolean;\n isChangeAllowed: boolean;\n}\n\nexport interface MemberSellerSettingsCommitOnPaymentApiDto {\n enabled: boolean;\n isChangeAllowed: boolean;\n}\n\nexport interface MemberSellerSettingsItemLocalizationApiDto {\n selectedDescriptionLanguageCodeIso2?: string | null;\n shippingFromCountryCodeIso2?: string | null;\n}\n\nexport interface MemberSellerSettingsMagicalSyiApiDto {\n enabled: boolean;\n isChangeAllowed: boolean;\n}\n\nexport interface MemberSellerSettingsMakeAnOfferApiDto {\n enabled: boolean;\n isChangeAllowed: boolean;\n}\n\nexport interface MemberSellerSettingsShippingFeeRuleApiDto {\n /** @format int32 */\n freeShippingCostLimit: number;\n shippingOption?: string | null;\n useFreeShippingCostLimit: boolean;\n}\n\nexport interface MemberSilentMessagingSettingApiDto {\n enabled: boolean;\n isChangeAllowed: boolean;\n}\n\nexport interface PayoutFrequencyApiResponse {\n payoutFrequencyOption?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface PayoutFrequencyOptionsApiResponse {\n options?: string[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum RecoveryFlowType {\n Email = 'Email',\n Sms = 'Sms'\n}\n\nexport interface RemoveMemberPublicProfileHeroImageApiRequest {\n userIpAddress?: string | null;\n}\n\nexport interface RemoveMemberPublicProfileHeroImageApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type RemoveTraderaPayPayoutDestinationApiRequest = object;\n\nexport interface RemoveTraderaPayPayoutDestinationApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SaveSellerAutoFeedbackSettingsApiRequest {\n criteria: SellerAutoFeedbackCriteria;\n message?: string | null;\n}\n\nexport interface SaveSellerAutoFeedbackSettingsApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SaveSellerAutoPaymentReminderSettingsApiRequest {\n enabled: boolean;\n}\n\nexport interface SaveSellerAutoPaymentReminderSettingsApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SaveWinnerEmailApiRequest {\n winnerEmail?: string | null;\n}\n\nexport interface SaveWinnerEmailApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum SellerAutoFeedbackType {\n Manual = 'Manual',\n PositiveFeedback = 'PositiveFeedback',\n Paid = 'Paid'\n}\n\nexport interface SendVerificationSmsApiRequest {\n cellphoneNumber?: string | null;\n countryCode?: string | null;\n}\n\nexport interface SendVerificationSmsApiResponse {\n errorMessage?: string | null;\n responseStatus?: ResponseStatus | null;\n sentToCountryCode?: string | null;\n sentToTelephoneNumber?: string | null;\n smsSid?: string | null;\n successful: boolean;\n}\n\nexport interface SendVerificationSmsWithIdApiRequest {\n cellphoneNumber?: string | null;\n countryCode?: string | null;\n /** @format int32 */\n memberId: number;\n recoveryFlowType: RecoveryFlowType;\n}\n\nexport interface SetAutoShipmentCheckoutMemberEnabledApiRequest {\n enabled: boolean;\n}\n\nexport interface SetAutoShipmentCheckoutMemberEnabledApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetCombinedShippingMemberDaysApiRequest {\n /** @format int32 */\n days: number;\n}\n\nexport interface SetCombinedShippingMemberDaysApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetCombinedShippingMemberEnabledApiRequest {\n enabled: boolean;\n}\n\nexport interface SetCombinedShippingMemberEnabledApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetCommitOnPaymentMemberEnabledApiRequest {\n enabled: boolean;\n}\n\nexport interface SetCommitOnPaymentMemberEnabledApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetMagicalSyiEnabledApiRequest {\n enabled: boolean;\n}\n\nexport interface SetMagicalSyiEnabledApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetMakeAnOfferMemberEnabledApiRequest {\n enabled: boolean;\n}\n\nexport interface SetMakeAnOfferMemberEnabledApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetMemberConsentApiRequest {\n agreementName?: string | null;\n}\n\nexport interface SetMemberConsentApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetPayoutFrequencyApiRequest {\n payoutFrequencyOption?: string | null;\n}\n\nexport interface SetPayoutFrequencyApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetShippingFeeRuleFreeShippingCostLimitApiRequest {\n /** @format int32 */\n freeShippingCostLimit: number;\n useFreeShippingCostLimit: boolean;\n}\n\nexport interface SetShippingFeeRuleFreeShippingCostLimitApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetShippingFeeRuleShippingOptionApiRequest {\n shippingOption?: string | null;\n}\n\nexport interface SetShippingFeeRuleShippingOptionApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SmsCheckApiRequest {\n smsSid?: string | null;\n}\n\nexport interface SmsCheckApiResponse {\n responseStatus?: ResponseStatus | null;\n successful: boolean;\n}\n\nexport interface SmsVerificationDTO {\n action?: string | null;\n cellphoneNumber?: string | null;\n /** @format date-time */\n timestamp: string;\n}\n\nexport interface SmsVerificationsApiResponse {\n responseStatus?: ResponseStatus | null;\n verifications?: SmsVerificationDTO[] | null;\n}\n\nexport interface TaxIdentificationNumberImage {\n filename?: string | null;\n objectName?: string | null;\n}\n\nexport interface TinkBankAccountDto {\n accountNumber?: string | null;\n icon?: string | null;\n name?: string | null;\n}\n\nexport interface TinkGetBankAccountsApiResponse {\n accounts?: TinkBankAccountDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberCompanyContactSsnApiRequest {\n companyContactSsn?: string | null;\n}\n\nexport interface UpdateMemberCompanyContactSsnApiResponse {\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberContactDetailsApiRequest {\n alias?: string | null;\n country?: string | null;\n email?: string | null;\n firstName?: string | null;\n fullName?: string | null;\n lastName?: string | null;\n phoneNumber?: string | null;\n streetName?: string | null;\n town?: string | null;\n userIpAddress?: string | null;\n zipCode?: string | null;\n}\n\nexport interface UpdateMemberContactDetailsApiResponse {\n creditSafeVerificationResult?: CreditSafeNameVerificationResult | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberCurrencyApiRequest {\n currencyCode?: string | null;\n}\n\nexport interface UpdateMemberCurrencyApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberEmailSettingsApiRequest {\n acceptsNewsLetter: boolean;\n acceptsOfferEmails: boolean;\n acceptsUnknownDeviceOrIpEmails?: boolean | null;\n acceptsUpiInfoEmails: boolean;\n notifyBeforeWishListItemEnds: boolean;\n notifyOnFirstWinningBid: boolean;\n notifyWhenItemBecomesUnsold: boolean;\n}\n\nexport interface UpdateMemberEmailSettingsApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberLanguageApiRequest {\n languageCodeIso2?: string | null;\n userIpAddress?: string | null;\n}\n\nexport interface UpdateMemberLanguageApiResponse {\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberPublicProfileHeroImageApiRequest {\n heroImageUrl?: string | null;\n userIpAddress?: string | null;\n}\n\nexport interface UpdateMemberPublicProfileHeroImageApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberPublicProfileInformationApiRequest {\n information?: string | null;\n userIpAddress?: string | null;\n}\n\nexport interface UpdateMemberPublicProfileInformationApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberSelectedDescriptionLanguageApiRequest {\n languageCodeIso2?: string | null;\n}\n\nexport interface UpdateMemberSelectedDescriptionLanguageApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberShippingFromCountryApiRequest {\n countryCodeIso2?: string | null;\n}\n\nexport interface UpdateMemberShippingFromCountryApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberSsnApiRequest {\n ssn?: string | null;\n}\n\nexport interface UpdateMemberSsnApiResponse {\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberTaxIdentificationNumberApiRequest {\n birthDate?: string | null;\n images?: TaxIdentificationNumberImage[] | null;\n taxIdentificationNumber?: string | null;\n}\n\nexport interface UpdateMemberTaxIdentificationNumberApiResponse {\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberTranslationPreferredApiRequest {\n isAutomaticTranslationPreferred: boolean;\n}\n\nexport interface UpdateMemberTranslationPreferredApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface UpdateMemberVatNumberApiRequest {\n vatNumber?: string | null;\n}\n\nexport interface UpdateMemberVatNumberApiResponse {\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ValidateExistingPasswordForMemberApiRequest {\n existingPassword?: string | null;\n}\n\nexport interface ValidateExistingPasswordForMemberApiResponse {\n isValid: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport enum VerificationReason {\n VerificationNotNeeded = 'VerificationNotNeeded',\n NeedInitialVerification = 'NeedInitialVerification',\n NeedsVerificationFixedPriceLimitTwoMonthValidation = 'NeedsVerificationFixedPriceLimitTwoMonthValidation',\n NeedsVerificationFixedPriceLimitExpensive = 'NeedsVerificationFixedPriceLimitExpensive'\n}\n\nexport interface VerifyNonMobilePincodeApiRequest {\n pincode?: string | null;\n}\n\nexport interface VerifyNonMobilePincodeWithIdApiRequest {\n /** @format int32 */\n memberId: number;\n pincode?: string | null;\n recoveryFlowType: RecoveryFlowType;\n}\n\nexport interface VerifyPincodeApiRequest {\n pincode?: string | null;\n}\n\nexport interface VerifyPincodeApiResponse {\n hasActiveVerificationCode: boolean;\n responseStatus?: ResponseStatus | null;\n success: boolean;\n /** @format int32 */\n verificationAttempts: number;\n}\n\nexport interface VerifyPincodeWithIdApiRequest {\n /** @format int32 */\n memberId: number;\n pincode?: string | null;\n recoveryFlowType: RecoveryFlowType;\n}\n\nexport interface PublicProfileApiResponse {\n selectedDescriptionLanguageCodeIso2?: string | null;\n shippingFromCountryCodeIso2?: string | null;\n accountState: MemberAccountState;\n alias?: string | null;\n city?: string | null;\n /** @format int32 */\n combinedShippingDays: number;\n /** @format float */\n detailedSellerRatingAverage?: number | null;\n firstName?: string | null;\n hasShop: boolean;\n heroImage?: string | null;\n information?: string | null;\n isCompanyUser: boolean;\n isSwedishUser: boolean;\n /** @format int32 */\n memberId: number;\n /** @format date-time */\n memberSince: string;\n responseStatus?: ResponseStatus | null;\n shopLogoUrl?: string | null;\n /** @format int32 */\n totalRating: number;\n translatedInformation?: string | null;\n}\n\nexport interface Row {\n /** @format date-time */\n createdDate: string;\n key?: string | null;\n /** @format date-time */\n updatedDate: string;\n value?: string | null;\n}\n\nexport interface SaveFeedbackAsBuyerApiRequest {\n /** @format int32 */\n commResponsiveness?: number | null;\n comment?: string | null;\n isPositive: boolean;\n /** @format int32 */\n itemAsDescribed?: number | null;\n /**\n * @deprecated\n * @format int32\n */\n itemId: number;\n reportInr: boolean;\n /**\n * @deprecated\n * @format int32\n */\n sellerMemberId: number;\n /** @format int32 */\n shippingHandlingCharges?: number | null;\n /** @format int32 */\n shippingTime?: number | null;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface SaveFeedbackAsBuyerApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SaveFeedbackAsSellerApiRequest {\n /**\n * @deprecated\n * @format int32\n */\n buyerMemberId: number;\n comment?: string | null;\n isPositive: boolean;\n /**\n * @deprecated\n * @format int32\n */\n itemId: number;\n /** @format int32 */\n paymentTime?: number | null;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface SaveFeedbackAsSellerApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type SellerAutoFeedbackApiRequest = object;\n\nexport interface SellerAutoFeedbackApiResponse {\n /** @format date-time */\n created: string;\n criteria: SellerAutoFeedbackCriteria;\n message?: string | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type SellerAutoPaymentReminderApiRequest = object;\n\nexport interface SellerAutoPaymentReminderApiResponse {\n enabled: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface CampaignCodeItem {\n auctionId?: number[] | null;\n campaignCode?: string | null;\n /** @format int32 */\n campaignCodeId: number;\n}\n\nexport interface CommissionFeeSummaryDto {\n /** @format double */\n maxFee: number;\n /** @format double */\n maxPercentage: number;\n /** @format double */\n minFee: number;\n /** @format double */\n minPercentage: number;\n}\n\nexport interface FeatureSummaryByIdsApiResponse {\n campaignCodes?: CampaignCodeItem[] | null;\n featureSummaryList?: FeatureSummaryApiDto[] | null;\n isCompanyUser: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface FeatureSummaryDto {\n /** @format int32 */\n count: number;\n name?: string | null;\n /** @format int32 */\n price: number;\n}\n\nexport interface ItemApiDto {\n /** @format int32 */\n id: number;\n mainImageUrl?: ItemImageUrls | null;\n mainImageUrlTemplate?: string | null;\n /** @format int32 */\n price: number;\n /** @deprecated */\n selectedShipping?: SelectedShipping | null;\n shortDescription?: string | null;\n}\n\nexport interface MarkAsPaidBySellerApiRequest {\n paidConfirmed: boolean;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface MarkAsPaidBySellerApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport type MemberActiveItemsSummaryApiRequest = object;\n\nexport interface MemberActiveItemsSummaryApiResponse {\n responseStatus?: ResponseStatus | null;\n summary?: MemberActiveItemsSummaryApiDto | null;\n}\n\nexport type MemberListingFeeApiRequest = object;\n\nexport interface MemberListingFeeApiResponse {\n /** @format int32 */\n maxFreeListingsPerMonth: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MemberPickListApiResponse {\n /** @format int32 */\n hiddenCount: number;\n items?: PickListBuyerApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface MemberPickListV2ApiResponse {\n /** @format int64 */\n filterHitCount: number;\n /** @format int32 */\n hiddenCount: number;\n items?: PickListBuyerV2ApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface MemberSoldItemBuyerInfoApiResponse {\n buyerContactDetails?: ContactDetailsApiDto | null;\n buyerProfile?: PublicProfileApiDto | null;\n items?: MemberSoldItemApiDto[] | null;\n paidStatus?: string | null;\n paymentMethod?: string | null;\n paymentOptions?: PaymentOptionApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n sellerContactDetails?: ContactDetailsApiDto | null;\n /** @format double */\n totalOrderPrice: number;\n /** @format double */\n totalOrderPriceWithoutShipping: number;\n /** @format double */\n vatPercent?: number | null;\n}\n\nexport interface MemberSoldItemByTransactionIdApiResponse {\n item?: MemberSoldItemApiDto | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MemberSoldItemShippingInfoV2ApiResponse {\n buyerContactDetails?: ContactDetailsApiDto | null;\n isQuickFlowPossible: boolean;\n /** @deprecated */\n item?: ItemApiDto | null;\n items?: ItemApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n selectedShipping?: SelectedShipping | null;\n /** @format uuid */\n shipmentCheckoutId: string;\n}\n\nexport interface MemberSoldItemsApiResponse {\n /** @format int32 */\n hiddenCount: number;\n items?: MemberSoldItemApiDto[] | null;\n /** @format int32 */\n notPaidCount: number;\n /** @format int32 */\n paidCount: number;\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n shippedCount: number;\n /** @format int64 */\n totalCount: number;\n}\n\nexport interface MemberSoldItemsByPurchaseOrderIdApiResponse {\n items?: MemberSoldItemApiDto[] | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport type MemberSoldItemsSummaryApiRequest = object;\n\nexport interface MemberSoldItemsSummaryApiResponse {\n responseStatus?: ResponseStatus | null;\n summary?: MemberSoldItemsSummaryApiDto | null;\n}\n\nexport type MemberStatsThisMonthApiRequest = object;\n\nexport interface MemberStatsThisMonthApiResponse {\n /** @format int32 */\n activeThisMonthCount: number;\n /** @format int32 */\n listedThisMonthCount: number;\n /** @format int32 */\n maxFreeListingsPerMonth: number;\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n soldThisMonthCount: number;\n /** @format int32 */\n unsoldThisMonthCount: number;\n}\n\nexport interface OrderInfoApiResponse {\n bookedShipping?: BookedShipping | null;\n buyerProtection?: BuyerProtectionApiDto | null;\n /** @format double */\n discountCodeAmount?: number | null;\n discounts?: DiscountDto[] | null;\n isFeedbackLeftByBuyer: boolean;\n isMarkedAsShipped: boolean;\n items?: OrderItem[] | null;\n offeredShippingOptions?: ShippingApiDto[] | null;\n paidStatus?: string | null;\n paymentMethod?: string | null;\n /** @format double */\n paymentMethodAmount?: number | null;\n paymentOptions?: PaymentOptionApiDto[] | null;\n /** @format uuid */\n purchaseOrderId: string;\n responseStatus?: ResponseStatus | null;\n selectedShipping?: ShippingApiDto | null;\n sellerContactDetails?: ContactDetailsApiDto | null;\n sellerProfile?: PublicProfileApiDto | null;\n shippingDiscount?: ShippingDiscount | null;\n /** @format double */\n totalOrderPrice: number;\n /** @format double */\n totalOrderPriceWithoutShipping: number;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface OrderItem {\n imageUrl?: string | null;\n imageUrlTemplate?: string | null;\n /** @format int32 */\n itemId: number;\n /** @format double */\n price: number;\n shortDescription?: string | null;\n /** @format date-time */\n transactionDate: string;\n}\n\nexport interface RestartItemsSummaryApiResponse {\n commission?: CommissionFeeSummaryDto | null;\n features?: FeatureSummaryDto[] | null;\n isCompany: boolean;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SelectedShipping {\n /** @format int32 */\n productId?: number | null;\n providerId?: string | null;\n}\n\nexport interface SetItemShippedApiRequest {\n /** @format uuid */\n purchaseOrderId: string;\n shipped: boolean;\n}\n\nexport interface SetItemShippedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetItemShippingBookedApiRequest {\n booked: boolean;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface SetItemShippingBookedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetTransactionItemShippedApiRequest {\n shipped: boolean;\n /** @format int32 */\n transactionId: number;\n}\n\nexport interface SetTransactionItemShippedApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ShopItemPurchaseHistoryApiResponse {\n /** @format int32 */\n categoryId: number;\n /** @format date-time */\n endDate: string;\n imageUrl?: string | null;\n imageUrlTemplate?: string | null;\n /** @format int32 */\n itemId: number;\n purchases?: ShopItemPurchase[] | null;\n responseStatus?: ResponseStatus | null;\n shortDescription?: string | null;\n userReference?: string | null;\n}\n\nexport interface SetBuyerTransactionVisibilityApiRequest {\n hidden: boolean;\n transactionIdList?: number[] | null;\n}\n\nexport interface SetBuyerTransactionVisibilityApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetItemVisibilityApiRequest {\n hidden: boolean;\n itemIds?: number[] | null;\n}\n\nexport interface SetItemVisibilityApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SetTransactionVisibilityApiRequest {\n hidden: boolean;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface SetTransactionVisibilityApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface SystemMessage {\n severity: SystemMessageSeverity;\n type: SystemMessageType;\n}\n\nexport enum SystemMessageSeverity {\n Warning = 'Warning',\n Info = 'Info'\n}\n\nexport enum SystemMessageType {\n InvoiceOverdue = 'InvoiceOverdue',\n InvoiceUnpaid = 'InvoiceUnpaid',\n PayoutFailed = 'PayoutFailed',\n PayoutReadyBankAccountMissing = 'PayoutReadyBankAccountMissing',\n BankAccountMissing = 'BankAccountMissing',\n HyperwalletPayeeVerificationRequired = 'HyperwalletPayeeVerificationRequired',\n HyperwalletPayeeVerificationUnderReview = 'HyperwalletPayeeVerificationUnderReview',\n PayoutProviderOnboardingFailed = 'PayoutProviderOnboardingFailed',\n KycQuestionnaire = 'KycQuestionnaire',\n PayoutReadyVerificationRequired = 'PayoutReadyVerificationRequired',\n OutstandingTraderaPayLicense = 'OutstandingTraderaPayLicense',\n PayoutReadyOutstandingTraderaPayLicense = 'PayoutReadyOutstandingTraderaPayLicense',\n CollectVatNumber = 'CollectVatNumber',\n CollectTin = 'CollectTin'\n}\n\nexport interface UnblockMemberApiRequest {\n /** @format int32 */\n memberIdToUnblock: number;\n}\n\nexport interface UnblockMemberApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface NewDisputePageApiResponse {\n items?: DisputeV2ItemData[] | null;\n purchaseOrder?: DisputeV2PurchaseOrderData | null;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface ProfilePageApiResponse {\n accountState?: string | null;\n alias?: string | null;\n city?: string | null;\n cleanedAlias?: string | null;\n /** @format int32 */\n combinedShippingDays: number;\n /** @format float */\n detailedSellerRatingAverage?: number | null;\n existsInFavouriteSellers: boolean;\n hasShop: boolean;\n heroImageUrl?: string | null;\n inFavouriteSellers: boolean;\n intro?: string | null;\n isCompany: boolean;\n isCompanyUser: boolean;\n /** @format int32 */\n memberId: number;\n /** @format date-time */\n memberSince: string;\n /** @format int32 */\n profileMemberId: number;\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n totalRating?: number | null;\n translatedIntro?: string | null;\n}\n\nexport interface WebChangeEmailWithIdApiRequest {\n bankIdOrderRef?: string | null;\n email?: string | null;\n /** @format int32 */\n memberId: number;\n}\n\nexport enum ItemState {\n BidderAuctionRemoved = 'BidderAuctionRemoved',\n BidderBidRemoved = 'BidderBidRemoved',\n BidderEndedWon = 'BidderEndedWon',\n BidderEndedReservedPriceNotReached = 'BidderEndedReservedPriceNotReached',\n BidderEndedNotWon = 'BidderEndedNotWon',\n BidderActiveLeading = 'BidderActiveLeading',\n BidderActiveReservedPriceNotReached = 'BidderActiveReservedPriceNotReached',\n BidderActiveOverbidden = 'BidderActiveOverbidden',\n GeneralActive = 'GeneralActive',\n GeneralEnded = 'GeneralEnded',\n PurchasedNotPaid = 'PurchasedNotPaid',\n PurchasedPaid = 'PurchasedPaid',\n PurchasedDone = 'PurchasedDone',\n ShopItemActive = 'ShopItemActive',\n ShopItemEnded = 'ShopItemEnded',\n ShopItemEndedWon = 'ShopItemEndedWon',\n BuyItNowEndedWon = 'BuyItNowEndedWon',\n BuyItNowEnded = 'BuyItNowEnded',\n BuyItNowActive = 'BuyItNowActive',\n SellerActiveBids = 'SellerActiveBids',\n SellerActiveNoBids = 'SellerActiveNoBids',\n SellerReservedPriceNotReached = 'SellerReservedPriceNotReached',\n SellerSoldNotPaid = 'SellerSoldNotPaid',\n SellerSoldDone = 'SellerSoldDone',\n SellerSoldShipped = 'SellerSoldShipped',\n SellerSoldPaid = 'SellerSoldPaid',\n SellerSoldShippingBooked = 'SellerSoldShippingBooked'\n}\n\nexport interface WishListApiResponse {\n items: WishListItemCardViewModel[];\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n totalCount: number;\n}\n\nexport interface WishListItemCardViewModel {\n /** @format int32 */\n buyNowPrice: number;\n displayHighlighted: boolean;\n /** @format date-time */\n endDate: string;\n hasFreeShipping: boolean;\n imageSecondaryUrl: string;\n imageUrl: string;\n isActive: boolean;\n isLeading: boolean;\n isOverbidden: boolean;\n isWinner: boolean;\n /** @format int32 */\n itemId: number;\n itemState: ItemState;\n itemType: string;\n itemUrl: string;\n /** @format int32 */\n maxBidAmount: number;\n preferredShipping: WishListItemShippingOptionViewModel;\n /** @format int32 */\n price: number;\n sellerAlias: string;\n /** @format int32 */\n sellerMemberId: number;\n shortDescription: string;\n /** @format int32 */\n totalBids: number;\n}\n\nexport interface WishListItemShippingOptionViewModel {\n /** @format double */\n cost: number;\n type: string;\n}\n\nexport interface AddItemToWishListApiRequest {\n /** @format int32 */\n itemId: number;\n}\n\nexport interface AddItemToWishListApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetWishListApiResponse {\n responseStatus?: ResponseStatus | null;\n /** @format int32 */\n totalCount: number;\n wishListItems?: WishListItemDto[] | null;\n}\n\nexport type GetWishListItemIdsApiRequest = object;\n\nexport interface GetWishListItemIdsApiResponse {\n responseStatus?: ResponseStatus | null;\n wishListItemsIds?: number[] | null;\n}\n\nexport type GetWishlistItemsEndingTodayCountApiRequest = object;\n\nexport interface GetWishlistItemsEndingTodayCountApiResponse {\n /** @format int32 */\n numberOfItems: number;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface MemberBidInfo {\n auctionRemoved: boolean;\n bidRemoved: boolean;\n /** @format int32 */\n maxBidAmount: number;\n /** @format int32 */\n memberId: number;\n reservePriceReached: boolean;\n}\n\nexport interface RemoveItemFromWishListApiResponse {\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface RemoveItemsFromWishListApiRequest {\n itemIds?: number[] | null;\n}\n\nexport interface WishListItemDto {\n /** @format date-time */\n addedToWishList: string;\n /** @format int32 */\n bidCount: number;\n boughtByCurrentMember: boolean;\n /** @format int32 */\n categoryId: number;\n /** @format int32 */\n currentBidAmount: number;\n displayHighlighted: boolean;\n /** @format date-time */\n endDate: string;\n /** @format int32 */\n fixedPrice: number;\n hasCommitUpFront: boolean;\n hasEnded: boolean;\n hasReservePrice: boolean;\n isAuthenticated: boolean;\n isAvailableForOffers?: boolean | null;\n isBuyItNow: boolean;\n isPaid?: boolean | null;\n isShopItem: boolean;\n /** @format int32 */\n itemId: number;\n /** @format int32 */\n itemPrice?: number | null;\n /** @format int32 */\n leadingBidMemberId?: number | null;\n mainImage?: ItemImageUrls | null;\n mainImageTemplate?: string | null;\n memberBid?: MemberBidInfo | null;\n /** @format int32 */\n nextValidBidAmount?: number | null;\n /** @format int32 */\n openingBid?: number | null;\n preferredShipping?: ShippingApiDto | null;\n reservePriceReached: boolean;\n secondaryImage?: ItemImageUrls | null;\n secondaryImageTemplate?: string | null;\n sellerAlias?: string | null;\n /** @format int32 */\n sellerMemberId: number;\n /** @format int32 */\n sellerTotalRating: number;\n title?: string | null;\n /** @format date-time */\n transactionDate?: string | null;\n /** @format int32 */\n transactionType?: number | null;\n type: ItemTypeApiDto;\n}\n\nexport interface Address {\n countryCodeIso2?: string | null;\n city?: string | null;\n country?: string | null;\n street?: string | null;\n zipCode?: string | null;\n}\n\nexport interface ShippingDiscount {\n partnerProvider?: string | null;\n /** @format int32 */\n price: number;\n /** @format int32 */\n shippingProductId?: number | null;\n shippingProvider?: string | null;\n}\n\nexport enum PickListFilterPaidStatus {\n All = 'All',\n Paid = 'Paid',\n Unpaid = 'Unpaid'\n}\n\nexport enum PickListFilterShippedStatus {\n All = 'All',\n Shipped = 'Shipped',\n NotShipped = 'NotShipped'\n}\n\nexport interface ShopItemPurchase {\n buyerMemberAlias?: string | null;\n /** @format int32 */\n buyerMemberId: number;\n /** @format int32 */\n buyerTotalRating: number;\n /** @format int32 */\n categoryId: number;\n /** @format int32 */\n price: number;\n /** @format date-time */\n transactionDate: string;\n}\n\nexport interface TransactionFeedbackRemovalRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface TransactionItemShippedCreateParams {\n request?: SetTransactionItemShippedApiRequest;\n}\n\nexport interface TransactionVisibilityCreateParams {\n request?: SetTransactionVisibilityApiRequest;\n}\n\nexport interface TransactionsRequest {\n transactionIds?: number[];\n}\n\nexport interface TranslatedRequest {\n toLanguageCodeIso2?: string;\n feedbackIds?: number[];\n}\n\nexport interface TranslationPreferredUpdateParams {\n request?: UpdateMemberTranslationPreferredApiRequest;\n}\n\nexport interface UnreadNotificationsCountRequest {\n request?: GetUnreadNotificationsCountApiRequest;\n}\n\nexport interface UpiStrikeRequest {\n /** @format int32 */\n transactionId?: number;\n}\n\nexport interface UppoStrikeCreateParams {\n request?: AddUnpaidPurchaseOrderStrikeApiRequest;\n}\n\nexport interface UppoStrikeRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n}\n\nexport interface V2EscalateCreateParams {\n request?: EscalateDisputeV2ApiRequest;\n}\n\nexport interface V2GetDataRequest {\n /** @format int32 */\n disputeId?: number;\n}\n\nexport interface V2ImageUploadUrlCreateParams {\n request?: CreateDisputeImageUploadUrlApiRequest;\n}\n\nexport interface V2MarkAsSolvedCreateParams {\n request?: MarkDisputeAsSolvedV2ApiRequest;\n}\n\nexport interface V2SaveDataCreateParams {\n request?: SaveDisputeDataV2ApiRequest;\n}\n\nexport interface ValidateExistingPasswordCreateParams {\n request?: ValidateExistingPasswordForMemberApiRequest;\n}\n\nexport interface VatNumberUpdateParams {\n request?: UpdateMemberVatNumberApiRequest;\n}\n\nexport interface VatdetailsRequest {\n request?: GetMemberVatDetailsApiRequest;\n}\n\nexport interface VerificationStatusRequest {\n request?: GetMemberVerificationStatusApiRequest;\n}\n\nexport interface VerifyCreateParams {\n request?: VerifyPayoutTransferMethodApiRequest;\n}\n\nexport interface VerifyNonmobilePincodeCreateParams {\n request?: VerifyNonMobilePincodeApiRequest;\n}\n\nexport interface VerifyNonmobilePincodeWithIdCreateParams {\n request?: VerifyNonMobilePincodeWithIdApiRequest;\n}\n\nexport interface VerifyPincodeCreateParams {\n request?: VerifyPincodeApiRequest;\n}\n\nexport interface VerifyPincodeWithIdCreateParams {\n request?: VerifyPincodeWithIdApiRequest;\n}\n\nexport interface WinnerEmailUpdateParams {\n request?: SaveWinnerEmailApiRequest;\n}\n\nexport interface WishListRequest {\n shippingCountryCodeIso2?: string;\n languageCodeIso2?: string;\n automaticTranslationPreferred?: boolean;\n statusFilter?: string;\n /** @format int32 */\n pageSize?: number;\n /** @format int32 */\n page?: number;\n}\n\nexport interface WishlistCreateParams {\n request?: AddItemToWishListApiRequest;\n}\n\nexport interface WishlistDeleteParams {\n request?: RemoveItemsFromWishListApiRequest;\n}\n\nexport interface WishlistRequest {\n statusFilter?: WishListStatusFilter;\n /** @format int32 */\n take?: number;\n /** @format int32 */\n skip?: number;\n languageCodeIso2?: string;\n}\n\nexport interface WithAliasRequest {\n alias?: string;\n}\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\n\nexport const webApiTags = {\n Item: 'Item',\n Offer: 'Offer',\n KycPendingActions: 'KycPendingActions',\n KycQuestionnaire: 'KycQuestionnaire'\n};\n\nexport const webApi = createApi({\n reducerPath: 'webApi',\n tagTypes: [\n webApiTags.Item,\n webApiTags.Offer,\n webApiTags.KycPendingActions,\n webApiTags.KycQuestionnaire\n ],\n baseQuery: isomorphicWebApiBaseQuery,\n // endpoints are added through injectEndpoints\n endpoints: () => ({})\n});\n","import qs from 'qs';\nimport type {\n RemoveItemFromWishListApiResponse,\n RemoveItemsFromWishListApiRequest,\n WishListApiResponse,\n WishListRequest\n} from 'tradera/state/services/types/webapi-member-generated';\nimport { isomorphicBaseQueryForWishListableItems } from './utils/webapi-base-query';\nimport {\n createApi,\n defaultSerializeQueryArgs\n} from '@reduxjs/toolkit/query/react';\nimport { isServer } from 'tradera/utils/nextjs';\nimport {\n selectAutomaticTranslationPreferred,\n selectPreferredLanguageCode\n} from '../language/selectors';\nimport { useAppSelector } from '../hooks';\nimport { selectShippingRegionCountryCodeIso2 } from '../shipping-region/selectors';\nimport { GtmService } from 'tradera/services/google-tagmanager-service';\nimport { wishlistRemoveRange } from '../items/reducer';\nimport { createSelector } from '@reduxjs/toolkit';\n\nexport enum Tags {\n WISH_LIST = 'WISH_LIST'\n}\n\n/**\n * Creates a query params object for RTK Query.\n * The query parameters for RTK Query is used as key for caching hence\n * must always be the same for the same query on server and client.\n */\nexport const getDefaultWishListParams = ({\n page = 1,\n pageSize = 50,\n statusFilter = 'all',\n languageCodeIso2 = 'sv',\n shippingCountryCodeIso2 = 'SE',\n automaticTranslationPreferred = true\n}: WishListRequest): WishListRequest => {\n return {\n page,\n pageSize,\n statusFilter,\n languageCodeIso2,\n shippingCountryCodeIso2,\n automaticTranslationPreferred\n };\n};\n\nexport const selectWishListParams = ({\n page,\n pageSize,\n statusFilter\n}: Pick) =>\n createSelector(\n selectPreferredLanguageCode,\n selectShippingRegionCountryCodeIso2,\n selectAutomaticTranslationPreferred,\n (\n languageCodeIso2,\n shippingCountryCodeIso2,\n automaticTranslationPreferred\n ) =>\n getDefaultWishListParams({\n page,\n pageSize,\n statusFilter,\n languageCodeIso2,\n shippingCountryCodeIso2,\n automaticTranslationPreferred\n })\n );\n\nexport const useWishListParams = (\n params: Pick\n) => useAppSelector(selectWishListParams(params));\n\nexport const wishListApi = createApi({\n reducerPath: 'wishListApi',\n baseQuery: isomorphicBaseQueryForWishListableItems,\n tagTypes: Object.keys(Tags),\n endpoints: (builder) => ({\n getWishList: builder.query({\n query: (params) => {\n const queryString = qs.stringify(params);\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/member/web/wish-list?${queryString}`;\n },\n providesTags: [Tags.WISH_LIST],\n extraOptions: {\n getWishListableItems: (response: WishListApiResponse) =>\n response.items.map((x) => ({\n itemId: x.itemId,\n inWishList: true\n }))\n }\n }),\n deleteWishListItems: builder.mutation<\n RemoveItemFromWishListApiResponse,\n RemoveItemsFromWishListApiRequest\n >({\n invalidatesTags: [Tags.WISH_LIST],\n query: (params) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return {\n url: `${baseUrl}/member/wishlist`,\n method: 'DELETE',\n body: params\n };\n },\n onQueryStarted: async (params, { dispatch }) => {\n if (params.itemIds && params.itemIds.length > 0) {\n GtmService.trackAction(\n 'Wish list',\n 'Batch select',\n 'Delete'\n );\n dispatch(wishlistRemoveRange(params.itemIds));\n }\n }\n }),\n getWishListEndless: builder.query<\n WishListApiResponse & { page: number },\n WishListRequest\n >({\n query: (params) => {\n const queryString = qs.stringify(params);\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/member/web/wish-list?${queryString}`;\n },\n transformResponse: (response: WishListApiResponse, _, request) => {\n return { ...response, page: request.page ?? 1 };\n },\n providesTags: [Tags.WISH_LIST],\n serializeQueryArgs: ({\n queryArgs: { page, ...otherQueryArgs },\n endpointDefinition,\n endpointName\n }) => {\n // Exclude pageNumber from queryArgs to be ablue to use same cache for infiniteScroll\n return defaultSerializeQueryArgs({\n endpointName,\n queryArgs: otherQueryArgs,\n endpointDefinition\n });\n },\n forceRefetch({ currentArg, previousArg }) {\n return currentArg?.page !== previousArg?.page;\n },\n merge: (currentCacheData, response) => {\n return {\n ...currentCacheData,\n items: [\n ...(currentCacheData.items ?? []),\n ...(response.items ?? [])\n ],\n totalCount: response.totalCount,\n page: response.page\n };\n },\n extraOptions: {\n getWishListableItems: (response: WishListApiResponse) =>\n response.items.map((x) => ({\n itemId: x.itemId,\n inWishList: true\n }))\n }\n })\n })\n});\n\nexport const {\n useGetWishListQuery,\n useGetWishListEndlessQuery,\n useDeleteWishListItemsMutation,\n endpoints,\n util\n} = wishListApi;\n","import type { GetWishlistItemsEndingTodayCountApiResponse } from 'tradera/state/services/types/webapi-member-generated';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { isServer } from 'tradera/utils/nextjs';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\n\nexport enum Tags {\n WISH_LIST_ENDING_TODAY = 'WISH_LIST_ENDING_TODAY'\n}\nexport const wishListItemsEndingTodayApi = createApi({\n reducerPath: 'wishListItemsEndingTodayApi',\n baseQuery: isomorphicWebApiBaseQuery,\n tagTypes: Object.keys(Tags),\n endpoints: (builder) => ({\n getWishlistItemsEndingTodayCount: builder.query<\n GetWishlistItemsEndingTodayCountApiResponse,\n void\n >({\n providesTags: [Tags.WISH_LIST_ENDING_TODAY],\n query: () => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/member/wishlist/endingtodaycount`;\n }\n })\n })\n});\n\nexport const { useGetWishlistItemsEndingTodayCountQuery, endpoints, util } =\n wishListItemsEndingTodayApi;\n","import {\n selectGeolocation,\n selectIsLoggedIn,\n selectIsOutsideSweden\n} from 'tradera/state/member/selectors';\nimport { selectPreferredLanguage } from 'tradera/state/language/selectors';\nimport { getLanguageFromCountryCode } from 'tradera/localization/languagecode';\nimport {\n isDenmarkCountryCode,\n isNetherlandsCountryCode,\n isSwedenCountryCodeOrUndefined\n} from 'tradera/localization/countrycode';\nimport type { RootState } from '../configure-store';\n\nexport const selectShowRegionSelection = (state: RootState) =>\n !selectIsLoggedIn(state) && selectIsOutsideSweden(state);\nexport const selectAvailableShippingCountryCodes = (state: RootState) =>\n state.shippingRegion.availableShippingCountryCodes;\nexport const selectAvailableShippingCountries = (state: RootState) =>\n state.shippingRegion.availableShippingCountries;\nexport const selectShippingCountry = (state: RootState) =>\n state.shippingRegion.shippingCountry;\nexport const selectIsLoadingAvailableShippingCountries = (state: RootState) =>\n state.shippingRegion.isLoadingAvailableShippingCountries;\nexport const selectHasLoadedAvailableShippingCountries = (state: RootState) =>\n state.shippingRegion.hasLoadedAvailableShippingCountries;\nexport const selectShippingRegionCountryCodeIso2 = (state: RootState) =>\n state.shippingRegion.shippingCountry?.countryCodeIso2;\nexport const selectIsSwedishVisitor = (state: RootState) =>\n isSwedenCountryCodeOrUndefined(selectShippingRegionCountryCodeIso2(state));\nexport const selectIsDanishVisitor = (state: RootState) =>\n isDenmarkCountryCode(selectShippingRegionCountryCodeIso2(state));\nexport const selectIsDutchVisitor = (state: RootState) =>\n isNetherlandsCountryCode(selectShippingRegionCountryCodeIso2(state));\n\nconst gpsMatchesLanguage = (state: RootState) => {\n const geoLocation = selectGeolocation(state);\n if (!geoLocation) {\n return true;\n }\n const country = geoLocation?.isoCode?.toLowerCase();\n const expectedLang = getLanguageFromCountryCode(country);\n const language =\n selectPreferredLanguage(state)?.languageCodeIso2?.toLowerCase() || 'sv';\n return expectedLang === language;\n};\n\nexport const selectShowLocalizationRegionPicker = (state: RootState) =>\n !selectIsLoggedIn(state) &&\n !state.shippingRegion.regionPickerDismissed &&\n !state.shippingRegion.shippingCountryCookieValue &&\n !gpsMatchesLanguage(state);\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\n\ntype StatusState = {\n isActionsPerFullPageLoadDone: boolean;\n hasReportedViewportDiff: boolean;\n loadedLanguages: string[];\n};\n\nexport const initialState: StatusState = {\n isActionsPerFullPageLoadDone: false,\n hasReportedViewportDiff: false,\n loadedLanguages: []\n};\n\nconst slice = createSlice({\n name: 'status',\n initialState,\n reducers: {\n setIsActionsPerFullPageLoadDone: (state, { payload }) => {\n state.isActionsPerFullPageLoadDone = payload;\n },\n setHasReportedViewportDiff: (state, { payload }) => {\n state.hasReportedViewportDiff = payload;\n },\n addLoadedLanguage: (state, { payload }: PayloadAction) => {\n if (!state.loadedLanguages.includes(payload)) {\n state.loadedLanguages = [...state.loadedLanguages, payload];\n }\n }\n }\n});\n\nexport const {\n setIsActionsPerFullPageLoadDone,\n setHasReportedViewportDiff,\n addLoadedLanguage\n} = slice.actions;\n\nexport const reducer = slice.reducer;\n","import { logger } from 'packages/logger';\nimport { getReturnUrl } from 'tradera/utils/login';\nimport { API_ERRORS } from 'tradera/utils/api';\nimport { cache, CACHE_KEYS } from 'tradera/utils/cache';\nimport {\n openProfileMenu,\n closeModal,\n openNotificationOptinModal,\n logOut,\n setSystemMessages,\n setSystemBadges\n} from './reducer';\nimport { getSystemMessages, getSystemBadges } from './api';\nimport { SystemMessageSeverity } from '../services/types/webapi-member-generated';\n\n/**\n * signIn\n * @param {object} [payload]\n * @param {string} payload.redirectUrl - where to send the user after login completes\n * @param {boolean} [payload.siteHeader] - Experiment: different behaviour for clicks in site header\n */\nconst signIn = (payload) => (dispatch, getStore) => {\n const {\n environment: { featureSwitches }\n } = getStore();\n\n if (!featureSwitches['login-anywhere']) {\n window.location.href = `/login${getReturnUrl(payload?.redirectUrl)}`;\n } else {\n dispatch(openProfileMenu(payload?.redirectUrl));\n dispatch(closeModal());\n }\n};\n\n/**\n * Open a notification optin modal\n *\n * @param {boolean} type - type of notifications to show modal for\n * @returns {function(*, *): boolean}\n */\nconst openNotificationOptinModalAction =\n (modalType, gaLabel, title, description, tagGroups) =>\n async (dispatch, getState) => {\n const { pushNotifications } = getState();\n if (!pushNotifications.enabled) {\n return;\n }\n if (pushNotifications.shownModals[modalType] === true) {\n return;\n }\n dispatch(\n openNotificationOptinModal({\n modalType,\n gaLabel,\n title,\n description,\n tagGroups\n })\n );\n };\nconst fetchSystemMessages = () => async (dispatch, getState) => {\n const {\n environment: { featureSwitches },\n member: { isLoggedIn }\n } = getState();\n if (featureSwitches && featureSwitches['mytradera-alerts'] && isLoggedIn) {\n try {\n let systemMessages = cache.read(CACHE_KEYS.SYSTEM_MESSAGES);\n if (!systemMessages?.messages) {\n const fetchedMessages = await getSystemMessages();\n if (fetchedMessages?.data?.items) {\n systemMessages = {\n messages: fetchedMessages.data.items.reduce(\n (acc, message) => ({\n ...acc,\n [message.type]: true\n }),\n {}\n ),\n notificationCount: fetchedMessages.data.items.filter(\n (message) =>\n message.severity ===\n SystemMessageSeverity.Warning\n ).length\n };\n cache.write(CACHE_KEYS.SYSTEM_MESSAGES, systemMessages);\n }\n }\n dispatch(setSystemMessages(systemMessages));\n } catch (error) {\n // Invalidate cache to fetch fresh again next action\n cache.remove(CACHE_KEYS.SYSTEM_MESSAGES);\n switch (error.message) {\n case API_ERRORS.LOGGED_OUT:\n await dispatch(logOutAction());\n window.location = '/login/logout';\n break;\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 }\n};\n\nconst fetchSystemBadges = () => async (dispatch, getState) => {\n const {\n member: { isLoggedIn }\n } = getState();\n if (!isLoggedIn) return;\n\n try {\n let systemBadges = cache.read(CACHE_KEYS.SYSTEM_BADGES);\n if (!systemBadges?.badges) {\n const fetchedBadges = await getSystemBadges();\n if (fetchedBadges?.data?.badges) {\n const badgeMap = fetchedBadges.data.badges.reduce(\n (acc, badge) => ({\n ...acc,\n [badge.type]: badge\n }),\n {}\n );\n systemBadges = {\n badges: badgeMap,\n notificationCount: badgeMap.PayoutsActivity ? 1 : 0\n };\n cache.write(CACHE_KEYS.SYSTEM_BADGES, systemBadges);\n }\n }\n dispatch(setSystemBadges(systemBadges));\n } catch (error) {\n // Invalidate cache to fetch fresh again next action\n cache.remove(CACHE_KEYS.SYSTEM_BADGES);\n if (error.message === API_ERRORS.LOGGED_OUT) {\n await dispatch(logOutAction());\n window.location = '/login/logout';\n }\n }\n};\n\nconst reloadSystemMessages = () => (dispatch) => {\n cache.remove(CACHE_KEYS.SYSTEM_MESSAGES);\n dispatch(fetchSystemMessages());\n};\n\nconst reloadSystemBadges = () => (dispatch) => {\n cache.remove(CACHE_KEYS.SYSTEM_BADGES);\n dispatch(fetchSystemBadges());\n};\n\nconst logOutAction = () => async (dispatch) => {\n cache.remove(CACHE_KEYS.MESSAGING_BADGES);\n cache.remove(CACHE_KEYS.SYSTEM_MESSAGES);\n cache.remove(CACHE_KEYS.SYSTEM_BADGES);\n\n // This is a hacky way to log out from Firebase even though the Firebase\n // app might not be loaded currently. We can use the firebase.auth().signOut()\n // method if inside Messaging and the Firebase app is loaded, but after\n // leaving Messaging we need to delete the database that holds auth information\n // to make sure the user is logged out.\n indexedDB.deleteDatabase('firebaseLocalStorageDb');\n\n dispatch(logOut());\n};\n\nexport default {\n signIn,\n openNotificationOptinModalAction,\n fetchSystemMessages,\n fetchSystemBadges,\n reloadSystemMessages,\n reloadSystemBadges,\n logOutAction\n};\n\nexport { signIn };\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { MODAL_STATE } from 'tradera/constants/ui';\nimport { getInitialBadges, type UiState } from './initial-state';\n\nconst uiSlice = createSlice({\n name: 'ui',\n initialState: {} as UiState,\n reducers: {\n initialize: (_state, { payload }) => {\n return {\n ...payload\n };\n },\n toggleHeaderSearch: (state, { payload }) => {\n state.showHeaderSearch = payload;\n },\n\n openVideoModal: (state, { payload }) => {\n const {\n videoUrl,\n videoId,\n title,\n pageType,\n buttonLink,\n buttonText\n } = payload;\n state.videoModal = {\n ...state.videoModal,\n open: MODAL_STATE.OPEN,\n videoUrl,\n videoId,\n title,\n pageType,\n buttonLink,\n buttonText\n };\n },\n closeVideoModal: (state) => {\n state.videoModal.open = MODAL_STATE.CLOSED;\n },\n openNewMessageModal: (state, { payload }) => {\n state.newMessageModal = {\n open: MODAL_STATE.OPEN,\n title: payload.title,\n senderId: payload.senderId,\n recipientId: payload.recipientId,\n recipientAlias: payload.recipientAlias,\n itemId: payload.itemId,\n itemTitle: payload.itemTitle,\n itemImageUrl: payload.itemImageUrl,\n purchaseOrderId: payload.purchaseOrderId,\n itemSellerId: payload.itemSellerId\n };\n },\n closeNewMessageModal: (state) => {\n state.newMessageModal.open = MODAL_STATE.CLOSED;\n },\n openNotificationOptinModal: (state, { payload }) => {\n const { modalType, gaLabel, title, description, tagGroups } =\n payload;\n state.notificationOptinModal = {\n ...state.notificationOptinModal,\n open: MODAL_STATE.OPEN,\n modalType,\n gaLabel,\n title,\n description,\n tagGroups\n };\n },\n closeNotificationOptinModal: (state) => {\n state.notificationOptinModal.open = MODAL_STATE.CLOSED;\n },\n openModal: (state, { payload }) => {\n const { modalId, data } = payload;\n state.modals = {\n currentModal: modalId,\n currentModalData: data\n };\n },\n closeModal: (state) => {\n state.modals = {\n currentModal: null,\n currentModalData: null\n };\n },\n setSystemMessages: (state, { payload }) => {\n state.systemMessages = payload.messages;\n state.badges.messageNotificationCount = payload.notificationCount;\n },\n setSystemBadges: (state, { payload }) => {\n state.systemBadges = payload.badges;\n state.badges.badgeNotificationCount = payload.notificationCount;\n },\n openProfileMenu: (state, { payload }) => {\n state.profileMenu = {\n open: MODAL_STATE.OPEN,\n redirectUrl: payload || false\n };\n },\n closeProfileMenu: (state) => {\n state.profileMenu.open = MODAL_STATE.CLOSED;\n },\n openCategoryDropdownMenu: (state) => {\n state.categoryDropdownMenu.open = MODAL_STATE.OPEN;\n },\n closeCategoryDropdownMenu: (state) => {\n state.categoryDropdownMenu.open = MODAL_STATE.CLOSED;\n },\n openSearchForm: (state) => {\n state.showSearchForm = true;\n },\n closeSearchForm: (state) => {\n state.showSearchForm = false;\n },\n logOut: (state) => {\n state.badges = getInitialBadges();\n },\n openItemSettings: (state, { payload }) => {\n state.itemSettings = {\n open: MODAL_STATE.OPEN,\n item: payload\n };\n },\n closeItemSettings: (state) => {\n state.itemSettings = {\n open: MODAL_STATE.CLOSED,\n item: {}\n };\n },\n openShareModal: (state, { payload }) => {\n state.shareModal = {\n isOpen: true,\n settings: payload\n };\n },\n closeShareModal: (state) => {\n state.shareModal = {\n isOpen: false,\n settings: null\n };\n },\n openHelpSection: (state, { payload }) => {\n state.helpSection = {\n isOpen: true,\n settings: payload\n };\n },\n closeHelpSection: (state) => {\n state.helpSection = {\n isOpen: false,\n settings: null\n };\n },\n openWishListSideSheet: (state) => {\n state.wishListSideSheet.isOpen = true;\n },\n closeWishListSideSheet: (state) => {\n state.wishListSideSheet.isOpen = false;\n },\n openNotificationsSideSheet: (state) => {\n state.notificationsSideSheet.isOpen = true;\n },\n closeNotificationsSideSheet: (state) => {\n state.notificationsSideSheet.isOpen = false;\n },\n updateProductCommunications: (state, { payload }) => {\n state.productCommunications = payload;\n },\n showSaveSearchBanner: (\n state,\n { payload = true }: PayloadAction\n ) => {\n state.showSaveSearchBanner = payload;\n },\n openCollectSsnModal: (state) => {\n state.collectSsnModal.isOpen = true;\n },\n closeCollectSsnModal: (state) => {\n state.collectSsnModal.isOpen = false;\n },\n openReferralModal: (state) => {\n state.referralModal.isOpen = true;\n },\n closeReferralModal: (state) => {\n state.referralModal.isOpen = false;\n }\n }\n});\n\nexport const {\n initialize,\n toggleHeaderSearch,\n openVideoModal,\n closeVideoModal,\n openNewMessageModal,\n closeNewMessageModal,\n openNotificationOptinModal,\n closeNotificationOptinModal,\n setSystemMessages,\n setSystemBadges,\n openProfileMenu,\n closeProfileMenu,\n openCategoryDropdownMenu,\n closeCategoryDropdownMenu,\n openSearchForm,\n closeSearchForm,\n openItemSettings,\n closeItemSettings,\n logOut,\n openModal,\n closeModal,\n openShareModal,\n closeShareModal,\n openHelpSection,\n closeHelpSection,\n openWishListSideSheet,\n closeWishListSideSheet,\n openNotificationsSideSheet,\n closeNotificationsSideSheet,\n updateProductCommunications,\n showSaveSearchBanner,\n openCollectSsnModal,\n closeCollectSsnModal,\n openReferralModal,\n closeReferralModal\n} = uiSlice.actions;\n\nexport const reducer = uiSlice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\nimport { createSlice } from '@reduxjs/toolkit';\nimport getInitialState from './initial-state';\n\nconst cartSlice = createSlice({\n name: 'cart',\n initialState: getInitialState(),\n reducers: {\n setFetching: (state, { payload }) => {\n state.isFetching = payload;\n },\n setCartData: (state, { payload }) => {\n state.isFetching = false;\n state.merchantPreOrders = payload.merchantPreOrders;\n state.errors = {};\n },\n setError: (state, { payload }) => {\n state.errors[payload.id] = payload.message;\n }\n }\n});\n\nexport const { setFetching, setCartData, setError } = cartSlice.actions;\n\nexport default cartSlice.reducer;\n","export const MODAL_TYPE = {\n SWISH_HANDEL: 'SWISH_HANDEL',\n TRUSTLY: 'TRUSTLY'\n};\n\nexport const PAYMENT_OPTIONS = {\n CARD: 'Card',\n PAYPAL: 'PayPal',\n APPLEPAY: 'ApplePay',\n GOOGLEPAY: 'GooglePay',\n SWISH_HANDEL: 'SwishHandel',\n VISA_MASTERCARD: 'VisaMasterCard',\n KLARNA: 'Klarna',\n TRUSTLY: 'Trustly',\n WALLET: 'Wallet',\n NO_PAYMENT_METHOD: 'NoPaymentMethod'\n};\n\nexport const PAYMENT_OPTION_STATUS = {\n AVAILABLE: 'Available',\n UNAVAILABLE_DUE_TO_AMOUNT: 'UnavailableDueToAmount',\n UNAVAILABLE_DUE_TO_SHIPPING_NOT_TRACEABLE:\n 'UnavailableDueToShippingNotTraceable',\n UNAVAILABLE_DUE_TO_SHIPPING_NOT_TRACEABLE_TO_SERVICEPOINT:\n 'UnavailableDueToShippingNotTraceableToServicePoint',\n AVAILABLE_WITH_DISTURBANCE: 'AvailableWithDisturbance'\n};\n\nexport const BUYER_PROTECTION_STATE = {\n NOT_SELECTED: 'NotSelected',\n NOT_ADDED: 'NotAdded',\n ADDED: 'Added'\n};\n\nexport default () => {\n return {\n buyerMember: null,\n checkoutSummary: {\n hasError: false,\n isFetching: false\n },\n hasError: false,\n isFetching: false,\n payment: {\n hasError: false,\n isFetching: false,\n paymentOptions: null,\n selectedPayment: null,\n buyerProtection: BUYER_PROTECTION_STATE.NOT_SELECTED,\n orderCalculation: null,\n paymentMethodData: null,\n paymentMethodAmount: null,\n discountCodeValue: null,\n isValid: false,\n discountCode: {\n validating: false,\n error: undefined,\n code: '',\n value: undefined\n },\n showSelectedPaymentAsPayButton: false\n },\n sellerMember: null,\n modal: {\n open: '',\n paymentAttemptId: '',\n trustlyRedirectUrl: ''\n },\n ongoingPaymentAttempt: null,\n shippingInfo: {\n shippingOptions: null,\n shippingPriceRange: null,\n shippingDiscount: null,\n collectionPoints: null,\n selectedCollectionPoint: null,\n isBooked: false,\n isFetching: false\n },\n combinedShippingInfo: null,\n purchaseOrder: {},\n shippingOptionsLoading: false,\n verificationStatus: {\n needsKyc: false\n },\n preselectedValues: {\n shipping: null,\n paymentOption: null,\n buyerProtection: BUYER_PROTECTION_STATE.NOT_SELECTED,\n discountCode: null\n }\n };\n};\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { createSlice } from '@reduxjs/toolkit';\nimport getInitialState from 'tradera/state/views/checkout/initial-state';\n\nconst checkoutSlice = createSlice({\n name: 'checkout',\n initialState: getInitialState(),\n reducers: {\n receiveCheckout: (state, { payload }) => {\n const {\n buyerMember,\n purchaseOrder,\n sellerMember,\n shippingInfo,\n combinedShippingInfo,\n ongoingPaymentAttempt,\n shippingFeeRule,\n verificationStatus\n } = payload;\n state.buyerMember = { ...buyerMember };\n state.sellerMember = { ...sellerMember };\n state.isFetching = false;\n state.hasError = false;\n state.purchaseOrderId = purchaseOrder.purchaseOrderId;\n state.orderNumber = purchaseOrder.orderNumber;\n state.paidStatus = purchaseOrder.paidStatus;\n state.ongoingPaymentAttempt = ongoingPaymentAttempt;\n state.shippingInfo.shippingOptions = shippingInfo.shippingOptions;\n state.shippingInfo.shippingPriceRange =\n shippingInfo.shippingPriceRange;\n state.shippingInfo.shippingDiscount = shippingInfo.shippingDiscount;\n state.shippingInfo.selectedCollectionPoint =\n shippingInfo.collectionPointId !== undefined\n ? { id: shippingInfo.collectionPointId }\n : undefined;\n state.shippingInfo.isBooked = shippingInfo.isBooked;\n state.combinedShippingInfo = combinedShippingInfo;\n state.shippingFeeRule = shippingFeeRule;\n state.purchaseOrder = purchaseOrder;\n state.shippingOptionsLoading = false;\n state.verificationStatus = verificationStatus;\n },\n receiveShippingOptions: (state, { payload }) => {\n state.shippingInfo.shippingOptions = payload;\n },\n setShippingOptionsLoading: (state, { payload }) => {\n state.shippingOptionsLoading = payload.isLoading;\n },\n receivePaymentOptions: (state, { payload }) => {\n state.payment.paymentOptions = payload;\n state.payment.isFetching = false;\n },\n receiveCollectionPoints: (state, { payload }) => {\n state.shippingInfo.collectionPoints = payload;\n },\n setFetching: (state, { payload }) => {\n state.isFetching = payload;\n state.hasError = false;\n },\n openModal: (state, { payload }) => {\n const { open, paymentAttemptId, trustlyRedirectUrl } = payload;\n state.modal = {\n open,\n paymentAttemptId,\n trustlyRedirectUrl\n };\n },\n cancelPayment: (state) => {\n state.checkoutSummary.hasError = false;\n state.checkoutSummary.isFetching = false;\n },\n closeModal: (state) => {\n state.modal = {\n open: ''\n };\n },\n setHasError: (state, { payload }) => {\n state.hasError = payload;\n state.isFetching = false;\n },\n setPaymentFetching: (state, { payload }) => {\n state.payment.isFetching = payload;\n state.payment.hasError = false;\n },\n setPaymentHasError: (state, { payload }) => {\n state.payment.hasError = payload;\n state.payment.isFetching = false;\n },\n setPaymentIsValid: (state, { payload }) => {\n state.payment.isValid = payload;\n },\n setPaymentMethodData: (state, { payload }) => {\n state.payment.paymentMethodData = payload;\n },\n setCheckoutSummaryFetching: (state, { payload }) => {\n state.checkoutSummary.isFetching = payload;\n state.checkoutSummary.hasError = false;\n },\n setCheckoutSummaryHasError: (state, { payload }) => {\n state.checkoutSummary.hasError = payload;\n state.checkoutSummary.isFetching = false;\n },\n setSelectedPayment: (state, { payload }) => {\n state.payment.selectedPayment = payload;\n state.checkoutSummary.hasError = false;\n },\n setOrderCalculation: (state, { payload }) => {\n state.payment.orderCalculation = payload;\n },\n setBuyerProtection: (state, { payload }) => {\n state.payment.buyerProtection = payload;\n },\n setSelectedShipping: (state, { payload }) => {\n state.selectedShipping = payload;\n },\n setOngoingPaymentAttempt: (state, { payload }) => {\n state.ongoingPaymentAttempt = payload;\n },\n setCombinedShippingInfo: (state, { payload }) => {\n state.combinedShippingInfo = {\n ...state.combinedShippingInfo,\n ...payload\n };\n },\n setBuyerMember: (state, { payload }) => {\n state.buyerMember = { ...state.buyerMember, ...payload };\n },\n setBuyerMemberAddress: (state, { payload }) => {\n state.buyerMember.address = {\n ...state.buyerMember.address,\n ...payload\n };\n },\n setCollectionPoint: (state, { payload }) => {\n state.shippingInfo.selectedCollectionPoint = payload;\n },\n setShippingInfoFetching: (state, { payload }) => {\n state.shippingInfo.isFetching = payload;\n },\n setCollectionPointSaving: (state, { payload }) => {\n state.shippingInfo.savingCollectionPoint = payload;\n },\n setDropinLoading: (state, { payload }) => {\n state.payment.dropinLoading = payload;\n },\n setDiscountCode: (state, { payload }) => {\n state.payment.discountCode = {\n ...state.payment.discountCode,\n ...payload\n };\n },\n setDiscountCodeValidating: (state, { payload }) => {\n state.payment.discountCode.validating = payload;\n },\n setPaymentMethodAmount: (state, { payload }) => {\n state.payment.paymentMethodAmount = payload;\n },\n setDiscountCodeValue: (state, { payload }) => {\n state.payment.discountCodeValue = payload;\n },\n setPreselectedValues: (state, { payload }) => {\n state.preselectedValues = payload;\n },\n setShowSelectedPaymentAsPayButton: (state, { payload }) => {\n state.payment.showSelectedPaymentAsPayButton = payload;\n }\n }\n});\n\nexport const {\n openModal,\n closeModal,\n cancelPayment,\n receiveCheckout,\n receiveShippingOptions,\n setShippingOptionsLoading,\n receivePaymentOptions,\n receiveCollectionPoints,\n setFetching,\n setHasError,\n setCheckoutSummaryFetching,\n setCheckoutSummaryHasError,\n setPaymentFetching,\n setPaymentHasError,\n setPaymentIsValid,\n setPaymentMethodData,\n setSelectedPayment,\n setOrderCalculation,\n setSelectedShipping,\n setOngoingPaymentAttempt,\n setCombinedShippingInfo,\n setBuyerMember,\n setBuyerMemberAddress,\n setCollectionPoint,\n setShippingInfoFetching,\n setCollectionPointSaving,\n setBuyerProtection,\n setDropinLoading,\n setDiscountCode,\n setDiscountCodeValidating,\n setPaymentMethodAmount,\n setDiscountCodeValue,\n setPreselectedValues,\n setShowSelectedPaymentAsPayButton\n} = checkoutSlice.actions;\n\nexport default checkoutSlice.reducer;\n","import { setReportItem, setViewState } from './reducer';\nimport { getReportItemModel, postReport } from './api';\nimport { VIEW_STATES } from './constants';\nimport { logger } from 'packages/logger';\nimport { API_ERRORS } from 'tradera/utils/api';\nimport { getBackToHereRedirectUrl } from 'tradera/utils/url';\nimport { getReturnUrl } from 'tradera/utils/login';\n\nconst onLoggedOut = () => {\n window.location = `/login${getReturnUrl(getBackToHereRedirectUrl())}`;\n};\n\nexport const loadReportItemModel = (itemId) => async (dispatch, getState) => {\n const reportItem = getState().views.reportItem;\n const isLoaded = reportItem.itemId === itemId;\n if (isLoaded) {\n dispatch(\n setViewState(\n reportItem.hasEnded ? VIEW_STATES.ITEM_ENDED : VIEW_STATES.FORM\n )\n );\n return;\n }\n try {\n dispatch(setViewState(VIEW_STATES.LOADING));\n const { data } = await getReportItemModel(itemId);\n\n dispatch(handleReportItemModel(data));\n } catch (error) {\n if (error.message === API_ERRORS.LOGGED_OUT) {\n onLoggedOut();\n } else {\n logger(error);\n }\n }\n};\n\nexport const handleReportItemModel = (reportItemModel) => (dispatch) => {\n dispatch(setReportItem(reportItemModel));\n};\n\nexport const submitReport =\n (itemId, reason, message, categoryId) => async (dispatch) => {\n dispatch(setViewState(VIEW_STATES.SUBMITTING));\n try {\n await postReport(itemId, reason, message, categoryId);\n dispatch(setViewState(VIEW_STATES.SUBMIT_SUCCESS));\n } catch (error) {\n logger(error);\n dispatch(setViewState(VIEW_STATES.SUBMIT_FAILED));\n }\n };\n","export const VIEW_STATES = {\n FORM: 'FORM',\n ITEM_ENDED: 'ITEM_ENDED',\n LOADING: 'LOADING',\n SUBMIT_FAILED: 'SUBMIT_FAILED',\n SUBMIT_SUCCESS: 'SUBMIT_SUCCESS',\n SUBMITTING: 'SUBMITTING'\n} as const;\n\nexport const REASONS = {\n NONE: '0',\n SUSPECTED_FRAUD: '1',\n ITEM_IS_A_COUNTERFEIT: '2',\n BRAND_NAME_MISUSE: '3',\n WRONG_CATEGORY: '4',\n PROHIBITED_SHIPPINGvOR_PAYMEN_TMETHOD: '5',\n OTHER_PROHIBITED_ITEM: '6',\n OTHER_PROHIBITED_SETUP: '7',\n OTHER: '8'\n} as const;\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { createSlice } from '@reduxjs/toolkit';\nimport { assertNoUndefinedProperties } from 'tradera/utils/assert';\nimport { getItemState } from '../view-item/item-state-helper';\nimport { getAmountDetails } from 'tradera/apps/tradera/components/vip/bidding/bid-details'; // TODO put getAmountDetails somewhere else\nimport { VIEW_STATES } from './constants';\n\nexport const initialState = {\n amount: 0,\n breadCrumbs: [],\n categoryId: 0,\n categoryNames: [],\n categories: [],\n categoryLevel: 0,\n description: null,\n hasEnded: false,\n images: [],\n itemId: 0,\n itemUrl: null,\n paymentOptions: [],\n reasons: [],\n resultMessage: null,\n shippingOptions: [],\n shippingTerms: [],\n sellerMemberId: 0,\n title: null,\n viewState: VIEW_STATES.LOADING,\n itemDetails: null\n};\n\nconst slice = createSlice({\n name: 'reportItem',\n initialState,\n reducers: {\n resetInitialState: () => {\n return initialState;\n },\n setReportItem: (state, { payload: { item, itemUrl, reasons } }) => {\n const itemDetails = item.itemDetails;\n const bidInfo = item.bidInfo;\n const itemState = getItemState(\n itemDetails.hasEnded,\n itemDetails.hasStarted,\n itemDetails.itemType,\n bidInfo.bidCount,\n bidInfo.reservePriceReached,\n bidInfo.nextValidBidAmount,\n bidInfo.transactionType,\n bidInfo.leadingBidderMemberId\n );\n const amountDetails = getAmountDetails(\n itemState,\n itemDetails.fixedPrice,\n bidInfo.leadingBidAmount,\n itemDetails.openingBid,\n bidInfo.bidCount > 0\n );\n state.amount = amountDetails.amount;\n state.allowedBuyerRegion = itemDetails.allowedBuyerRegion;\n state.breadCrumbs = item.breadCrumbs;\n state.categoryId = itemDetails.categoryId;\n state.categoryNames = item.breadCrumbs.map(\n (breadCrumb) => breadCrumb.text\n );\n state.description = itemDetails.description;\n state.endDate = itemDetails.endDate;\n state.hasEnded = itemDetails.hasEnded;\n state.images = itemDetails.images;\n state.itemId = itemDetails.itemId;\n state.itemUrl = itemUrl;\n state.paymentOptions = itemDetails.paymentOptions;\n state.reasons = reasons;\n state.shippingOptions = itemDetails.shippingOptions;\n state.shippingTerms = itemDetails.shippingTerms;\n state.sellerMemberId = itemDetails.sellerMemberId;\n state.title = itemDetails.title;\n state.viewState = itemDetails.hasEnded\n ? VIEW_STATES.ITEM_ENDED\n : VIEW_STATES.FORM;\n state.itemDetails = itemDetails;\n assertNoUndefinedProperties(state);\n },\n setViewState: (state, { payload }) => {\n state.viewState = payload;\n },\n setCategories: (state, { payload: categories, categoryLevel }) => {\n state.categories = categories;\n state.categoryLevel = categoryLevel;\n }\n }\n});\n\nexport const { resetInitialState, setReportItem, setViewState, setCategories } =\n slice.actions;\nexport const reducer = slice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { createSlice } from '@reduxjs/toolkit';\nimport ENDPOINTS from 'tradera/constants/endpoints';\nimport {\n axiosWithTokenRefresh,\n axiosConfigs,\n finalizeResponse,\n handleError\n} from 'tradera/utils/api';\n\nimport {\n selectBox,\n isLoadingShippingProducts,\n selectIsBoxValid\n} from './selectors';\n\nconst defaultBox = {\n length: 15,\n height: 15,\n width: 15,\n weight: 1000\n};\n\nconst weightMap = {\n 1: 50,\n 2: 100,\n 3: 250,\n 4: 500,\n 5: 1000,\n 6: 2000,\n 7: 3000,\n 8: 5000,\n 9: 7000,\n 10: 9000,\n 11: 10000,\n 12: 12000,\n 13: 15000,\n 14: 20000,\n 15: 35000\n};\n\nexport const shippingCalculatorEnabledCountries = ['DK', 'NL', 'SE'];\n\nconst shippingCalculatorSlice = createSlice({\n name: 'shippingCalculator',\n initialState: {\n box: { ...defaultBox },\n availableFromCountryCodes: [],\n availableToCountryCodes: [],\n defaultBox,\n weightUnit: 'kg',\n weightSliderValue: 5,\n isLoadingShippingProducts: false,\n shippingProviders: [\n {\n providerName: 'SchenkerPrivpak',\n service: 'traceable'\n },\n {\n providerName: 'PostNordParcel',\n service: 'traceable'\n },\n {\n providerName: 'PostNordStamp',\n service: 'stamps_digital'\n },\n {\n providerName: 'DHL',\n service: 'traceable'\n },\n {\n providerName: 'DhlNetherlands',\n service: 'traceable'\n },\n {\n providerName: 'Bussgods',\n service: 'traceable'\n },\n {\n providerName: 'BringDenmark',\n service: 'traceable'\n },\n {\n providerName: 'PostNordStampDenmark',\n service: 'stamps'\n }\n ],\n internationalProductsGroupedByFromThenToCountry: {\n SE: { SE: [] }\n },\n showError: false\n },\n reducers: {\n initializeShippingCalculator: (state, action) => {\n const defaultCountry = shippingCalculatorEnabledCountries.includes(\n action.payload.defaultCountry\n )\n ? action.payload.defaultCountry\n : 'SE';\n state.defaultCountry = defaultCountry;\n state.selectedToCountry = defaultCountry;\n state.selectedFromCountry = defaultCountry;\n },\n setSelectedToCountry: (state, action) => {\n state.selectedToCountry = action.payload.selectedToCountry;\n },\n setSelectedFromCountry: (state, action) => {\n state.selectedFromCountry = action.payload.selectedFromCountry;\n },\n setDefaultValuesOnBox: (state) => {\n state.box = { ...defaultBox };\n const value = weightMap[5];\n state.weightUnit = value % 1000 === 0 ? 'kg' : 'g';\n state.weightSliderValue = 5;\n },\n updateFilter: (state, action) => {\n const { filterName, value } = action.payload;\n state.box[filterName] = value;\n },\n setWeightFilter: (state, action) => {\n const value = weightMap[action.payload.value];\n state.weightUnit = value % 1000 === 0 ? 'kg' : 'g';\n state.box.weight = value;\n state.weightSliderValue = action.payload.value;\n },\n setWeightUnit: (state, action) => {\n state.weightUnit = action.payload.weightUnit;\n },\n beginFetchingShippingProducts: (state) => {\n state.isLoadingShippingProducts = true;\n },\n setShowError: (state) => {\n state.showError = true;\n },\n setShippingProducts: (state, action) => {\n const { internationalShippingCalculatorProducts } = action.payload;\n\n const internationalProductsGroupedByFromThenToCountry =\n internationalShippingCalculatorProducts.reduce(\n (prev, product) => {\n const {\n fromCountryCodeIso2: from,\n toCountryCodeIso2: to\n } = product;\n prev[from] = prev[from] || {};\n prev[from][to] = prev[from][to] || [];\n prev[from][to].push(product);\n return prev;\n },\n {}\n );\n\n const availableToCountryCodes = [\n ...new Set(\n internationalShippingCalculatorProducts.map(\n ({ toCountryCodeIso2 }) => toCountryCodeIso2\n )\n )\n ];\n\n const availableFromCountryCodes = [\n ...new Set(\n internationalShippingCalculatorProducts.map(\n ({ fromCountryCodeIso2 }) => fromCountryCodeIso2\n )\n )\n ];\n\n state.availableFromCountryCodes = availableFromCountryCodes;\n state.availableToCountryCodes = availableToCountryCodes;\n state.showError = false;\n state.internationalProductsGroupedByFromThenToCountry =\n internationalProductsGroupedByFromThenToCountry;\n state.isLoadingShippingProducts = false;\n }\n }\n});\n\nexport const setDefaultValues = () => (dispatch, getState) => {\n const state = getState();\n dispatch(setDefaultValuesOnBox());\n dispatch(fetchShippingProducts());\n dispatch(\n initializeShippingCalculator({\n defaultCountry: state.views.shippingCalculator.defaultCountry\n })\n );\n};\n\nexport const fetchShippingProducts = () => async (dispatch, getState) => {\n const { length, height, width, weight } = selectBox(getState());\n\n if (isLoadingShippingProducts(getState())) {\n return;\n }\n\n if (!selectIsBoxValid(getState())) {\n dispatch(\n setShippingProducts({\n internationalShippingCalculatorProducts: []\n })\n );\n return;\n }\n dispatch(beginFetchingShippingProducts());\n\n try {\n const response = await axiosWithTokenRefresh()\n .get(ENDPOINTS.INTERNATIONAL_SHIPPING_CALCULATOR, {\n params: {\n lengthInMillimeters: length * 10,\n heightInMillimeters: height * 10,\n widthInMillimeters: width * 10,\n weightInGrams: weight\n },\n ...axiosConfigs.authenticated\n })\n .then(finalizeResponse())\n .catch(handleError());\n\n dispatch(\n setShippingProducts({\n internationalShippingCalculatorProducts:\n response.data.internationalShippingCalculatorProducts\n })\n );\n } catch (e) {\n dispatch(\n setShippingProducts({\n internationalShippingCalculatorProducts: []\n })\n );\n dispatch(setShowError());\n }\n};\n\nexport const {\n updateFilter,\n setWeightUnit,\n beginFetchingShippingProducts,\n initializeShippingCalculator,\n setShippingProducts,\n setDefaultValuesOnBox,\n setSelectedToCountry,\n setSelectedFromCountry,\n setWeightFilter,\n setShowError\n} = shippingCalculatorSlice.actions;\nexport default shippingCalculatorSlice.reducer;\n","import {\n selectAutomaticTranslationPreferred,\n selectPreferredLanguageCode\n} from 'tradera/state/language/selectors';\nimport { getTraderaShopProductData } from './api';\nimport { logger } from 'packages/logger';\nimport { fetchDescription, getItemsFromSeller } from '../view-item/api';\nimport {\n beginLoadingTranslatedDescription,\n failedLoadingTranslatedDescription,\n setCurrentDescriptionLanguageCodeIso2,\n setIsLoading,\n setItemDetails,\n setProduct,\n setSellerItems,\n setTranslatedDescription,\n setTranslationOnDemandDisabled\n} from './reducer';\nimport { translatedDescriptionStates } from '../view-item/reducer';\nimport {\n selectTranslatedDescription,\n selectTranslatedDescriptionState\n} from './selectors';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport { isSwedenCountryCodeOrUndefined } from 'tradera/localization/countrycode';\nimport { areLanguageCodesIso2Equal } from 'tradera/localization/languagecode';\nimport { selectIsFeatureEnabled } from 'tradera/state/environment/selectors';\n\nexport const fetchTraderaShopProductData =\n (urlSlug) => async (dispatch, getState) => {\n const preferredLanguageCode = selectPreferredLanguageCode(getState());\n dispatch(setIsLoading(true));\n try {\n const traderaShopProduct = await getTraderaShopProductData(\n urlSlug,\n preferredLanguageCode\n );\n dispatch(handleTraderaShopProduct(traderaShopProduct));\n dispatch(setIsLoading(false));\n } catch (error) {\n const status = error.response && error.response.status;\n if (status === 404) {\n // Handle server side.\n window.location.reload();\n } else {\n logger(error);\n }\n }\n };\n\nexport const handleTraderaShopProduct = (traderaShopProduct) => (dispatch) => {\n const { product, item } = traderaShopProduct;\n dispatch(setProduct(product));\n dispatch(setItemDetails(item.itemDetails));\n dispatch(setTranslation(item));\n};\n\nconst setTranslation = (itemModel) => (dispatch, getState) => {\n const state = getState();\n const shippingRegion = selectShippingRegionCountryCodeIso2(state);\n const preferredLanguageCodeIso2 = selectPreferredLanguageCode(state);\n const disabledForEnglishLangSwedes =\n isSwedenCountryCodeOrUndefined(shippingRegion) &&\n areLanguageCodesIso2Equal(preferredLanguageCodeIso2, 'en');\n const automaticTranslationPreferred =\n selectAutomaticTranslationPreferred(state);\n const descriptionLanguageCodeIso2 =\n itemModel.itemDetails.descriptionLanguageCodeIso2;\n const shouldTranslateDescriptionOnLoad =\n automaticTranslationPreferred &&\n preferredLanguageCodeIso2 !== descriptionLanguageCodeIso2 &&\n !disabledForEnglishLangSwedes;\n dispatch(\n setCurrentDescriptionLanguageCodeIso2(\n shouldTranslateDescriptionOnLoad\n ? preferredLanguageCodeIso2\n : descriptionLanguageCodeIso2\n )\n );\n};\n\nexport const loadTranslatedDescription =\n (itemId, languageCodeIso2, descriptionLanguageCodeIso2) =>\n async (dispatch, getState) => {\n const isOnDemandItemDescriptionTranslation = selectIsFeatureEnabled(\n 'on-demand-item-description-translation'\n )(getState());\n\n if (!languageCodeIso2 || !isOnDemandItemDescriptionTranslation) {\n return;\n }\n\n if (\n languageCodeIso2.toLowerCase() ===\n descriptionLanguageCodeIso2.toLowerCase()\n ) {\n return;\n }\n\n if (\n selectTranslatedDescriptionState(getState()) ===\n translatedDescriptionStates.LOADING ||\n selectTranslatedDescription(getState())?.languageCodeIso2 ===\n languageCodeIso2\n ) {\n return;\n }\n\n dispatch(beginLoadingTranslatedDescription());\n\n try {\n const result = await fetchDescription(itemId, languageCodeIso2);\n if (result.data.translations.isTranslationOnDemandDisabled) {\n dispatch(setTranslationOnDemandDisabled());\n return;\n }\n\n dispatch(\n setTranslatedDescription({\n title: result.data.translations.title,\n description: result.data.translations.description,\n additionalDescriptions:\n result.data.translations.additionalDescriptions,\n languageCodeIso2: result.data.translations.languageCodeIso2,\n providerName: 'Google Translate',\n shippingTerms: result.data.translations.shippingTerms\n })\n );\n } catch (e) {\n dispatch(failedLoadingTranslatedDescription());\n }\n };\n\nexport const fetchItemsFromSeller =\n ({ SellerMemberId, Size }) =>\n async (dispatch, getState) => {\n try {\n const preferredLanguageCode =\n selectPreferredLanguageCode(getState());\n const params = {\n SellerMemberId,\n Size,\n SearchResultLanguageCodeIso2: preferredLanguageCode\n };\n const result = await getItemsFromSeller(\n params,\n preferredLanguageCode\n );\n const { items, itemsMatched } = result.data.result;\n dispatch(setSellerItems({ items, itemsMatched }));\n } catch (e) {\n dispatch(setSellerItems(null));\n }\n };\n","/* eslint-disable better-mutation/no-mutation */\nimport { createSlice } from '@reduxjs/toolkit';\nimport {\n mapItemDetails,\n translatedDescriptionStates\n} from '../view-item/reducer';\n\ntype TraderaShopSlice = {\n product: object;\n itemDetails: object;\n isLoading: boolean;\n sellerItems?: [];\n translatedDescription: object | null;\n translatedDescriptionState: string | null;\n currentDescriptionLanguageCodeIso2: string | null;\n};\n\nconst traderaShopSlice = createSlice({\n name: 'traderaShop',\n initialState: {} as Partial,\n reducers: {\n setIsLoading: (state, { payload }) => {\n state.isLoading = payload;\n },\n setItemDetails: (state, { payload }) => {\n state.itemDetails = mapItemDetails(payload);\n },\n setProduct: (state, { payload }) => {\n state.product = payload;\n },\n setSellerItems: (state, { payload }) => {\n state.sellerItems = payload;\n },\n setCurrentDescriptionLanguageCodeIso2: (state, { payload }) => {\n state.currentDescriptionLanguageCodeIso2 = payload;\n },\n setTranslationOnDemandDisabled: (state) => {\n state.translatedDescription = null;\n state.translatedDescriptionState =\n translatedDescriptionStates.TRANSLATION_ON_DEMAND_DISABLED;\n },\n setTranslatedDescription: (state, { payload }) => {\n state.translatedDescription = payload;\n state.translatedDescriptionState =\n translatedDescriptionStates.DEFAULT;\n },\n resetTranslatedDescription: (state) => {\n state.translatedDescription = null;\n state.translatedDescriptionState =\n translatedDescriptionStates.DEFAULT;\n },\n beginLoadingTranslatedDescription: (state) => {\n state.translatedDescription = null;\n state.translatedDescriptionState =\n translatedDescriptionStates.LOADING;\n },\n failedLoadingTranslatedDescription: (state) => {\n state.translatedDescriptionState =\n translatedDescriptionStates.SERVER_ERROR;\n }\n }\n});\n\nexport default traderaShopSlice.reducer;\n\nexport const {\n setIsLoading,\n setItemDetails,\n setProduct,\n setSellerItems,\n setCurrentDescriptionLanguageCodeIso2,\n setTranslationOnDemandDisabled,\n setTranslatedDescription,\n resetTranslatedDescription,\n beginLoadingTranslatedDescription,\n failedLoadingTranslatedDescription\n} = traderaShopSlice.actions;\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport dayjs from 'dayjs';\nimport { type ITEM_STATES, VIEW_ITEM_STATES } from './constants';\nimport TRANSACTION_TYPES from 'tradera/constants/transaction-types';\nimport { placeBidApi } from './api';\nimport { logger } from 'packages/logger';\nimport * as analytics from '../../../apps/tradera/components/vip/helpers/analytics';\nimport * as itemActions from '../../items/actions';\nimport { assertNoUndefinedProperties } from 'tradera/utils/assert';\nimport {\n selectAutomaticTranslationPreferred,\n selectPreferredLanguageCode\n} from 'tradera/state/language/selectors';\nimport {\n selectBidInfo,\n selectItemId,\n selectItemDetails,\n selectBreadcrumbs,\n selectViewItem\n} from './selectors';\nimport { GtmService as gtm } from 'tradera/services/google-tagmanager-service';\nimport { getItemState } from './item-state-helper';\nimport { BID_VALIDATION_RESULTS } from 'tradera/apps/tradera/components/vip/api/vip-api-constants';\nimport { selectExistsInWishList } from 'tradera/state/items/selectors';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport { isSwedenCountryCodeOrUndefined } from 'tradera/localization/countrycode';\nimport { areLanguageCodesIso2Equal } from 'tradera/localization/languagecode';\nimport type {\n ItemBidInfoViewModel,\n ItemCategoryViewModel,\n ItemDetailsViewModel,\n ItemPageModel,\n ItemPurchaseViewModel,\n ItemTranslationsViewModel\n} from 'tradera/state/services/types/webapi-browse-generated';\nimport type { AppDispatch, GetState } from 'tradera/state/configure-store';\nimport type ITEM_TYPES from 'tradera/constants/item-types';\nimport type { ItemCardViewModel } from 'tradera/state/services/types/webapi-discover-generated';\nimport { DEFAULT_LANGUAGE } from 'tradera/lang/constants.mjs';\nimport { wishlist } from 'tradera/state/items/reducer';\n\ntype PlaceBidResponse = {\n info?: string | null;\n isSuccessful: boolean | null;\n validationResult: {\n code: BID_VALIDATION_RESULTS;\n } | null;\n error: unknown | null;\n};\n\nconst initialPlaceBidResponse: PlaceBidResponse = {\n info: null,\n isSuccessful: null,\n validationResult: null,\n error: null\n};\n\nexport enum translatedDescriptionStates {\n DEFAULT = 'DEFAULT',\n LOADING = 'LOADING',\n SERVER_ERROR = 'SERVER_ERROR',\n TRANSLATION_ON_DEMAND_DISABLED = 'TRANSLATION_ON_DEMAND_DISABLED'\n}\n\ntype ItemTranslations = ItemTranslationsViewModel & {\n providerName: string;\n};\n\nexport type ItemDetails = Omit & {\n images?: {\n thumbnail?: string | null;\n multiThumbnail?: string | null;\n medium?: string | null;\n normal?: string | null;\n smallFit?: string | null;\n mediumFit?: string | null;\n largeFit?: string | null;\n video?: string | null;\n }[];\n};\n\ntype Breadcrumbs = {\n id: number;\n url?: string | null;\n name?: string | null;\n categoryId: number;\n};\n\ntype BidInfo = Omit & {\n bidId?: number | null;\n bidCount: number | null;\n hasLeadingBid?: boolean;\n};\n\ntype BidToasterData = {\n leadingBidMemberAlias?: string;\n placeBidValidationCode?: string;\n leadingBidAmount?: number;\n nextValidBidAmount?: number;\n myMaxBidAmount?: number;\n};\n\nexport type SellerItems = {\n items: ItemCardViewModel[];\n itemsMatched: number;\n};\n\nexport type ViewItemState = {\n bidInfo: BidInfo | null;\n bidToasterData: BidToasterData | null;\n breadCrumbs: Breadcrumbs[];\n categoryItems: ItemCardViewModel[];\n combinedShippingItems: ItemCardViewModel[] | null;\n currentDescriptionLanguageCodeIso2: string | null;\n isBidding: boolean;\n itemDetails: ItemDetails;\n itemState: ITEM_STATES | null;\n myMaxBidAmount: number | null;\n placeBidResponse: PlaceBidResponse;\n purchaseInfo: ItemPurchaseViewModel | null;\n sellerItems: SellerItems | null;\n serverSecondsLeft: number | null;\n shopItems: ItemCardViewModel[];\n translatedDescription: ItemTranslations | null;\n translatedDescriptionState: translatedDescriptionStates;\n viewItemState: VIEW_ITEM_STATES | null;\n isWishlistPending: boolean;\n};\n\nexport const initialState: ViewItemState = {\n bidInfo: null,\n bidToasterData: null,\n breadCrumbs: [],\n isBidding: false,\n itemDetails: {} as ItemDetails,\n categoryItems: [],\n shopItems: [],\n sellerItems: null,\n combinedShippingItems: null,\n itemState: null,\n viewItemState: null,\n myMaxBidAmount: null,\n placeBidResponse: initialPlaceBidResponse,\n purchaseInfo: null,\n serverSecondsLeft: null,\n translatedDescription: null,\n translatedDescriptionState: translatedDescriptionStates.DEFAULT,\n currentDescriptionLanguageCodeIso2: null,\n isWishlistPending: false\n};\n\nconst viewItemSlice = createSlice({\n name: 'viewItem',\n initialState,\n reducers: {\n resetPlaceBidResponse: (state) => {\n state.placeBidResponse = initialPlaceBidResponse;\n },\n resetInitialState: () => {\n return initialState;\n },\n setShowBiddingToaster: (\n state,\n action: PayloadAction\n ) => {\n state.bidToasterData = action.payload;\n },\n setIsRestricted: (state, { payload }) => {\n state.itemDetails.isRestricted = payload;\n },\n setIsInternationalWacko: (state, action: PayloadAction) => {\n if (!state.itemDetails.wackoInfo) {\n throw new Error('wackoInfo is null');\n }\n\n state.itemDetails.wackoInfo.isInternationalWacko = action.payload;\n },\n setItemDetails: (\n state,\n action: PayloadAction\n ) => {\n state.itemDetails = mapItemDetails(action.payload);\n },\n setPurchaseInfo: (\n state,\n action: PayloadAction\n ) => {\n state.purchaseInfo = action.payload;\n },\n setBreadCrumbs: (\n state,\n action: PayloadAction\n ) => {\n state.breadCrumbs = action.payload.map(\n ({ id, href, text }, index) => ({\n id: index,\n url: href,\n name: text,\n categoryId: id\n })\n );\n },\n setIsBidding: (state, action: PayloadAction) => {\n state.isBidding = action.payload;\n },\n setPlaceBidResponse: (\n state,\n action: PayloadAction\n ) => {\n const { payload } = action;\n state.placeBidResponse.isSuccessful = payload.isSuccessful;\n state.placeBidResponse.validationResult = payload.validationResult;\n state.placeBidResponse.error = payload.error;\n },\n setBidInfo: (\n state,\n action: PayloadAction<{\n bidInfo: BidInfo;\n itemId: number;\n memberId: number;\n }>\n ) => {\n const { bidInfo, itemId, memberId } = action.payload;\n // Ensure bid is for current item.\n if (state.itemDetails?.itemId !== itemId) {\n logger(new Error(`setBidInfo was not for current item`), {\n contexts: {\n items: {\n currentItemId: state.itemDetails?.itemId,\n bidInfoItemId: itemId\n }\n }\n });\n return;\n }\n\n // Ensure incoming data is for latest bid. It is possible to get stale data in\n // the response from place bid due to eventual consistency. When that happens\n // we should have received the latest bid before via web socket. For items where\n // web socket updates are not enabled (too long time left of auction) the effect\n // is considered acceptable. Just make sure to not overwrite newer data here.\n const isFirstBidInfo = !state.bidInfo;\n const isBinPurchase =\n bidInfo.transactionType === TRANSACTION_TYPES.BIN;\n const isLatestBid =\n isFirstBidInfo ||\n isBinPurchase ||\n (state.bidInfo?.bidId ?? 0) <= (bidInfo.bidId ?? 0);\n if (!isLatestBid) return;\n\n const bidStatus = getLeadingBidStatus(\n bidInfo,\n memberId,\n state.bidInfo\n );\n\n const existingBidCount = state.bidInfo?.bidCount || 0;\n const incomingBidCount = bidInfo.bidCount || 0;\n const newBidInfo = {\n bidId: bidInfo.bidId || 0,\n leadingBidAmount: bidInfo.leadingBidAmount || 0,\n leadingBidderMemberId: bidInfo.leadingBidderMemberId || null,\n leadingBidMemberAlias: bidInfo.leadingBidMemberAlias || null,\n nextValidBidAmount: bidInfo.nextValidBidAmount,\n transactionType: state.bidInfo?.transactionType\n ? state.bidInfo.transactionType\n : bidInfo.transactionType || null,\n\n // Never update with a lower bidCount. Can happen if place-bid-response comes before WebSocket event.\n bidCount:\n incomingBidCount > existingBidCount\n ? incomingBidCount\n : existingBidCount,\n\n // Never reset if reservePriceReached was true. Can happen if place-bid-response comes before WebSocket event.\n reservePriceReached:\n state.bidInfo?.reservePriceReached ||\n bidInfo.reservePriceReached ||\n false\n };\n\n assertNoUndefinedProperties(newBidInfo);\n\n state.bidInfo = { ...newBidInfo, ...bidStatus };\n },\n setMyMaxBidAmount: (state, action: PayloadAction) => {\n state.myMaxBidAmount = action.payload;\n },\n setItemState: (state, action: PayloadAction) => {\n state.itemState = action.payload;\n },\n setViewItemState: (state, action: PayloadAction) => {\n state.viewItemState = action.payload;\n },\n setServerSecondsLeft: (state, action: PayloadAction) => {\n state.serverSecondsLeft = action.payload;\n },\n setTranslatedDescription: (\n state,\n action: PayloadAction\n ) => {\n state.translatedDescription = action.payload;\n state.translatedDescriptionState =\n translatedDescriptionStates.DEFAULT;\n },\n setCurrentDescriptionLanguageCodeIso2: (\n state,\n action: PayloadAction\n ) => {\n state.currentDescriptionLanguageCodeIso2 = action.payload;\n },\n setTranslationOnDemandDisabled: (state) => {\n state.translatedDescription = null;\n state.translatedDescriptionState =\n translatedDescriptionStates.TRANSLATION_ON_DEMAND_DISABLED;\n },\n resetTranslatedDescription: (state) => {\n state.translatedDescription = null;\n state.translatedDescriptionState =\n translatedDescriptionStates.DEFAULT;\n },\n beginLoadingTranslatedDescription: (state) => {\n state.translatedDescription = null;\n state.translatedDescriptionState =\n translatedDescriptionStates.LOADING;\n },\n failedLoadingTranslatedDescription: (state) => {\n state.translatedDescriptionState =\n translatedDescriptionStates.SERVER_ERROR;\n },\n setSellerItems: (state, action: PayloadAction) => {\n state.sellerItems = action.payload;\n },\n setCategoryItems: (\n state,\n action: PayloadAction\n ) => {\n state.categoryItems = action.payload;\n },\n setShopItems: (state, action: PayloadAction) => {\n state.shopItems = action.payload;\n },\n setCombinedShippingItems: (\n state,\n action: PayloadAction\n ) => {\n state.combinedShippingItems = action.payload;\n },\n setIsWishlistPending: (state, action: PayloadAction) => {\n state.isWishlistPending = action.payload;\n },\n setPaymentAmountForBid: (\n state,\n action: PayloadAction\n ) => {\n if (state.itemDetails.paymentCalculations) {\n state.itemDetails.paymentCalculations.paymentAmountForBid =\n action.payload;\n }\n }\n }\n});\n\nexport default viewItemSlice.reducer;\n\nexport const mapItemDetails = (\n itemDetails: ItemDetailsViewModel\n): ItemDetails => ({\n ...itemDetails,\n descriptionLanguageCodeIso2:\n itemDetails.descriptionLanguageCodeIso2?.toLowerCase(),\n images: itemDetails.images?.map((img) => ({\n thumbnail: img.thumbnail,\n multiThumbnail: img.thumbnail,\n medium: img.small,\n normal: img.normal,\n smallFit: img.smallFit,\n mediumFit: img.mediumFit,\n largeFit: img.largeFit,\n video: img.video || null\n }))\n});\n\nexport const handleItemModel =\n (itemModel: ItemPageModel, memberId: number) =>\n (dispatch: AppDispatch, getState: GetState) => {\n if (!itemModel.itemDetails) throw new Error('itemDetails is missing');\n\n const previousItemId = selectItemId(getState());\n dispatch(viewItemSlice.actions.setItemDetails(itemModel.itemDetails));\n dispatch(setTranslation(itemModel));\n\n dispatch(\n viewItemSlice.actions.setPurchaseInfo(\n itemModel.purchaseInfo ?? null\n )\n );\n\n dispatch(\n wishlist({\n itemId: itemModel.itemDetails.itemId,\n exists: !!itemModel.itemDetails.inWishList\n })\n );\n dispatch(\n viewItemSlice.actions.setBreadCrumbs(itemModel.breadCrumbs ?? [])\n );\n\n if (!itemModel.bidInfo) throw new Error('bidInfo is missing');\n dispatch(\n viewItemSlice.actions.setBidInfo({\n bidInfo: itemModel.bidInfo,\n itemId: itemModel.itemDetails.itemId,\n memberId\n })\n );\n\n if (itemModel.bidInfo.myMaxBidAmount) {\n dispatch(\n viewItemSlice.actions.setMyMaxBidAmount(\n itemModel.bidInfo.myMaxBidAmount\n )\n );\n }\n\n const isSafeToShowWinnerStatus =\n itemModel.itemDetails.hasEnded &&\n !itemModel.hasBidsWinnerToBeConfirmed;\n\n const viewItemState = isSafeToShowWinnerStatus\n ? VIEW_ITEM_STATES.ENDED\n : itemModel.itemDetails.hasStarted\n ? VIEW_ITEM_STATES.ACTIVE\n : VIEW_ITEM_STATES.NOT_STARTED;\n\n dispatch(viewItemSlice.actions.setViewItemState(viewItemState));\n\n const { itemDetails, bidInfo } = selectViewItem(getState());\n if (!bidInfo) throw new Error('bidInfo is missing');\n\n dispatch(updateItemState(itemDetails, bidInfo, viewItemState));\n\n dispatch(\n viewItemSlice.actions.setServerSecondsLeft(\n itemModel.serverSecondsLeft\n )\n );\n\n const isNewPage = previousItemId != selectItemId(getState());\n if (isNewPage) {\n handleNewPage(getState);\n }\n };\n\nconst setTranslation =\n (itemModel: ItemPageModel) =>\n (dispatch: AppDispatch, getState: GetState) => {\n const state = getState();\n\n const shippingRegion = selectShippingRegionCountryCodeIso2(state);\n const preferredLanguageCodeIso2 = selectPreferredLanguageCode(state);\n\n const disabledForEnglishLangSwedes =\n isSwedenCountryCodeOrUndefined(shippingRegion) &&\n areLanguageCodesIso2Equal(preferredLanguageCodeIso2, 'en');\n const automaticTranslationPreferred =\n selectAutomaticTranslationPreferred(state);\n\n const descriptionLanguageCodeIso2 =\n itemModel.itemDetails?.descriptionLanguageCodeIso2 ||\n DEFAULT_LANGUAGE;\n\n const shouldTranslateDescriptionOnLoad =\n automaticTranslationPreferred &&\n preferredLanguageCodeIso2 !== descriptionLanguageCodeIso2 &&\n !disabledForEnglishLangSwedes;\n\n dispatch(\n viewItemSlice.actions.setCurrentDescriptionLanguageCodeIso2(\n shouldTranslateDescriptionOnLoad\n ? preferredLanguageCodeIso2\n : descriptionLanguageCodeIso2\n )\n );\n if (itemModel.translations) {\n dispatch(\n viewItemSlice.actions.setTranslatedDescription({\n ...itemModel.translations,\n providerName: 'Google Translate'\n })\n );\n } else {\n dispatch(viewItemSlice.actions.resetTranslatedDescription());\n }\n };\n\nexport const handleNewPage = (getState: GetState) => {\n const currentItemDetails = selectItemDetails(getState());\n const currentBidInfo = selectBidInfo(getState());\n const breadCrumbs = selectBreadcrumbs(getState());\n\n const swedishCategoryPath = breadCrumbs.map((b) => b.name).join(' > ');\n\n const getAuctionState = () => {\n const hasWon =\n currentItemDetails.hasEnded && currentBidInfo?.hasLeadingBid;\n const isLeading =\n !currentItemDetails.hasEnded && currentBidInfo?.hasLeadingBid;\n if (hasWon) return 'won';\n if (isLeading) return 'leading';\n return currentItemDetails.hasEnded ? 'ended' : 'normal';\n };\n\n const contentGroup = `${currentItemDetails.itemType}-${getAuctionState()}`;\n gtm.trackGtmEvent('viewItem', {\n page: {\n itemState: contentGroup,\n 'content-group-2': swedishCategoryPath,\n 'content-group-3': contentGroup\n },\n itemType: currentItemDetails.itemType,\n itemId: currentItemDetails.itemId,\n itemFixedPrice: currentItemDetails.fixedPrice || 0,\n itemCategory: swedishCategoryPath,\n itemStatus: currentItemDetails.hasEnded ? 'inactive' : 'active',\n itemEndDate: dayjs(currentItemDetails.endDate).format('YYYYMMDD')\n });\n};\n\nconst updateItemState =\n (\n itemDetails: ItemDetails,\n bidInfo: BidInfo,\n viewItemState: VIEW_ITEM_STATES\n ) =>\n (dispatch: AppDispatch) => {\n if (!itemDetails.itemType) throw new Error('itemType is missing');\n if (!bidInfo.nextValidBidAmount)\n throw new Error('nextValidBidAmount is missing');\n\n const itemType = itemDetails.itemType as ITEM_TYPES;\n const transactionType = bidInfo.transactionType as TRANSACTION_TYPES;\n\n const itemState = getItemState(\n viewItemState === VIEW_ITEM_STATES.ENDED,\n viewItemState !== VIEW_ITEM_STATES.NOT_STARTED,\n itemType,\n bidInfo.bidCount ?? 0,\n bidInfo.reservePriceReached,\n bidInfo.nextValidBidAmount,\n transactionType,\n bidInfo.leadingBidderMemberId ?? undefined,\n itemDetails.isCancelled\n );\n dispatch(viewItemSlice.actions.setItemState(itemState));\n };\n\nconst getLeadingBidStatus = (\n bidInfo: BidInfo,\n memberId: number,\n previousBidInfo: BidInfo | null = null\n) => {\n const hadLeadingBid = !!previousBidInfo?.hasLeadingBid;\n const hasLeadingBid =\n !!memberId && memberId === bidInfo.leadingBidderMemberId;\n const hadLostLeadingBid =\n !!previousBidInfo?.hasLostLeadingBid || bidInfo.hasLostLeadingBid;\n const hasLostLeadingBid =\n (hadLostLeadingBid || hadLeadingBid) && !hasLeadingBid;\n return {\n hasLostLeadingBid,\n hasLeadingBid\n };\n};\n\nexport const toggleWishList =\n (itemId: number, forceAdd = false) =>\n (dispatch: AppDispatch, getState: GetState) => {\n if (getState().views.viewItem.isWishlistPending) {\n return;\n }\n dispatch(viewItemSlice.actions.setIsWishlistPending(true));\n const inWishListOldValue =\n getState().items.wishListItemIds.includes(itemId);\n const inWishListNewValue = !inWishListOldValue || forceAdd;\n\n const itemDetails = getState().views.viewItem.itemDetails;\n\n const wishListCountOldValue = itemDetails.wishListCount ?? 0;\n let wishListCountNewValue = wishListCountOldValue;\n if (Number.isInteger(wishListCountNewValue)) {\n if (inWishListOldValue && !inWishListNewValue) {\n wishListCountNewValue--;\n } else if (!inWishListOldValue && inWishListNewValue) {\n wishListCountNewValue++;\n }\n }\n dispatch(\n viewItemSlice.actions.setItemDetails({\n ...itemDetails,\n inWishList: inWishListNewValue,\n wishListCount: wishListCountNewValue\n })\n );\n\n return dispatch(\n itemActions.wishlist(itemId, {\n value: inWishListNewValue,\n shouldNotTrackEventBecauseNeedsToBeSameAsLegacyVip: true,\n showWishlistModals: !forceAdd,\n sectionGaName: 'VIP'\n })\n )\n .then((inWishListNewValue) => {\n if (inWishListNewValue !== undefined) {\n analytics.trackWishlist(itemId, inWishListNewValue);\n } else {\n //Restore previous value;\n const itemDetails = getState().views.viewItem.itemDetails;\n dispatch(\n viewItemSlice.actions.setItemDetails({\n ...itemDetails,\n inWishList: inWishListOldValue,\n wishListCount: wishListCountOldValue\n })\n );\n }\n return inWishListNewValue;\n })\n .finally(() => {\n dispatch(viewItemSlice.actions.setIsWishlistPending(false));\n });\n };\n\nexport const placeBid =\n (\n itemId: number,\n memberId: number,\n amount: number,\n onLoggedOut: () => void\n ) =>\n async (dispatch: AppDispatch, getState: GetState) => {\n dispatch(viewItemSlice.actions.setIsBidding(true));\n\n const existsInWishList = selectExistsInWishList(itemId)(getState());\n const preferredLanguageCode = selectPreferredLanguageCode(getState());\n const { gaTrackingSessionId } = getState().environment;\n\n try {\n const result = await placeBidApi(\n itemId,\n amount,\n onLoggedOut,\n preferredLanguageCode,\n gaTrackingSessionId ?? ''\n );\n\n if (!result) {\n dispatch(\n viewItemSlice.actions.setPlaceBidResponse({\n isSuccessful: false,\n validationResult: {\n code: BID_VALIDATION_RESULTS.OFFLINE\n },\n error: null\n })\n );\n dispatch(viewItemSlice.actions.setIsBidding(false));\n dispatch(\n viewItemSlice.actions.setShowBiddingToaster({\n placeBidValidationCode: BID_VALIDATION_RESULTS.OFFLINE\n })\n );\n return;\n }\n const {\n analyticsData,\n bidInfo,\n isSuccessful,\n item: updatedItem,\n validationResult,\n myMaxBidAmount,\n serverSecondsLeft\n } = result;\n\n if (isSuccessful) {\n dispatch(\n viewItemSlice.actions.setBidInfo({\n bidInfo,\n itemId,\n memberId\n })\n );\n dispatch(\n viewItemSlice.actions.setMyMaxBidAmount(myMaxBidAmount)\n );\n } else if (bidInfo.leadingBidAmount) {\n dispatch(\n viewItemSlice.actions.setBidInfo({\n bidInfo,\n itemId,\n memberId\n })\n );\n }\n dispatch(\n viewItemSlice.actions.setShowBiddingToaster({\n leadingBidMemberAlias: bidInfo.leadingBidMemberAlias,\n placeBidValidationCode: validationResult.code,\n leadingBidAmount: bidInfo.leadingBidAmount,\n nextValidBidAmount: bidInfo.nextValidBidAmount,\n myMaxBidAmount: result.myMaxBidAmount\n })\n );\n analytics.trackBidPlaced(\n itemId,\n validationResult.code,\n analyticsData.isMaxBid,\n analyticsData.potentialBidChange,\n analyticsData.bidId,\n analyticsData.transactionTotal\n );\n\n const currentItemDetails = getState().views.viewItem.itemDetails;\n dispatch(\n viewItemSlice.actions.setItemDetails({\n ...currentItemDetails,\n ...updatedItem\n })\n );\n\n dispatch(\n viewItemSlice.actions.setPlaceBidResponse({\n isSuccessful,\n validationResult: {\n code: validationResult.code as BID_VALIDATION_RESULTS\n },\n error: null\n })\n );\n\n dispatch(\n viewItemSlice.actions.setServerSecondsLeft(serverSecondsLeft)\n );\n } catch (error) {\n logger(error);\n dispatch(\n viewItemSlice.actions.setPlaceBidResponse({\n isSuccessful: false,\n validationResult: null,\n error\n })\n );\n }\n dispatch(viewItemSlice.actions.setIsBidding(false));\n\n // Add item to wish list if it doesn't already exist in list\n if (!existsInWishList) {\n dispatch(toggleWishList(itemId, true));\n }\n };\n\nexport const {\n beginLoadingTranslatedDescription,\n failedLoadingTranslatedDescription,\n resetPlaceBidResponse,\n resetTranslatedDescription,\n setBidInfo,\n setIsRestricted,\n setIsInternationalWacko,\n setViewItemState,\n setTranslatedDescription,\n setTranslationOnDemandDisabled,\n setSellerItems,\n setCategoryItems,\n setShopItems,\n setCombinedShippingItems,\n setCurrentDescriptionLanguageCodeIso2,\n setPaymentAmountForBid\n} = viewItemSlice.actions;\n","const SwedenCountryCode = 'SE';\n\nexport const isInternationalShippingToCountryAllowed = (\n region: string,\n countryCodeIso2: string\n) => {\n switch (region) {\n case 'Sweden':\n return isSwedenCountryCode(countryCodeIso2);\n case 'Nordic':\n return isNordicCountryCode(countryCodeIso2);\n case 'EU':\n return isEuCountryCode(countryCodeIso2);\n case 'International':\n return true;\n default:\n throw `Unhandled buyer region: ${region}`;\n }\n};\n\nexport const isSwedenCountryCode = (countryCodeIso2: string) =>\n isCountryCode(SwedenCountryCode, countryCodeIso2);\n\nexport const isNordicCountryCode = (countryCodeIso2: string) =>\n containsCode(nordicCountryCodes, countryCodeIso2);\n\nexport const isEuCountryCode = (countryCodeIso2: string) =>\n containsCode(euCountryCodes, countryCodeIso2);\n\nconst containsCode = (codes: readonly string[], code: string) =>\n !!codes.find((c) => isCountryCode(code, c));\n\nconst isCountryCode = (c1: string, c2: string) =>\n c1.toUpperCase() === c2.toUpperCase();\n\nconst nordicCountryCodes = [\n 'SE',\n 'FI',\n 'NO',\n 'DK',\n 'IS',\n 'GL',\n 'FO',\n 'AX',\n 'SJ'\n] as const;\n\nconst euCountryCodes = [\n 'AT',\n 'BE',\n 'BG',\n 'CZ',\n 'DE',\n 'DK',\n 'EE',\n 'EL',\n 'ES',\n 'FI',\n 'FR',\n 'GR',\n 'HR',\n 'HU',\n 'IE',\n 'IT',\n 'LT',\n 'LU',\n 'LV',\n 'MT',\n 'NL',\n 'PL',\n 'PT',\n 'RO',\n 'SE',\n 'SI',\n 'SK'\n] as const;\n","import axios, {\n type AxiosError,\n type AxiosInstance,\n type AxiosResponse,\n type CancelTokenSource\n} from 'axios';\n\nimport { logger } from 'packages/logger';\nimport { isServer } from 'tradera/utils/nextjs';\nimport { getLanguage } from 'tradera/utils/language';\nimport { toLocalizedUrl } from 'tradera/utils/url';\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: string) => {\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: number) => statusCode === 401;\n\nconst addAntiCacheParam = (url?: string) => {\n const antiCacheRegExp = /([?&]_=)[^&]*/;\n return antiCacheRegExp.test(url || '')\n ? url?.replace(antiCacheRegExp, '$1' + new Date().getTime())\n : url +\n (/\\?/.test(url || '') ? '&' : '?') +\n '_=' +\n new Date().getTime();\n};\n\nconst submitOriginalRequest = async (error: AxiosError) =>\n axios({\n ...error.config,\n url: addAntiCacheParam(error.config.url)\n });\n\nconst handleMissingAuthToken = async (error: AxiosError) => {\n const refreshAccessToken = async () =>\n axios.get(toLocalizedUrl('/login/state', getLanguage()));\n const handleErrorAfterRefresh = async (\n errorAfterRefreshToken: AxiosError\n ) => {\n if (isUnauthorized(errorAfterRefreshToken.request?.status)) {\n // eslint-disable-next-line better-mutation/no-mutation\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: AxiosError) => {\n const checkLoginState = async () =>\n axios.get(toLocalizedUrl('/login/state', getLanguage()));\n return checkLoginState().then((response) => {\n const isLoggedIn = response.data?.isLoggedIn;\n if (isLoggedIn) {\n return submitOriginalRequest(error);\n }\n // eslint-disable-next-line better-mutation/no-mutation\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: AxiosError) => {\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 */\nfunction axiosWithTokenRefresh(axiosInstance?: 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: Record = {};\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 */\nfunction utilizeCancelToken(tokenId: string) {\n if (isServer) {\n throw new Error(\n 'This implementation is not compatible with SSR as global properties like cancelTokens here are shared between server instances'\n );\n }\n let cancel;\n if (tokenId in cancelTokens) {\n cancel = cancelTokens[tokenId].cancel;\n }\n // eslint-disable-next-line better-mutation/no-mutation\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 */\nfunction checkResponseVersion(version = '12.0.0') {\n return (response: AxiosResponse) => {\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 */\nfunction checkResponseLoggedOut() {\n return (response: AxiosResponse) => {\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 */\nfunction finalizeResponse() {\n return (response: AxiosResponse) => {\n const { data, status } = response;\n return {\n data,\n status\n };\n };\n}\n\ntype StatusHandlers = Record;\n\n/**\n * Common network request error handling\n */\nfunction handleError(statusHandlers: StatusHandlers = {}) {\n return (error: AxiosError) => {\n const status = error.response && error.response.status;\n const message = error.message ? error.message : error.toString();\n /* eslint-disable better-mutation/no-mutation */\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 && status in statusHandlers) {\n error.message = statusHandlers[status];\n }\n throw error;\n };\n}\n\nfunction reloadOnUnauthorized(error: AxiosError) {\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: AxiosError, scope: object) {\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, scope);\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 plainDayjs from 'dayjs';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport localeData from 'dayjs/plugin/localeData';\nimport {\n DAY_IN_SECONDS,\n HOUR_IN_SECONDS,\n MINUTE_IN_SECONDS\n} from 'tradera/constants/time';\nimport 'dayjs/locale/sv';\nimport 'dayjs/locale/da';\nimport 'dayjs/locale/de';\nimport 'dayjs/locale/fr';\nimport 'dayjs/locale/nl';\n\nplainDayjs.extend(isBetween);\nplainDayjs.extend(isSameOrAfter);\nplainDayjs.extend(utc);\nplainDayjs.extend(timezone);\nplainDayjs.extend(localizedFormat);\nplainDayjs.extend(relativeTime);\nplainDayjs.extend(localeData);\n\nexport const dayjs = plainDayjs;\n\nexport const localizedDayjs =\n (locale) =>\n (...args) =>\n dayjs(...args).locale(locale);\n\nconst swedishTimeZone = 'Europe/Stockholm';\n\nexport const swedishTimeZoneDate = (date, localizedDayjsFn) => {\n // This is a workaround for locale being lost when using .tz() in Nextweb\n const locale = localizedDayjsFn().locale();\n return localizedDayjsFn(date).tz(swedishTimeZone).locale(locale);\n};\n\nexport const formatUtcDateAsSwedishTimeZoneDate = (\n date,\n localizedDayjsFn,\n options = {}\n) => {\n const formatArray = [\n options.includeWeekday && 'ddd', // tor\n 'D MMM', // 19 okt\n options.includeYear && 'YYYY', // 2023\n !options.excludeTime && 'HH:mm' // 09:50\n ];\n const format = formatArray.filter(Boolean).join(' ');\n\n return swedishTimeZoneDate(date, localizedDayjsFn).format(format);\n};\n\nexport const getCurrentSwedishTimeZoneDate = () =>\n dayjs().tz(swedishTimeZone).format('YYYYMMDD');\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 // eslint-disable-next-line better-mutation/no-mutation\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]: DAY_IN_SECONDS,\n [TIME_SPAN_UNITS.HOURS]: HOUR_IN_SECONDS,\n [TIME_SPAN_UNITS.MINUTES]: MINUTE_IN_SECONDS,\n [TIME_SPAN_UNITS.SECONDS]: 1\n};\n\n/**\n *\n * @param string locale\n */\nexport const getMonths = (locale) => {\n dayjs.locale(locale);\n return dayjs.months();\n};\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 'tradera/legacy/static/packages/init-data';\nimport { toLocalizedUrl } from 'tradera/utils/url';\nimport { getLanguage } from 'tradera/utils/language';\nimport { isServer } from 'tradera/utils/nextjs';\nimport type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\ntype HttpClientConfig = AxiosRequestConfig & { cancelTokenId?: string };\n\nconst ensureClientOnly = () => {\n // Cancel tokens would be shared per server instance so ensure we are not on server.\n if (isServer) {\n throw new Error('This HTTP client is only safe to use on frontend');\n }\n};\n\n// Prevents URL:s that begins with // when that was not intended.\nconst getSafeUrl = (baseUrl: string, url?: string) => {\n if (baseUrl.endsWith('/') && url?.startsWith('/')) {\n return baseUrl + url.substring(1);\n }\n return baseUrl + url;\n};\n\nconst httpClient = (baseUrl: string, shouldLocalizeUrl?: boolean) => {\n const axiosWrapper = (\n url: string | undefined,\n httpClientConfig: HttpClientConfig,\n axiosCaller: (\n axios: AxiosInstance,\n url: string,\n config: AxiosRequestConfig\n ) => Promise>\n ) => {\n const { cancelTokenId, ...axiosConfig } = httpClientConfig;\n const version = initData.version;\n if (cancelTokenId) {\n const { cancel, cancelToken } = utilizeCancelToken(cancelTokenId);\n // eslint-disable-next-line better-mutation/no-mutation\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: (\n url: string,\n httpClientConfig: HttpClientConfig = axiosConfigs.authenticated\n ) => {\n ensureClientOnly();\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.get(url, config)\n );\n },\n post: (\n url: string,\n payload: TRequest,\n httpClientConfig: HttpClientConfig = axiosConfigs.authenticated\n ) => {\n ensureClientOnly();\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.post, TRequest>(\n url,\n payload,\n config\n )\n );\n },\n put: (\n url: string,\n payload: TRequest,\n httpClientConfig: HttpClientConfig = axiosConfigs.authenticated\n ) => {\n ensureClientOnly();\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.put, TRequest>(\n url,\n payload,\n config\n )\n );\n },\n delete: (\n url: string,\n httpClientConfig: HttpClientConfig = axiosConfigs.authenticated\n ) => {\n ensureClientOnly();\n return axiosWrapper(url, httpClientConfig, (axios, url, config) =>\n axios.delete(url, config)\n );\n },\n request: (\n config: AxiosRequestConfig,\n httpClientConfig: HttpClientConfig = axiosConfigs.authenticated\n ) => {\n ensureClientOnly();\n return axiosWrapper(\n config.url,\n httpClientConfig,\n (axios, url, enhancedConfig) => {\n return axios.request({ ...config, ...enhancedConfig, url });\n }\n );\n }\n };\n};\n\nconst trpcClient = (endpoint: string) => {\n const client = httpClient(`/api/${endpoint}`, false);\n function unpackResponse(response: { data: TResponse }) {\n return response.data;\n }\n return {\n command: (\n commandName: string,\n payload: TRequest,\n httpClientConfig?: HttpClientConfig\n ): Promise =>\n client\n .post<\n TResponse,\n TRequest\n >(`/commands/${commandName}`, payload, httpClientConfig)\n .then(unpackResponse),\n query: (\n queryName: string,\n httpClientConfig?: HttpClientConfig\n ) =>\n client\n .get(`/queries/${queryName}`, httpClientConfig)\n .then(unpackResponse)\n };\n};\n\nexport const defaultClient = httpClient('');\nexport const touchWebClient = httpClient('/', true);\nexport const nextwebClient = httpClient('/api');\nexport const webApiClient = httpClient(ENDPOINTS.WEB_API, false);\nexport const cmsApiClient = httpClient('/api/cms');\nexport const marketingApiClient = httpClient(ENDPOINTS.MARKETING_PUBLIC_API);\nexport const memberIdentificationClient = trpcClient('member-identification');\nexport const translationDynamicApiClient = trpcClient(\n 'translation-dynamic-api'\n);\nexport const shippingRecommendationsClient = trpcClient(\n 'shipping-recommendations'\n);\n","import { logger } from 'tradera/legacy/static/packages/logger';\nimport { isServer } from 'tradera/utils/nextjs';\nimport type { TaskPriority } from 'src/types/scheduler-polyfill.d.ts';\n\ntype isInputPendingOptions = { includeContinuous: boolean };\ntype PostTaskCallback = () => unknown;\n\ndeclare global {\n interface Navigator {\n scheduling: {\n isInputPending: (options?: isInputPendingOptions) => boolean;\n };\n }\n\n interface Window {\n scheduler: Scheduler;\n }\n}\n\nconst LONG_RUNNING_TASK_DURATION = 50; // ms\n\nconst polyfillScheduler = () => {\n if (isServer) {\n return Promise.reject();\n }\n\n if (typeof window.scheduler !== 'undefined') {\n return Promise.resolve();\n }\n\n return import('scheduler-polyfill');\n};\n\nconst schedulerPolyfill = polyfillScheduler();\n\nexport const isInputPending = (): boolean =>\n Boolean(navigator.scheduling?.isInputPending({ includeContinuous: true }));\n\n/**\n * Pauses a synchronous task to allow other main thread tasks on the event loop to run (good for INP)\n * Note that nested setTimeout can cause an up to a 15ms delay in loops\n * (https://chromestatus.com/feature/5710690097561600), so use sparingly and with `isInputPending`:\n * if (isInputPending()) {\n * await yieldToMain();\n * }\n * Docs: https://web.dev/articles/optimize-long-tasks#use_asyncawait_to_create_yield_points\n */\nexport const yieldToMain = (): Promise =>\n new Promise((resolve) => {\n setTimeout(resolve, 0);\n });\n\n/**\n * Loop through an array (or other iterable object) of as a background task\n *\n * For each iteration this will pause if there is a user interaction event that needs\n * to be handled on the main thread or if it has exceeded the limit of a long running task (>=50ms);\n */\nexport const forEachYield = async (\n array: Array,\n callback: (\n element: ArrayType,\n index: number,\n array: Array\n ) => void\n): Promise => {\n let deadline = performance.now() + LONG_RUNNING_TASK_DURATION;\n let index = 0;\n\n for (const element of array) {\n if (isInputPending() || performance.now() >= deadline) {\n // There's a pending user input. Yield here:\n await yieldToMain();\n deadline = performance.now() + LONG_RUNNING_TASK_DURATION;\n }\n callback(element, index, array);\n index += 1;\n }\n};\n\nconst postTask = async (\n taskCallback: PostTaskCallback,\n priority: TaskPriority\n) => {\n try {\n await schedulerPolyfill;\n } catch (error) {\n if (isServer) {\n logger('scheduler-polyfill does not support a node environment');\n }\n // Fallback to ensure taskCallback() is always called\n await yieldToMain();\n return taskCallback();\n }\n\n return await scheduler.postTask(taskCallback, { priority });\n};\n\nexport const queueUserBlockingTask = (taskCallback: PostTaskCallback) =>\n postTask(taskCallback, 'user-blocking');\n\nexport const queueUserVisibleTask = (taskCallback: PostTaskCallback) =>\n postTask(taskCallback, 'user-visible');\n\nexport const queueBackgroundTask = (taskCallback: PostTaskCallback) =>\n postTask(taskCallback, 'background');\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { isServer } from 'tradera/utils/nextjs';\n\ntype Options = {\n timeout?: number;\n dataAttributes?: Record;\n key?: string;\n unload?: () => void;\n};\n\nconst scriptPromises = new Map>();\n\nexport function loadScript(src: string, options: Options = {}) {\n if (isServer) {\n // Since we use a global variable we cannot support SSR as\n // all requests would share the same variable.\n throw new Error('loadScript() is not supported on the server');\n }\n const optionsWithDefaults = {\n timeout: options.timeout || 0,\n dataAttributes: options.dataAttributes || {}\n };\n const promise = scriptPromises.get(src);\n if (promise) {\n // Every time we call loadScript with the same src, we return the same promise.\n // This is so that everyone waiting for that promise can get the same result.\n // If we don't do this and loadScript is called twice, the second call can\n // resolve before script.onload() has happened.\n return promise;\n }\n\n const newPromise = new Promise((resolve, reject) => {\n if (document.querySelector(`head > script[src=\"${src}\"]`) !== null) {\n resolve();\n return;\n }\n\n if (options.key) {\n const scriptWithKey = document.querySelector(\n `head > script[data-key=\"${options.key}\"]`\n );\n\n if (scriptWithKey) {\n document.head.removeChild(scriptWithKey);\n options.unload?.();\n }\n }\n\n const script = document.createElement('script');\n\n let timeoutTimer: ReturnType;\n if (optionsWithDefaults.timeout > 0) {\n timeoutTimer = setTimeout(() => {\n script.onload = null;\n script.onerror = null;\n document.head.removeChild(script);\n options.unload?.();\n reject(new Error('SCRIPT_LOAD_TIMEOUT'));\n }, optionsWithDefaults.timeout);\n }\n\n script.src = src;\n\n if (options.key) {\n optionsWithDefaults.dataAttributes = {\n ...optionsWithDefaults.dataAttributes,\n key: options.key\n };\n }\n for (const attribute of Object.keys(\n optionsWithDefaults.dataAttributes\n )) {\n script.setAttribute(\n `data-${attribute}`,\n optionsWithDefaults.dataAttributes[attribute]\n );\n }\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 scriptPromises.set(src, newPromise);\n return newPromise;\n}\n","export const capitalize = (text: string) =>\n `${text[0].toUpperCase()}${text.slice(1)}`;\n\nexport const lowercaseFirstLetter = (string: string) =>\n string === undefined\n ? ''\n : string.charAt(0).toLowerCase() + string.slice(1);\n\nexport const uppercaseFirstLetter = (string: string) =>\n string === undefined\n ? ''\n : string.charAt(0).toUpperCase() + string.slice(1);\n\nexport const removeTags = (text: string) => text.replace(/(<([^>]+)>)/gi, '');\n\nconst removeAttributes = (html: string) =>\n html.replace(/<(\\w+).*?(\\s?\\/)?>/gi, '<$1$2>');\n\n/**\n * Removes most HTML tags from a string, but keeps some allowed tags, without their attributes.\n * Allowed tags are `em`, `b`, `p`, `strong`, and `i`.\n */\nexport const sanitizeHtml = (html: string) =>\n removeAttributes(html).replace(\n /<(?!\\/?(em|b|p|strong|i|br|del)(\\s?\\/)?>)[^>]+>/gi,\n ''\n );\n","import qs from 'qs';\nimport HOSTS from 'tradera/constants/hosts';\nimport initData from 'tradera/legacy/static/packages/init-data';\nimport { formatNextPathnameInfo } from 'next/dist/shared/lib/router/utils/format-next-pathname-info';\nimport { getNextPathnameInfo } from 'next/dist/shared/lib/router/utils/get-next-pathname-info';\n\nimport { logger } from 'packages/logger';\nimport {\n URL_LANGUAGES,\n DEFAULT_LANGUAGE,\n SUPPORTED_LANGUAGES\n} from 'tradera/lang/constants.mjs';\nimport { removePropertiesWithoutValue } from 'tradera/utils/object';\n\n// List of SPA paths for the regex match, without initial slash\nconst SPA_REGEX_PATHS = [\n 'search',\n 'campaign',\n 'charity',\n 'categories',\n 'profile\\\\/items',\n 'brand\\\\/.+',\n // Category\n '[a-z]+[\\\\w\\\\-]+[\\\\-|_]\\\\d+'\n];\nconst SPA_PATH_REGEX = new RegExp(\n `^(/(${URL_LANGUAGES.join('|')}))?/(${SPA_REGEX_PATHS.join('|')})`\n);\n\n/**\n * Removes priceRange from query params if fromPrice or toPrice is present.\n */\nconst prunePriceRange = (queryParams: Record) => {\n if (queryParams.fromPrice || queryParams.toPrice) {\n const { priceRange, ...result } = queryParams;\n return result;\n }\n return queryParams;\n};\n\ntype FormatQueryParamsQueryParams = Record & {\n category?: string;\n categoryId?: string;\n};\n/**\n * Format query params parsed from query string\n */\nexport const formatQueryParams = (\n queryParams: FormatQueryParamsQueryParams\n) => {\n const {\n category: queryCategory,\n categoryId: queryCategoryId,\n ...rest\n } = removePropertiesWithoutValue(queryParams);\n const formattedQueryParams = prunePriceRange(rest);\n const categoryId = parseInt(queryCategory || queryCategoryId || '0', 10);\n if (categoryId > 0) {\n formattedQueryParams.categoryId = categoryId;\n }\n return formattedQueryParams;\n};\n\n/**\n * Check if url is absolute\n */\nexport const isAbsoluteUrl = (url: string): boolean =>\n new RegExp('^(?:[a-z]+:)?//', 'i').test(url);\n\n/**\n * Tests if a given url or path is an SPA link or not\n */\nexport function isSpaLink(urlOrPath: string): boolean {\n let pathname;\n if (/(^http)s?:\\/\\//i.test(urlOrPath)) {\n try {\n pathname = new URL(urlOrPath).pathname;\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 route parameters\n */\nexport const stripRouteParametersFromQueryParameters = (\n queryParams: Record,\n params: Record | undefined\n) => {\n if (!params) return queryParams;\n\n const excludeKeys = new Set(Object.keys(params));\n\n const filteredPairs = Object.entries(queryParams).filter(\n ([key]) => !excludeKeys.has(key)\n );\n return Object.fromEntries(filteredPairs);\n};\n\n/**\n * Takes an object and returns a new object without pagination properties\n */\nexport function stripCategoryIdFromQueryParameters<\n T extends Record\n>(queryParams: T): Omit {\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 */\nexport const stripHost = (url: string): string =>\n typeof url === 'string' && url.startsWith('http')\n ? url.replace(HOSTS.TRADERA, '')\n : 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 */\nexport function stripItmFromQueryParameters>(\n queryParams: T\n): Omit {\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 */\nexport function stripPaginationFromQueryParameters<\n T extends Record\n>(queryParams: T): Omit {\n // Using object spread to exclude listed variables from 'rest'\n // The parameters \"spage\", \"page\" and possible \"fe\" are deprecated and should no longer be used.\n // However, it may still be useful to remove them from the query parameters here,\n // in case they are used in old links.\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 */\nexport function stripSavedQueryNameFromQueryParameters<\n T extends Record\n>(queryParams: T): Omit {\n // Using object spread to exclude listed variables from 'rest'\n const { savedQueryName, ...rest } = queryParams;\n return rest;\n}\n\n/**\n * Takes an object and returns a new object without saveSearch properties\n */\nexport function stripSaveSearchNameFromQueryParameters<\n T extends Record\n>(queryParams: T): Omit {\n // Using object spread to exclude listed variables from 'rest'\n const { saveSearch, ...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 */\nexport const toAbsoluteUrl = (relativeUrl: string): string =>\n relativeUrl.startsWith('http')\n ? relativeUrl\n : `${HOSTS.TRADERA}${\n relativeUrl.startsWith('/') ? relativeUrl : '/' + relativeUrl\n }`;\n\n// Help TS understand that the parameter is a string\nconst isString = (str: unknown): str is string => {\n if (str === null || str === undefined || str === '' || str === false)\n return false;\n\n return true;\n};\n\n/**\n * From URL to URL with language prefix\n */\nexport function toLocalizedUrl(\n url: T,\n languageCodeIso2?: string\n): T | string {\n if (!isString(url)) {\n return url;\n }\n\n const ignoredUrls = [initData.webApiUrl, '/api/webapi/', '/support/'];\n const isIgnoredUrl = ignoredUrls.find(\n (domain) => url.indexOf(domain) !== -1\n );\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 if (url.startsWith('//')) {\n throw new Error(\n `Attempt to localize protocol relative url: ${url}. This is not supported at the moment`\n );\n }\n\n const RELATIVE_DOMAIN = 'https://example.com';\n const urlObject = new URL(url, RELATIVE_DOMAIN);\n // eslint-disable-next-line better-mutation/no-mutation\n urlObject.pathname = setLanguagePrefix(\n urlObject.pathname,\n languageCodeIso2\n );\n return urlObject.toString().replace(RELATIVE_DOMAIN, '');\n}\n\n/**\n * Creates query parameters object from search string\n */\nexport const toQueryParameters = (search: string) =>\n qs.parse(search, { ignoreQueryPrefix: true });\n\ntype ToSearchStringOptions = {\n addQueryPrefix?: boolean;\n encode?: boolean;\n skipNulls?: boolean;\n arrayFormat?: 'indices' | 'brackets' | 'repeat' | 'comma';\n};\n\n/**\n * Creates search string from all properties in object\n */\nexport const toSearchString = (\n queryParams: object,\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 }: ToSearchStringOptions = {}\n): string =>\n qs.stringify(queryParams, {\n addQueryPrefix: addQueryPrefix,\n encode: encode,\n skipNulls: skipNulls,\n arrayFormat: arrayFormat\n });\n\nconst setLanguagePrefix = (path: string, languageCodeIso2: string) => {\n // Inspired by `next/src/server/web/next-url.ts`\n const nextConfig = {\n i18n: {\n defaultLocale: DEFAULT_LANGUAGE,\n locales: SUPPORTED_LANGUAGES\n }\n };\n const pathnameInfo = getNextPathnameInfo(path, {\n nextConfig,\n parseData: true\n });\n const localizedPathname = formatNextPathnameInfo({\n ...pathnameInfo,\n defaultLocale: DEFAULT_LANGUAGE,\n locale: languageCodeIso2\n });\n return localizedPathname;\n};\n\nexport const 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 const replacePartInPath = (\n path: string,\n oldPart: string,\n newPart: string\n) => {\n if (path.indexOf('?') > -1) {\n throw new Error('? is not valid in argument.');\n }\n return path\n .split('/')\n .map((part) => (part === oldPart ? newPart : part))\n .join('/');\n};\n\n/**\n * Converts an API request to URLSearchParams for use in a GET request\n */\nexport const convertApiRequestToURLParams = (\n apiRequest: Record\n): URLSearchParams => {\n return Object.entries(apiRequest).reduce((acc, [key, value]) => {\n if (value !== null && value !== undefined) {\n acc.append(key, value.toString());\n }\n return acc;\n }, new URLSearchParams());\n};\n\nexport const getHeroImageUrl = (\n heroImageUrl: string,\n version: 'small' | 'medium' | 'large' = 'medium'\n) => {\n if (heroImageUrl) {\n return `https://img.tradera.net/heroimages/${version}-square/${heroImageUrl}`;\n }\n return undefined;\n};\n"],"names":["_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_ref","styles","props","_objectWithoutProperties","_excluded","React","viewBox","xmlns","d","fillRule","clipRule","getDefaultSelectedDescriptionLanguageCodeIso2","memberLanguageCodeIso2","memberCountryCodeIso2","countryLanguageCode","getLanguageFromCountryCode","getDefaultShippingFromCountryCodeIso2","memberCountryCodeCodeIso2","includes","isStampProvider","provider","SHIPPING_PROVIDERS","POSTNORD_STAMP","POSTNORD_STAMP_DENMARK","indexOf","Tags","cacheKeySet","Set","savedSearchesApi","createApi","reducerPath","baseQuery","isomorphicWebApiBaseQuery","tagTypes","keys","endpoints","builder","getSavedSearches","query","params","add","isServer","qs","_objectSpread","sortBy","providesTags","SAVED_SEARCHES_LIST","removeSavedSearches","mutation","url","method","body","async","dispatch","queryFulfilled","cacheKey","patchResult","util","updateQueryData","draft","_draft$savedSearches","savedSearches","filter","item","_params$ids","ids","id","undo","invalidatesTags","toggleEmailNotification","_ref2","_draft$savedSearches2","forEach","_params$savedSearchDt","savedSearchDto","hasEnabledEmailNotifications","sendMail","useGetSavedSearchesQuery","useRemoveSavedSearchesMutation","useToggleEmailNotificationMutation","FormFooterLogo","toLocalizedUrl","useUrlLocalizer","_jsx","ALink","href","children","TraderaLogo","FormFooter","registerLink","isCompanyLink","logoOnly","t","useTranslator","countryCodeFromQs","window","location","search","ignoreQueryPrefix","countryCode","countryCodeUrlSuffix","_jsxs","className","_Fragment","Trans","i18nKey","components","a","HOVER_MENUS","HoverMenu","Component","constructor","state","show","hoverContainer","toggleShow","clearTimeout","toggleShowTimeoutId","setTimeout","setState","componentDidUpdate","prevProps","showMenu","render","_this$props","_this$props$className","noContainerPositioningStyling","classNames","onMouseLeave","propTypes","TranslationPreferredMenuItem","useAppDispatch","automaticTranslationPreferred","useAppSelector","selectAutomaticTranslationPreferred","selectIsLoggedIn","type","checked","onChange","e","touchWebClient","post","isAutomaticTranslationPreferred","setAutomaticTranslationPreferred","LanguageSelect","inProfileMenu","title","_useQualtive","useQualtive","isQualtiveEnabled","openQualtiveModal","availableLanguages","selectAvailableLanguages","preferredLanguage","selectPreferredLanguage","map","languageCodeIso2","displayName","Button","fluid","theme","onClick","code","setPreferredLanguage","Flag","countryCodeIso2","getCountryCodeForFlagFromLanguage","CheckIcon","SURVEYS","language","ShippingCountrySelectDropdown","_shippingCountries$fi","shippingCountries","selectedShippingCountryCodeIso2","onSelect","_ref$itemsBeforeScrol","itemsBeforeScrollCount","shippingCountryPlaceholder","relative","_ref$style","style","_useState2","_slicedToArray","useState","setSearch","_useState4","isSearchEnabled","setIsSearchEnabled","includesSearch","v","toLowerCase","filteredShippingCountries","name","selectedShippingCountryName","find","x","listLength","listStyle","height","Math","min","width","zIndex","overflowY","SearchInput","autoFocus","placeholder","value","autoComplete","onBlur","onClear","DropdownButton","icon","onMouseDown","preventDefault","shippingCountry","ShippingCountrySelect","selectShippingCountry","shippingCountryCodes","selectAvailableShippingCountryCodes","isLoadingAvailableShippingCountries","selectIsLoadingAvailableShippingCountries","showShippingCountries","selectHasLoadedAvailableShippingCountries","useMemo","mapCountryCodeToCountryKey","useEffect","getAvailableShippingCountries","Load","updateShippingRegion","LocalizationMenu","showRegionSelection","LocalizationLink","mouseOver","mouseOut","hideRegionSelection","_ref$showIconAndTextI","showIconAndTextInsteadOfFlag","preferredLanguageCode","selectPreferredLanguageCode","showRegionSelectionAppState","selectShowRegionSelection","showLocalizationRegionPicker","selectShowLocalizationRegionPicker","onMouseEnter","GtmService","trackAction","TranslateIcon","hoverMenuStyles","SwedenCountryCode","showLanguageMenu","currentPage","onBack","isMobile","useIsMobile","setShowMenu","isNativeAppContext","useSelector","environment","BackIcon","transparentHeader","HorizontalSeparator","_ref2$thick","thick","separatorHorizontal","separatorHorizontalThick","SelectCountry","availableCountries","selectedCountryCodeIso2","onCountrySelected","filteredCountries","selectedValue","index","waitForCountSessionId","retryCount","Promise","resolve","_window","ka","tryGetKountSessionId","collectEnd","sessionId","UserRegWrapper","MediaQuery","minWidth","BREAKPOINT_SIZES","BREAKPOINTS","MD","src","alt","Error","acceptsMarketing","setAcceptsMarketing","undefined","getAcceptsMarketing","triggerUserSignedUpEvent","memberId","memberEmail","data","event","memberMarketingSubscribed","dataLayer","push","_queue","payload","callbacks","callback","subscribe","topCountries","getAvailableUserRegistrationCountries","getAvailableCountries","pushToDataLayer","trackEvent","analyticsData","eventCategory","category","eventAction","action","eventLabel","label","eventValue","eventNonInteractive","_isNonInteractive","hitCallback","toString","trackPageView","customPageUrl","pathname","hash","userTriggered","GA_EVENT_SAVE_SEARCH","BID_VALIDATION_RESULTS","LEADING_BIDDER","SUCCESSFULLY_CHANGED_AUTOBID","BELOW_MINIMUM","BELOW_RESERVE_PRICE","BELOW_OWN_LEADING_BID","OFFLINE","slice","createSlice","initialState","wishListNudgeHidden","reducers","shouldShowWishListNudge","reducer","prepare","cookieUtil","readCookie","WISH_LIST_NOTIFICATION_HIDDEN","GdprSettings","isFunctionalEnabled","hideWishListNudge","createCookie","Infinity","eraseCookie","WISH_LIST_NOTIFICATION_DISPLAY_COUNT","_slice$actions","actions","wishListNudge","ITEM_LAYOUT","LIST","GRID","GRID_MEDIUM","GRID_LARGE","getSrc","resolution","replace","identitytoolkitBaseQuery","fetchBaseQuery","prepareHeaders","headers","set","baseUrl","firebaseBaseQueryFn","args","api","extraOptions","firebaseConfiguration","error","status","statusText","region","projectId","firebaseBaseQuery","token","getState","auth","firebaseIdToken","idToken","firebaseApi","currentIdToken","_await$api$dispatch$d","memberApi","getMessagingConfiguration","initiate","messagingConfiguration","argsWithFirebaseConfiguration","result","refreshedIdTokenQuery","apiKey","grant_type","refresh_token","refreshToken","refreshedTokenData","receivedFirebaseIdToken","id_token","expiresIn","expires_in","_customTokenResult$da","_customTokenResult$da2","customTokenResult","returnSecureToken","getToken","addMessage","parameters","initiateThread","getProfile","useAddMessageMutation","useInitiateThreadMutation","useGetProfileQuery","LoadingPortal","super","el","document","createElement","loadingPortalRoot","getElementById","componentDidMount","appendChild","classList","componentWillUnmount","removeChild","ReactDOM","ajaxItemApi","getAjaxItem","itemId","languageCode","useGetAjaxItemQuery","quickView","isOpen","openQuickView","_payload$items","items","_payload$item","openedFrom","closeQuickView","_quickView$actions","referralModalApi","getReferralCode","useGetReferralCodeQuery","fromEntries","entries","BPOINT","bp","_ref3","_ref4","size","parseInt","max","STORAGE_KEYS","COOKIE_NOTIFICATION","ITEMS_CLICK","SAVE_SEARCH_HINT","SHARE_WISHLIST_TOOLTIP","SHARE_WISHLIST_TOOLTIP_SANTA","SAVED_SEARCHES","SEARCH_RECENT","RECENT_BRAND_ATTRIBUTES","WEB_PUSH_ACCEPTED","WEB_PUSH_SHOWN_MODALS","SELLER_LIST_COMPACT_VIEW","SYI_NEW_LAYOUT_INFO_DISMISSED","SYI_RESELL_SHOWN_FOR_DRAFT_IDS","SYI_RESELL_ITEM_SHOWN_FOR_DRAFT_IDS","SHIPPING_CONFIRMATION_PAGE_DIGITAL_STAMP_MODAL_DISMISSED_COUNT","SELLER_LIST_MARK_AS_SENT_HINT","WISHLIST_BADGE_DATE_SHOWN","ONBOARD_BUYER_CATEGORIES","ONBOARD_SELLER_CLOSED","VIEWED_START_PAGE_COUNT","FEATURE_MODAL_MAO_ACTIVE","FEATURE_MODAL_MGM_ACTIVE","CACHE_MESSAGING_BADGES","CACHE_SYSTEM_MESSAGES","CACHE_SYSTEM_BADGE","APPLE_ID_USER","USER_PROFILE","HAS_SHOWED_MFA_VERIFICATION_MESSAGE","DAY_IN_SECONDS","HOUR_IN_SECONDS","MINUTE_IN_SECONDS","MODAL_STATE","createWrappedT","i18nObject","hasLoadedAllTranslations","throwOnTransSuffix","isShowingTranslationKeysEnabled","options","endsWith","TRANS_SUFFIX","_len","Array","_key","translation","lng","addTranslationForHydration","isQueryToggleEnabled","isShowingTranslationKeysEnabledQuery","useQuery","_state$status","loadedLanguages","_useTranslation","useTranslation","I18N_FRONTEND_NAMESPACES","ready","i18n","wrappedT","_i18n$translator$extr","translator","extractFromKey","namespaces","namespace","_i18n$translator$reso","ns","res","pluralizedKey","exactUsedKey","addTranslationKey","useCurrentLanguage","useRef","current","_state$status2","_useTranslation2","defaults","TransComponent","NS_TOUCHWEB","isSwedenCountryCodeOrUndefined","isDenmarkCountryCode","isNetherlandsCountryCode","se","dk","de","fr","nl","en","da","getCountryCodeFromLanguage","areLanguageCodesIso2Equal","first","second","toUpperCase","useLocalizedPriceFormatter","_useLocalizedPriceFormatter","_ref$conversion","conversion","roundUp","allowFractions","preferredCurrency","selectPreferredCurrency","useCallback","price","formatPrice","rate","Number","currency","minimumFractionDigits","decimals","maximumFractionDigits","queuedToasts","createQueue","openNextToast","isInProgress","nextItem","next","queueLength","getLength","toastOptions","autoClose","onClose","notifyDone","eventData","webApiClient","get","imageUrl","itemUrl","shortDescription","toast","ItemToast","message","_nextItem$eventData","header","messageData","headerData","MessageToast","handleNotification","ttlInMinutes","visibilityState","showSuccessToast","TYPE","SUCCESS","list","topLevelCategories","initData","allCategories","isFetching","categoriesSlice","initialize","requestCategoryList","receiveCategoryList","handleCategoryListError","_categoriesSlice$acti","store","browserHistory","_process$env","isProd","process","env","reduxStore","configureStore","rootReducer","middleware","getDefaultMiddleware","middlewares","discoverApi","feesApi","pickListApi","touchwebSearchApi","touchwebSyiApi","bidHistoryApi","cartApi","draftsApi","templatesApi","shippingComplaintApi","wishListApi","messagingStatsApi","wishListItemsEndingTodayApi","webApi","topListsApi","sellerListApi","bookedShipmentsApi","feedbackRemovalApi","routerMiddleware","concat","devTools","enhancers","sentryReduxEnhancer","enableWebPackHotModuleReplacementForReducers","module","hot","accept","nextRootReducer","require","replaceReducer","initializeStore","getHistory","initializeState","ProviderWithGlobalStore","Provider","initReducer","_state","requestSearchResults","receiveSearchResults","_payload$result","_payload$endpoint","endpoint","_payload$queryParams","queryParams","_payload$shippingRegi","shippingRegionCountryCodeIso2","hasResult","normalize","handleSearchResultsError","setSingleFilterValue","filters","updateItem","_ref5","itemData","itemsOnDisplay","addItemOnDisplay","_ref6","some","removeItemOnDisplay","_ref7","setCategoryPath","_ref8","categoryPath","currentCategoryId","setCurrentCategoryId","_ref9","setIsFilterOpen","_ref10","isFilterOpen","reset","_ref11","selectEnvironment","selectFeatureSwitches","_state$environment","featureSwitches","selectIsFeatureEnabled","featureName","_selectFeatureSwitche","selectIsNativeApp","_state$environment3","itemsSlice","recentItemIds","wishListItemIds","wishListAddedCount","addRecentlyViewed","unshift","setRecentlyViewed","wishlist","_action$payload","exists","delete","from","wishlistCountIncrement","wishlistAddRange","itemIds","wishlistRemoveRange","getInitialState","_itemsSlice$actions","loadMemberServerStorageData","createAsyncThunk","memberStorageSlice","isUnitialized","isLoading","isError","isSuccess","setData","setValue","extraReducers","addCase","pending","fulfilled","_action$payload$rows","rows","row","rejected","_memberStorageSlice$a","_state$member","member","isLoggedIn","selectGeolocation","_state$member2","geolocation","selectMemberId","_state$member3","selectIsOutsideSweden","_state$member11","_state$member11$geolo","_state$member12","_state$member12$geolo","isoCode","selectIsCompany","_state$member14","isCompany","recentSearchesService","StorageService","recentBrandAttributesService","getRecentSearchesLocalStorage","_recentSearchesServic","_recentSearchesServic2","recentSearches","fetch","orderByTimestamp","formattedRecentSearches","recent","_recent$value","_recent$value2","text","count","q","getRecentBrandAttributesLocalStorage","_recentBrandAttribute","_recentBrandAttribute2","recentBrandAttributes","recentBrand","parseRecentSearchesFromCookiesString","cookieString","JSON","parse","stripItmFromQueryParameters","formatQueryParams","toQueryParameters","brands","searches","recentSearchesFromCookie","personalisationSlice","_","recentSearchesCookieString","initializeRecentSearches","initializeRecentBrandAttributes","setPersonalisedSearches","setPersonalisedSearchesStatus","setRecentSearches","recentSearchIndex","findIndex","splice","removeRecentSearch","setRecentSearchesFromCookie","setRecentBrandAttributes","_personalisationSlice","pushNotificationsSlice","enabled","initDone","pushSupported","optedIn","tagGroups","wishlistReminders","buyingListingOutbid","buyingListingWon","sellingListingFirstBid","sellingListingAllBids","sellingListingSold","sellingPaymentReceived","shownModals","MODAL_TYPES","default","selling","setInitDone","setPushSupported","setOptedInValue","setTagGroupsValue","setShownModalTrue","modalType","localStore","setItem","setAllShownModals","setEnabled","init","sdk","getUrbanSdk","canRegister","isSupported","channel","tags","has","getTagGroupsFromUrbanAirship","isPushEnabled","getItem","CartSummary","values","getCartSummary","cartId","useGetCartSummaryQuery","isomorphicBaseQueryForWishListableItems","getBrandSuggestions","getWishListableItems","getFavouriteSellers","shippingCountryCode","userLanguage","_ref3$maxItemsPerFavo","maxItemsPerFavouriteSeller","_ref3$maxItems","maxItems","_ref3$maxFavouriteSel","maxFavouriteSellers","getSellersOfInterest","_ref4$maxSellers","maxSellers","getIdeas","getInstagramFeed","getTrendingSearches","transformResponse","response","getRecommendations","slot","maxResults","pageNumber","getIndependentSearchResult","getCategoryResult","getSavedSearchResults","meta","arg","_response$response","_response$response$re","storeSavedSearch","totalItems","itemsMatched","getItemsByIds","getCausePage","useGetBrandSuggestionsQuery","useGetIdeasQuery","useGetSellersOfInterestQuery","useGetInstagramFeedQuery","useGetIndependentSearchResultQuery","useGetCategoryResultQuery","useGetSavedSearchResultsQuery","useGetRecommendationsQuery","useGetFavouriteSellersQuery","useGetTrendingSearchesQuery","useGetItemsByIdsQuery","useGetCausePageQuery","storageService","injectEndpoints","getPendingKycActions","getQuestionnaire","initializeQuestionnaire","completeQuestionnaire","getVerificationStatus","setMakeAnOfferEnabled","getSilentMessagingEnabled","setSilentMessagingEnabled","onQueryStarted","request","silentMessaging","getCompanyMoneyTransferLicenseStatus","getMemberEmailNotificationsSettingsViewModel","setMessagingEmailNotify","messaging","emailNotifyAll","emailNotify","MessagingEmailNotification","All","getMemberHasTaxIdentificationNumber","getMemberShouldCollectTaxIdentificationNumber","setMemberTaxIdentificationNumber","updateMemberEmailSettings","getCompanyDac7Status","setMemberVatNumber","setMagicalSyi","getMagicalSyiEnabled","getMemberGeoData","useGetPendingKycActionsQuery","useGetQuestionnaireQuery","useInitializeQuestionnaireMutation","useCompleteQuestionnaireMutation","useGetVerificationStatusQuery","useSetMakeAnOfferEnabledMutation","useGetSilentMessagingEnabledQuery","useSetSilentMessagingEnabledMutation","useGetCompanyMoneyTransferLicenseStatusQuery","useGetMemberEmailNotificationsSettingsViewModelQuery","useSetMessagingEmailNotifyMutation","useUpdateMemberEmailSettingsMutation","useGetCompanyDac7StatusQuery","useSetMemberVatNumberMutation","useGetMemberHasTaxIdentificationNumberQuery","useGetMemberShouldCollectTaxIdentificationNumberQuery","useSetMemberTaxIdentificationNumberMutation","useSetMagicalSyiMutation","useGetMagicalSyiEnabledQuery","useGetMessagingConfigurationQuery","useGetMemberGeoDataQuery","getMessagingStats","useGetMessagingStatsQuery","SortBy","httpClientBaseQuery","client","saveSearch","toSearchString","addQueryPrefix","searchGtm","useSaveSearchMutation","SystemMessageSeverity","webApiTags","getWishList","queryString","WISH_LIST","inWishList","deleteWishListItems","getWishListEndless","_request$page","page","serializeQueryArgs","_ref4$queryArgs","queryArgs","otherQueryArgs","endpointDefinition","endpointName","defaultSerializeQueryArgs","forceRefetch","currentArg","previousArg","merge","currentCacheData","_currentCacheData$ite","_response$items","totalCount","useGetWishListQuery","useGetWishListEndlessQuery","useDeleteWishListItemsMutation","getWishlistItemsEndingTodayCount","WISH_LIST_ENDING_TODAY","useGetWishlistItemsEndingTodayCountQuery","shippingRegion","availableShippingCountryCodes","hasLoadedAvailableShippingCountries","selectShippingRegionCountryCodeIso2","_state$shippingRegion","regionPickerDismissed","shippingCountryCookieValue","_geoLocation$isoCode","_selectPreferredLangu","_selectPreferredLangu2","geoLocation","country","gpsMatchesLanguage","isActionsPerFullPageLoadDone","hasReportedViewportDiff","setIsActionsPerFullPageLoadDone","setHasReportedViewportDiff","addLoadedLanguage","fetchSystemMessages","_getState2","_systemMessages","systemMessages","cache","read","CACHE_KEYS","SYSTEM_MESSAGES","messages","_fetchedMessages$data","fetchedMessages","getSystemMessages","reduce","acc","notificationCount","severity","Warning","write","setSystemMessages","remove","API_ERRORS","LOGGED_OUT","logOutAction","IGNORE_ME","CANCELLED","NETWORK","TIMEOUT","logger","fetchSystemBadges","_systemBadges","systemBadges","SYSTEM_BADGES","badges","_fetchedBadges$data","fetchedBadges","getSystemBadges","badgeMap","badge","PayoutsActivity","setSystemBadges","MESSAGING_BADGES","indexedDB","deleteDatabase","logOut","signIn","getStore","openProfileMenu","redirectUrl","closeModal","getReturnUrl","openNotificationOptinModalAction","gaLabel","description","pushNotifications","openNotificationOptinModal","reloadSystemMessages","reloadSystemBadges","uiSlice","toggleHeaderSearch","showHeaderSearch","openVideoModal","videoUrl","videoId","pageType","buttonLink","buttonText","videoModal","open","OPEN","closeVideoModal","CLOSED","openNewMessageModal","newMessageModal","senderId","recipientId","recipientAlias","itemTitle","itemImageUrl","purchaseOrderId","itemSellerId","closeNewMessageModal","notificationOptinModal","closeNotificationOptinModal","openModal","modalId","modals","currentModal","currentModalData","messageNotificationCount","badgeNotificationCount","profileMenu","closeProfileMenu","openCategoryDropdownMenu","categoryDropdownMenu","closeCategoryDropdownMenu","openSearchForm","showSearchForm","closeSearchForm","getInitialBadges","openItemSettings","itemSettings","closeItemSettings","openShareModal","shareModal","settings","closeShareModal","openHelpSection","_ref12","helpSection","closeHelpSection","openWishListSideSheet","wishListSideSheet","closeWishListSideSheet","openNotificationsSideSheet","notificationsSideSheet","closeNotificationsSideSheet","updateProductCommunications","_ref13","productCommunications","showSaveSearchBanner","_ref14","_ref14$payload","openCollectSsnModal","collectSsnModal","closeCollectSsnModal","openReferralModal","referralModal","closeReferralModal","_uiSlice$actions","cartSlice","setFetching","setCartData","merchantPreOrders","errors","setError","_cartSlice$actions","PAYMENT_OPTIONS","CARD","PAYPAL","APPLEPAY","GOOGLEPAY","SWISH_HANDEL","VISA_MASTERCARD","KLARNA","TRUSTLY","WALLET","NO_PAYMENT_METHOD","BUYER_PROTECTION_STATE","buyerMember","checkoutSummary","hasError","payment","paymentOptions","selectedPayment","buyerProtection","orderCalculation","paymentMethodData","paymentMethodAmount","discountCodeValue","isValid","discountCode","validating","showSelectedPaymentAsPayButton","sellerMember","modal","paymentAttemptId","trustlyRedirectUrl","ongoingPaymentAttempt","shippingInfo","shippingOptions","shippingPriceRange","shippingDiscount","collectionPoints","selectedCollectionPoint","isBooked","combinedShippingInfo","purchaseOrder","shippingOptionsLoading","verificationStatus","needsKyc","preselectedValues","shipping","paymentOption","checkoutSlice","receiveCheckout","shippingFeeRule","orderNumber","paidStatus","collectionPointId","receiveShippingOptions","setShippingOptionsLoading","receivePaymentOptions","receiveCollectionPoints","cancelPayment","setHasError","setPaymentFetching","setPaymentHasError","setPaymentIsValid","setPaymentMethodData","setCheckoutSummaryFetching","setCheckoutSummaryHasError","setSelectedPayment","_ref15","setOrderCalculation","_ref16","setBuyerProtection","_ref17","setSelectedShipping","_ref18","selectedShipping","setOngoingPaymentAttempt","_ref19","setCombinedShippingInfo","_ref20","setBuyerMember","_ref21","setBuyerMemberAddress","_ref22","address","setCollectionPoint","_ref23","setShippingInfoFetching","_ref24","setCollectionPointSaving","_ref25","savingCollectionPoint","setDropinLoading","_ref26","dropinLoading","setDiscountCode","_ref27","setDiscountCodeValidating","_ref28","setPaymentMethodAmount","_ref29","setDiscountCodeValue","_ref30","setPreselectedValues","_ref31","setShowSelectedPaymentAsPayButton","_ref32","_checkoutSlice$action","handleReportItemModel","reportItemModel","setReportItem","VIEW_STATES","FORM","ITEM_ENDED","LOADING","SUBMIT_FAILED","SUBMIT_SUCCESS","SUBMITTING","amount","breadCrumbs","categoryId","categoryNames","categories","categoryLevel","hasEnded","images","reasons","resultMessage","shippingTerms","sellerMemberId","viewState","itemDetails","resetInitialState","_ref$payload","bidInfo","itemState","getItemState","hasStarted","itemType","bidCount","reservePriceReached","nextValidBidAmount","transactionType","leadingBidderMemberId","amountDetails","getAmountDetails","fixedPrice","leadingBidAmount","openingBid","allowedBuyerRegion","breadCrumb","endDate","assertNoUndefinedProperties","setViewState","setCategories","defaultBox","weight","weightMap","shippingCalculatorEnabledCountries","shippingCalculatorSlice","box","availableFromCountryCodes","availableToCountryCodes","weightUnit","weightSliderValue","isLoadingShippingProducts","shippingProviders","providerName","service","internationalProductsGroupedByFromThenToCountry","SE","showError","initializeShippingCalculator","defaultCountry","selectedToCountry","selectedFromCountry","setSelectedToCountry","setSelectedFromCountry","setDefaultValuesOnBox","updateFilter","filterName","setWeightFilter","setWeightUnit","beginFetchingShippingProducts","setShowError","setShippingProducts","internationalShippingCalculatorProducts","prev","product","fromCountryCodeIso2","to","toCountryCodeIso2","_shippingCalculatorSl","handleTraderaShopProduct","traderaShopProduct","setProduct","setItemDetails","setTranslation","itemModel","preferredLanguageCodeIso2","disabledForEnglishLangSwedes","descriptionLanguageCodeIso2","shouldTranslateDescriptionOnLoad","setCurrentDescriptionLanguageCodeIso2","traderaShopSlice","setIsLoading","mapItemDetails","setSellerItems","sellerItems","currentDescriptionLanguageCodeIso2","setTranslationOnDemandDisabled","translatedDescription","translatedDescriptionState","translatedDescriptionStates","TRANSLATION_ON_DEMAND_DISABLED","setTranslatedDescription","DEFAULT","resetTranslatedDescription","beginLoadingTranslatedDescription","failedLoadingTranslatedDescription","SERVER_ERROR","_traderaShopSlice$act","initialPlaceBidResponse","info","isSuccessful","validationResult","bidToasterData","isBidding","categoryItems","shopItems","combinedShippingItems","viewItemState","myMaxBidAmount","placeBidResponse","purchaseInfo","serverSecondsLeft","isWishlistPending","viewItemSlice","resetPlaceBidResponse","setShowBiddingToaster","setIsRestricted","isRestricted","setIsInternationalWacko","wackoInfo","isInternationalWacko","setPurchaseInfo","setBreadCrumbs","setIsBidding","setPlaceBidResponse","setBidInfo","_state$itemDetails","_state$bidInfo$bidId","_state$bidInfo","_bidInfo$bidId","_state$bidInfo2","_state$bidInfo3","_state$bidInfo4","_state$itemDetails2","contexts","currentItemId","bidInfoItemId","isFirstBidInfo","isBinPurchase","TRANSACTION_TYPES","BIN","bidId","bidStatus","getLeadingBidStatus","existingBidCount","incomingBidCount","newBidInfo","leadingBidMemberAlias","setMyMaxBidAmount","setItemState","setViewItemState","setServerSecondsLeft","setCategoryItems","setShopItems","setCombinedShippingItems","setIsWishlistPending","setPaymentAmountForBid","paymentCalculations","paymentAmountForBid","_itemDetails$descript","_itemDetails$images","img","thumbnail","multiThumbnail","medium","small","normal","smallFit","mediumFit","largeFit","video","previousBidInfo","hadLeadingBid","hasLeadingBid","hasLostLeadingBid","_viewItemSlice$action","isSwedenCountryCode","isCountryCode","isEuCountryCode","containsCode","euCountryCodes","codes","c","c1","c2","ABORTED","VERSION_MISMATCH","defaultJsonRequestHeaders","Accept","axiosConfigs","authenticated","withCredentials","notAuthenticated","isUnauthorized","statusCode","addAntiCacheParam","antiCacheRegExp","test","Date","getTime","submitOriginalRequest","axios","config","errorResponseInterceptor","_error$request","_error$request2","responseString","responseStatus","errorCode","isMissingAuthToken","getLanguage","refreshAccessToken","then","catch","_errorAfterRefreshTok","errorAfterRefreshToken","reject","handleMissingAuthToken","checkLoginState","_response$data","handleUnauthorized","axiosWithTokenRefresh","axiosInstance","instance","interceptors","use","cancelTokens","utilizeCancelToken","tokenId","cancel","cancelToken","checkResponseVersion","version","finalizeResponse","handleError","statusHandlers","plainDayjs","isBetween","isSameOrAfter","utc","timezone","localizedFormat","relativeTime","localeData","swedishTimeZone","formatUtcDateAsSwedishTimeZoneDate","date","localizedDayjsFn","format","includeWeekday","includeYear","excludeTime","Boolean","join","swedishTimeZoneDate","locale","tz","TIME_SPAN_UNITS","ensureClientOnly","httpClient","shouldLocalizeUrl","axiosWrapper","httpClientConfig","axiosCaller","cancelTokenId","axiosConfig","_utilizeCancelToken","safeUrl","getSafeUrl","startsWith","substring","localizedUrl","put","enhancedConfig","trpcClient","unpackResponse","command","commandName","queryName","ENDPOINTS","WEB_API","marketingApiClient","MARKETING_PUBLIC_API","shippingRecommendationsClient","schedulerPolyfill","scheduler","yieldToMain","postTask","taskCallback","priority","queueBackgroundTask","scriptPromises","Map","loadScript","optionsWithDefaults","timeout","dataAttributes","promise","newPromise","querySelector","scriptWithKey","_options$unload","head","unload","script","timeoutTimer","_options$unload2","onload","onerror","attribute","setAttribute","capitalize","RegExp","URL_LANGUAGES","_removePropertiesWith","removePropertiesWithoutValue","queryCategory","queryCategoryId","formattedQueryParams","fromPrice","toPrice","priceRange","prunePriceRange","_excluded2","itm_source","itm_medium","_excluded4","isString","str","webApiUrl","domain","RELATIVE_DOMAIN","urlObject","URL","setLanguagePrefix","_ref3$addQueryPrefix","_ref3$encode","encode","_ref3$skipNulls","skipNulls","_ref3$arrayFormat","arrayFormat","path","nextConfig","defaultLocale","DEFAULT_LANGUAGE","locales","SUPPORTED_LANGUAGES","pathnameInfo","getNextPathnameInfo","parseData","formatNextPathnameInfo"],"sourceRoot":""}