{"version":3,"file":"script/bundle-9.deb2141d2f.js","mappings":"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","sources":["webpack://touchweb/./src/blueprint/theme/icons2/close.svg","webpack://touchweb/./src/components/site-header/hover-menu/hover-menu.module.scss","webpack://touchweb/./src/apps/syi/services/config.ts","webpack://touchweb/./src/apps/syi/services/scribe.js","webpack://touchweb/./src/apps/syi/state/actions/attributes-actions.js","webpack://touchweb/./src/apps/syi/state/actions/draft-actions.js","webpack://touchweb/./src/apps/syi/state/actions/image-actions.ts","webpack://touchweb/./src/apps/syi/state/actions/shipping-actions.js","webpack://touchweb/./src/apps/syi/state/constants.ts","webpack://touchweb/./src/apps/syi/state/drafts-api.ts","webpack://touchweb/./src/apps/syi/state/reducers/attributes.ts","webpack://touchweb/./src/apps/syi/state/reducers/charity.js","webpack://touchweb/./src/apps/syi/state/reducers/images.ts","webpack://touchweb/./src/apps/syi/state/reducers/item-duration.ts","webpack://touchweb/./src/apps/syi/state/reducers/syi.ts","webpack://touchweb/./src/apps/syi/state/selectors/attribute-selectors.js","webpack://touchweb/./src/apps/syi/state/selectors/shipping-selectors.js","webpack://touchweb/./src/apps/syi/state/selectors/syi.ts","webpack://touchweb/./src/apps/syi/state/templates-api.ts","webpack://touchweb/./src/apps/tradera/components/vip/bidding/bid-details.tsx","webpack://touchweb/./src/components/atoms/text/text.tsx","webpack://touchweb/./src/components/dropdown-button/dropdown-button.tsx","webpack://touchweb/./src/components/site-header/hover-menu/hover-menu.jsx","webpack://touchweb/./src/components/tradera-logo/tradera-logo.jsx","webpack://touchweb/./src/state/push-notifications/constants.ts","webpack://touchweb/./src/state/services/fees-api.js","webpack://touchweb/./src/state/services/touchweb-syi-api.ts","webpack://touchweb/./src/state/views/view-item/constants.ts","webpack://touchweb/./src/state/views/view-item/item-state-helper.ts","webpack://touchweb/./src/utils/gdpr-settings.js","webpack://touchweb/./src/utils/string.js","webpack://touchweb/./src/lang/constants.mjs"],"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 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})));","// 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 { isServer } from 'tradera/utils/nextjs';\n\n// expect sellingGlobalConfig to exist on global window type\ndeclare global {\n interface Window {\n sellingGlobalConfig?: SellingJsConfig;\n }\n}\ntype SellingJsConfig = {\n draftImagesUrl: string;\n templateImagesUrl: string;\n myTraderaUrl: string;\n isVatRequired: boolean;\n selectableVatValues: number[];\n isHybridAppContext: boolean;\n isHybridAppWithHtmlUploadSupport: boolean;\n isSyiNonBlockingPublishedPageEnabled: boolean;\n isHtmlEnabled: boolean;\n commissionMinimum: number;\n commissionCap: number;\n highlightFeaturePrice: number;\n rankUpFeaturePrice: number;\n isAddonsEnabled: boolean;\n isSyiAddPhotoNativeAppEnabled: boolean;\n isSyiMemberConsentEnabled: boolean;\n isSyiTenImagesEnabled: boolean;\n};\n\nconst config = {\n ...((!isServer && window.sellingGlobalConfig) || {\n draftImagesUrl: '',\n templateImagesUrl: '',\n myTraderaUrl: '',\n isVatRequired: false,\n selectableVatValues: [],\n isHybridAppContext: false,\n isHybridAppWithHtmlUploadSupport: false,\n isSyiNonBlockingPublishedPageEnabled: false,\n isHtmlEnabled: false,\n commissionMinimum: 0,\n commissionCap: 0,\n highlightFeaturePrice: 0,\n rankUpFeaturePrice: 0,\n isAddonsEnabled: false,\n isSyiAddPhotoNativeAppEnabled: false,\n isSyiMemberConsentEnabled: false,\n isSyiTenImagesEnabled: false\n }),\n maxTemplates: 100,\n domainNameCategoryId: 344477\n};\n\nconfig.maxTemplates = 100;\nconfig.domainNameCategoryId = 344477;\n\nexport default config;\n","import { touchWebClient } from 'tradera/utils/http';\n\nconst sendSessionStart = () => {\n touchWebClient.post('/selling/api/scribe/session-start');\n};\n\nconst sendSessionDuration = (duration, madeByTemplate) => {\n touchWebClient.post('/selling/api/scribe/session-duration', {\n durationMilliSeconds: duration,\n madeByTemplate: madeByTemplate\n });\n};\n\nconst sendDuration = (measuredName, durationMilliSeconds) => {\n touchWebClient.post('/selling/api/scribe/duration', {\n measuredName: measuredName,\n durationMilliSeconds: durationMilliSeconds\n });\n};\n\nconst sendIncrement = (name) => {\n touchWebClient.post('/selling/api/scribe/increment', {\n name: name\n });\n};\n\nconst sendValidationErrors = (errors) => {\n touchWebClient.post('/selling/api/scribe/form-validation-errors', {\n errors: errors\n });\n};\n\nexport default {\n sendSessionStart,\n sendSessionDuration,\n sendDuration,\n sendIncrement,\n sendValidationErrors\n};\n","import campaignCodeActions from './campaign-code-actions';\nimport { webApiClient } from 'tradera/utils/http';\nimport { selectCategoryAttributes } from '../selectors/attribute-selectors';\nimport { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\nimport ThrottledAction from 'tradera/apps/syi/utils/throttled-action';\nimport { logger } from 'packages/logger';\nimport { selectPreferredLanguage } from 'tradera/state/language/selectors';\nimport * as imageActions from './image-actions';\nimport {\n resetAttributes,\n resetImageAttributeSuggestions,\n setCategoryAttributeOption,\n setCategoryAttributes,\n setCategoryAttributesSuggestions,\n setDraftAttributes,\n setImageToColorSuggestions,\n updateCategoryAttributesOptionsStatuses\n} from '../reducers/attributes';\n\nconst throttleTimeout = 2000;\nconst suggestionsThrottle = new ThrottledAction(throttleTimeout, true);\nconst imageToColorsThrottle = new ThrottledAction(throttleTimeout, false);\n\nconst INPUT_TYPE_MAP = {\n Button: 'button',\n Color: 'color',\n Dropdown: 'dropdown'\n};\n\nconst COLOR_ATTRIBUTE_ID = 2;\n\nconst transformServerOption = (serverOption) => {\n return {\n value:\n typeof serverOption === 'string'\n ? serverOption\n : serverOption.value,\n sortOrder: serverOption.sortOrder,\n isActive: false,\n warningLabel: {\n title:\n serverOption.warningLabel !== undefined &&\n serverOption.warningLabel !== null\n ? serverOption.warningLabel.title\n : null,\n text:\n serverOption.warningLabel !== undefined &&\n serverOption.warningLabel !== null\n ? serverOption.warningLabel.text\n : null\n }\n };\n};\n\nconst transformServerAttribute = (attribute) => {\n return {\n id: attribute.id,\n title: attribute.displayName,\n description: attribute.description,\n sortOrder: attribute.sortOrder,\n backingField: attribute.backingField,\n options: attribute.possibleValues.map(transformServerOption),\n inputType: INPUT_TYPE_MAP[attribute.type],\n isMultiSelect: attribute.isMultiSelect,\n maxNumberOfValues: attribute.maxNumberOfValues,\n minNumberOfValues: attribute.minNumberOfValues,\n numberOfValuesSelected: 0,\n shouldTranslateValues: attribute.shouldTranslateValues,\n preserveOptionsOrder: attribute.preserveOptionsOrder\n };\n};\n\nexport const setAttributesFromDraft = (draft) => (dispatch) => {\n dispatch(setDraftAttributes(draft.attributeValues));\n};\n\nexport const reset = () => (dispatch) => {\n dispatch(resetAttributes());\n};\n\nexport const resetSelectedAttributes = () => (dispatch) => {\n dispatch(resetSelectedAttributes());\n};\n\nexport const fetchForCategory = (categoryId) => async (dispatch, getState) => {\n dispatch(reset());\n\n if (!categoryId) {\n return;\n }\n\n try {\n const { languageCodeIso2 } = selectPreferredLanguage(getState());\n const response = await webApiClient.get(\n `/selling/attributes/?categoryId=${categoryId}&locale=${languageCodeIso2}`\n );\n dispatch(\n setCategoryAttributes(\n response.data.attributeDefinitions.map(transformServerAttribute)\n )\n );\n dispatch(updateCategoryAttributesOptionsStatuses());\n dispatch(campaignCodeActions.validateCampaignCode());\n dispatch(imageActions.fetchImageAttributeSuggestions());\n } catch (error) {\n dispatch(reset());\n throw error;\n }\n};\n\nexport const updateAttribute =\n (attributeId, optionValue, activate, onUpdated) => (dispatch, getState) => {\n const { maxNumberOfValues, numberOfValuesSelected, isMultiSelect } =\n selectCategoryAttributes(getState()).find(\n (a) => a.id === attributeId\n );\n\n if (\n activate &&\n isMultiSelect &&\n maxNumberOfValues === numberOfValuesSelected\n ) {\n return;\n }\n\n dispatch(\n setCategoryAttributeOption({\n attributeId,\n optionValue,\n activate\n })\n );\n dispatch(campaignCodeActions.validateCampaignCode());\n if (onUpdated) {\n onUpdated();\n }\n };\n\nexport const resetAttribute = (attributeId) => (dispatch) => {\n dispatch(\n setCategoryAttributeOption({\n attributeId,\n activate: false\n })\n );\n dispatch(campaignCodeActions.validateCampaignCode());\n};\n\nexport const throttledFetchCategoryAttributeSuggestions =\n (categoryId, shortDescription) => (dispatch) => {\n const action = () => {\n dispatch(\n fetchCategoryAttributeSuggestions(categoryId, shortDescription)\n );\n };\n suggestionsThrottle.execute(action);\n };\n\nexport const throttledFetchImageAttributeSuggestions =\n (draftImageIds) => (dispatch, getState) => {\n const featureSwitches = getState().environment.featureSwitches;\n const draftCategoryId = getSyiSlice(getState())?.category\n ?.draftCategoryId;\n const categoryAttributes = getSyiSlice(getState())?.attributes\n ?.categoryAttributes;\n const hasColorAttribute =\n categoryAttributes &&\n categoryAttributes.some(\n (attribute) => attribute.backingField === 'color'\n );\n\n if (\n !featureSwitches['syi-image-attribute-suggestions'] ||\n !draftImageIds ||\n draftImageIds.length === 0 ||\n !draftCategoryId ||\n draftCategoryId === 0 ||\n !hasColorAttribute\n ) {\n return;\n }\n const action = () => {\n dispatch(fetchImageAttributeSuggestions(draftImageIds));\n };\n imageToColorsThrottle.execute(action);\n };\n\nconst fetchImageAttributeSuggestions = (draftImageIds) => async (dispatch) => {\n dispatch(resetImageAttributeSuggestions());\n\n const paramKeyPart = 'imageIds=';\n const query = paramKeyPart + draftImageIds.join(`&${paramKeyPart}`);\n\n try {\n const response = await webApiClient.get(\n `/selling/image-colors?${query}`\n );\n\n const colors = response.data?.colorValues?.map((cv) => cv.color) || [];\n\n dispatch(\n setImageToColorSuggestions({\n suggestedAttributes: [\n {\n id: COLOR_ATTRIBUTE_ID,\n name: 'color',\n values: colors\n }\n ]\n })\n );\n } catch (error) {\n logger(error);\n }\n};\n\nexport const fetchCategoryAttributeSuggestions =\n (categoryId, shortDescription) => async (dispatch, getState) => {\n const featureSwitches = getState().environment.featureSwitches;\n if (!featureSwitches['syi-attribute-suggestions']) {\n return;\n }\n\n if (!categoryId || !shortDescription) {\n return;\n }\n\n const splitTestGroup =\n getState().environment.splitTestGroups[\n 'attribute_suggestion_extractor'\n ];\n if (!splitTestEnabled(splitTestGroup)) {\n return;\n }\n const extractorType = getAttributeSuggestionExtractor(splitTestGroup);\n\n try {\n const params = {\n categoryId,\n shortDescription,\n extractorType\n };\n const response = await webApiClient.post(\n '/selling/suggest/attributes',\n params\n );\n\n dispatch(\n setCategoryAttributesSuggestions({\n suggestedAttributes:\n response.data.attributeValues.termAttributeValues.map(\n transformServerAttributeSuggestion\n ),\n suggestionsExtractorType: response.data.extractorType\n })\n );\n } catch (error) {\n dispatch({\n type: 'RESET_ATTRIBUTES'\n });\n throw error;\n }\n };\n\nconst splitTestEnabled = (splitTest) => splitTest !== 'control';\n\nconst getAttributeSuggestionExtractor = (splitTest) => {\n switch (splitTest) {\n case 'code':\n return 0;\n case 'tradera':\n return 1;\n case 'google':\n return 2;\n default:\n return 0;\n }\n};\n\nconst transformServerAttributeSuggestion = (attributeSuggestion) => {\n return {\n id: attributeSuggestion.id,\n name: attributeSuggestion.name,\n values: attributeSuggestion.values\n };\n};\n","/* eslint-disable promise/always-return */\nimport 'jquery';\nimport publishService from 'tradera/apps/syi/services/publish-service';\nimport navigationService from 'tradera/apps/syi/services/navigation-service';\nimport draftService from 'tradera/apps/syi/services/draft-service';\nimport categoryActions from './category-actions';\nimport * as imageActions from './image-actions';\nimport priceActions from './price-actions';\nimport { shortDescriptionActions } from './short-description-actions';\nimport { setDescriptionLanguageCodeIso2 } from 'tradera/apps/syi/state/reducers/short-description';\nimport longDescriptionActions from './long-description-actions';\nimport shippingActions from './shipping-actions';\nimport campaignCodeActions from './campaign-code-actions';\nimport {\n resetCharityAndShippingInfo,\n setCharityAndFetchInfo,\n setCharityFromDraftAndFetchInfo\n} from 'tradera/apps/syi/state/actions/charity-actions';\nimport feesActions from './fees-actions';\nimport { setAttributesFromDraft } from './attributes-actions';\nimport scribe from 'tradera/apps/syi/services/scribe';\nimport {\n setAllowedBuyerRegion,\n setAvailableAllowedBuyerRegions\n} from '../reducers/buyer-region';\nimport { resetImageAttributeSuggestions } from '../reducers/attributes';\nimport { handleServerValidationError } from './helpers/server-validation-error-helper';\nimport { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\nimport {\n selectCategorySuggestedAttributes,\n selectImageToColorSuggestedAttributes\n} from 'tradera/apps/syi/state/selectors/attribute-selectors';\nimport {\n selectRecommendedWeight,\n selectShippingRecommendations\n} from 'tradera/apps/syi/state/selectors/shipping-selectors';\nimport { selectFeatureSwitches } from 'tradera/state/environment/selectors';\nimport {\n trackAttributeSuggestions,\n trackShippingRecommendations\n} from './draft-tracking';\nimport { logger } from 'packages/logger';\nimport dayjs from 'dayjs';\nimport {\n getDefaultSelectedDescriptionLanguageCodeIso2,\n getDefaultShippingFromCountryCodeIso2\n} from 'tradera/apps/my-tradera/app/components/settings/selling/item-localization';\nimport userData from 'tradera/apps/syi/services/user-data.js';\nimport initData from 'init-data';\nimport { Tags, util } from '../drafts-api';\nimport { setCustomEndTime, setDurationDays } from '../reducers/item-duration';\nimport { GtmService as gtm } from 'tradera/services/google-tagmanager-service';\nimport {\n disableAutoSave,\n enableAutoSave,\n hideAllErrors,\n resetSyi,\n setDraftCanBeResumed,\n setIsEditOfPublishedItem,\n setPublishFailed,\n setPublishPending,\n toggleModal\n} from '../reducers/syi';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\n\nfunction ensureDraftReason(draft) {\n if (!draft.draftReason) {\n // eslint-disable-next-line better-mutation/no-mutation\n draft.draftReason = 'NewItem';\n }\n}\n\nconst trackAddonBeforePublish = function (addOnfeatureName) {\n gtm.trackAction('Listing AddOns', addOnfeatureName, 'Before Publish');\n};\n\nconst setDraft =\n (draft, params = {}) =>\n (dispatch, getState) => {\n const memberCountryCodeIso2 = selectShippingRegionCountryCodeIso2(\n getState()\n );\n\n const fromCountry =\n draft.fromCountry ||\n userData.shippingFromCountryCodeIso2 ||\n getDefaultShippingFromCountryCodeIso2(memberCountryCodeIso2);\n\n dispatch(shippingActions.setShippingFromCountry({ fromCountry }));\n\n dispatch(disableAutoSave());\n ensureDraftReason(draft);\n\n const isNewDraft =\n getSyiSlice(getState()).draft.draftId != draft.draftId ||\n getSyiSlice(getState()).draft.draftReason != draft.draftReason;\n const isChangeItem = draft.draftReason === 'ChangeItem';\n\n // Do first for actions that depends on this info.\n dispatch(setIsEditOfPublishedItem(isChangeItem));\n dispatch(hideAllErrors());\n\n dispatch({\n type: 'SET_DRAFT_PROPERTIES',\n draft: draft\n });\n\n dispatch(\n setAllowedBuyerRegion({\n allowedBuyerRegion: draft.allowedBuyerRegion\n })\n );\n dispatch(setAvailableAllowedBuyerRegions());\n dispatch(setItemCondition(draft.itemCondition));\n dispatch(\n campaignCodeActions.setInitialCampaignCode(\n draft.campaignCode,\n draft.campaignCodeId,\n draft.campaignCodeDescription,\n isChangeItem\n )\n );\n\n // Setting short description also loads top categories!\n dispatch(\n shortDescriptionActions.setShortDescription(draft.shortDescription)\n );\n dispatch(\n setDescriptionLanguageCodeIso2(\n draft.descriptionLanguageCodeIso2 ||\n userData.selectedDescriptionLanguageCodeIso2 ||\n getDefaultSelectedDescriptionLanguageCodeIso2(\n initData.languageCodeIso2,\n memberCountryCodeIso2\n )\n )\n );\n dispatch(setCurrency(draft.currency));\n dispatch(setResellPartner(draft.resellPartner));\n dispatch(\n categoryActions.setDraftCategory(\n draft.categoryId,\n draft.categoryPath\n )\n );\n dispatch(\n setDurationDays({ durationDays: draft.durationDays, isChangeItem })\n );\n dispatch(\n setCustomEndTime({\n customEndTime: draft.customEndTime,\n isChangeItem\n })\n );\n dispatch(\n longDescriptionActions.setLongDescriptionFromDraft(\n draft.longDescription\n )\n );\n dispatch(setDisplayPromoted(draft.displayPromoted));\n dispatch(setDisplayHighlighted(draft.displayHighlighted));\n dispatch(imageActions.setDraftImages(draft.images || []));\n dispatch(resetImageAttributeSuggestions());\n dispatch(\n priceActions.setFromDraft(\n draft.openingBid,\n draft.fixedPrice,\n draft.reservePrice,\n draft.charity?.charityId,\n draft.vat,\n isChangeItem\n )\n );\n\n const pennybridgeCharitiesEnabled = selectFeatureSwitches(getState())[\n 'pennybridge-charities'\n ];\n\n if (pennybridgeCharitiesEnabled) {\n if (params.charityId) {\n dispatch(setCharityAndFetchInfo(params.charityId));\n } else if (draft.charity) {\n dispatch(setCharityFromDraftAndFetchInfo(draft.charity));\n }\n }\n dispatch(setAttributesFromDraft(draft));\n\n dispatch(\n shippingActions.getAndSetShippingOptionsByWeight(\n draft.shippingOptions\n )\n );\n\n dispatch(enableAutoSave());\n\n if (isNewDraft) {\n scribe.sendSessionStart();\n }\n };\n\nconst setIsLoading = (isLoading) => ({\n type: 'SET_DRAFT_IS_LOADING',\n payload: isLoading\n});\n\nconst loadDraft = (dispatch, draftId) => {\n dispatch(setIsLoading(true));\n return draftService\n .loadDraft(draftId)\n .then((result) => {\n dispatch(setDraft(result));\n return result;\n })\n .catch((result) => {\n navigationService.goToStart();\n throw result;\n })\n .finally(() => dispatch(setIsLoading(false)));\n};\n\nconst loadImagesFromDraft = (draftId) => async (dispatch, getState) => {\n const browserDraftImageUrls = (getSyiSlice(getState()).images.images || [])\n .map((image) => image.imageUrl)\n .filter(Boolean);\n\n const serverDraft = await draftService.loadDraft(draftId);\n const serverDraftImages = serverDraft.images || [];\n const serverDraftImageUrls = serverDraftImages.map(\n (image) => image.imageUrl\n );\n\n const changedImages = browserDraftImageUrls\n .filter((x) => !serverDraftImageUrls.includes(x))\n .concat(\n serverDraftImageUrls.filter(\n (x) => !browserDraftImageUrls.includes(x)\n )\n );\n const imagesHaveChanged = changedImages.length > 0;\n if (imagesHaveChanged) {\n dispatch(imageActions.setDraftImages(serverDraftImages));\n }\n return imagesHaveChanged;\n};\n\n// KATS: this should perhaps be moved to the draft service on BE - do not save a draft if it's not\n// complete. Then we could check in FE if the save action succeeded, and if it did then we know that it can be resumed.\nexport const canBeResumed = (\n draftId,\n draftReason,\n shortDescription,\n longDescription,\n images\n) => {\n if (!draftId) {\n return false;\n }\n\n if (draftReason !== 'NewItem') {\n return false;\n }\n\n var hasShortDescription =\n shortDescription && shortDescription.trim().length > 0;\n var hasLongDescription =\n longDescription && longDescription.trim().length > 0;\n var hasImage =\n Array.isArray(images) && images.some((image) => !!image.imageUrl);\n return hasShortDescription || hasLongDescription || hasImage;\n};\n\nconst updateDraftCanBeResumed = () => (dispatch, getState) => {\n const draft = getSyiSlice(getState()).draft;\n const shortDescription = getSyiSlice(getState()).shortDescription\n .shortDescription;\n const longDescription = getSyiSlice(getState()).longDescription\n .longDescription;\n const images = getSyiSlice(getState()).images.images;\n\n // TODO: avoid duplication by using canBeResumed\n if (!draft.draftId) {\n return false;\n }\n\n if (draft.draftReason !== 'NewItem') {\n return false;\n }\n\n var hasShortDescription =\n shortDescription && shortDescription.trim().length > 0;\n var hasLongDescription =\n longDescription && longDescription.trim().length > 0;\n var hasImage = Array.isArray(images) && images.length > 0;\n const canBeResumed = hasShortDescription || hasLongDescription || hasImage;\n\n dispatch(setDraftCanBeResumed(canBeResumed));\n};\n\nconst setRestart = (restart) => ({\n type: 'SET_RESTART',\n payload: restart\n});\n\nconst setDisplayPromoted = (displayPromoted) => (dispatch) => {\n dispatch({\n type: 'SET_DISPLAY_PROMOTED',\n payload: displayPromoted || false\n });\n dispatch(feesActions.updatePrices());\n};\n\nconst setDisplayHighlighted = (displayHighlighted) => (dispatch) => {\n dispatch({\n type: 'SET_DISPLAY_HIGHLIGHTED',\n payload: displayHighlighted || false\n });\n dispatch(feesActions.updatePrices());\n};\n\nconst setReference = (reference) => ({\n type: 'SET_REFERENCE',\n payload: reference\n});\n\nconst publish = (t) => (dispatch, getState) => {\n dispatch(setPublishPending());\n\n const state = getSyiSlice(getState());\n const { displayHighlighted, displayPromoted } = state.extraFeatures;\n const reservePrice = state.price.reservePrice;\n const draft = draftService.buildDraftFromState(state);\n var splitTestGroups = getState().environment.splitTestGroups;\n var featureSwitches = getState().environment.featureSwitches;\n const customEndTime = state.itemDuration.customEndTime;\n\n if (draft.draftReason === 'NewItem') {\n gtm.trackAction(\n 'SYI',\n 'Creation time in seconds',\n String(dayjs().diff(dayjs(state.syi.creationStart), 'second'))\n );\n }\n\n publishService\n .publish(draft, state.memberConsent.hasTraderaPayConsent)\n .then((result) => {\n if (displayHighlighted) {\n trackAddonBeforePublish('Highlight');\n }\n if (displayPromoted) {\n trackAddonBeforePublish('Rank up');\n }\n if (reservePrice) {\n trackAddonBeforePublish('Reserve price');\n }\n if (customEndTime) {\n trackAddonBeforePublish('End time');\n }\n\n if (featureSwitches['syi-attribute-suggestions']) {\n const draftSelectedCategoryAttributes =\n draft.attributeValues.termAttributeValues;\n const suggestedCategoryAttributes =\n selectCategorySuggestedAttributes(getState()) || [];\n if (draftSelectedCategoryAttributes.length > 0) {\n trackAttributeSuggestions(\n draftSelectedCategoryAttributes,\n suggestedCategoryAttributes,\n splitTestGroups['attribute_suggestion_extractor'],\n state.draft.isNewDraft,\n result.itemId\n );\n }\n }\n\n if (featureSwitches['syi-image-attribute-suggestions']) {\n const draftSelectedColorAttributes =\n draft.attributeValues.termAttributeValues.filter(\n (a) => a.backingField === 'color'\n );\n const suggestedColorAttributes =\n selectImageToColorSuggestedAttributes(getState()) || [];\n if (draftSelectedColorAttributes) {\n trackAttributeSuggestions(\n draftSelectedColorAttributes,\n suggestedColorAttributes,\n 'ImageToColor',\n state.draft.isNewDraft,\n result.itemId\n );\n }\n }\n\n if (featureSwitches['shipping-recommendations']) {\n trackShippingRecommendations(\n draft.categoryId,\n draft.shippingOptions,\n selectRecommendedWeight(getState()) || 0,\n selectShippingRecommendations(getState()) || [],\n result.itemId\n );\n }\n\n dispatch(setDraft({}));\n navigationService.goToPublished(result.itemId);\n })\n .catch((response) => {\n logger('Failed to publish SYI draft', {\n contexts: {\n syiPublish: response\n }\n });\n\n if (\n hasResponseErrorCode(response, [\n 'DraftAlreadyPublished',\n 'DraftBelongsToAnotherMember'\n ])\n ) {\n navigationService.goToStart();\n dispatch(setDraft({}));\n } else if (hasResponseErrorCode(response, ['ValidationError'])) {\n handleServerValidationError(response.errors || [], dispatch, t);\n } else {\n dispatch(setPublishFailed());\n dispatch(toggleModal('error-modal-publish-failed'));\n }\n });\n};\n\nconst hasResponseErrorCode = (responseOrNull, arrayOfErrorCodesToCheck) =>\n responseOrNull &&\n arrayOfErrorCodesToCheck.includes(responseOrNull.errorCode);\n\nconst loadDraftIfMissing = (draftId) => (dispatch, getState) => {\n var draft = getSyiSlice(getState()).draft;\n const isAlreadyLoaded = draft.draftId === draftId;\n if (isAlreadyLoaded) {\n return Promise.resolve(draft);\n }\n return loadDraft(dispatch, draftId);\n};\n\nconst loadDefaultDraft =\n ({ charityId }) =>\n (dispatch) => {\n dispatch(resetSyi());\n dispatch(resetCharityAndShippingInfo());\n dispatch(setDraft(draftService.loadDefaultDraft(), { charityId }));\n dispatch(shippingActions.resetSelected());\n };\n\nconst loadDefaultTemplateDraft = () => (dispatch) => {\n dispatch(resetSyi());\n dispatch(resetCharityAndShippingInfo());\n var template = draftService.loadDefaultTemplateDraft();\n dispatch(setDraft({ ...template, templateId: 'new' }));\n};\n\nconst useDraftAsTemplate = () => (dispatch) => {\n dispatch({\n type: 'SET_DRAFT_REASON',\n payload: 'Template'\n });\n dispatch({\n type: 'SET_DRAFT_ID',\n payload: null\n });\n};\n\nconst setDraftVersion = (version) => (dispatch) => {\n dispatch({\n type: 'SET_DRAFT_VERSION',\n payload: version\n });\n};\n\nexport const triggerSave = () => (dispatch, getState) =>\n saveDraft(dispatch, getState);\n\nconst saveDraft = (dispatch, getState) => {\n const draft = draftService.buildDraftFromState(getSyiSlice(getState()));\n const version = getSyiSlice(getState()).draft.version || 0;\n return draftService\n .saveDraft(draft)\n .then((result) => {\n if (draft.draftId !== result.draftId) {\n dispatch({\n type: 'SET_DRAFT_ID',\n payload: result.draftId\n });\n }\n if (version > 0 && version + 1 !== result.version) {\n // Unexpected version. The draft is being edited somewhere else.\n }\n const wasNewDraftWithoutId = !draft.draftId && !!result.draftId;\n // since this function runs on a timer, we might have moved to a new route.\n // For example, when publishing a draft, we move to the published page, but\n // this function might run afterwards, which creates a new draft. Therefore,\n // make sure to only run this if we are still on the 'new' route. TWT-6947\n const routeIsNew = window.location.href.endsWith('/new');\n if (wasNewDraftWithoutId && routeIsNew) {\n navigationService.setDraftUrlWithoutReload(result.draftId);\n }\n // Must happen after new URL is set for re-render to happen.\n dispatch(setDraftVersion(result.version));\n // KATS: This is only manually dispatched since not all of the templates API is in RTK query yet\n dispatch(util.invalidateTags([Tags.DRAFT_LIST]));\n\n return result;\n })\n .catch((result) => {\n const response = result.responseJSON;\n\n logger('Failed to save SYI draft', {\n contexts: {\n syiSave: response\n }\n });\n\n if (\n hasResponseErrorCode(response, [\n 'DraftAlreadyPublished',\n 'DraftBelongsToAnotherMember'\n ])\n ) {\n dispatch(setDraft({}));\n navigationService.goToStart();\n } else if (result.status == 404) {\n dispatch(setDraft({}));\n navigationService.goToStart();\n }\n throw result;\n });\n};\n\nconst setUsedAllowed = (isAllowed) => ({\n type: 'SET_ITEM_CONDITION_SELECTION_ERROR',\n payload: isAllowed ? null : 'syi_validation_used_not_allowed_for_category'\n});\n\nconst setItemCondition = (condition) => (dispatch) => {\n dispatch({\n type: 'SET_ITEM_CONDITION',\n payload: condition\n });\n dispatch(updateItemConditionRestrictionForCategory());\n};\n\nconst updateItemConditionRestrictionForCategory =\n () => (dispatch, getState) => {\n const condition = getSyiSlice(getState()).itemCondition.itemCondition;\n const isUsed = condition === 'Used';\n if (isUsed) {\n const isAllowed = isUsedAllowed(getState);\n dispatch(setUsedAllowed(isAllowed));\n } else {\n dispatch(setUsedAllowed(true));\n }\n };\n\nconst isUsedAllowed = (getState) => {\n const categoryRestriction = getSyiSlice(getState()).syi.categoryRestriction;\n return !categoryRestriction || categoryRestriction.allowUsed !== false;\n};\n\nconst resetItemCondition = () => ({\n type: 'RESET_ITEM_CONDITION'\n});\n\nconst publishAdditionalDescription = (text) => (dispatch, getState) => {\n if (text && text.length > 0) {\n dispatch({\n type: 'ADD_ADDITIONAL_DESCRIPTION',\n payload: text\n });\n }\n dispatch(setPublishPending());\n const draft = draftService.buildDraftFromState(getSyiSlice(getState()));\n publishService\n .publish(draft)\n .then((result) => {\n navigationService.goToPublished(result.itemId);\n dispatch(setDraft({}));\n })\n .catch(() => {\n dispatch(setPublishFailed());\n });\n};\n\nconst resetDraft = () => ({ type: 'RESET_DRAFT' });\n\nconst setCurrency = (currency) => ({\n type: 'SET_CURRENCY',\n payload: { currency }\n});\n\nconst setResellPartner = (resellPartner) => ({\n type: 'SET_RESELL_PARTNER',\n payload: { resellPartner }\n});\n\nexport default {\n setDraft,\n loadDraft,\n loadImagesFromDraft,\n canBeResumed,\n updateDraftCanBeResumed,\n setRestart,\n setDisplayPromoted,\n setDisplayHighlighted,\n setReference,\n publish,\n loadDraftIfMissing,\n loadDefaultDraft,\n loadDefaultTemplateDraft,\n useDraftAsTemplate,\n saveDraft,\n setItemCondition,\n resetItemCondition,\n publishAdditionalDescription,\n resetDraft,\n updateItemConditionRestrictionForCategory,\n setIsLoading\n};\n","/* eslint-disable better-mutation/no-mutation */\n\nimport draftActions from './draft-actions';\nimport { logger } from 'packages/logger';\nimport { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\nimport { openAddPhoto } from 'tradera/apps/syi/services/native-app-service';\nimport { throttledFetchImageAttributeSuggestions } from './attributes-actions';\nimport { resetImageAttributeSuggestions } from '../reducers/attributes';\nimport { disableAutoSave, enableAutoSave } from '../reducers/syi';\nimport * as actions from '../reducers/images';\nimport type { Image as ImageType, Rotation } from '../reducers/images';\nimport type { AppDispatch, GetState } from 'tradera/state/configure-store';\nimport type { SocketIoChannel } from 'tradera/services/socket-io-channel';\nimport type { ItemDraftImage } from 'tradera/state/services/types/webapi-selling-generated';\nimport config from 'tradera/apps/syi/services/config';\nimport scribe from 'tradera/apps/syi/services/scribe';\nimport axios, { type AxiosError } from 'axios';\n\nconst MAX_IMAGES_FOR_IMAGE_TO_COLORS = 2;\n\nexport const setDraftImages =\n (images: ItemDraftImage[]) => (dispatch: AppDispatch) => {\n dispatch(actions.setDraftImages(images));\n\n dispatch(draftActions.updateDraftCanBeResumed());\n\n const removeNullAndUndefinedFilter = (\n n: T | null | undefined\n ): n is T => !!n;\n const draftImageIds = images\n .slice(0, MAX_IMAGES_FOR_IMAGE_TO_COLORS)\n .map((image) => image.draftImage?.imageId)\n .filter(removeNullAndUndefinedFilter);\n if (draftImageIds.length > 0) {\n dispatch(throttledFetchImageAttributeSuggestions(draftImageIds));\n }\n };\n\nconst addImageAndUpdateSuggestions =\n (imageId: string, imageUrl: string) =>\n (dispatch: AppDispatch, getState: GetState) => {\n dispatch(actions.addImage({ imageId, imageUrl }));\n const count = getSyiSlice(getState()).images.images.length;\n if (count <= MAX_IMAGES_FOR_IMAGE_TO_COLORS) {\n const images = getSyiSlice(getState()).images.images;\n handleAttributeSuggestionsForImages(dispatch, images);\n }\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nconst replaceImageAndUpdateSuggestions =\n (index: number, imageId: string, imageUrl: string) =>\n (dispatch: AppDispatch, getState: GetState) => {\n dispatch(actions.replaceImage({ index, imageUrl, imageId }));\n if (index < MAX_IMAGES_FOR_IMAGE_TO_COLORS) {\n const images = getSyiSlice(getState()).images.images;\n handleAttributeSuggestionsForImages(dispatch, images);\n }\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nexport const removeImageAndUpdateSuggestions =\n (index: number) => (dispatch: AppDispatch, getState: GetState) => {\n dispatch(actions.removeImage({ index }));\n\n if (index < MAX_IMAGES_FOR_IMAGE_TO_COLORS) {\n const images = getSyiSlice(getState()).images.images;\n handleAttributeSuggestionsForImages(dispatch, images);\n }\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nexport const changeImagePosition =\n (from: number, to: number) =>\n (dispatch: AppDispatch, getState: GetState) => {\n dispatch(actions.changeImagePosition({ from, to }));\n const isImageToColorImageChanged =\n (from >= MAX_IMAGES_FOR_IMAGE_TO_COLORS &&\n to < MAX_IMAGES_FOR_IMAGE_TO_COLORS) ||\n (to >= MAX_IMAGES_FOR_IMAGE_TO_COLORS &&\n from < MAX_IMAGES_FOR_IMAGE_TO_COLORS);\n if (isImageToColorImageChanged) {\n const images = getSyiSlice(getState()).images.images;\n handleAttributeSuggestionsForImages(dispatch, images);\n }\n };\n\nexport const removeImageWithId =\n (imageId: unknown) => (dispatch: AppDispatch, getState: GetState) => {\n const images = getSyiSlice(getState()).images.images;\n let imageIndex = -1;\n for (let i = images.length - 1; i >= 0; i--) {\n if (images[i].imageId === imageId) {\n imageIndex = i;\n break;\n }\n }\n if (imageIndex > -1) {\n dispatch(removeImageAndUpdateSuggestions(imageIndex));\n }\n\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nexport const rotateImageClockwise =\n (index: number) => (dispatch: AppDispatch, getState: GetState) => {\n const images = getSyiSlice(getState()).images.images;\n let rotationDegrees = images[index]?.rotationDegrees || (0 as Rotation);\n switch (rotationDegrees) {\n case 0:\n rotationDegrees = 90;\n break;\n case 90:\n rotationDegrees = 180;\n break;\n case 180:\n rotationDegrees = 270;\n break;\n case 270:\n rotationDegrees = 0;\n break;\n }\n\n dispatch(\n actions.setImageRotation({\n index,\n rotationDegrees\n })\n );\n };\n\nconst allowedFileExtensions = ['.jpeg', '.jpg', '.png', '.gif'];\nconst maxFileSize = 1024 * 1024 * 20;\nconst validateFile = (file: File) => {\n if (file === undefined) {\n return 'syi_validation_images_upload_error'; //'Något blev fel vid uppladdningen av filen';\n }\n if (\n !allowedFileExtensions.some((fileExt) =>\n file.name.toLowerCase().endsWith(fileExt)\n )\n ) {\n return 'syi_validation_images_upload_wrong_type'; //'Filen du laddade upp är av fel typ.';\n }\n if (file.size > maxFileSize) {\n return 'syi_validation_images_upload_too_large'; //'Filen du laddade upp är för stor.';\n }\n return false;\n};\n\nexport const imagesDroppedThunk =\n (files: FileList, isTemplate: boolean) => async (dispatch: AppDispatch) => {\n await dispatch(uploadImagesThunk(files, isTemplate));\n };\n\nexport const imagesSelectedThunk =\n (fileInput: HTMLInputElement, isTemplate: boolean) =>\n async (dispatch: AppDispatch) => {\n if (!fileInput.files) return;\n await dispatch(uploadImagesThunk(fileInput.files, isTemplate));\n fileInput.value = '';\n };\n\nexport const imageCroppedThunk =\n (file: File, isTemplate: boolean, index: number) =>\n async (dispatch: AppDispatch) => {\n if (file.type && file.type.startsWith('image/')) {\n const validationResult = validateFile(file);\n if (validationResult) {\n dispatch(\n actions.setImageUploadFailed({\n errorMessage: validationResult\n })\n );\n return;\n }\n await dispatch(uploadImageWithFormData(file, isTemplate, index));\n }\n };\n\nconst uploadImagesThunk =\n (files: FileList, isTemplate: boolean) =>\n async (dispatch: AppDispatch, getState: GetState) => {\n const imagesLeft =\n actions.MAX_NUMBER_OF_IMAGES -\n getSyiSlice(getState()).images.images.length;\n const imagesToUpload = Array.from(files).slice(0, imagesLeft);\n\n dispatch(\n actions.setImagesUploading({\n numberOfImages: imagesToUpload.length\n })\n );\n\n for (const file of imagesToUpload) {\n const validationResult = validateFile(file);\n if (validationResult) {\n dispatch(\n actions.setImageUploadFailed({\n errorMessage: validationResult\n })\n );\n return;\n }\n }\n for (const file of imagesToUpload) {\n await dispatch(uploadImageWithFormData(file, isTemplate));\n }\n };\n\nconst uploadImageWithFormData =\n (file: File, isTemplate: boolean, index?: number) =>\n async (dispatch: AppDispatch) => {\n const startTime = new Date().getTime();\n const formData = new FormData();\n formData.append('imageFile', file);\n\n const url = isTemplate\n ? config.templateImagesUrl\n : config.draftImagesUrl;\n try {\n const response = await axios.post(url, formData);\n const { errorCode, imageId, imageUrl } = response.data;\n if (errorCode) {\n if (errorCode === 'ImageMinimumDimensionsNotReached') {\n dispatch(\n actions.setImageUploadFailed({\n errorMessage:\n 'syi_validation_images_upload_too_small'\n })\n );\n }\n\n return;\n }\n\n // onImageUploaded start //\n const downloadingImage = new Image();\n downloadingImage.onload = () => {\n if (typeof index === 'number') {\n dispatch(\n replaceImageAndUpdateSuggestions(\n index,\n imageId,\n imageUrl\n )\n );\n } else {\n dispatch(addImageAndUpdateSuggestions(imageId, imageUrl));\n }\n };\n downloadingImage.src = imageUrl;\n // onImageUploaded end //\n\n const endTime = new Date().getTime();\n scribe.sendDuration(\n 'image_upload_client_time',\n endTime - startTime\n );\n } catch (error: unknown) {\n dispatch(\n actions.setImageUploadFailed({\n errorMessage: 'syi_validation_images_upload_error' //'Ett fel inträffade vid uppladdningen'\n })\n );\n if (\n !(error as AxiosError).response &&\n (error as AxiosError).request\n ) {\n // The request was made but no response was received\n logger('Image upload failed. Reason: No response');\n } else {\n // Something happened in setting up the request that triggered an Error\n logger(\n 'Image upload failed. Reason: ' + (error as Error).message\n );\n }\n }\n };\n\nclass MissingDraftId extends Error {}\n\nconst hasRequest = (value: unknown) =>\n typeof value === 'object' && value && 'request' in value && !!value.request;\n\nconst hasResponse = (value: unknown) =>\n typeof value === 'object' &&\n value &&\n 'response' in value &&\n !!value.response;\n\nexport const nativeAppOpenAddPhotoThunk =\n (\n saveNowIfQueued: (\n draftId: string\n ) => Promise<{ draftId?: string } | undefined>\n ) =>\n async (dispatch: AppDispatch, getState: GetState) => {\n dispatch(setIsUploadingWithApp(true));\n try {\n dispatch(disableAutoSave());\n const currentDraftId = getSyiSlice(getState())?.draft?.draftId;\n const draft = await saveNowIfQueued(currentDraftId);\n const draftId = draft?.draftId || currentDraftId;\n if (!draftId) {\n throw new MissingDraftId();\n }\n await openAddPhoto(draftId);\n } catch (error) {\n if (error instanceof MissingDraftId) {\n logger('Missing draftId on app photo upload');\n } else if (!hasRequest(error) || hasResponse(error)) {\n // Do not log axios request errors, as they are client dependent (such as offline)\n logger(error);\n }\n dispatch(\n actions.setImageUploadFailed({\n errorMessage: 'syi_images_photo_with_mobile_error'\n })\n );\n dispatch(setIsUploadingWithApp(false));\n dispatch(enableAutoSave());\n }\n };\n\nexport const fetchImagesFromDraft =\n (draftId: string, draftSocket: SocketIoChannel) =>\n async (dispatch: AppDispatch) => {\n if (!draftId) {\n logger('DraftChanged event missing draft ID');\n }\n const imagesHaveChanged = await dispatch(\n draftActions.loadImagesFromDraft(draftId)\n );\n if (imagesHaveChanged) {\n dispatch(cancelMobileUpload(draftSocket));\n }\n };\n\nexport const setIsUploadingWithApp =\n (isUploadingWithApp: boolean) => (dispatch: AppDispatch) => {\n dispatch(\n actions.setMobileUpload({\n isUploadingWithApp\n })\n );\n };\n\nexport const cancelMobileUpload =\n (draftSocket: SocketIoChannel) => (dispatch: AppDispatch) => {\n draftSocket.disconnect();\n dispatch(setIsUploadingWithApp(false));\n dispatch(enableAutoSave());\n };\n\nconst handleAttributeSuggestionsForImages = (\n dispatch: AppDispatch,\n images: ImageType[]\n) => {\n const imageIds: unknown[] = [];\n images.slice(0, MAX_IMAGES_FOR_IMAGE_TO_COLORS).forEach((image) => {\n if (image.imageId && !image.isListingImage) {\n imageIds.push(image.imageId);\n }\n });\n if (imageIds.length > 0) {\n dispatch(throttledFetchImageAttributeSuggestions(imageIds));\n } else {\n dispatch(resetImageAttributeSuggestions());\n }\n};\n\nexport const fetchImageAttributeSuggestions =\n () => (dispatch: AppDispatch, getState: GetState) => {\n const images = getSyiSlice(getState()).images.images;\n handleAttributeSuggestionsForImages(dispatch, images);\n };\n\nexport const reset = () => (dispatch: AppDispatch) => {\n dispatch(setDraftImages([]));\n dispatch(draftActions.updateDraftCanBeResumed());\n};\n","import {\n selectFeatureSwitches,\n selectIsFeatureEnabled\n} from 'tradera/state/environment/selectors';\nimport {\n getShippingProvidersByWeight,\n getShippingRecommendations\n} from 'tradera/apps/syi/services/shipping-provider-service';\nimport {\n getSyiSlice,\n selectItemIdFromDraft\n} from 'tradera/apps/syi/state/selectors/syi';\n\nimport { logger } from 'packages/logger';\nimport { selectSelectedShippingOptions } from '../reducers/shipping/shipping-selectors';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport {\n isDenmarkCountryCode,\n isNetherlandsCountryCode\n} from 'tradera/localization/countrycode';\nimport { trackSyiForm } from 'tradera/apps/syi/services/syi-ga4-service';\n\nconst reset = () => ({\n type: 'RESET_SHIPPING_OPTIONS'\n});\n\nconst resetSelected = () => async (dispatch) => {\n dispatch(setShippingOptionSelected([]));\n};\n\nconst toggleShippingOption = (type, primary) => (dispatch) => {\n dispatch({\n type: 'TOGGLE_SHIPPING_OPTION',\n payload: {\n type,\n primary\n }\n });\n};\n\nconst setShippingOptionCost = (cost, primary) => ({\n type: 'SET_SHIPPING_OPTION_COST',\n payload: {\n cost,\n primary\n }\n});\n\nconst setShippingOptionVariant = (primary, variant) => (dispatch) => {\n dispatch({\n type: 'SET_SHIPPING_OPTION_VARIANT',\n payload: {\n primary,\n variant\n }\n });\n};\n\nconst setShippingOptionSelected = (options) => (dispatch) => {\n dispatch({\n type: 'SET_SHIPPING_OPTION_SELECTED',\n payload: options\n });\n};\n\nconst setOfferTakeaway = (offerTakeaway) => async (dispatch) => {\n trackSyiForm({\n eventName: 'syi_pickup',\n parameters: {\n boolean_value: offerTakeaway ? 1 : 0\n }\n });\n dispatch({\n type: 'SET_TAKEAWAY_SELECTED',\n payload: {\n offerTakeaway\n }\n });\n};\n\nconst setOfferShipping = (offerShipping) => ({\n type: 'SET_SHIPPING_SELECTED',\n payload: {\n offerShipping\n }\n});\n\nconst getAndSetShippingOptionsByWeight =\n (shippingOptions) => async (dispatch, getState) => {\n try {\n dispatch({\n type: 'SET_SHIPPING_OPTIONS_LOADING'\n });\n\n const { charity, shipping } = getSyiSlice(getState());\n const itemId = selectItemIdFromDraft(getState());\n const { charityId } = charity;\n let fromCountry = selectShippingRegionCountryCodeIso2(getState());\n if (isDenmarkCountryCode(fromCountry)) {\n fromCountry = shipping.fromCountry;\n } else if (\n isNetherlandsCountryCode(fromCountry) &&\n !selectIsFeatureEnabled('dhl-netherlands-rollout')(getState())\n ) {\n fromCountry = 'se';\n }\n\n const { data } = await getShippingProvidersByWeight(\n fromCountry,\n charityId,\n itemId\n );\n const { productsPerWeightSpan } = data;\n\n dispatch({\n type: 'SET_SHIPPING_OPTIONS_BY_WEIGHT',\n payload: {\n productsPerWeightSpan,\n shippingOptions:\n shippingOptions ||\n selectSelectedShippingOptions(getState())\n }\n });\n } catch (error) {\n dispatch({\n type: 'SET_SHIPPING_OPTIONS_ERROR'\n });\n }\n };\n\nconst setShippingRecommendations =\n (categoryId) => async (dispatch, getState) => {\n if (\n selectFeatureSwitches(getState())['shipping-recommendations'] &&\n categoryId\n ) {\n try {\n const { categoryShippingRecommendations } =\n await getShippingRecommendations(categoryId);\n const { recommendedWeight, shippingRecommendations } =\n categoryShippingRecommendations;\n dispatch({\n type: 'SET_SHIPPING_RECOMMENDATIONS',\n payload: {\n recommendedWeight,\n shippingRecommendations\n }\n });\n } catch (error) {\n dispatch({\n type: 'CLEAR_SHIPPING_RECOMMENDATIONS'\n });\n logger(\n 'Get ShippingRecommendations failed. Reason: ' +\n error.message\n );\n }\n }\n };\n\nexport const setShippingFromCountry = (payload) => async (dispatch) => {\n dispatch({\n type: 'SET_SHIPPING_FROMCOUNTRY',\n payload\n });\n};\n\nexport default {\n reset,\n resetSelected,\n setOfferTakeaway,\n setOfferShipping,\n setShippingOptionCost,\n getAndSetShippingOptionsByWeight,\n setShippingOptionVariant,\n setShippingOptionSelected,\n setShippingRecommendations,\n toggleShippingOption,\n setShippingFromCountry\n};\n","export const DRAFT_REASON = {\n NEW_ITEM: 'NewItem',\n CHANGE_ITEM: 'ChangeItem',\n CHANGE_ITEM_WITH_BIDS: 'ChangeItemWithBids',\n COPY_OTHER_MEMBERS_ITEM: 'CopyOtherMembersItem',\n COPY_OWN_ITEM: 'CopyOwnItem',\n SELL_SIMILAR_ITEM: 'SellSimilarItem',\n RESTART_ITEM: 'RestartItem'\n};\n\n// Clothes, Accessories, Shoes\nconst CSA_CATEGORY_IDS = [16, 1612, 1623];\n\nexport const PURE_BIN_CATEGORY_IDS = [...CSA_CATEGORY_IDS];\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport { canBeResumed } from './actions/draft-actions';\nimport type {\n DeleteDraftsApiRequest,\n GetDraftsPageApiResponse\n} from 'tradera/state/services/types/webapi-selling-generated';\n\nexport enum Tags {\n DRAFT_LIST = 'DRAFT_LIST'\n}\n\nexport const draftsApi = createApi({\n reducerPath: 'draftsApi',\n baseQuery: isomorphicWebApiBaseQuery,\n tagTypes: Object.keys(Tags),\n endpoints: (builder) => ({\n deleteDrafts: builder.mutation({\n invalidatesTags: [Tags.DRAFT_LIST],\n query: (parameters) => {\n return {\n url: '/api/webapi/selling/drafts',\n method: 'DELETE',\n body: parameters\n };\n }\n }),\n loadDrafts: builder.query({\n providesTags: [Tags.DRAFT_LIST],\n query: () => '/api/webapi/selling/drafts',\n transformResponse: (response: GetDraftsPageApiResponse) => {\n return {\n ...response,\n items: response.items?.filter((item) =>\n canBeResumed(\n item.draftId,\n item.draftReason,\n item.shortDescription,\n item.longDescription,\n [\n {\n imageUrl: item.images?.find(\n (image) => image.imageUrl\n )\n }\n ]\n )\n )\n };\n }\n })\n })\n});\n\nexport const { useDeleteDraftsMutation, useLoadDraftsQuery, util } = draftsApi;\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport {\n filterSelectableSuggestions,\n filterCombinedSelectableSuggestions\n} from './attributes-helpers';\nimport type { SyiAttribute } from '../../components/attributes/types';\n\ntype CategorySuggestedAttribute = {\n id: number;\n name: string;\n values: string[];\n};\n\ntype TermAttributeValue = {\n id: number;\n backingField: string;\n userGenerated: boolean;\n values: string[];\n};\n\ntype InitialState = {\n categoryAttributes: SyiAttribute[];\n draftAttributes:\n | Record\n | {\n termAttributeValues: TermAttributeValue[];\n numberAttributeValues: [];\n };\n selectableSuggestedAttributes: CategorySuggestedAttribute[];\n selectableCategorySuggestedAttributes: SyiAttribute[];\n selectableImageToColorSuggestedAttributes: SyiAttribute[];\n imageToColorSuggestedAttributes: CategorySuggestedAttribute[];\n validationErrors: Record;\n categorySuggestedAttributes: CategorySuggestedAttribute[];\n suggestionsExtractorType: string;\n};\n\nconst initialState: InitialState = {\n // The attributes for the current category\n categoryAttributes: [],\n // The attributes of the draft.\n /**\n draftAttributes: {\n termAttributeValues: [\n {\n id: 1,\n backingField: 'clothes_size',\n userGenerated: true,\n values: [\n 'b'\n ]\n }\n ],\n numberAttributeValues: []\n }\n */\n draftAttributes: {},\n // A list of the selected attributes (draftAttributes) for display on the page.\n // Exists for ease of use in views.\n // Format:\n /**\n {\n title: 'Klädstorlek',\n value: 'L'\n }\n */\n selectableSuggestedAttributes: [],\n selectableCategorySuggestedAttributes: [],\n selectableImageToColorSuggestedAttributes: [],\n // Attribute suggestions from the image-to-color service.\n imageToColorSuggestedAttributes: [],\n validationErrors: {},\n categorySuggestedAttributes: [],\n suggestionsExtractorType: ''\n};\n\nconst updateSelectableImageToColorSuggestedAttributes = (\n state: InitialState\n) => {\n state.selectableImageToColorSuggestedAttributes =\n filterSelectableSuggestions(\n state.imageToColorSuggestedAttributes,\n state.categoryAttributes\n );\n updateSelectableSuggestedAttributes(state);\n};\n\nconst updateSelectableSuggestedAttributes = (state: InitialState) => {\n state.selectableSuggestedAttributes = filterCombinedSelectableSuggestions(\n state.selectableCategorySuggestedAttributes,\n state.selectableImageToColorSuggestedAttributes,\n state.categoryAttributes\n );\n};\n\nconst attributeSlice = createSlice({\n name: 'attributes',\n initialState,\n reducers: {\n setCategoryAttributesSuggestions: (\n state,\n action: PayloadAction<{\n suggestedAttributes: CategorySuggestedAttribute[];\n suggestionsExtractorType: string;\n }>\n ) => {\n const { payload } = action;\n state.categorySuggestedAttributes = payload.suggestedAttributes;\n state.selectableCategorySuggestedAttributes =\n filterSelectableSuggestions(\n payload.suggestedAttributes,\n state.categoryAttributes\n );\n state.suggestionsExtractorType = payload.suggestionsExtractorType;\n updateSelectableSuggestedAttributes(state);\n state.validationErrors = validate(state);\n },\n setImageToColorSuggestions: (\n state,\n action: PayloadAction<{\n suggestedAttributes: CategorySuggestedAttribute[];\n }>\n ) => {\n const { payload } = action;\n state.imageToColorSuggestedAttributes = payload.suggestedAttributes;\n updateSelectableImageToColorSuggestedAttributes(state);\n state.validationErrors = validate(state);\n },\n\n setCategoryAttributeOption: (\n state,\n action: PayloadAction<{\n attributeId: number;\n optionValue: string;\n activate: boolean;\n }>\n ) => {\n const { payload } = action;\n const attribute = state.categoryAttributes.find(\n (a) => a.id === payload.attributeId\n );\n if (attribute) {\n let options = attribute.options;\n if (\n !attribute.isMultiSelect ||\n (!payload.optionValue && !payload.activate)\n ) {\n options = options.map((o) =>\n !o.isActive ? o : { ...o, isActive: false }\n );\n }\n if (payload.optionValue) {\n options = options.map((o) =>\n o.value !== payload.optionValue\n ? o\n : { ...o, isActive: payload.activate }\n );\n }\n const numberOfValuesSelected = options.filter(\n (o) => o.isActive\n ).length;\n attribute.options = options;\n attribute.numberOfValuesSelected = numberOfValuesSelected;\n }\n state.validationErrors = validate(state);\n },\n updateCategoryAttributesOptionsStatuses: (state) => {\n state.categoryAttributes.forEach((a) => {\n const draftAttributeValues =\n state.draftAttributes.termAttributeValues?.find(\n (tav) => a.id === tav.id\n )?.values || [];\n a.options?.forEach((o) => {\n const isActive = draftAttributeValues.includes(o.value);\n o.isActive = isActive;\n });\n a.numberOfValuesSelected = a.options?.filter(\n (o) => o.isActive\n ).length;\n });\n state.validationErrors = validate(state);\n },\n setDraftAttributes: (state, action) => {\n state.draftAttributes = { ...action.payload };\n state.validationErrors = validate(state);\n },\n setCategoryAttributes: (state, action) => {\n state.categoryAttributes = [...action.payload];\n updateSelectableImageToColorSuggestedAttributes(state);\n state.validationErrors = validate(state);\n },\n resetAttributes: () => initialState,\n\n resetImageAttributeSuggestions: (state) => {\n state.imageToColorSuggestedAttributes =\n initialState.imageToColorSuggestedAttributes;\n updateSelectableImageToColorSuggestedAttributes(state);\n state.validationErrors = validate(state);\n }\n }\n});\n\nconst validate = (state: InitialState) => {\n const validationErrors: Record = {};\n state.categoryAttributes.forEach((attribute) => {\n if (attribute.minNumberOfValues === 0) {\n return;\n }\n if (attribute.options?.length === 0) {\n // There were no options to choose from.\n // May not happen when backend implementation is done,\n // we should not get an empty list of options.\n return;\n }\n const values = attribute.options?.reduce((acc, option) => {\n if (option.isActive) {\n acc.push(option.value);\n }\n return acc;\n }, [] as string[]);\n if (values?.length === 0 && attribute.backingField) {\n validationErrors[\n attribute.backingField\n ] = `attributes:::syi_validation_missing_attribute_${attribute.backingField}`;\n }\n });\n return validationErrors;\n};\n\nconst { actions, reducer } = attributeSlice;\nexport const {\n setCategoryAttributesSuggestions,\n setImageToColorSuggestions,\n setCategoryAttributeOption,\n updateCategoryAttributesOptionsStatuses,\n setDraftAttributes,\n setCategoryAttributes,\n resetAttributes,\n resetImageAttributeSuggestions\n} = actions;\n\nexport default reducer;\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { createSlice } from '@reduxjs/toolkit';\n\n// if on server there is no window object\nconst windowExists = typeof window !== 'undefined';\nconst windowOrFallback = windowExists ? window : {};\n\nconst isNewDraft = windowOrFallback.location?.pathname?.endsWith('new');\nconst queryParams = new URLSearchParams(windowOrFallback?.location?.search);\nconst queryParamCharityId = queryParams.get('charityId');\nconst preselectCharity = isNewDraft && queryParamCharityId;\n\nconst initialStateShipping = {\n forceFreeShipping: false,\n isFreeShippingPaidByProvider: false,\n freeShippingPaidByProviderName: null\n};\n\nconst initialState = {\n anonymous: true,\n charityId: preselectCharity ? Number(queryParamCharityId) : null,\n description: null,\n logoUrl: null,\n name: null,\n percentageToDonate: preselectCharity ? 100 : 0,\n ...initialStateShipping\n};\n\nconst charitySlice = createSlice({\n name: 'charity',\n initialState,\n reducers: {\n setCharityId: (state, { payload }) => {\n state.charityId = payload.charityId;\n if (payload.charityId) {\n state.percentageToDonate = 100;\n } else {\n state.percentageToDonate = 0;\n }\n },\n setCharityInfo: (\n state,\n { payload: { name, description, logoUrl } }\n ) => {\n return { ...state, name, description, logoUrl };\n },\n setCharityAnonymous: (state, { payload }) => {\n state.anonymous = payload.anonymous;\n },\n setCharityFromDraft: (state, { payload }) => {\n state.charityId = payload.charityId;\n state.percentageToDonate = payload.percentageToDonate;\n state.anonymous = payload.anonymous;\n },\n resetCharity: () => {\n return { ...initialState };\n },\n setCharityShippingInfo: (state, { payload }) => {\n return { ...state, ...payload };\n }\n }\n});\n\nexport const {\n resetCharity,\n setCharityAnonymous,\n setCharityFromDraft,\n setCharityId,\n setCharityInfo,\n setCharityShippingInfo\n} = charitySlice.actions;\n\nexport default charitySlice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { hideAllErrors } from './syi';\nimport type {\n ItemDraftImage,\n TemplateImage\n} from 'tradera/state/services/types/webapi-selling-generated';\nimport config from 'tradera/apps/syi/services/config';\n\n// This will be increased when supporting more images.\nexport const MAX_NUMBER_OF_IMAGES = config.isSyiTenImagesEnabled ? 10 : 5;\nexport const ALLOWED_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'];\n\ntype ImagesSlice = {\n images: Image[];\n uploadingCount: number;\n validationError: string | null;\n uploadError: string | null;\n isUploadingWithApp: boolean;\n};\n\nexport type Rotation = 0 | 90 | 180 | 270;\ntype DraftImage = {\n imageId: string;\n isUploadedBySystem: boolean;\n imageUrl: string;\n rotationDegrees: Rotation;\n isListingImage: false;\n};\ntype ListingImage = {\n imageId: number;\n imageGroupId: number;\n filename: string;\n isUploadedBySystem: boolean;\n imageUrl: string;\n rotationDegrees: Rotation;\n isListingImage: true;\n};\ntype OtherImage = {\n imageId: string;\n imageUrl: string;\n isListingImage: false;\n rotationDegrees: Rotation;\n isUploadedBySystem: false;\n};\nexport type Image = DraftImage | ListingImage | OtherImage;\n\nconst initialState: ImagesSlice = {\n images: [],\n uploadingCount: 0,\n validationError: null,\n uploadError: null,\n isUploadingWithApp: false\n};\n\nexport function setValidation(state: ImagesSlice) {\n if (state.uploadingCount > 0) {\n state.validationError = 'syi_validation_images_uploading';\n } else if (state.images.length === 0) {\n state.validationError = 'syi_validation_images';\n } else if (state.images.every((image) => image.isUploadedBySystem)) {\n // If there isn't at least one image uploaded by the user (can be uploaded by Klarna for example)\n state.validationError = 'syi_validation_images_not_uploaded_by_user';\n } else {\n state.validationError = null;\n }\n}\n\nfunction resetUploadError(state: ImagesSlice) {\n state.uploadError = null;\n}\n\nconst imagesSlice = createSlice({\n name: 'images',\n initialState,\n reducers: {\n setDraftImages: (\n state,\n action: PayloadAction\n ) => {\n state.images = action.payload.map((image) => {\n if ('draftImage' in image && image.draftImage) {\n return {\n imageUrl: image.imageUrl,\n imageId: image.draftImage.imageId,\n isUploadedBySystem: image.draftImage.isUploadedBySystem,\n rotationDegrees: image.draftImage.rotationDegrees,\n isListingImage: false\n } as DraftImage;\n }\n if ('listingImage' in image && image.listingImage) {\n return {\n imageUrl: image.imageUrl,\n imageId: image.listingImage.imageId,\n imageGroupId: image.listingImage.imageGroupId,\n filename: image.listingImage.filename,\n isUploadedBySystem:\n image.listingImage.isUploadedBySystem,\n rotationDegrees: image.listingImage.rotationDegrees,\n isListingImage: true\n } as ListingImage;\n }\n if ('imageId' in image && image.imageId) {\n return {\n imageUrl: image.imageUrl,\n imageId: image.imageId,\n isUploadedBySystem: false,\n rotationDegrees: image.rotationDegrees,\n isListingImage: false\n } as OtherImage;\n }\n throw Error('Unknown image type');\n });\n resetUploadError(state);\n setValidation(state);\n },\n addImage: (\n state,\n action: PayloadAction<{\n imageUrl: string;\n imageId: string;\n }>\n ) => {\n if (state.images.length >= MAX_NUMBER_OF_IMAGES) {\n return;\n }\n\n const { imageId, imageUrl } = action.payload;\n state.images.push({\n imageId,\n imageUrl,\n isListingImage: false,\n isUploadedBySystem: false,\n rotationDegrees: 0\n });\n if (state.uploadingCount > 0) {\n state.uploadingCount--;\n }\n resetUploadError(state);\n setValidation(state);\n },\n replaceImage: (\n state,\n action: PayloadAction<{\n index: number;\n imageUrl: string;\n imageId: string;\n }>\n ) => {\n const { imageId, imageUrl, index } = action.payload;\n\n if (!state.images[index]) {\n throw Error('Replace image failed');\n }\n state.images[index] = {\n imageId,\n imageUrl,\n isListingImage: false,\n isUploadedBySystem: false,\n rotationDegrees: 0\n };\n resetUploadError(state);\n setValidation(state);\n },\n removeImage: (state, action: PayloadAction<{ index: number }>) => {\n const { index } = action.payload;\n if (!state.images[index]) {\n throw new Error('Remove failed, invalid position.');\n }\n\n state.images.splice(index, 1);\n resetUploadError(state);\n setValidation(state);\n },\n changeImagePosition: (\n state,\n action: PayloadAction<{ from: number; to: number }>\n ) => {\n const { from, to } = action.payload;\n if (!state.images[from] || !state.images[to]) {\n throw new Error(\n 'Change image position failed, invalid position.'\n );\n }\n\n const movedImage = state.images.splice(from, 1);\n state.images.splice(to, 0, movedImage[0]);\n resetUploadError(state);\n setValidation(state);\n },\n setImageRotation: (\n state,\n action: PayloadAction<{\n index: number;\n rotationDegrees: Rotation;\n }>\n ) => {\n const { index, rotationDegrees } = action.payload;\n if (!state.images[index]) {\n throw new Error('Set rotation failed, invalid position.');\n }\n\n state.images[index].rotationDegrees = rotationDegrees;\n resetUploadError(state);\n setValidation(state);\n },\n setImageUploadFailed: (\n state,\n action: PayloadAction<{ errorMessage: string }>\n ) => {\n const { errorMessage } = action.payload;\n state.uploadingCount = 0;\n state.uploadError = errorMessage;\n setValidation(state);\n },\n setImagesUploading: (\n state,\n action: PayloadAction<{ numberOfImages: number }>\n ) => {\n const { numberOfImages } = action.payload;\n state.uploadingCount = numberOfImages;\n resetUploadError(state);\n setValidation(state);\n },\n setMobileUpload: (\n state,\n action: PayloadAction<{ isUploadingWithApp: boolean }>\n ) => {\n const { isUploadingWithApp } = action.payload;\n state.isUploadingWithApp = isUploadingWithApp;\n\n if (action.payload.isUploadingWithApp) {\n resetUploadError(state);\n }\n }\n },\n extraReducers: (builder) =>\n builder.addCase(hideAllErrors.type, (state) => {\n state.uploadError = null;\n })\n});\n\nexport default imagesSlice.reducer;\n\nexport const {\n setDraftImages,\n addImage,\n replaceImage,\n removeImage,\n changeImagePosition,\n setImageRotation,\n setImageUploadFailed,\n setImagesUploading,\n setMobileUpload\n} = imagesSlice.actions;\n","import dayjs from 'dayjs';\nimport userData from 'tradera/apps/syi/services/user-data';\nimport draftService from 'tradera/apps/syi/services/draft-service';\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\n\ntype ItemDurationSlice = {\n isRestartAvailable: boolean;\n durationDays: number;\n customEndTime?: string;\n allowZeroDayAuctions: boolean;\n validationErrors: { customEndTime?: string };\n};\n\nconst getEndDate = (durationDays: number, customEndTime?: string) => {\n const endDate = dayjs().startOf('date').add(durationDays, 'day');\n if (!customEndTime) return endDate;\n\n const [hours, minutes] = customEndTime.split(':').map(Number);\n return endDate.hour(hours).minute(minutes);\n};\n\nconst getValidationErrors = (\n durationDays: number,\n allowZeroDayAuctions: boolean,\n customEndTime?: string\n) => {\n let customEndTimeError = null;\n const endDate = getEndDate(durationDays, customEndTime);\n\n if (allowZeroDayAuctions) {\n const earliestEndDate = dayjs().add(5, 'minute');\n\n if (endDate.isBefore(earliestEndDate)) {\n customEndTimeError = 'syi_validation_duration_too_short_zero_day'; //'Din valda sluttid är för tidig. Annonser får avslutas tidigast efter 5 minuter.';\n }\n } else if (customEndTime) {\n const earliestEndDate = dayjs().add(3, 'day');\n\n if (endDate.isBefore(earliestEndDate, 'minute')) {\n customEndTimeError = 'syi_validation_duration_too_short'; //'Din valda sluttid är för tidig. Annonser får avslutas tidigast efter 72 timmar.';\n }\n }\n\n return customEndTimeError ? { customEndTime: customEndTimeError } : {};\n};\n\nconst initialState: ItemDurationSlice = {\n isRestartAvailable: true,\n durationDays: userData?.defaultDrafts?.newItem?.durationDays,\n customEndTime: undefined,\n allowZeroDayAuctions: false,\n validationErrors: {}\n};\n\nconst newStateWithoutCampaignRelatedProps = (\n state: ItemDurationSlice,\n durationDays: number,\n allowZeroDayAuctions: boolean,\n customEndTime?: string\n) => {\n const validationErrors = getValidationErrors(\n durationDays,\n allowZeroDayAuctions,\n customEndTime\n );\n return {\n ...state,\n durationDays,\n customEndTime,\n validationErrors\n };\n};\n\nconst itemDurationSlice = createSlice({\n name: 'itemDuration',\n initialState,\n reducers: {\n setDurationDays: (\n state,\n action: PayloadAction<{\n durationDays: number;\n isChangeItem?: boolean;\n }>\n ) => {\n const { durationDays, isChangeItem } = action.payload;\n const validationErrors = isChangeItem\n ? {}\n : getValidationErrors(\n durationDays,\n state.allowZeroDayAuctions,\n state.customEndTime\n );\n return {\n ...state,\n durationDays,\n validationErrors\n };\n },\n setCustomEndTime: (\n state,\n action: PayloadAction<{\n customEndTime: string;\n isChangeItem?: boolean;\n } | null>\n ) => {\n const { customEndTime, isChangeItem } = action.payload || {};\n\n const validationErrors =\n customEndTime && !isChangeItem\n ? getValidationErrors(\n state.durationDays,\n state.allowZeroDayAuctions,\n customEndTime\n )\n : {};\n\n return {\n ...state,\n customEndTime,\n validationErrors\n };\n },\n resetDurationAndEndTime: (state) => {\n const durationDays =\n draftService.getDefaultTemplateValue('durationDays');\n const customEndTime =\n draftService.getDefaultTemplateValue('customEndTime');\n const newState = newStateWithoutCampaignRelatedProps(\n state,\n durationDays,\n state.allowZeroDayAuctions,\n customEndTime\n );\n\n return newState;\n },\n // maybe this can be removed ..\n resetCustomEndTime: (state) => {\n return {\n ...state,\n customEndTime: initialState.customEndTime\n };\n },\n disableZeroDayAuctions: (state) => {\n const durationDays =\n state.durationDays >= 3 ? state.durationDays : 3;\n\n return {\n ...state,\n allowZeroDayAuctions: false,\n durationDays\n };\n },\n enableZeroDayAuctions: (state) => {\n return {\n ...state,\n allowZeroDayAuctions: true\n };\n },\n enableRestart: (state) => {\n return {\n ...state,\n isRestartAvailable: true\n };\n }\n },\n extraReducers(builder) {\n builder.addCase('DISABLE_RESTART', (state) => {\n return {\n ...state,\n isRestartAvailable: false\n };\n });\n }\n});\n\nexport default itemDurationSlice.reducer;\n\nexport const {\n setDurationDays,\n setCustomEndTime,\n resetDurationAndEndTime,\n resetCustomEndTime,\n disableZeroDayAuctions,\n enableZeroDayAuctions,\n enableRestart\n} = itemDurationSlice.actions;\n","/* eslint-disable better-mutation/no-mutation */\nimport { createSlice, type PayloadAction } from '@reduxjs/toolkit';\nimport type {\n ItemDraftResponse,\n GetCategoryRestrictionApiResponse\n} from 'tradera/state/services/types/webapi-selling-generated';\n\ntype SyiState = {\n creationStart: number | null;\n allErrorsVisible: boolean;\n isEditOfPublishedItem: boolean;\n publishPending: boolean;\n publishFailed: boolean;\n publishFailedReasonDisplayText: string | null;\n publishedItemPendingVip: { itemId: string } | null;\n publishedItem: ItemDraftResponse | null;\n openModal: string | null;\n openModalData: null;\n autoSaveEnabled: boolean;\n draftCanBeResumed: boolean;\n itemUpdating: boolean;\n itemUpdated: boolean;\n publishDelayed: boolean;\n categoryRestriction: GetCategoryRestrictionApiResponse | null;\n};\n\nconst initialState: SyiState = {\n creationStart: null,\n allErrorsVisible: false,\n isEditOfPublishedItem: false,\n publishPending: false,\n publishFailed: false,\n publishFailedReasonDisplayText: null,\n publishedItemPendingVip: null,\n publishedItem: null,\n openModal: null,\n openModalData: null,\n autoSaveEnabled: false,\n draftCanBeResumed: false,\n itemUpdating: false,\n itemUpdated: false,\n publishDelayed: false,\n categoryRestriction: null\n};\n\nconst syiSlice = createSlice({\n name: 'syi',\n initialState,\n reducers: {\n resetSyi: () => initialState,\n /**\n *\n * @param action Epoch\n */\n setCreationStart: (state, action: PayloadAction) => {\n state.creationStart = action.payload;\n },\n showAllErrors: (state) => {\n state.allErrorsVisible = true;\n },\n hideAllErrors: (state) => {\n state.allErrorsVisible = false;\n },\n setIsEditOfPublishedItem: (state, action: PayloadAction) => {\n state.isEditOfPublishedItem = action.payload;\n },\n setPublishedItemPendingVip: (\n state,\n action: PayloadAction<{ itemId: string }>\n ) => {\n state.publishedItemPendingVip = action.payload;\n state.publishedItem = null;\n state.publishFailed = false;\n state.publishFailedReasonDisplayText = null;\n state.publishPending = false;\n state.publishDelayed = false;\n },\n setPublishedItemDelayed: (\n state,\n action: PayloadAction<{ itemId: string }>\n ) => {\n state.publishedItemPendingVip = action.payload;\n state.publishedItem = null;\n state.publishFailed = false;\n state.publishFailedReasonDisplayText = null;\n state.publishPending = false;\n state.publishDelayed = true;\n },\n setPublishedItem: (state, action: PayloadAction) => {\n state.publishedItem = action.payload;\n state.publishedItemPendingVip = null;\n state.publishFailed = false;\n state.publishFailedReasonDisplayText = null;\n state.publishPending = false;\n state.publishDelayed = false;\n },\n setPublishFailed: (state, action: PayloadAction) => {\n state.publishedItem = null;\n state.publishedItemPendingVip = null;\n state.publishFailed = true;\n state.publishFailedReasonDisplayText = action.payload;\n state.publishPending = false;\n state.publishDelayed = false;\n },\n setPublishPending: (state) => {\n state.publishedItem = null;\n state.publishedItemPendingVip = null;\n state.publishFailed = false;\n state.publishFailedReasonDisplayText = null;\n state.publishPending = true;\n state.publishDelayed = false;\n },\n setCategoryRestriction: (\n state,\n action: PayloadAction\n ) => {\n state.categoryRestriction = action.payload;\n },\n toggleModal: (state, action: PayloadAction) => {\n state.openModal =\n state.openModal === action.payload ? null : action.payload;\n },\n enableAutoSave: (state) => {\n state.autoSaveEnabled = true;\n },\n disableAutoSave: (state) => {\n state.autoSaveEnabled = false;\n },\n setDraftCanBeResumed: (state, action: PayloadAction) => {\n state.draftCanBeResumed = action.payload;\n },\n setItemUpdating: (state, action: PayloadAction) => {\n state.itemUpdating = action.payload;\n },\n setItemUpdated: (state, action: PayloadAction) => {\n state.itemUpdated = action.payload;\n }\n }\n});\n\nexport const {\n resetSyi,\n setCreationStart,\n showAllErrors,\n hideAllErrors,\n setIsEditOfPublishedItem,\n setPublishedItemPendingVip,\n setPublishedItemDelayed,\n setPublishedItem,\n setPublishFailed,\n setPublishPending,\n setCategoryRestriction,\n toggleModal,\n enableAutoSave,\n disableAutoSave,\n setDraftCanBeResumed,\n setItemUpdating,\n setItemUpdated\n} = syiSlice.actions;\n\nexport default syiSlice.reducer;\n","export const selectSyiAttributes = (state) => state.views.syi.attributes;\n\nexport const selectCategoryAttributes = (state) =>\n selectSyiAttributes(state).categoryAttributes;\n\nexport const selectCategorySuggestedAttributes = (state) =>\n selectSyiAttributes(state).selectableCategorySuggestedAttributes;\n\nexport const selectImageToColorSuggestedAttributes = (state) =>\n selectSyiAttributes(state).imageToColorSuggestedAttributes;\n","import { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\n\nexport const selectSyiShipping = (state) => getSyiSlice(state).shipping;\n\nexport const selectRecommendedWeight = (state) =>\n selectSyiShipping(state).recommendedWeight;\n\nexport const selectShippingRecommendations = (state) =>\n selectSyiShipping(state).shippingRecommendations;\n\nexport const selectShippingProviderIsAnOption = (providerId) => (state) =>\n selectSyiShipping(state)\n .shippingByWeight.flatMap((group) => group.products)\n .map((p) => p.providerId)\n .includes(providerId);\n","import type { RootState } from 'tradera/state/configure-store';\n\nexport const getSyiSlice = (state: RootState) => state.views.syi;\nexport const selectShortDescription = (state: RootState) =>\n getSyiSlice(state).shortDescription.shortDescription;\nexport const selectItemIdFromDraft = (state: RootState) =>\n getSyiSlice(state).draft?.itemId || undefined;\n","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { isomorphicWebApiBaseQuery } from 'tradera/state/services/utils/webapi-base-query';\nimport type {\n DeleteTemplatesApiRequest,\n GetTemplatesApiResponse\n} from 'tradera/state/services/types/webapi-selling-generated';\n\nexport enum Tags {\n TEMPLATES_LIST = 'TEMPLATES_LIST'\n}\n\nexport const templatesApi = createApi({\n reducerPath: 'templatesApi',\n baseQuery: isomorphicWebApiBaseQuery,\n tagTypes: Object.keys(Tags),\n endpoints: (builder) => ({\n deleteTemplate: builder.mutation({\n invalidatesTags: [Tags.TEMPLATES_LIST],\n query: (parameters) => {\n return {\n url: '/api/webapi/selling/templates',\n method: 'DELETE',\n body: parameters\n };\n }\n }),\n loadTemplates: builder.query({\n providesTags: [Tags.TEMPLATES_LIST],\n query: () => '/api/webapi/selling/templates?take=100'\n })\n })\n});\n\nexport const { useDeleteTemplateMutation, useLoadTemplatesQuery, util } =\n templatesApi;\n","import React from 'react';\nimport { useTranslator } from 'tradera/lang/translate';\nimport TimeLeftV2 from '../helpers/time-left-v2';\nimport { ITEM_STATES } from 'tradera/state/views/view-item/constants';\nimport { AnimateOnValueChange } from './animate-on-value-change';\nimport LocalizedPrice from 'tradera/localization/localized-price';\nimport { Button } from 'tradera/components/atoms/button/button';\nimport type { PaymentCalculations } from 'tradera/state/services/types/webapi-browse-generated';\nimport { MandatoryBuyerProtectionInfo } from 'tradera/apps/tradera/components/vip/bidding/mandatory-buyer-protection-info';\nimport type { BuyerProtectionModalType } from 'tradera/apps/tradera/components/vip/seller-details/buyer-protection-info-modal';\n\ntype BidDetailsProps = {\n bidCount: number;\n hasEnded: boolean;\n isEnding: boolean;\n itemState: ITEM_STATES;\n leadingBidAmount: number;\n onShowBids: () => void;\n setBuyerProtectionModal: (type: BuyerProtectionModalType) => void;\n openingBid: number;\n finalPrice: number;\n timeLeftText: string;\n isTimeLeftBelowWarningLimit: boolean;\n paymentCalculations: PaymentCalculations;\n};\n\nexport const BidDetails = ({\n bidCount,\n hasEnded,\n isEnding,\n itemState,\n leadingBidAmount,\n onShowBids,\n setBuyerProtectionModal,\n openingBid,\n timeLeftText,\n isTimeLeftBelowWarningLimit,\n finalPrice,\n paymentCalculations\n}: BidDetailsProps) => {\n const { t } = useTranslator();\n\n const hasBids = bidCount > 0;\n const amountDetails = getAmountDetails(\n itemState,\n leadingBidAmount,\n openingBid,\n hasBids,\n finalPrice,\n paymentCalculations.paymentAmountForBid || 0,\n paymentCalculations.paymentAmountForFixedPrice || 0\n );\n\n const amountTitle = (\n

\n {t(amountDetails.title)}\n

\n );\n\n const amountValue = (\n

\n \n \n \n

\n );\n\n const timeTitle =\n isEnding || hasEnded ? null : (\n

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

\n );\n const timeValue =\n isEnding || hasEnded ? (\n \n {hasEnded\n ? itemState === ITEM_STATES.ENDED_CANCELLED\n ? t('vip_cancelled')\n : t('vip_ended')\n : t('vip_ending')}\n

\n ) : (\n

\n \n

\n );\n\n const bidValue = (\n

\n |\n {hasBids ? (\n {\n e?.preventDefault();\n onShowBids();\n }}>\n {bidCount} {t('vip_bid')}\n \n ) : (\n \n {bidCount} {t('vip_bid')}\n \n )}\n

\n );\n\n const showBidCount =\n itemState !== ITEM_STATES.ENDED_AUCTION_BIN_BOUGHT_AS_BIN;\n\n return (\n <>\n
\n
\n
\n {amountTitle}\n {showBidCount && bidValue}\n
\n
{amountValue}
\n
\n {hasEnded ? null : (\n
\n
{timeTitle}
\n
{timeValue}
\n
\n )}\n
\n {paymentCalculations.isBuyerProtectionMandatory && (\n \n )}\n \n );\n};\n\nexport const getAmountDetails = (\n itemState: ITEM_STATES,\n leadingBid: number,\n openingBid: number,\n hasBids: boolean,\n finalPrice: number,\n paymentAmountForBid: number,\n paymentAmountForFixedPrice: number\n) => {\n if (itemState === ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID) {\n return {\n title: 'vip_finalPrice',\n amount: finalPrice,\n amountIncludingBuyerProtection: paymentAmountForBid\n };\n }\n\n if (finalPrice > 0) {\n return {\n title: 'vip_soldFor',\n amount: finalPrice,\n amountIncludingBuyerProtection: paymentAmountForFixedPrice\n };\n }\n\n if (hasBids) {\n return {\n title: 'vip_leadingBid',\n amount: leadingBid,\n amountIncludingBuyerProtection: paymentAmountForBid\n };\n }\n return {\n title: 'vip_openingBid',\n amount: openingBid,\n amountIncludingBuyerProtection: paymentAmountForBid\n };\n};\n","import { classNames } from 'tradera/utils/class-names';\nimport React, { forwardRef } from 'react';\nimport type { PolyRefFunction, OnlyAs } from 'react-polymorphed';\n\nimport styles from './text.module.scss';\n\nconst polyRef = forwardRef as PolyRefFunction;\n\nexport type FontWeight = 'light' | 'medium' | 'heavy';\n\n// This can probably be used by more components\nexport type FontColor =\n | 'branded'\n | 'danger'\n | 'dark'\n | 'function'\n | 'info'\n | 'light'\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'white'\n | 'gray-100'\n | 'gray-200'\n | 'gray-300'\n | 'gray-400'\n | 'gray-500'\n | 'gray-600'\n | 'gray-700'\n | 'gray-800'\n | 'gray-900';\n\nexport type FontFamily = 'inter' | 'hansen';\n\nexport type TextProps = {\n size?:\n | 'london'\n | 'amsterdam'\n | 'paris'\n | 'dublin'\n | 'oslo'\n | 'madrid'\n | 'berlin';\n className?: string;\n align?: 'left' | 'center' | 'right';\n color?: FontColor;\n children?: React.ReactNode;\n fontWeight?: FontWeight;\n fontStyle?: 'italic';\n font?: FontFamily;\n nowrap?: boolean;\n};\n\n/**\n * Text component\n *\n * Defaults to paragraph, but can be used as \"span\", \"strong\", \"code\" or \"em\" also with `as=\"span\"` etc.\n *\n * Font sizes (default is \"paris\"):\n * - london: 16px\n * - amsterdam: small screen: 14px, large screen: 16\n * - paris: small screen: 14px, large screen: 14px\n * - dublin: small screen: 12px, large screen: 14px\n * - oslo: small screen: 12px, large screen: 12px;\n *\n * @example\n * Some text\n *\n * @example\n * Some text\n *\n * @example\n * Some text\n */\nexport const Text = polyRef<\n 'p',\n TextProps,\n OnlyAs<'p' | 'span' | 'strong' | 'em' | 'code' | 'b' | 'label'>\n>(\n (\n {\n as: Component = 'p',\n size = 'paris',\n children,\n align,\n className,\n color,\n fontWeight,\n fontStyle,\n font,\n nowrap,\n ...props\n },\n ref\n ) => {\n return (\n \n {children}\n \n );\n }\n);\n","import React from 'react';\nimport { classNames } from 'tradera/utils/class-names';\n\nimport type { ButtonProps } from '../atoms/button/button';\nimport { Button } from '../atoms/button/button';\nimport ArrowDownIcon from '@tradera/blueprint/theme/icons2/arrow-down.svg?jsx';\n\nimport styles from './dropdown-button.module.scss';\n\n// trying to make this a bit restrictive...since if you want a Button, use that instead\nexport type DropdownButtonProps = Omit & {\n isOpen?: boolean;\n iconClassName?: string;\n theme?: 'dropdown' | 'unbutton';\n id?: string;\n};\n\n/**\n * Just a button with a specific look and feel used for dropdowns.\n *\n * Pass `isOpen` to change the icon to an open state.\n */\nexport const DropdownButton = React.forwardRef<\n React.ElementRef,\n DropdownButtonProps\n>(function DropdownButton(\n {\n children,\n className,\n fluid,\n isOpen,\n iconClassName,\n theme = 'dropdown',\n ...props\n },\n forwardedRef\n) {\n return (\n \n }\n // If we would always use `fixed` here, the icon would be on top of the text since it's absolutely positioned when fixed\n fixedIcon={fluid}\n align=\"left\"\n fluid={fluid}\n {...props}>\n {children}\n \n );\n});\n\ntype DropdownIconProps = { isOpen?: boolean; className?: string };\nexport const DropdownIcon = ({ isOpen, className }: DropdownIconProps) => (\n \n);\n","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","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport const TraderaLogo = ({\n width,\n height,\n className,\n style,\n ...otherProps\n}) => (\n \n Tradera\n \n \n);\nTraderaLogo.propTypes = {\n width: PropTypes.number,\n height: PropTypes.number,\n className: PropTypes.string,\n style: PropTypes.object\n};\nTraderaLogo.defaultProps = {\n width: 120,\n className: ''\n};\n","export const MODAL_TYPES = {\n default: 'default',\n wishlistReminders: 'wishlistReminders',\n selling: 'selling'\n} as const;\n\nexport const CHANNEL_TAG_GROUPS = {\n wishlistReminders: [\n 'wishlist_reminder_3_min_optin',\n 'wishlist_reminder_15_min_optin'\n ],\n buyingListingOutbid: ['member_outbid_optin'],\n buyingListingWon: ['member_won_optin'],\n sellingListingFirstBid: ['selling_first_bid_optin'],\n sellingListingAllBids: ['selling_new_bid_optin'],\n sellingListingSold: ['selling_sold_optin'],\n sellingPaymentReceived: ['selling_payment_received_optin']\n} as const;\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\n\nexport const feesApi = createApi({\n reducerPath: 'feesApi',\n baseQuery: fetchBaseQuery({\n baseUrl: '/api/webapi/selling/commissionfee'\n }),\n endpoints: (builder) => ({\n // itemType and price does not affect the provision fee,\n // therefore we defaults to itemType `Auction` and price `1`\n getCommissionFee: builder.query({\n query: ({ categoryId }) =>\n `?categoryId=${categoryId}&itemType=Auction&price=1`\n })\n })\n});\n\nexport const { useGetCommissionFeeQuery } = feesApi;\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","export enum VIEW_ITEM_STATES {\n INITIALIZING = 'INITIALIZING',\n NOT_STARTED = 'NOT_STARTED',\n ACTIVE = 'ACTIVE',\n ENDING = 'ENDING',\n ENDED = 'ENDED'\n}\n\nexport enum ITEM_STATES {\n NOT_STARTED_AUCTION = 'NOT_STARTED_AUCTION',\n NOT_STARTED_AUCTION_BIN = 'NOT_STARTED_AUCTION_BIN',\n NOT_STARTED_FIXED_PRICE = 'NOT_STARTED_FIXED_PRICE',\n ONGOING_AUCTION = 'ONGOING_AUCTION',\n ONGOING_AUCTION_BIN = 'ONGOING_AUCTION_BIN',\n ONGOING_FIXED_PRICE = 'ONGOING_FIXED_PRICE',\n ENDED_AUCTION_WITHOUT_BID = 'ENDED_AUCTION_WITHOUT_BID',\n ENDED_AUCTION_WITH_WINNING_BID = 'ENDED_AUCTION_WITH_WINNING_BID',\n ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER = 'ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER',\n ENDED_AUCTION_WITHOUT_WINNING_BID = 'ENDED_AUCTION_WITHOUT_WINNING_BID',\n ENDED_AUCTION_BIN_BOUGHT_AS_BIN = 'ENDED_AUCTION_BIN_BOUGHT_AS_BIN',\n ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER = 'ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER',\n ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER = 'ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER',\n ENDED_FIXED_PRICE = 'ENDED_FIXED_PRICE',\n ENDED_CANCELLED = 'ENDED_CANCELLED',\n UNKNOWN = 'UNKNOWN'\n}\n","import { logger } from 'packages/logger';\nimport TRANSACTION_TYPES from 'tradera/constants/transaction-types';\nimport ITEM_TYPES from 'tradera/constants/item-types';\nimport { ITEM_STATES } from './constants';\n\nconst getEndedItemState = (\n itemType: ITEM_TYPES,\n bidCount: number,\n reservePriceReached: boolean,\n nextValidBidAmount: number,\n transactionType?: TRANSACTION_TYPES,\n leadingBidMemberId?: number,\n isCancelled?: boolean\n): ITEM_STATES => {\n if (isCancelled) {\n return ITEM_STATES.ENDED_CANCELLED;\n }\n\n const isAuction = itemType === ITEM_TYPES.AUCTION;\n const isAuctionBin = itemType === ITEM_TYPES.AUCTION_BIN;\n const isPureBin = itemType === ITEM_TYPES.PURE_BIN;\n const isShopItem = itemType === ITEM_TYPES.SHOP_ITEM;\n\n // transactionType may not be set if feature-toggle 'always-enrich-with-transactiontype' is off in WebApi.\n if (isAuctionBin) {\n switch (transactionType) {\n case TRANSACTION_TYPES.AUCTION:\n return ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID;\n case TRANSACTION_TYPES.BIN:\n return ITEM_STATES.ENDED_AUCTION_BIN_BOUGHT_AS_BIN;\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ENDED:\n return ITEM_STATES.ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER;\n }\n }\n if (isPureBin) {\n switch (transactionType) {\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ACTIVE:\n return ITEM_STATES.ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER;\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ENDED:\n return ITEM_STATES.ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER;\n }\n }\n if (isAuction) {\n switch (transactionType) {\n case TRANSACTION_TYPES.AUCTION:\n return ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID;\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ENDED:\n return ITEM_STATES.ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER;\n }\n }\n\n // When transactionType is not available (feature toggle is off), we can still figure out\n // that the item was bought with buy-it-now price if there are no bids and a leading bidder exist.\n if (\n !transactionType &&\n isAuctionBin &&\n bidCount === 0 &&\n reservePriceReached &&\n leadingBidMemberId\n ) {\n return ITEM_STATES.ENDED_AUCTION_BIN_BOUGHT_AS_BIN;\n }\n\n if ((isAuction || isAuctionBin) && bidCount === 0) {\n return ITEM_STATES.ENDED_AUCTION_WITHOUT_BID;\n }\n if (bidCount > 0 && !reservePriceReached) {\n return ITEM_STATES.ENDED_AUCTION_WITHOUT_WINNING_BID;\n }\n if (bidCount > 0 && reservePriceReached) {\n return ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID;\n }\n if (isPureBin || isShopItem) {\n return ITEM_STATES.ENDED_FIXED_PRICE;\n }\n logger(\n `Unknown ended state for parameters: ${JSON.stringify({\n itemType,\n bidCount,\n reservePriceReached,\n nextValidBidAmount\n })}`\n );\n return ITEM_STATES.UNKNOWN;\n};\n\nconst getOngoingItemState = (itemType: ITEM_TYPES): ITEM_STATES => {\n if (itemType === ITEM_TYPES.AUCTION) {\n return ITEM_STATES.ONGOING_AUCTION;\n }\n if (itemType === ITEM_TYPES.AUCTION_BIN) {\n return ITEM_STATES.ONGOING_AUCTION_BIN;\n }\n if (itemType === ITEM_TYPES.PURE_BIN || itemType === ITEM_TYPES.SHOP_ITEM) {\n return ITEM_STATES.ONGOING_FIXED_PRICE;\n }\n logger(\n `Unknown ongoing state for parameters: ${JSON.stringify({\n itemType\n })}`\n );\n return ITEM_STATES.UNKNOWN;\n};\n\nconst getNotStartedItemState = (itemType: ITEM_TYPES): ITEM_STATES => {\n if (itemType === ITEM_TYPES.AUCTION) {\n return ITEM_STATES.NOT_STARTED_AUCTION;\n }\n if (itemType === ITEM_TYPES.AUCTION_BIN) {\n return ITEM_STATES.NOT_STARTED_AUCTION_BIN;\n }\n if (itemType === ITEM_TYPES.PURE_BIN || itemType === ITEM_TYPES.SHOP_ITEM) {\n return ITEM_STATES.NOT_STARTED_FIXED_PRICE;\n }\n logger(\n `Unknown not started state for parameters: ${JSON.stringify({\n itemType\n })}`\n );\n return ITEM_STATES.UNKNOWN;\n};\n\nexport const getItemState = (\n hasEnded: boolean,\n hasStarted: boolean,\n itemType: ITEM_TYPES,\n bidCount: number,\n reservePriceReached: boolean,\n nextValidBidAmount: number,\n transactionType?: TRANSACTION_TYPES,\n leadingBidMemberId?: number,\n isCancelled?: boolean\n) => {\n if (hasEnded) {\n return getEndedItemState(\n itemType,\n bidCount,\n reservePriceReached,\n nextValidBidAmount,\n transactionType,\n leadingBidMemberId,\n isCancelled\n );\n }\n\n if (!hasStarted) {\n return getNotStartedItemState(itemType);\n }\n\n return getOngoingItemState(itemType);\n};\n","/***\n *\n * Keep track of users' GDPR settings.\n *\n */\nimport dayjs from 'dayjs';\nimport cookie from 'cookie';\n\nimport {\n GDPR_CONSENT_COOKIE,\n COOKIE_CATEGORIES\n} from 'tradera/constants/cookies';\nimport { getCookieFromBrowser, setCookieToBrowser } from './cookie-helpers';\n\nconst createCookie = (name, value, expires) => {\n const options = {\n expires,\n httpOnly: false,\n path: '/'\n };\n return cookie.serialize(name, String(value), options);\n};\n\nexport class GdprSettings {\n constructor(getCookie, setCookie) {\n if (!getCookie || !setCookie) {\n throw new Error('You must provide getCookie and setCookie');\n }\n this.getCookie = getCookie;\n this.setCookie = setCookie;\n }\n /**\n *\n * @param {int} cookieCategory use the constant COOKIE_CATEGORIES to get different values.\n */\n isCategoryEnabled(cookieCategory) {\n if (cookieCategory === COOKIE_CATEGORIES.Essential) {\n return true;\n }\n\n const encodedConsentCookie = this.getCookie(GDPR_CONSENT_COOKIE);\n const consentCookie = decodeURI(encodedConsentCookie);\n\n if (!consentCookie || consentCookie.length === 0) {\n return true;\n }\n\n const categoryPattern = new RegExp(`,${cookieCategory}:1`);\n return categoryPattern.test(consentCookie);\n }\n\n isPerformanceEnabled() {\n return this.isCategoryEnabled(COOKIE_CATEGORIES.Performance);\n }\n\n isFunctionalEnabled() {\n return this.isCategoryEnabled(COOKIE_CATEGORIES.Functional);\n }\n\n isMarketingEnabled() {\n return this.isCategoryEnabled(COOKIE_CATEGORIES.Marketing);\n }\n\n set(performance, functional, marketing) {\n const cookieValue = [\n `${COOKIE_CATEGORIES.Essential}:1`,\n `${COOKIE_CATEGORIES.Performance}:${performance ? '1' : '0'}`,\n `${COOKIE_CATEGORIES.Functional}:${functional ? '1' : '0'}`,\n `${COOKIE_CATEGORIES.Marketing}:${marketing ? '1' : '0'}`\n ];\n const cookieString = createCookie(\n GDPR_CONSENT_COOKIE,\n cookieValue.join(','),\n dayjs().add(1, 'years').toDate()\n );\n this.setCookie(cookieString);\n }\n}\n\nexport default new GdprSettings(getCookieFromBrowser, setCookieToBrowser);\n","export const capitalize = (text) => `${text[0].toUpperCase()}${text.slice(1)}`;\n\nexport const removeTags = (text) => text.replace(/(<([^>]+)>)/gi, '');\n","export const DEFAULT_PAGE_TITLE_TRANSLATION_KEY = 'pageTitle_startPage';\n\nexport const NS_TOUCHWEB = 'touchWeb';\nexport const NS_ATTRIBUTES = 'attributes';\nexport const NS_CATEGORIES = 'categories';\nexport const NS_BACKEND = 'backend';\n\nexport const DEFAULT_LANGUAGE = 'sv';\nexport const URL_LANGUAGES = ['en', 'de', 'da', 'fr', 'nl'];\n\nexport const DEFAULT_LOCALE = 'sv-SE';\nexport const LANGUAGE_LOCALE = {\n sv: 'sv-SE',\n en: 'en-US',\n da: 'da-DK',\n de: 'de-DE',\n fr: 'fr-FR',\n nl: 'nl-NL'\n};\n\nexport const I18N_FRONTEND_NAMESPACES = [NS_TOUCHWEB, NS_ATTRIBUTES];\nexport const I18N_BACKEND_NAMESPACES = [NS_CATEGORIES, NS_BACKEND];\nexport const I18N_NAMESPACES = [\n ...I18N_FRONTEND_NAMESPACES,\n ...I18N_BACKEND_NAMESPACES\n];\nexport const NAMESPACE_PROJECTID = {\n [NS_TOUCHWEB]: '414441505e1db31fcaa776.55234720',\n [NS_ATTRIBUTES]: '9959867960be20fdc7d187.66761514',\n [NS_CATEGORIES]: '894792985d6665b8f079e1.31726015',\n [NS_BACKEND]: '916557165cc061c54ae7c8.44409330'\n};\n\nexport const SUPPORTED_LANGUAGES = [DEFAULT_LANGUAGE, ...URL_LANGUAGES];\nexport const SUPPORTED_CURRENCIES = [\n 'DKK',\n 'GBP',\n 'JPY',\n 'NOK',\n 'SEK',\n 'USD',\n 'EUR'\n];\n\nexport const TRANS_SUFFIX = 'Trans';\n\nexport const I18N_CACHE_MS = 60 * 1000;\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","fillRule","clipRule","d","config","_objectSpread","isServer","window","sellingGlobalConfig","draftImagesUrl","templateImagesUrl","myTraderaUrl","isVatRequired","selectableVatValues","isHybridAppContext","isHybridAppWithHtmlUploadSupport","isSyiNonBlockingPublishedPageEnabled","isHtmlEnabled","commissionMinimum","commissionCap","highlightFeaturePrice","rankUpFeaturePrice","isAddonsEnabled","isSyiAddPhotoNativeAppEnabled","isSyiMemberConsentEnabled","isSyiTenImagesEnabled","maxTemplates","domainNameCategoryId","sendSessionStart","touchWebClient","post","sendSessionDuration","duration","madeByTemplate","durationMilliSeconds","sendDuration","measuredName","sendIncrement","name","sendValidationErrors","errors","suggestionsThrottle","ThrottledAction","imageToColorsThrottle","INPUT_TYPE_MAP","Button","Color","Dropdown","transformServerOption","serverOption","value","sortOrder","isActive","warningLabel","title","undefined","text","transformServerAttribute","attribute","id","displayName","description","backingField","options","possibleValues","map","inputType","type","isMultiSelect","maxNumberOfValues","minNumberOfValues","numberOfValuesSelected","shouldTranslateValues","preserveOptionsOrder","setAttributesFromDraft","draft","dispatch","setDraftAttributes","attributeValues","reset","resetAttributes","fetchForCategory","categoryId","async","getState","languageCodeIso2","selectPreferredLanguage","response","webApiClient","get","setCategoryAttributes","data","attributeDefinitions","updateCategoryAttributesOptionsStatuses","campaignCodeActions","validateCampaignCode","imageActions","error","throttledFetchCategoryAttributeSuggestions","shortDescription","execute","action","fetchCategoryAttributeSuggestions","throttledFetchImageAttributeSuggestions","draftImageIds","_getSyiSlice","_getSyiSlice$category","_getSyiSlice2","_getSyiSlice2$attribu","featureSwitches","environment","draftCategoryId","getSyiSlice","category","categoryAttributes","attributes","hasColorAttribute","some","fetchImageAttributeSuggestions","resetImageAttributeSuggestions","paramKeyPart","query","join","_response$data","_response$data$colorV","colors","colorValues","cv","color","setImageToColorSuggestions","suggestedAttributes","values","logger","splitTestGroup","splitTestGroups","splitTestEnabled","extractorType","getAttributeSuggestionExtractor","params","setCategoryAttributesSuggestions","termAttributeValues","transformServerAttributeSuggestion","suggestionsExtractorType","splitTest","attributeSuggestion","trackAddonBeforePublish","addOnfeatureName","gtm","trackAction","setDraft","_draft$charity","memberCountryCodeIso2","selectShippingRegionCountryCodeIso2","fromCountry","userData","shippingFromCountryCodeIso2","getDefaultShippingFromCountryCodeIso2","shippingActions","disableAutoSave","draftReason","ensureDraftReason","isNewDraft","draftId","isChangeItem","setIsEditOfPublishedItem","hideAllErrors","setAllowedBuyerRegion","allowedBuyerRegion","setAvailableAllowedBuyerRegions","setItemCondition","itemCondition","setInitialCampaignCode","campaignCode","campaignCodeId","campaignCodeDescription","shortDescriptionActions","setShortDescription","setDescriptionLanguageCodeIso2","descriptionLanguageCodeIso2","selectedDescriptionLanguageCodeIso2","getDefaultSelectedDescriptionLanguageCodeIso2","initData","setCurrency","currency","setResellPartner","resellPartner","categoryActions","setDraftCategory","categoryPath","setDurationDays","durationDays","setCustomEndTime","customEndTime","longDescriptionActions","setLongDescriptionFromDraft","longDescription","setDisplayPromoted","displayPromoted","setDisplayHighlighted","displayHighlighted","images","priceActions","setFromDraft","openingBid","fixedPrice","reservePrice","charity","charityId","vat","selectFeatureSwitches","setCharityAndFetchInfo","setCharityFromDraftAndFetchInfo","getAndSetShippingOptionsByWeight","shippingOptions","enableAutoSave","scribe","setIsLoading","isLoading","payload","loadDraft","draftService","then","result","catch","navigationService","goToStart","finally","canBeResumed","hasShortDescription","trim","hasLongDescription","hasImage","Array","isArray","image","imageUrl","feesActions","updatePrices","hasResponseErrorCode","responseOrNull","arrayOfErrorCodesToCheck","includes","errorCode","saveDraft","buildDraftFromState","version","wasNewDraftWithoutId","routeIsNew","location","href","endsWith","setDraftUrlWithoutReload","setDraftVersion","util","invalidateTags","Tags","DRAFT_LIST","responseJSON","contexts","syiSave","status","setUsedAllowed","isAllowed","condition","updateItemConditionRestrictionForCategory","isUsedAllowed","categoryRestriction","syi","allowUsed","loadImagesFromDraft","browserDraftImageUrls","filter","Boolean","serverDraftImages","serverDraftImageUrls","imagesHaveChanged","x","concat","updateDraftCanBeResumed","setDraftCanBeResumed","setRestart","restart","setReference","reference","publish","t","setPublishPending","state","_state$extraFeatures","extraFeatures","price","itemDuration","String","dayjs","diff","creationStart","publishService","memberConsent","hasTraderaPayConsent","draftSelectedCategoryAttributes","suggestedCategoryAttributes","selectCategorySuggestedAttributes","trackAttributeSuggestions","itemId","draftSelectedColorAttributes","a","suggestedColorAttributes","selectImageToColorSuggestedAttributes","trackShippingRecommendations","selectRecommendedWeight","selectShippingRecommendations","goToPublished","syiPublish","handleServerValidationError","setPublishFailed","toggleModal","loadDraftIfMissing","Promise","resolve","loadDefaultDraft","resetSyi","resetCharityAndShippingInfo","resetSelected","loadDefaultTemplateDraft","template","templateId","useDraftAsTemplate","resetItemCondition","publishAdditionalDescription","resetDraft","setDraftImages","actions","draftActions","slice","_image$draftImage","draftImage","imageId","n","removeImageWithId","imageIndex","index","handleAttributeSuggestionsForImages","imageIds","forEach","isListingImage","push","setShippingOptionSelected","setOfferTakeaway","offerTakeaway","trackSyiForm","eventName","parameters","boolean_value","setOfferShipping","offerShipping","setShippingOptionCost","cost","primary","shipping","selectItemIdFromDraft","isDenmarkCountryCode","isNetherlandsCountryCode","selectIsFeatureEnabled","getShippingProvidersByWeight","productsPerWeightSpan","selectSelectedShippingOptions","setShippingOptionVariant","variant","setShippingRecommendations","categoryShippingRecommendations","getShippingRecommendations","recommendedWeight","shippingRecommendations","message","toggleShippingOption","setShippingFromCountry","PURE_BIN_CATEGORY_IDS","draftsApi","createApi","reducerPath","baseQuery","isomorphicWebApiBaseQuery","tagTypes","keys","endpoints","builder","deleteDrafts","mutation","invalidatesTags","url","method","body","loadDrafts","providesTags","transformResponse","_response$items","items","item","_item$images","find","useDeleteDraftsMutation","useLoadDraftsQuery","initialState","draftAttributes","selectableSuggestedAttributes","selectableCategorySuggestedAttributes","selectableImageToColorSuggestedAttributes","imageToColorSuggestedAttributes","validationErrors","categorySuggestedAttributes","updateSelectableImageToColorSuggestedAttributes","filterSelectableSuggestions","updateSelectableSuggestedAttributes","filterCombinedSelectableSuggestions","attributeSlice","createSlice","reducers","validate","setCategoryAttributeOption","attributeId","optionValue","activate","o","_state$draftAttribute","_state$draftAttribute2","_a$options","_a$options2","draftAttributeValues","tav","_attribute$options","_attribute$options2","reduce","acc","option","reducer","windowOrFallback","_windowOrFallback$loc","_windowOrFallback$loc2","pathname","queryParamCharityId","URLSearchParams","_windowOrFallback$loc3","search","preselectCharity","anonymous","Number","logoUrl","percentageToDonate","forceFreeShipping","isFreeShippingPaidByProvider","freeShippingPaidByProviderName","charitySlice","setCharityId","setCharityInfo","_ref2","_ref2$payload","setCharityAnonymous","_ref3","setCharityFromDraft","_ref4","resetCharity","setCharityShippingInfo","_ref5","_charitySlice$actions","MAX_NUMBER_OF_IMAGES","setValidation","uploadingCount","validationError","every","isUploadedBySystem","resetUploadError","uploadError","imagesSlice","isUploadingWithApp","rotationDegrees","listingImage","imageGroupId","filename","Error","addImage","_action$payload","replaceImage","_action$payload2","removeImage","splice","changeImagePosition","_action$payload3","from","to","movedImage","setImageRotation","_action$payload4","setImageUploadFailed","errorMessage","setImagesUploading","numberOfImages","setMobileUpload","extraReducers","addCase","_imagesSlice$actions","getValidationErrors","allowZeroDayAuctions","customEndTimeError","endDate","getEndDate","startOf","add","_customEndTime$split$2","_slicedToArray","split","hours","minutes","hour","minute","earliestEndDate","isBefore","isRestartAvailable","_userData$defaultDraf","defaultDrafts","_userData$defaultDraf2","newItem","itemDurationSlice","resetDurationAndEndTime","getDefaultTemplateValue","newState","newStateWithoutCampaignRelatedProps","resetCustomEndTime","disableZeroDayAuctions","enableZeroDayAuctions","enableRestart","_itemDurationSlice$ac","allErrorsVisible","isEditOfPublishedItem","publishPending","publishFailed","publishFailedReasonDisplayText","publishedItemPendingVip","publishedItem","openModal","openModalData","autoSaveEnabled","draftCanBeResumed","itemUpdating","itemUpdated","publishDelayed","syiSlice","setCreationStart","showAllErrors","setPublishedItemPendingVip","setPublishedItemDelayed","setPublishedItem","setCategoryRestriction","setItemUpdating","setItemUpdated","_syiSlice$actions","selectSyiAttributes","views","selectSyiShipping","_getSyiSlice$draft","templatesApi","deleteTemplate","TEMPLATES_LIST","loadTemplates","useDeleteTemplateMutation","useLoadTemplatesQuery","getAmountDetails","itemState","leadingBid","hasBids","finalPrice","paymentAmountForBid","paymentAmountForFixedPrice","ITEM_STATES","ENDED_AUCTION_WITH_WINNING_BID","amount","amountIncludingBuyerProtection","Text","polyRef","forwardRef","ref","_ref$as","as","Component","_ref$size","size","children","align","className","fontWeight","fontStyle","font","nowrap","_jsx","classNames","wrapper","DropdownButton","forwardedRef","fluid","isOpen","iconClassName","_ref$theme","theme","iconRight","DropdownIcon","fixedIcon","ArrowDownIcon","iconOpen","HoverMenu","constructor","show","hoverContainer","toggleShow","clearTimeout","toggleShowTimeoutId","setTimeout","setState","componentDidUpdate","prevProps","showMenu","render","_this$props","_this$props$className","noContainerPositioningStyling","hoverMenuContainer","hoverMenuContainerNoPositioning","onMouseLeave","hoverMenuArea","hoverMenuAreaContent","propTypes","TraderaLogo","width","height","style","otherProps","_jsxs","role","defaultProps","MODAL_TYPES","default","wishlistReminders","selling","CHANNEL_TAG_GROUPS","buyingListingOutbid","buyingListingWon","sellingListingFirstBid","sellingListingAllBids","sellingListingSold","sellingPaymentReceived","feesApi","fetchBaseQuery","baseUrl","getCommissionFee","useGetCommissionFeeQuery","CategorySchema","z","object","string","number","isLeaf","boolean","CategorySuggestionSchema","matchedItemCount","CategoriesAndSuggestionsSchema","categories","array","suggestions","optional","touchwebSyiApi","httpClientBaseQuery","client","getCategories","_ref$categoryId","_ref$currentLevel","currentLevel","levelToSearch","_meta","arg","parse","sort","b","_arg$locale","Intl","Collator","locale","DEFAULT_LANGUAGE","compare","categorySearch","request","qs","useCategorySearchQuery","useGetCategoriesQuery","usePrefetch","getItemState","hasEnded","hasStarted","itemType","bidCount","reservePriceReached","nextValidBidAmount","transactionType","leadingBidMemberId","isCancelled","getEndedItemState","ENDED_CANCELLED","isAuction","ITEM_TYPES","AUCTION","isAuctionBin","AUCTION_BIN","isPureBin","PURE_BIN","isShopItem","SHOP_ITEM","TRANSACTION_TYPES","BIN","ENDED_AUCTION_BIN_BOUGHT_AS_BIN","PURCHASE_OFFER_ON_ENDED","ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER","PURCHASE_OFFER_ON_ACTIVE","ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER","ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER","ENDED_AUCTION_WITHOUT_BID","ENDED_AUCTION_WITHOUT_WINNING_BID","ENDED_FIXED_PRICE","JSON","stringify","UNKNOWN","ONGOING_AUCTION","ONGOING_AUCTION_BIN","ONGOING_FIXED_PRICE","getOngoingItemState","NOT_STARTED_AUCTION","NOT_STARTED_AUCTION_BIN","NOT_STARTED_FIXED_PRICE","getNotStartedItemState","GdprSettings","getCookie","setCookie","isCategoryEnabled","cookieCategory","COOKIE_CATEGORIES","Essential","encodedConsentCookie","GDPR_CONSENT_COOKIE","consentCookie","decodeURI","RegExp","test","isPerformanceEnabled","Performance","isFunctionalEnabled","Functional","isMarketingEnabled","Marketing","set","performance","functional","marketing","cookieValue","cookieString","createCookie","expires","httpOnly","path","cookie","toDate","getCookieFromBrowser","setCookieToBrowser","capitalize","toUpperCase","NS_TOUCHWEB","NS_ATTRIBUTES","NS_CATEGORIES","NS_BACKEND","URL_LANGUAGES","I18N_FRONTEND_NAMESPACES","I18N_BACKEND_NAMESPACES","SUPPORTED_LANGUAGES","TRANS_SUFFIX"],"sourceRoot":""}