{"version":3,"file":"script/bundle-15.be5bdbb552.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.ts","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/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/categories-api.ts","webpack://touchweb/./src/state/services/discover-api.ts","webpack://touchweb/./src/state/services/helpers/saved-searches-storage.ts","webpack://touchweb/./src/state/services/independent-search-api.ts","webpack://touchweb/./src/state/services/member-api.ts","webpack://touchweb/./src/state/services/messaging-stats-api.ts","webpack://touchweb/./src/state/services/start-page-theme-api.ts","webpack://touchweb/./src/state/services/touchweb-search-api.ts","webpack://touchweb/./src/state/services/touchweb-syi-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/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/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 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 { useAppSelector as useSelector } 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 { RootState } from 'tradera/state/configure-store';\nimport { selectPreferredLanguageCode } from 'tradera/state/language/selectors';\nimport type { AddTranslation } from 'tradera/lang/translations-context';\nimport { useAddTranslation } from 'tradera/lang/translations-context';\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 addTranslation: AddTranslation,\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 addTranslation\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 addTranslation = useAddTranslation();\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 addTranslation,\n language,\n hasLoadedAllTranslations,\n true,\n isShowingTranslationKeysEnabled\n ),\n [\n hasLoadedAllTranslations,\n i18n,\n t,\n addTranslation,\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 addTranslation: AddTranslation\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 addTranslation(namespace, pluralizedKey, res);\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 addTranslation = useAddTranslation();\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 addTranslation,\n language,\n hasLoadedAllTranslations,\n false,\n isShowingTranslationKeysEnabled\n ),\n [\n hasLoadedAllTranslations,\n i18n,\n t,\n addTranslation,\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","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 { independentSearchApi } from './services/independent-search-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 { categoriesApi } from 'tradera/state/services/categories-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';\nimport { startPageThemeApi } from 'tradera/state/services/start-page-theme-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 categoriesApi.middleware,\n independentSearchApi.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 startPageThemeApi.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 type { RootState } from 'tradera/state/configure-store';\nimport type { CategoryNode } from 'tradera/backend/data/category-data';\nimport { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport { selectPreferredLanguageCode } from 'tradera/state/language/selectors';\n\ntype CategoriesRequest = {\n level: number;\n};\n\ntype CategoriesResponse = CategoryNode[];\n\nexport const categoriesApi = createApi({\n reducerPath: 'categoriesApi',\n baseQuery: fetchBaseQuery({\n baseUrl: '/api/categories'\n }),\n endpoints: (builder) => ({\n getCategories: builder.query({\n queryFn: async (\n { level },\n { getState },\n _extraOptions,\n baseQuery\n ) => {\n const languageCodeIso2: string = selectPreferredLanguageCode(\n getState() as RootState\n );\n\n const { data, ...response } = await baseQuery(\n `/${level}?languageCodeIso2=${languageCodeIso2}&next=1`\n );\n return { data: data as CategoryNode[], response };\n }\n })\n })\n});\n\nexport const { useGetCategoriesQuery, endpoints } = categoriesApi;\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 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 { 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\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\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 getCategoryResult: builder.query<\n CategoryPageApiResponse,\n CategoryPageApiRequest\n >({\n query: (parameters) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n\n return {\n url: `${baseUrl}/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 const baseUrl = isServer ? '' : '/api/webapi';\n\n return {\n url: `${baseUrl}/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 if (isServer) return response;\n\n storeSavedSearch(\n arg.id,\n response.response?.result?.itemsMatched || 0\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 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 { SAVED_SEARCHES } from 'tradera/constants/cookies';\nimport { useCookieUtil } from 'tradera/hooks/use-cookie-util';\nimport cookieUtil from 'tradera/utils/cookie';\n\n/**\n * To have the cookie string as compact as possible the values are stored as\n * \"id_count#id_count#id_count\"\n */\n\nexport type ParsedSavedSearch = {\n id: number;\n count: number;\n};\n\nexport const toSavedSearchesFromCookieString = (\n cookieString: string\n): ParsedSavedSearch[] => {\n const savedSearches = cookieString.split('#');\n\n if (!savedSearches || savedSearches.length === 0) return [];\n\n return savedSearches.map((search) => {\n const [id, count] = search.split('_');\n return { id: Number(id), count: Number(count) };\n });\n};\n\nexport const storeSavedSearch = (id: number, count: number) => {\n const savedSearches = toSavedSearchesFromCookieString(\n cookieUtil.getCookie(SAVED_SEARCHES) ?? ''\n );\n\n if (Number.isNaN(count)) return;\n\n const newSavedSearches = [\n ...savedSearches.filter(\n (search) => search.id !== id && !Number.isNaN(search.count)\n ),\n { id, count }\n ];\n\n cookieUtil.createCookie(\n SAVED_SEARCHES,\n newSavedSearches\n .map((search) => `${search.id}_${search.count}`)\n .join('#'),\n 365\n );\n};\n\nexport const removeSavedSearch = (id: number) => {\n const savedSearches = toSavedSearchesFromCookieString(\n cookieUtil.getCookie(SAVED_SEARCHES) ?? ''\n );\n const newSavedSearches = [\n ...savedSearches.filter((search) => search.id !== id)\n ];\n\n cookieUtil.createCookie(\n SAVED_SEARCHES,\n newSavedSearches\n .map((search) => `${search.id}_${search.count}`)\n .join('#')\n );\n};\n\nexport const useGetSavedSearchesInCookies = () => {\n const cookieUtil = useCookieUtil();\n const savedSearches = cookieUtil.getCookie(SAVED_SEARCHES);\n\n return toSavedSearchesFromCookieString(savedSearches ?? '');\n};\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport {\n SearchSortOrderApiDto,\n type IndependentSearchApiRequest,\n type IndependentSearchApiResponse\n} from './types/webapi-discover-generated';\nimport { isServer } from 'tradera/utils/nextjs';\nimport { isomorphicBaseQueryForWishListableItems } from './utils/webapi-base-query';\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 independentSearchApi = createApi({\n reducerPath: 'independentSearchApi',\n baseQuery: isomorphicBaseQueryForWishListableItems,\n endpoints: (builder) => ({\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});\n\nexport const { useGetIndependentSearchResultQuery, endpoints } =\n independentSearchApi;\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';\nimport { isServer } from 'tradera/utils/nextjs';\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: () => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return `${baseUrl}/member/geo`;\n }\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 {\n type GetHomepageThemeSettingApiResponse,\n type UpdateHomepageThemeApiRequest,\n type UpdateHomepageThemeApiResponse\n} 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 const startPageThemeApi = createApi({\n reducerPath: 'startPageThemeApi',\n baseQuery: isomorphicWebApiBaseQuery,\n endpoints: (builder) => ({\n updateHomepageTheme: builder.mutation<\n UpdateHomepageThemeApiResponse,\n UpdateHomepageThemeApiRequest\n >({\n query: (payload) => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return {\n url: `${baseUrl}/member/profile-homepage-theme`,\n method: 'PUT',\n body: payload\n };\n },\n async onQueryStarted({ ...patch }, { dispatch, queryFulfilled }) {\n const patchResult = dispatch(\n startPageThemeApi.util.updateQueryData(\n 'getHomepageTheme',\n undefined,\n (theme) => {\n Object.assign(theme, patch);\n }\n )\n );\n try {\n await queryFulfilled;\n } catch {\n patchResult.undo();\n }\n }\n }),\n getHomepageTheme: builder.query<\n GetHomepageThemeSettingApiResponse,\n void\n >({\n query: () => {\n const baseUrl = isServer ? '' : '/api/webapi';\n return {\n url: `${baseUrl}/member/profile-homepage-theme`,\n method: 'GET'\n };\n }\n })\n })\n});\n\nexport const {\n useUpdateHomepageThemeMutation,\n useGetHomepageThemeQuery,\n endpoints,\n util\n} = startPageThemeApi;\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","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { DEFAULT_LANGUAGE } from 'tradera/lang/constants.mjs';\nimport { touchWebClient } from 'tradera/utils/http';\nimport { httpClientBaseQuery } from './utils/http-client-base-query';\nimport qs from 'qs';\nimport type {\n CategorySearchApiResponse,\n CategorySearchRequest\n} from './types/webapi-discover-generated';\n\nimport { z } from 'zod';\n\nconst CategorySchema = z.object({\n name: z.string(),\n categoryId: z.number(),\n isLeaf: z.boolean()\n});\n\nconst CategorySuggestionSchema = z.object({\n matchedItemCount: z.number(),\n name: z.string(),\n categoryId: z.number(),\n isLeaf: z.boolean()\n});\n\nconst CategoriesAndSuggestionsSchema = z.object({\n categories: z.array(CategorySchema),\n // FYI: we don't get these currently in DEV\n suggestions: z.array(CategorySuggestionSchema).optional()\n});\n\ntype GetCategoriesResponse = z.infer;\n\ntype GetCategoriesParams = {\n categoryId: number;\n shortDescription?: string | null;\n locale?: string;\n currentLevel?: number;\n};\n\nexport const touchwebSyiApi = createApi({\n reducerPath: 'touchwebSyiApi',\n baseQuery: httpClientBaseQuery({ client: touchWebClient }),\n endpoints: (builder) => ({\n getCategories: builder.query<\n GetCategoriesResponse,\n GetCategoriesParams\n >({\n query: ({\n categoryId = -1,\n shortDescription,\n currentLevel = 0\n }) => {\n if (categoryId > 0 && currentLevel > 0) {\n return {\n url: `/selling/categorysuggestions`,\n method: 'POST',\n data: {\n categoryId: categoryId,\n levelToSearch: currentLevel + 1,\n title: shortDescription\n }\n };\n }\n\n return {\n url: '/selling/toplevelcategorysuggestions',\n method: 'POST',\n data: {\n title: shortDescription\n }\n };\n },\n\n transformResponse: (response: unknown, _meta, arg) => {\n const data = CategoriesAndSuggestionsSchema.parse(response);\n\n const suggestions = data?.suggestions || [];\n\n return {\n ...data,\n // just use the first 3 suggestions and merge the rest as regular categories\n suggestions: suggestions.slice(0, 3),\n categories: [...data.categories, ...suggestions.slice(3)]\n ?.slice()\n .sort((a, b) =>\n new Intl.Collator(\n arg.locale ?? DEFAULT_LANGUAGE\n ).compare(a.name, b.name)\n )\n };\n }\n }),\n categorySearch: builder.query<\n CategorySearchApiResponse,\n CategorySearchRequest\n >({\n query: (request) =>\n `/api/webapi/discover/category-search?${qs.stringify(request)}`\n })\n })\n});\n\nexport type Category = z.infer;\n\nexport const { useCategorySearchQuery, useGetCategoriesQuery, usePrefetch } =\n touchwebSyiApi;\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 NewDisputeItemSelectorPageRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n}\n\nexport interface NewDisputePageRequest {\n /** @format uuid */\n purchaseOrderId?: string;\n /** @deprecated */\n itemIds?: number[];\n transactionIds?: number[];\n}\n\nexport interface NotificationsRequest {\n /** @format int32 */\n take?: number;\n /** @format int32 */\n skip?: number;\n}\n\nexport interface OpenSupportThreadCreateParams {\n request?: CreateDisputeSupportMessagingThreadApiRequest;\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 ProfileHomepageThemeRequest {\n request?: GetHomepageThemeSettingApiRequest;\n}\n\nexport interface ProfileHomepageThemeUpdateParams {\n request?: UpdateHomepageThemeApiRequest;\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 PurchaseOrderStrikeCreateParams {\n request?: AddPurchaseOrderStrikeApiRequest;\n}\n\nexport interface PurchaseOrderStrikesRequest {\n /** @format uuid */\n purchaseOrderId?: string;\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 ResponseError2 {\n transactionIds?: number[];\n}\n\nexport interface ResponseError5 {\n request?: WebChangeEmailWithIdApiRequest;\n}\n\nexport interface ResponseError8 {\n /** @format int32 */\n skip?: number;\n /** @format int32 */\n take?: number;\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 CreateDisputeSupportMessagingThreadApiRequest {\n /** @format int32 */\n disputeId: number;\n}\n\nexport interface CreateDisputeSupportMessagingThreadApiResponse {\n responseStatus?: ResponseStatus | null;\n threadId?: 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 transactionIds?: number[] | null;\n}\n\nexport interface DisputeV2Image {\n fileName?: string | null;\n objectName?: string | null;\n}\n\nexport interface DisputeV2ItemData {\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 /** @format int32 */\n transactionId: number;\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 /** @format double */\n selectedShippingCostAfterRefunds: number;\n sellerMember?: DisputeV2MemberData | null;\n shipping?: DisputeV2Shipping | null;\n /** @format double */\n totalOrderAmount: number;\n}\n\nexport interface DisputeV2PurchaseOrderItemData {\n hasReportedDispute: boolean;\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 /** @format int32 */\n transactionId: number;\n}\n\nexport interface DisputeV2Shipping {\n isSoldByTradera: boolean;\n /** @format uuid */\n shipmentId: string;\n /** @format double */\n shippingCost: number;\n shippingProvider?: string | null;\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 ContactBuyerQuestionAnswer {\n BuyerAndSellerAreInAgreement = 'BuyerAndSellerAreInAgreement',\n BuyerIsNotResponding = 'BuyerIsNotResponding',\n BuyerRefusesPayment = 'BuyerRefusesPayment',\n SellerHasNotContactedBuyer = 'SellerHasNotContactedBuyer'\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 enum PurchaseOrderCancellationItemActions {\n RestartItems = 'RestartItems',\n MakeItemsAvailableForPurchaseOffer = 'MakeItemsAvailableForPurchaseOffer',\n DoNothing = 'DoNothing'\n}\n\nexport enum StrikeType {\n None = 'None',\n ItemNotReceived = 'ItemNotReceived',\n UnpaidItem = 'UnpaidItem',\n MutualCancelOfPurchase = 'MutualCancelOfPurchase',\n UnpaidItemAfterGracePeriod = 'UnpaidItemAfterGracePeriod'\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 AddPurchaseOrderStrikeApiRequest {\n comment?: string | null;\n contactBuyerQuestionAnswer: ContactBuyerQuestionAnswer;\n itemAction: PurchaseOrderCancellationItemActions;\n /** @format uuid */\n purchaseOrderId: string;\n}\n\nexport interface AddPurchaseOrderStrikeApiResponse {\n itemAction: PurchaseOrderCancellationItemActions;\n responseStatus?: ResponseStatus | null;\n}\n\nexport interface GetPurchaseOrderStrikeItemsApiResponse {\n responseStatus?: ResponseStatus | null;\n strikes?: Strike[] | null;\n}\n\nexport interface Strike {\n strikeType: StrikeType;\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 hasProviderBookingFailed: boolean;\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 enum HomepageTheme {\n Default = 'Default',\n Fashion = 'Fashion'\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 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 isAutomaticSellerReimbursementAllowed: boolean;\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 GetHomepageThemeSettingApiRequest = object;\n\nexport interface GetHomepageThemeSettingApiResponse {\n isChangeAllowed: boolean;\n responseStatus?: ResponseStatus | null;\n theme: HomepageTheme;\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 UpdateHomepageThemeApiRequest {\n theme: HomepageTheme;\n}\n\nexport interface UpdateHomepageThemeApiResponse {\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 NewDisputeItemSelectorPageApiResponse {\n items?: DisputeV2PurchaseOrderItemData[] | null;\n purchaseOrder?: DisputeV2PurchaseOrderData | null;\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/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 setConfirmingId: (state, { payload }) => {\n state.confirmingId = 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 state.confirmingId = undefined;\n }\n }\n});\n\nexport const { setFetching, setConfirmingId, setCartData, setError } =\n 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/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';\nimport { SOURCE_SCREEN } from 'tradera/services/google-tagmanager/constants';\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 gaSourceScreen: SOURCE_SCREEN.VIP,\n gaWishlistType: '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 const itemBeforeBid = selectItemDetails(getState());\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 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\n const analyticsData = extractAnalyticsData(itemBeforeBid, result);\n analytics.trackBidPlaced(\n itemId,\n validationResult.code,\n analyticsData?.isMaxBid,\n analyticsData?.potentialBidChange,\n analyticsData?.bidId,\n analyticsData?.transactionTotal,\n analyticsData?.leadingBidAmount\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\nconst extractAnalyticsData = (\n itemBeforeBid: ItemDetails,\n placeBidResponse: Awaited>\n) => {\n if (!placeBidResponse) return null;\n\n const { bidInfo } = placeBidResponse;\n\n const transactionTotal =\n bidInfo.leadingBidAmount - (itemBeforeBid.leadingBid || 0);\n const potentialBidChange =\n placeBidResponse.myMaxBidAmount - (itemBeforeBid.leadingBid || 0);\n const isMaxBid =\n placeBidResponse.myMaxBidAmount === placeBidResponse.item.leadingBid;\n\n return {\n isMaxBid,\n potentialBidChange,\n bidId: bidInfo.bidId,\n transactionTotal,\n leadingBidAmount: bidInfo.leadingBidAmount\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 */\nexport const 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\nexport const 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 */\nexport const 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\nexport const 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\nexport const 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 */\nexport const 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 */\nexport const 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 */\nexport const 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 */\nexport const 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 */\nexport const 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 */\nexport const 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\nexport const 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\nexport const isClientNetworkError = (error: AxiosError) => {\n switch (error.message) {\n case API_ERRORS.IGNORE_ME:\n case API_ERRORS.CANCELLED:\n case API_ERRORS.ABORTED:\n case API_ERRORS.NETWORK:\n case API_ERRORS.TIMEOUT:\n return true;\n default:\n return false;\n }\n};\n\nexport const logError = (error: AxiosError, scope?: object) => {\n if (!isClientNetworkError(error)) {\n logger(error, scope);\n }\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","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","addTranslation","hasLoadedAllTranslations","throwOnTransSuffix","isShowingTranslationKeysEnabled","options","endsWith","TRANS_SUFFIX","_len","Array","_key","translation","lng","addTranslationForHydration","isQueryToggleEnabled","useAddTranslation","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","exactUsedKey","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","store","browserHistory","_process$env","isProd","process","env","reduxStore","configureStore","rootReducer","middleware","getDefaultMiddleware","middlewares","discoverApi","categoriesApi","independentSearchApi","feesApi","pickListApi","touchwebSearchApi","touchwebSyiApi","bidHistoryApi","cartApi","draftsApi","templatesApi","shippingComplaintApi","wishListApi","messagingStatsApi","wishListItemsEndingTodayApi","webApi","topListsApi","sellerListApi","bookedShipmentsApi","feedbackRemovalApi","startPageThemeApi","routerMiddleware","concat","devTools","enhancers","sentryReduxEnhancer","enableWebPackHotModuleReplacementForReducers","module","hot","accept","nextRootReducer","require","replaceReducer","initializeStore","getHistory","initializeState","initData","ProviderWithGlobalStore","Provider","initialize","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","getCategories","queryFn","_extraOptions","level","_await$baseQuery","response","useGetCategoriesQuery","isomorphicBaseQueryForWishListableItems","getBrandSuggestions","getWishListableItems","getFavouriteSellers","shippingCountryCode","userLanguage","_ref3$maxItemsPerFavo","maxItemsPerFavouriteSeller","_ref3$maxItems","maxItems","_ref3$maxFavouriteSel","maxFavouriteSellers","getSellersOfInterest","_ref4$maxSellers","maxSellers","getIdeas","getInstagramFeed","getTrendingSearches","transformResponse","getRecommendations","slot","maxResults","pageNumber","getCategoryResult","getSavedSearchResults","meta","arg","_response$response","_response$response$re","storeSavedSearch","itemsMatched","getItemsByIds","getCausePage","useGetBrandSuggestionsQuery","useGetIdeasQuery","useGetSellersOfInterestQuery","useGetInstagramFeedQuery","useGetCategoryResultQuery","useGetSavedSearchResultsQuery","useGetRecommendationsQuery","useGetFavouriteSellersQuery","useGetTrendingSearchesQuery","useGetItemsByIdsQuery","useGetCausePageQuery","toSavedSearchesFromCookieString","split","_search$split2","_cookieUtil$getCookie","getCookie","SAVED_SEARCHES","isNaN","newSavedSearches","join","getIndependentSearchResult","useGetIndependentSearchResultQuery","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","updateHomepageTheme","patch","_objectDestructuringEmpty","getHomepageTheme","useUpdateHomepageThemeMutation","useGetHomepageThemeQuery","SortBy","httpClientBaseQuery","client","saveSearch","toSearchString","addQueryPrefix","searchGtm","useSaveSearchMutation","CategorySchema","z","object","string","categoryId","number","isLeaf","boolean","CategorySuggestionSchema","matchedItemCount","CategoriesAndSuggestionsSchema","categories","array","suggestions","optional","_ref$categoryId","_ref$currentLevel","currentLevel","levelToSearch","_meta","sort","b","_arg$locale","Intl","Collator","locale","DEFAULT_LANGUAGE","compare","categorySearch","useCategorySearchQuery","usePrefetch","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","isFetching","setConfirmingId","confirmingId","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","categoryNames","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","isClientNetworkError","logError","scope","plainDayjs","isBetween","isSameOrAfter","utc","timezone","localizedFormat","relativeTime","localeData","swedishTimeZone","formatUtcDateAsSwedishTimeZoneDate","date","localizedDayjsFn","format","includeWeekday","includeYear","excludeTime","Boolean","swedishTimeZoneDate","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","locales","SUPPORTED_LANGUAGES","pathnameInfo","getNextPathnameInfo","parseData","formatNextPathnameInfo"],"sourceRoot":""}