{"version":3,"file":"script/bundle-10.62df796a53.js","mappings":"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","sources":["webpack://touchweb/./src/apps/syi/services/config.ts","webpack://touchweb/./src/apps/syi/services/scribe.js","webpack://touchweb/./src/apps/syi/services/syi-ga4-service.ts","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/long-description-actions.ts","webpack://touchweb/./src/apps/syi/state/actions/predictions-actions.ts","webpack://touchweb/./src/apps/syi/state/actions/shipping-actions.ts","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/draft.ts","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/long-description.ts","webpack://touchweb/./src/apps/syi/state/reducers/member-consent.ts","webpack://touchweb/./src/apps/syi/state/reducers/predictions-reducer.ts","webpack://touchweb/./src/apps/syi/state/reducers/shipping/shipping-reducer.ts","webpack://touchweb/./src/apps/syi/state/reducers/syi.ts","webpack://touchweb/./src/apps/syi/state/reducers/template.ts","webpack://touchweb/./src/apps/syi/state/selectors/attribute-selectors.js","webpack://touchweb/./src/apps/syi/state/selectors/draft-selectors.ts","webpack://touchweb/./src/apps/syi/state/selectors/image-selectors.ts","webpack://touchweb/./src/apps/syi/state/selectors/predictions-selectors.ts","webpack://touchweb/./src/apps/syi/state/selectors/price-selectors.ts","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/dropdown-button/dropdown-button.tsx","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/views/view-item/constants.ts","webpack://touchweb/./src/state/views/view-item/item-state-helper.ts","webpack://touchweb/./src/lang/constants.mjs"],"sourcesContent":["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 {\n GtmService,\n FlowId,\n type EventParams\n} from 'tradera/services/google-tagmanager/google-tagmanager-service';\n\ntype trackSYIFormProps = {\n eventName: SyiEventName;\n parameters?: Omit;\n};\n\ntype SyiEventName =\n | 'syi_start'\n | 'syi_form_start'\n | 'syi_title_input'\n | 'syi_shipped'\n | 'syi_image_input'\n | 'syi_description_input'\n | 'syi_category_input'\n | 'syi_attribute_input'\n | 'syi_price_input'\n | 'syi_pickup'\n | 'syi_confirmation'\n | 'syi_form_submit_success'\n | 'syi_form_submit_fail'\n | 'syi_photos_with_app'\n | 'syi_preview'\n | 'syi_listing_format'\n | 'syi_buy_now_price'\n | 'syi_ending_input'\n | 'syi_reserved_price'\n | 'syi_reference'\n | 'syi_donate'\n | 'syi_automatic_restart'\n | 'syi_image_drop'\n | 'magical_api_call'\n | 'syi_template_used';\n\nlet syiSessionId: string | null = null;\nlet hasTrackedFormStart = false;\n\nconst createSessionId = () => {\n const randomDigits = Math.random().toString().slice(2, 10);\n const timestamp = Date.now();\n return `${randomDigits}${timestamp}`;\n};\n\nexport const trackSyiForm = ({\n eventName,\n parameters = {}\n}: trackSYIFormProps) => {\n // eslint-disable-next-line better-mutation/no-mutation\n syiSessionId = syiSessionId || createSessionId();\n\n if (eventName !== 'syi_start' && !hasTrackedFormStart) {\n GtmService.trackGA4('syi_form_start', {\n flow_id: FlowId.SYI,\n form_name: 'syi_draft',\n syi_session_id: syiSessionId\n });\n\n // eslint-disable-next-line better-mutation/no-mutation\n hasTrackedFormStart = true;\n }\n\n GtmService.trackGA4(eventName, {\n ...parameters,\n flow_id: FlowId.SYI,\n syi_session_id: syiSessionId\n });\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 autoFillSuggestedAttributes\n} from '../reducers/attributes';\nimport { selectIsFeatureEnabled } from 'tradera/state/environment/selectors';\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 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 =\n getSyiSlice(getState())?.category?.draftCategoryId;\n const categoryAttributes =\n getSyiSlice(getState())?.attributes?.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 const isAutoFillSuggestedAttributesEnabled = selectIsFeatureEnabled(\n 'auto-fill-suggested-attributes'\n )(getState());\n if (isAutoFillSuggestedAttributesEnabled) {\n dispatch(autoFillSuggestedAttributes());\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 { setLongDescriptionFromDraft } from './long-description-actions';\nimport { getAndSetShippingOptionsByWeight } from './shipping-actions';\nimport {\n resetSelectedShippingOptions,\n setShippingFromCountry\n} from '../reducers/shipping/shipping-reducer';\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';\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/google-tagmanager-service';\nimport {\n disableAutoSave,\n enableAutoSave,\n hideAllErrors,\n resetSyi,\n setDraftCanBeResumed,\n setIsDraftSaved,\n setIsEditOfPublishedItem,\n setPublishFailed,\n setPublishPending,\n toggleModal\n} from '../reducers/syi';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\nimport {\n addAdditionalDescription,\n setCurrency,\n setDraftId,\n setDraftIsLoading,\n setDraftProperties,\n setDraftReason,\n setDraftVersion,\n setMagicalSyiEnabled,\n setResellPartner\n} from 'tradera/apps/syi/state/reducers/draft';\nimport { memberApi } from 'tradera/state/services/member-api';\nimport { trackSyiForm } from 'tradera/apps/syi/services/syi-ga4-service';\nimport {\n selectIsItemConditionDirty,\n selectItemCondition\n} from 'tradera/apps/syi/state/selectors/item-condition-selectors';\nimport { setHasUsedAutoFill } from 'tradera/apps/syi/state/reducers/predictions-reducer';\nimport { logError } from 'tradera/utils/api';\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 =\n selectShippingRegionCountryCodeIso2(getState());\n\n const fromCountry =\n draft.fromCountry ||\n userData.shippingFromCountryCodeIso2 ||\n getDefaultShippingFromCountryCodeIso2(memberCountryCodeIso2);\n\n dispatch(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(setDraftProperties(draft));\n\n dispatch(\n setAllowedBuyerRegion({\n allowedBuyerRegion: draft.allowedBuyerRegion\n })\n );\n dispatch(setAvailableAllowedBuyerRegions());\n // fallback to null to not become dirty if undefined\n dispatch(setItemConditionFromUser(draft.itemCondition ?? null));\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(setLongDescriptionFromDraft(draft.longDescription));\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 =\n selectFeatureSwitches(getState())['pennybridge-charities'];\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(getAndSetShippingOptionsByWeight(draft.shippingOptions));\n\n dispatch(enableAutoSave());\n\n dispatch(memberApi.endpoints.getMagicalSyiEnabled.initiate())\n .then((result) => {\n if (result.data) {\n dispatch(setMagicalSyiEnabled(result.data.enabled));\n }\n })\n .catch(() => {\n // Do nothing\n });\n\n if (isNewDraft) {\n scribe.sendSessionStart();\n }\n };\n\nconst loadDraft = (dispatch, draftId) => {\n dispatch(setDraftIsLoading(true));\n return draftService\n .loadDraft(draftId)\n .then((result) => {\n dispatch(setDraft(result));\n dispatch(setIsDraftSaved(true));\n return result;\n })\n .catch((result) => {\n navigationService.goToStart();\n throw result;\n })\n .finally(() => dispatch(setDraftIsLoading(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 =\n getSyiSlice(getState()).shortDescription.shortDescription;\n const longDescription =\n getSyiSlice(getState()).longDescription.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 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 publish = (t, doneCallback) => (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 const { predictions, shortDescription, longDescription } = state;\n const hasAiTitle =\n predictions.shortDescription ===\n shortDescription.shortDescription;\n const hasAiDescription =\n predictions.longDescription === longDescription.longDescription;\n\n trackSyiForm({\n eventName: 'syi_form_submit_success',\n parameters: {\n form_name: 'syi_draft',\n item_id: result.itemId,\n ai_title: hasAiTitle ? 1 : 0,\n ai_description: hasAiDescription ? 1 : 0,\n ai_images: predictions.numProcessedImages,\n ai_processing_time: predictions.aiProcessingTime,\n draft_id: draft.draftId\n }\n });\n\n doneCallback?.(result.itemId);\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(resetSelectedShippingOptions());\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(setDraftReason('Template'));\n dispatch(setDraftId(null));\n};\n\nexport const triggerSave = () => (dispatch) => dispatch(saveDraft);\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(setDraftId(result.draftId));\n }\n if (version > 0 && version + 1 !== result.version) {\n // Unexpected version. The draft is being edited somewhere else.\n }\n dispatch(setIsDraftSaved(true));\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((error) => {\n const response = error.responseJSON;\n\n logError(error, {\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 (error.status == 404) {\n dispatch(setDraft({}));\n navigationService.goToStart();\n }\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 setItemConditionFromUser = (condition) => (dispatch) => {\n dispatch({\n type: 'SET_ITEM_CONDITION_FROM_USER',\n payload: condition\n });\n dispatch(updateItemConditionRestrictionForCategory());\n};\n\nconst setItemConditionFromPrediction = (condition) => (dispatch, getState) => {\n const isPristine = !selectIsItemConditionDirty(getState());\n if (!isPristine) {\n return;\n }\n const oldValue = selectItemCondition(getState());\n\n dispatch({\n type: 'SET_ITEM_CONDITION',\n payload: condition\n });\n\n if (oldValue !== condition) {\n dispatch(setHasUsedAutoFill(true));\n }\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(addAdditionalDescription(text));\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\nexport default {\n setDraft,\n loadDraft,\n loadImagesFromDraft,\n canBeResumed,\n updateDraftCanBeResumed,\n setDisplayPromoted,\n setDisplayHighlighted,\n publish,\n loadDraftIfMissing,\n loadDefaultDraft,\n loadDefaultTemplateDraft,\n useDraftAsTemplate,\n saveDraft,\n setItemConditionFromPrediction,\n setItemConditionFromUser,\n resetItemCondition,\n publishAdditionalDescription,\n updateItemConditionRestrictionForCategory\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';\nimport { selectIsFeatureEnabled } from 'tradera/state/environment/selectors';\nimport { selectImageIds } from 'tradera/apps/syi/state/selectors/image-selectors';\nimport { fetchClassificationFromFirstImage } from 'tradera/apps/syi/state/actions/predictions-actions';\nimport { selectDraftId } from 'tradera/apps/syi/state/selectors/draft-selectors';\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, classify: boolean) =>\n (dispatch: AppDispatch, getState: GetState) => {\n dispatch(actions.addImage({ imageId, imageUrl }));\n\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 if (classify) {\n const draftId = selectDraftId(getState());\n dispatch(fetchClassificationFromFirstImage({ imageId, draftId }));\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, getState: GetState) => {\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 const isMagicalSyiActive =\n selectIsFeatureEnabled('magical-syi')(getState());\n\n const isFirstImage =\n getSyiSlice(getState()).images.images.length === 0;\n\n dispatch(\n addImageAndUpdateSuggestions(\n imageId,\n imageUrl,\n isFirstImage && isMagicalSyiActive\n )\n );\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, getState: GetState) => {\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 const isMagicalSyiActive =\n selectIsFeatureEnabled('magical-syi')(getState());\n\n const imageId = selectImageIds(getState())[0];\n\n const shouldClassify = isMagicalSyiActive && imageId;\n\n if (shouldClassify) {\n dispatch(\n fetchClassificationFromFirstImage({\n imageId: imageId.toString(),\n draftId\n })\n );\n }\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 resetLongDescription,\n setLongDescription as setLongDescriptionReducer,\n setLongDescriptionFromDraft as setLongDescriptionFromDraftReducer\n} from 'tradera/apps/syi/state/reducers/long-description';\nimport draftActions from './draft-actions';\nimport type {\n AppDispatch,\n GetState,\n RootState\n} from 'tradera/state/configure-store';\nimport { selectLongDescription } from 'tradera/apps/syi/state/selectors/syi';\nimport { createAsyncThunk } from '@reduxjs/toolkit';\nimport type {\n OffsitePaymentDetectionApiRequest,\n OffsitePaymentDetectionApiResponse\n} from 'tradera/state/services/types/webapi-selling-generated';\nimport { webApiClient } from 'tradera/utils/http';\nimport { selectIsFeatureEnabled } from 'tradera/state/environment/selectors';\n\nexport const setLongDescription =\n (longDescription: string) => (dispatch: AppDispatch) => {\n dispatch(setLongDescriptionReducer(longDescription));\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nexport const prependLongDescription =\n (longDescription: string) =>\n (dispatch: AppDispatch, getState: GetState) => {\n const currentLongDescription = selectLongDescription(getState());\n const newLongDescription = `${longDescription}\\n\\n${currentLongDescription}`;\n // Needs to be FromDraft, otherwise the update will not be shown\n // in the redactor-controlled textarea.\n dispatch(setLongDescriptionFromDraftReducer(newLongDescription));\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nexport const setLongDescriptionFromDraft =\n (longDescription: string) => (dispatch: AppDispatch) => {\n dispatch(setLongDescriptionFromDraftReducer(longDescription));\n dispatch(draftActions.updateDraftCanBeResumed());\n };\n\nexport const reset = () => (dispatch: AppDispatch) => {\n dispatch(resetLongDescription());\n dispatch(draftActions.updateDraftCanBeResumed());\n};\n\nexport const fetchOffsitePaymentDetection = createAsyncThunk<\n OffsitePaymentDetectionApiResponse | null,\n OffsitePaymentDetectionApiRequest,\n {\n state: RootState;\n }\n>(\n 'syi/longDescription/fetchOffsitePaymentDetection',\n async (request: OffsitePaymentDetectionApiRequest, { getState }) => {\n const isOffsitePaymentDetectionEnabled = selectIsFeatureEnabled(\n 'offsite-payment-detection'\n )(getState());\n\n if (isOffsitePaymentDetectionEnabled) {\n const { data } = await webApiClient.post<\n OffsitePaymentDetectionApiResponse,\n OffsitePaymentDetectionApiRequest\n >(`/selling/offsite-payment-detection`, request);\n return data;\n } else {\n return null;\n }\n }\n);\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport qs from 'qs';\nimport { trackSyiForm } from 'tradera/apps/syi/services/syi-ga4-service';\nimport { setLongDescription } from 'tradera/apps/syi/state/reducers/long-description';\nimport {\n setAiProcessingTime,\n setHasUsedPredictedDescription,\n setNumProcessedImages,\n setPredictedLongDescription,\n setPredictedShortDescription,\n setShouldSuggestLongDescription,\n setShouldSuggestShortDescription\n} from 'tradera/apps/syi/state/reducers/predictions-reducer';\nimport { setShortDescription } from 'tradera/apps/syi/state/reducers/short-description';\nimport { selectDraftId } from 'tradera/apps/syi/state/selectors/draft-selectors';\nimport { selectImageIds } from 'tradera/apps/syi/state/selectors/image-selectors';\nimport { selectClassificationResponse } from 'tradera/apps/syi/state/selectors/predictions-selectors';\nimport {\n selectLongDescription,\n selectShortDescription\n} from 'tradera/apps/syi/state/selectors/syi';\nimport type { RootState } from 'tradera/state/configure-store';\nimport { selectIsFeatureEnabled } from 'tradera/state/environment/selectors';\nimport { selectPreferredLanguageCode } from 'tradera/state/language/selectors';\nimport type {\n ClassifyFromDraftImageApiResponse,\n ClassifyFromImageRequest,\n ConditionListingTypeFromCategoryRequest,\n GetConditionAndListingTypeFromCategoryResponse,\n PredictionsFromDraftImageApiResponse\n} from 'tradera/state/services/types/webapi-selling-generated';\nimport { webApiClient } from 'tradera/utils/http';\nimport draftActions from 'tradera/apps/syi/state/actions/draft-actions';\nimport priceActions from 'tradera/apps/syi/state/actions/price-actions';\nimport ItemTypes from 'tradera/constants/item-types';\n\nexport const fetchClassificationFromFirstImage = createAsyncThunk(\n 'syi/images/fetchClassificationFromFirstImage',\n async ({ imageId, draftId }: ClassifyFromImageRequest) => {\n const response =\n await webApiClient.get(\n `/selling/classify-from-image?${qs.stringify({\n imageId,\n draftId\n })}`\n );\n\n return response.data;\n }\n);\n\nexport const fetchPredictionsFromImages = createAsyncThunk<\n void,\n void,\n { state: RootState }\n>(\n 'predictions/fetchPredictionsFromImages',\n async (_, { dispatch, getState }) => {\n const languageCodeIso2 = selectPreferredLanguageCode(getState());\n const existingShortDescription = selectShortDescription(getState());\n const existingLongDescription = selectLongDescription(getState());\n const isModalFeatureToggleEnabled = selectIsFeatureEnabled(\n 'magical-syi-autofill-prompt'\n )(getState());\n const { itemClassification } =\n selectClassificationResponse(getState()) || {};\n\n const imageIds = selectImageIds(getState());\n const draftId = selectDraftId(getState());\n\n const response =\n await webApiClient.get(\n `/selling/predict-from-images?${qs.stringify({\n imageIds: imageIds,\n languageCodeIso2,\n itemClassification,\n draftId: draftId\n })}`\n );\n\n trackSyiForm({\n eventName: 'magical_api_call',\n parameters: { draft_id: draftId }\n });\n\n // If we already have descriptions, we don't want to overwrite them with the predicted one without asking the user first.\n // If we don't have short and long description, we want to set the predicted ones\n if (response.data.shortDescription) {\n dispatch(\n setPredictedShortDescription(response.data.shortDescription)\n );\n\n if (existingShortDescription && isModalFeatureToggleEnabled) {\n dispatch(\n setShouldSuggestShortDescription(\n response.data.shortDescription !==\n existingShortDescription\n )\n );\n } else {\n dispatch(setHasUsedPredictedDescription(true));\n dispatch(setShortDescription(response.data.shortDescription));\n }\n }\n\n if (response.data.longDescription) {\n dispatch(\n setPredictedLongDescription(response.data.longDescription)\n );\n\n if (existingLongDescription && isModalFeatureToggleEnabled) {\n dispatch(\n setShouldSuggestLongDescription(\n response.data.longDescription !==\n existingLongDescription\n )\n );\n } else {\n dispatch(setHasUsedPredictedDescription(true));\n dispatch(setLongDescription(response.data.longDescription));\n }\n }\n\n dispatch(setNumProcessedImages(response.data.numProcessedImages));\n dispatch(setAiProcessingTime(response.data.aiProcessingTime));\n }\n);\n\nexport const fetchConditionAndItemTypeFromCategory = createAsyncThunk(\n 'syi/images/fetchConditionAndItemTypeFromCategory',\n async (\n { isCompany, categoryId }: ConditionListingTypeFromCategoryRequest,\n { dispatch }\n ) => {\n const response =\n await webApiClient.get(\n `/selling/condition-listing-type-from-category?${qs.stringify({\n isCompany,\n categoryId\n })}`\n );\n\n if (response.data.condition) {\n dispatch(\n draftActions.setItemConditionFromPrediction(\n response.data.condition\n )\n );\n }\n dispatch(\n priceActions.setIsPureBinSelectedFromPrediction(\n response.data.itemType === ItemTypes.PURE_BIN\n )\n );\n\n return response.data;\n }\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 {\n selectFirstRecommendedByWeight,\n selectSelectedShippingOptions\n} 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';\nimport {\n clearShippingRecommendations,\n setShippingOptionsByWeight,\n setShippingOptionsError,\n setTakeawaySelected,\n setShippingRecommendations as setShippingRecommendationsReducer,\n setShippingOptionSelected\n} from 'tradera/apps/syi/state/reducers/shipping/shipping-reducer';\nimport type { AppDispatch, GetState } from 'tradera/state/configure-store';\nimport type { ShippingOption } from 'tradera/state/services/types/webapi-discover-generated';\nimport {\n selectDraftId,\n selectMagicalSyiSettngEnabled\n} from 'tradera/apps/syi/state/selectors/draft-selectors';\nimport { setHasUsedAutoFill } from 'tradera/apps/syi/state/reducers/predictions-reducer';\n\nexport const setOfferTakeaway =\n (offerTakeaway: boolean) =>\n async (dispatch: AppDispatch, getState: GetState) => {\n const draftId = selectDraftId(getState());\n\n trackSyiForm({\n eventName: 'syi_pickup',\n parameters: {\n boolean_value: offerTakeaway ? 1 : 0,\n draft_id: draftId\n }\n });\n dispatch(setTakeawaySelected({ offerTakeaway }));\n };\n\nexport const getAndSetShippingOptionsByWeight =\n (shippingOptions?: ShippingOption[]) =>\n async (dispatch: AppDispatch, getState: GetState) => {\n try {\n const { charity, shipping } = getSyiSlice(getState());\n const itemId = selectItemIdFromDraft(getState());\n const { charityId } = charity;\n let fromCountry: string | null =\n 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 setShippingOptionsByWeight({\n productsPerWeightSpan,\n shippingOptions:\n shippingOptions ||\n selectSelectedShippingOptions(getState())\n })\n );\n } catch (error) {\n dispatch(setShippingOptionsError());\n }\n };\n\nexport const setShippingRecommendations =\n (categoryId: number) =>\n async (dispatch: AppDispatch, getState: 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 setShippingRecommendationsReducer({\n recommendedWeight,\n shippingRecommendations\n })\n );\n dispatch(setFirstRecommendationAsSelected());\n } catch (error) {\n dispatch(clearShippingRecommendations());\n logger(\n 'Get ShippingRecommendations failed. Reason: ' +\n (typeof error === 'object' &&\n error &&\n 'message' in error\n ? error.message\n : '')\n );\n }\n }\n };\n\nexport const setFirstRecommendationAsSelected =\n () => (dispatch: AppDispatch, getState: GetState) => {\n const state = getState();\n const hasUserAutofillEnabledInSettings =\n selectMagicalSyiSettngEnabled(state);\n\n const alreadySelectedShippingOptions =\n selectSelectedShippingOptions(state);\n\n const preFillShippingEnabled = selectIsFeatureEnabled(\n 'magical-syi-autofill-shipping'\n )(state);\n\n if (\n alreadySelectedShippingOptions.length > 0 ||\n !hasUserAutofillEnabledInSettings ||\n !preFillShippingEnabled\n ) {\n return;\n }\n\n const firstRecommendation = selectFirstRecommendedByWeight(state);\n\n if (firstRecommendation) {\n dispatch(setShippingOptionSelected([firstRecommendation]));\n dispatch(setHasUsedAutoFill(true));\n }\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\nexport const ITEM_TYPE = {\n BIN: 'bin',\n AUCTION: 'auction',\n AUCTION_AND_BIN: 'auction_and_bin'\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 DraftsRequest,\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 GetDraftsPageApiResponse,\n DraftsRequest | void\n >({\n providesTags: [Tags.DRAFT_LIST],\n query: (params) => ({\n url: '/api/webapi/selling/drafts',\n method: 'GET',\n params\n }),\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 autoFillSuggestedAttributes: (state) => {\n state.categoryAttributes.forEach((attribute) => {\n // Abort if the attribute has any option that's already active.\n // If loading a draft, an option might already be selected and we don't want to overwrite that.\n if (attribute.options.find((option) => option.isActive)) {\n return;\n }\n\n // only allow for certain attributes to be auto-filled. This is a limitation of the model as per 2024-08-15\n if (![1, 2, 3, 91].includes(attribute.id)) {\n return;\n }\n\n const suggestedAttributeValues =\n state.selectableSuggestedAttributes\n .find((suggested) => suggested.id === attribute.id)\n ?.values // do not auto-fill more values than the attribute allows\n .slice(0, attribute.maxNumberOfValues) || [];\n\n if (suggestedAttributeValues.length > 0) {\n attribute.options = attribute.options.map((option) => {\n if (suggestedAttributeValues.includes(option.value)) {\n return { ...option, isActive: true };\n }\n return option;\n });\n attribute.numberOfValuesSelected = attribute.options.filter(\n (option) => option.isActive\n ).length;\n }\n });\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 resetSelectedAttributes: (state) => {\n state.categoryAttributes.forEach((attribute) => {\n attribute.options?.forEach((option) => {\n option.isActive = false;\n });\n attribute.numberOfValuesSelected = 0;\n });\n },\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[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 resetSelectedAttributes,\n resetImageAttributeSuggestions,\n autoFillSuggestedAttributes\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 */\n\nimport dayjs from 'dayjs';\nimport { createSlice, type PayloadAction } from '@reduxjs/toolkit';\n\nexport type DraftSlice = {\n isLoading: boolean;\n draftId?: string;\n draftReason?: string;\n memberId?: number;\n itemId?: number;\n restart?: boolean;\n publishedPromoted?: unknown;\n publishedHighlighted?: unknown;\n createdDate?: unknown;\n lastModifiedDate?: string;\n publishedDate?: unknown;\n publishedAsItemType?: unknown;\n reference?: string | null;\n referenceIsReadonly?: boolean;\n additionalDescriptions: { message: string }[];\n metadata?: unknown;\n templateId?: string;\n templateName?: unknown;\n version?: unknown;\n isNewDraft?: unknown;\n descriptionLanguageCodeIso2?: string;\n currency?: string;\n resellPartner?: unknown;\n magicalSyiEnabled?: boolean;\n};\n\nconst initialState: DraftSlice = {\n isLoading: false,\n additionalDescriptions: []\n};\n\nconst draftSlice = createSlice({\n name: 'draft',\n initialState,\n reducers: {\n setDraftProperties(state, action: PayloadAction>) {\n const referenceIsReadonly =\n action.payload.reference?.includes('Sello artnr') ?? false;\n if (JSON.stringify(state) != JSON.stringify(action.payload)) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n Object.assign(state, action.payload, {\n referenceIsReadonly,\n isNewDraft: !action.payload.draftId\n });\n },\n setDraftId(state, action: PayloadAction) {\n if (state.draftId !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.draftId = action.payload;\n },\n setRestart(state, action: PayloadAction) {\n if (state.restart !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.restart = action.payload;\n },\n disableRestart(state) {\n if (state.restart !== false) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.restart = false;\n },\n setReference(state, action: PayloadAction) {\n if (state.reference !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.reference = action.payload;\n },\n addAdditionalDescription(state, action: PayloadAction) {\n const newAdditionalDescriptions = [\n ...state.additionalDescriptions,\n { message: action.payload }\n ];\n if (\n JSON.stringify(state.additionalDescriptions) !=\n JSON.stringify(newAdditionalDescriptions)\n ) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.additionalDescriptions = newAdditionalDescriptions;\n },\n setDraftReason(state, action: PayloadAction) {\n if (state.draftReason !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.draftReason = action.payload;\n },\n setDraftVersion(state, action: PayloadAction) {\n if (state.version !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.version = action.payload;\n },\n resetDraft(state) {\n if (JSON.stringify(state) != JSON.stringify(initialState)) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n Object.assign(state, initialState);\n },\n setDraftIsLoading(state, action: PayloadAction) {\n if (state.isLoading !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.isLoading = action.payload;\n },\n setCurrency(state, action: PayloadAction) {\n if (state.currency !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.currency = action.payload;\n },\n setResellPartner(state, action: PayloadAction) {\n if (state.resellPartner !== action.payload) {\n state.lastModifiedDate = dayjs().toISOString();\n }\n state.resellPartner = action.payload;\n },\n setMagicalSyiEnabled(state, action: PayloadAction) {\n state.magicalSyiEnabled = action.payload;\n }\n }\n});\n\nexport const {\n setDraftProperties,\n setDraftId,\n setRestart,\n disableRestart,\n setReference,\n addAdditionalDescription,\n setDraftReason,\n setDraftVersion,\n resetDraft,\n setDraftIsLoading,\n setCurrency,\n setResellPartner,\n setMagicalSyiEnabled\n} = draftSlice.actions;\n\nexport default draftSlice.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\nexport enum ITEM_CLASSIFICATIONS_FOR_PREDICTION {\n Books = 'books',\n Cameras = 'cameras',\n Clothes = 'clothes',\n DigitalMedia = 'digital_media',\n // Other means that we cannot do predictions for this category\n Other = 'other',\n Shoes = 'shoes',\n Stamps = 'stamps',\n Watches = 'watches'\n}\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 if (state.uploadingCount > 0) {\n state.uploadingCount--;\n }\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});\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';\nimport { disableRestart } from 'tradera/apps/syi/state/reducers/draft';\n\ntype ItemDurationSlice = {\n isRestartAvailable: boolean;\n durationDays: number | null | undefined;\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 ?? 0,\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 ?? 0) >= 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(disableRestart, (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 { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { fetchOffsitePaymentDetection } from 'tradera/apps/syi/state/actions/long-description-actions';\n\nconst MAX_DESCRIPTION_LENGTH = 7000;\n\nfunction validate(textWithHtml: string | null) {\n if (textWithHtml && textWithHtml.length > MAX_DESCRIPTION_LENGTH) {\n return 'syi_validation_description_to_long';\n }\n\n const elm = document.createElement('div');\n elm.innerHTML = textWithHtml || '';\n\n if (elm.textContent) {\n return elm.textContent.trim() !== ''\n ? null\n : 'syi_validation_missing_description';\n } else if (elm.innerText) {\n return elm.innerText.trim() !== ''\n ? null\n : 'syi_validation_missing_description';\n }\n return 'syi_validation_missing_description';\n}\n\n// By ensuring that shortDescription is always a string makes\n// it easy to know when it has really changed to something significant.\nfunction ensureString(s?: string | null) {\n return !s ? '' : s;\n}\n\ntype longDescriptionSlice = {\n longDescription: string | null;\n validationError: string | null;\n isCurrentDescriptionFromDraft: boolean;\n fromDraftCounter: number;\n isOffsitePaymentDetected?: boolean;\n};\nconst initialState: longDescriptionSlice = {\n longDescription: null,\n validationError: null,\n isCurrentDescriptionFromDraft: false,\n fromDraftCounter: 0,\n isOffsitePaymentDetected: false\n};\n\nconst longDescriptionSlice = createSlice({\n name: 'longDescription',\n initialState,\n reducers: {\n setLongDescription: (state, action: PayloadAction) => {\n state.isCurrentDescriptionFromDraft = false;\n state.longDescription = ensureString(action.payload);\n state.validationError = validate(action.payload);\n },\n setLongDescriptionFromDraft: (\n state,\n action: PayloadAction\n ) => {\n state.isCurrentDescriptionFromDraft = true;\n state.longDescription = ensureString(action.payload);\n state.validationError = validate(action.payload);\n state.fromDraftCounter += 1;\n },\n resetLongDescription: (state) => {\n const defaultValue = null;\n state.isCurrentDescriptionFromDraft = false;\n state.longDescription = defaultValue;\n state.validationError = validate(defaultValue);\n }\n },\n extraReducers: (builder) => {\n builder.addCase(\n fetchOffsitePaymentDetection.fulfilled,\n (state, action) => {\n state.isOffsitePaymentDetected =\n action?.payload?.isOffsitePaymentDetected || false;\n }\n );\n }\n});\n\nexport const {\n setLongDescription,\n setLongDescriptionFromDraft,\n resetLongDescription\n} = longDescriptionSlice.actions;\n\nexport default longDescriptionSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\nimport userData from 'tradera/apps/syi/services/user-data';\nimport config from 'tradera/apps/syi/services/config';\n\nconst setValidationError = (condition: boolean | undefined) =>\n condition ? 'syi_summary_terms_active_consent_missing_error' : null;\n\nconst validate = (state: MemberConsentState) => {\n return {\n ...state,\n validationError: setValidationError(!state.hasTraderaPayConsent)\n };\n};\n\ntype MemberConsentState = {\n isUnderLicense?: boolean;\n hasTraderaPayConsent?: boolean;\n initalConsentGiven?: boolean;\n shouldGiveConsent?: boolean;\n needsConsentOfTraderaPayAgreement?: string;\n signatoryVerificationRequired?: boolean;\n validationError?: string | null;\n};\n\nconst createInitalState = (): MemberConsentState => {\n if (!userData || !userData.consent || !userData.braintree) {\n // seems syi is not loaded, return empty object\n return {};\n }\n // Companies need to verify signatory when consent to money transfer license.\n // And this is not possible on SYI and should therefor not be shown or validated.\n const shouldBypassConsent = userData.consent.signatoryVerificationRequired;\n\n const shouldGiveConsent = config.isSyiMemberConsentEnabled;\n const hasTraderaPayConsent = !!userData.consent.hasTraderaPayConsent;\n const needsConsentOfTraderaPayAgreement =\n userData.consent.needsConsentOfTraderaPayAgreement;\n const hasValidationError =\n shouldGiveConsent &&\n !shouldBypassConsent &&\n !userData.consent.hasTraderaPayConsent;\n\n return {\n isUnderLicense: userData.consent.isUnderLicense,\n hasTraderaPayConsent,\n initalConsentGiven: hasTraderaPayConsent,\n shouldGiveConsent,\n needsConsentOfTraderaPayAgreement,\n signatoryVerificationRequired:\n userData.consent.signatoryVerificationRequired,\n validationError: setValidationError(hasValidationError)\n };\n};\n\nconst initialState = createInitalState();\n\nconst memberConsentSlice = createSlice({\n name: 'memberConsent',\n initialState,\n reducers: {\n setTraderaPayConsent: (state, action) =>\n validate({\n ...state,\n hasTraderaPayConsent: action.payload\n })\n }\n});\n\nexport const { setTraderaPayConsent } = memberConsentSlice.actions;\nexport default memberConsentSlice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport {\n fetchClassificationFromFirstImage,\n fetchPredictionsFromImages\n} from 'tradera/apps/syi/state/actions/predictions-actions';\nimport { ITEM_CLASSIFICATIONS_FOR_PREDICTION } from 'tradera/apps/syi/state/reducers/images';\nimport type { ClassifyFromDraftImageApiResponse } from 'tradera/state/services/types/webapi-selling-generated';\n\nconst setValidationError = (condition: boolean | undefined) =>\n condition ? 'syi_validation_prediction_publish_consent' : null;\n\nconst validate = (state: PredictionsState) => {\n return {\n ...state,\n validationError: setValidationError(!state.hasAutoFillConsent)\n };\n};\n\ntype PredictionsState = {\n isLoadingPredictions: boolean;\n shortDescription?: string;\n longDescription?: string;\n shouldSuggestShortDescription?: boolean;\n shouldSuggestLongDescription?: boolean;\n numProcessedImages?: number;\n aiProcessingTime?: number;\n\n classification: ClassifyFromDraftImageApiResponse | null;\n canGetPredictionFromImages: boolean;\n isClassificationPending: boolean;\n hasUsedPredictedDescription: boolean;\n hasAutoFillConsent: boolean;\n validationError?: string | null;\n hasUsedAutoFill: boolean;\n};\n\nconst initialState: PredictionsState = {\n isLoadingPredictions: false,\n classification: null,\n canGetPredictionFromImages: false,\n isClassificationPending: false,\n hasUsedAutoFill: false,\n hasUsedPredictedDescription: false,\n hasAutoFillConsent: false,\n shortDescription: undefined,\n validationError: null\n};\n\nconst predictionsSlice = createSlice({\n name: 'predictions',\n initialState,\n reducers: {\n setPredictedShortDescription: (state, action) => {\n state.shortDescription = action.payload;\n },\n setPredictedLongDescription: (state, action) => {\n state.longDescription = action.payload;\n },\n setShouldSuggestShortDescription: (state, action) => {\n state.shouldSuggestShortDescription = action.payload;\n },\n setShouldSuggestLongDescription: (state, action) => {\n state.shouldSuggestLongDescription = action.payload;\n },\n setHasUsedPredictedDescription: (\n state,\n action: PayloadAction\n ) =>\n validate({\n ...state,\n hasUsedAutoFill: action.payload,\n hasUsedPredictedDescription: action.payload,\n hasAutoFillConsent: false\n }),\n setHasUsedAutoFill: (state, action: PayloadAction) =>\n validate({\n ...state,\n hasUsedAutoFill: action.payload\n }),\n setNumProcessedImages: (state, action) => {\n state.numProcessedImages = action.payload;\n },\n setAiProcessingTime: (state, action) => {\n state.aiProcessingTime = action.payload;\n },\n setHasAutoFillConsent: (state, action) =>\n validate({\n ...state,\n hasAutoFillConsent: action.payload\n })\n },\n extraReducers: (builder) => {\n builder.addCase(fetchClassificationFromFirstImage.pending, (state) => {\n state.classification = null;\n state.isClassificationPending = true;\n state.canGetPredictionFromImages = false;\n });\n builder.addCase(\n fetchClassificationFromFirstImage.fulfilled,\n (state, action) => {\n state.classification = action.payload;\n state.isClassificationPending = false;\n state.canGetPredictionFromImages =\n action.payload.itemClassification !==\n ITEM_CLASSIFICATIONS_FOR_PREDICTION.Other;\n }\n );\n builder.addCase(fetchClassificationFromFirstImage.rejected, (state) => {\n state.classification = null;\n state.isClassificationPending = false;\n state.canGetPredictionFromImages = false;\n });\n builder.addCase(fetchPredictionsFromImages.pending, (state) => {\n state.isLoadingPredictions = true;\n });\n builder.addCase(fetchPredictionsFromImages.fulfilled, (state) => {\n state.isLoadingPredictions = false;\n });\n builder.addCase(fetchPredictionsFromImages.rejected, (state) => {\n state.isLoadingPredictions = false;\n });\n }\n});\n\nexport const {\n setPredictedShortDescription,\n setPredictedLongDescription,\n setShouldSuggestShortDescription,\n setShouldSuggestLongDescription,\n setHasUsedAutoFill,\n setHasUsedPredictedDescription,\n setNumProcessedImages,\n setAiProcessingTime,\n setHasAutoFillConsent\n} = predictionsSlice.actions;\nexport default predictionsSlice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\n\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\nimport { getSelectedShippingProducts } from './shipping-selectors';\nimport { validate } from './validate';\nimport { v4 as uuidv4 } from 'uuid';\nimport type {\n ProductsPerWeightSpan,\n ShippingOption,\n ShippingProduct\n} from 'tradera/state/services/types/webapi-selling-generated';\n\nconst getUuid = () => uuidv4();\n\ntype ShippingState = {\n validationErrors: Record;\n globalValidationError: string | null;\n shippingByWeight: ProductsPerWeightSpan[] | undefined;\n shippingRecommendations: {\n shippingProductId: number;\n shippingProvider: string;\n weight: number;\n }[];\n recommendedWeight: number | null;\n selectedShippingOptions: ShippingProduct[];\n shippingOptionsLoading: boolean;\n shippingOptionsError: boolean;\n offerTakeaway: boolean;\n offerShipping: boolean;\n fromCountry: string | null;\n};\n\nconst initialState: ShippingState = validate({\n validationErrors: {},\n globalValidationError: null,\n shippingByWeight: [],\n shippingRecommendations: [],\n recommendedWeight: null,\n selectedShippingOptions: [],\n shippingOptionsLoading: false,\n shippingOptionsError: false,\n offerTakeaway: false,\n offerShipping: false,\n fromCountry: null\n});\n\nconst shippingContainsTakeaway = (shippingOptions: ShippingOption[]) =>\n shippingOptions.some(\n (shippingOption) =>\n shippingOption.type === 'Takeaway' ||\n shippingOption.type === 'TakeawayOnly'\n );\n\nconst shippingContainsProduct = (shippingOptions: ShippingOption[]) =>\n shippingOptions.some(\n (shippingOption) =>\n shippingOption.type !== 'Takeaway' &&\n shippingOption.type !== 'TakeawayOnly'\n );\n\nconst shippingSlice = createSlice({\n name: 'shipping',\n initialState,\n reducers: {\n resetSelectedShippingOptions: (state) => {\n state.selectedShippingOptions = [];\n state.offerShipping = false;\n state.offerTakeaway = false;\n return validate(state);\n },\n setShippingOptionsByWeight: (\n state,\n action: PayloadAction<{\n productsPerWeightSpan:\n | ProductsPerWeightSpan[]\n | null\n | undefined;\n shippingOptions: ShippingOption[];\n }>\n ) => {\n const { productsPerWeightSpan, shippingOptions } = action.payload;\n\n state.offerShipping = shippingContainsProduct(shippingOptions);\n state.offerTakeaway = shippingContainsTakeaway(shippingOptions);\n\n //Decorate products with cost, type & productId for draft api:\n const productsDecorated = productsPerWeightSpan?.map(\n (weightClass) => {\n const productsWithDecoration = weightClass.products?.map(\n (product) => ({\n ...product,\n cost: product.price,\n productId: product.id,\n type: product.providerId,\n uuid: getUuid()\n })\n );\n return { ...weightClass, products: productsWithDecoration };\n }\n );\n\n state.shippingByWeight = productsDecorated;\n state.selectedShippingOptions = getSelectedShippingProducts(\n productsDecorated,\n shippingOptions,\n state.offerTakeaway\n );\n state.shippingOptionsLoading = false;\n state.shippingOptionsError = false;\n return validate(state);\n },\n setShippingOptionSelected: (\n state,\n action: PayloadAction\n ) => {\n const { payload } = action;\n\n const selectedOptions = getSelectedShippingProducts(\n state.shippingByWeight,\n payload,\n state.offerTakeaway\n );\n\n if (shippingContainsProduct(selectedOptions)) {\n state.offerShipping = true;\n } else {\n state.offerShipping = false;\n }\n\n state.selectedShippingOptions = selectedOptions;\n\n return validate(state);\n },\n setTakeawaySelected: (\n state,\n action: PayloadAction<{ offerTakeaway: boolean }>\n ) => {\n state.offerTakeaway = action.payload.offerTakeaway;\n state.selectedShippingOptions = getSelectedShippingProducts(\n state.shippingByWeight,\n state.selectedShippingOptions,\n state.offerTakeaway\n );\n\n return validate(state);\n },\n setShippingOptionsError: (state) => {\n state.shippingOptionsLoading = false;\n state.shippingOptionsError = true;\n\n return validate(state);\n },\n setShippingFromCountry: (\n state,\n action: PayloadAction<{ fromCountry: string }>\n ) => {\n state.fromCountry = action.payload.fromCountry;\n },\n clearShippingRecommendations: (state) => {\n state.recommendedWeight = initialState.recommendedWeight;\n state.shippingRecommendations =\n initialState.shippingRecommendations;\n },\n setShippingRecommendations: (\n state,\n action: PayloadAction<{\n recommendedWeight: number;\n shippingRecommendations: {\n shippingProductId: number;\n shippingProvider: string;\n weight: number;\n }[];\n }>\n ) => {\n const { recommendedWeight, shippingRecommendations } =\n action.payload;\n\n state.recommendedWeight = recommendedWeight;\n state.shippingRecommendations = shippingRecommendations;\n return validate(state);\n }\n }\n});\n\nexport const {\n setShippingFromCountry,\n setShippingOptionsByWeight,\n setShippingOptionsError,\n setShippingRecommendations,\n clearShippingRecommendations,\n setTakeawaySelected,\n setShippingOptionSelected,\n resetSelectedShippingOptions\n} = shippingSlice.actions;\n\nexport default shippingSlice.reducer;\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 isDraftSaved: boolean;\n publishDelayed: boolean;\n categoryRestriction: GetCategoryRestrictionApiResponse | null;\n fadeUi: boolean;\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 isDraftSaved: false,\n publishDelayed: false,\n categoryRestriction: null,\n fadeUi: false\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 setIsDraftSaved: (state, action: PayloadAction) => {\n state.isDraftSaved = action.payload;\n },\n setFadeUi: (state, action: PayloadAction) => {\n state.fadeUi = 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 setIsDraftSaved,\n setFadeUi\n} = syiSlice.actions;\n\nexport default syiSlice.reducer;\n","/* eslint-disable better-mutation/no-mutation */\nimport { type PayloadAction, createSlice } from '@reduxjs/toolkit';\n\ntype TemplateState = {\n ignoreProperties: string[];\n};\n\nconst initialState: TemplateState = {\n ignoreProperties: []\n};\n\nconst templateReducer = createSlice({\n name: 'template',\n initialState,\n reducers: {\n resetIgnoreProperties: (state) => {\n state.ignoreProperties = [];\n },\n addIgnoreProperties: (state, action: PayloadAction) => {\n state.ignoreProperties = [\n ...new Set([...state.ignoreProperties, ...action.payload])\n ];\n },\n removeIgnoreProperties: (state, action: PayloadAction) => {\n state.ignoreProperties = state.ignoreProperties.filter(\n (prop) => !action.payload.includes(prop)\n );\n }\n }\n});\n\nexport const {\n resetIgnoreProperties,\n addIgnoreProperties,\n removeIgnoreProperties\n} = templateReducer.actions;\n\nexport default templateReducer.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';\nimport type { RootState } from 'tradera/state/configure-store';\n\nexport const selectMagicalSyiSettngEnabled = (state: RootState) =>\n !!getSyiSlice(state).draft.magicalSyiEnabled;\n\nexport const selectDraftId = (state: RootState) =>\n getSyiSlice(state).draft.draftId;\n\nexport const selectDraft = (state: RootState) => getSyiSlice(state).draft;\n","import { createSelector } from '@reduxjs/toolkit';\nimport { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\nimport type { RootState } from 'tradera/state/configure-store';\n\nexport const selectIsUploadingFirstImage = createSelector(\n (state: RootState) => getSyiSlice(state).images.uploadingCount,\n (state: RootState) => getSyiSlice(state).images.images.length,\n (uploadingCount, imageCount) => uploadingCount > 0 && imageCount === 0\n);\n\nexport const selectImageIds = createSelector(\n (state: RootState) => getSyiSlice(state).images.images,\n (images) => images.map((image) => image.imageId)\n);\n","import { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\nimport type { RootState } from 'tradera/state/configure-store';\n\nexport const selectIsClassificationPending = (state: RootState) =>\n getSyiSlice(state).predictions.isClassificationPending;\n\nexport const selectCanGetPredictionFromImages = (state: RootState) =>\n getSyiSlice(state).predictions.canGetPredictionFromImages;\n\nexport const selectClassificationResponse = (state: RootState) =>\n getSyiSlice(state).predictions.classification;\n\nexport const selectIsLoadingPredictions = (state: RootState) =>\n getSyiSlice(state).predictions.isLoadingPredictions;\n\nexport const selectPredictedShortDescription = (state: RootState) =>\n getSyiSlice(state).predictions.shortDescription;\n\nexport const selectPredictedLongDescription = (state: RootState) =>\n getSyiSlice(state).predictions.longDescription;\n\nexport const selectShouldSuggestShortDescription = (state: RootState) =>\n getSyiSlice(state).predictions.shouldSuggestShortDescription;\n\nexport const selectShouldSuggestLongDescription = (state: RootState) =>\n getSyiSlice(state).predictions.shouldSuggestLongDescription;\n\nexport const selectHasUsedPredictedDescription = (state: RootState) =>\n getSyiSlice(state).predictions.hasUsedPredictedDescription;\n\nexport const selectHasUsedAutoFill = (state: RootState) =>\n getSyiSlice(state).predictions.hasUsedAutoFill;\n","import { getSyiSlice } from 'tradera/apps/syi/state/selectors/syi';\nimport type { RootState } from 'tradera/state/configure-store';\n\nexport const selectPrice = (state: RootState) => getSyiSlice(state).price;\nexport const selectIsPureBinSelected = (state: RootState) =>\n getSyiSlice(state).price.isPureBinSelected;\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;\n\nexport const selectLongDescription = (state: RootState) =>\n getSyiSlice(state).longDescription.longDescription;\n\nexport const selectItemIdFromDraft = (state: RootState) =>\n getSyiSlice(state).draft?.itemId || undefined;\n\nexport const selectFadeUi = (state: RootState) =>\n getSyiSlice(state).syi.fadeUi || false;\n\nexport const selectIsDraftSaved = (state: RootState) =>\n getSyiSlice(state).syi.isDraftSaved || false;\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 | null;\n hasEnded: boolean;\n isEnding: boolean;\n itemState: ITEM_STATES | null;\n leadingBidAmount?: number | null;\n onShowBids: () => void;\n setBuyerProtectionModal: (type: BuyerProtectionModalType) => void;\n openingBid?: number | null;\n finalPrice?: number | null;\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 && 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 | null,\n leadingBid?: number | null,\n openingBid?: number | null,\n hasBids?: boolean,\n finalPrice?: number | null,\n paymentAmountForBid?: number | null,\n paymentAmountForFixedPrice?: number | null\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 && 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 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 nonBrandedText,\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 nonBrandedText={nonBrandedText}\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 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","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","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 = 2 * 60 * 1000;\n"],"names":["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","syiSessionId","hasTrackedFormStart","trackSyiForm","_ref","eventName","_ref$parameters","parameters","Math","random","toString","slice","Date","now","GtmService","trackGA4","flow_id","FlowId","SYI","form_name","syi_session_id","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","length","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","selectIsFeatureEnabled","autoFillSuggestedAttributes","splitTest","attributeSuggestion","trackAddonBeforePublish","addOnfeatureName","gtm","trackAction","setDraft","arguments","_draft$itemCondition","_draft$charity","memberCountryCodeIso2","selectShippingRegionCountryCodeIso2","fromCountry","userData","shippingFromCountryCodeIso2","getDefaultShippingFromCountryCodeIso2","setShippingFromCountry","disableAutoSave","draftReason","ensureDraftReason","isNewDraft","draftId","isChangeItem","setIsEditOfPublishedItem","hideAllErrors","setDraftProperties","setAllowedBuyerRegion","allowedBuyerRegion","setAvailableAllowedBuyerRegions","setItemConditionFromUser","itemCondition","setInitialCampaignCode","campaignCode","campaignCodeId","campaignCodeDescription","shortDescriptionActions","setShortDescription","setDescriptionLanguageCodeIso2","descriptionLanguageCodeIso2","selectedDescriptionLanguageCodeIso2","getDefaultSelectedDescriptionLanguageCodeIso2","initData","setCurrency","currency","setResellPartner","resellPartner","categoryActions","setDraftCategory","categoryPath","setDurationDays","durationDays","setCustomEndTime","customEndTime","setLongDescriptionFromDraft","longDescription","setDisplayPromoted","displayPromoted","setDisplayHighlighted","displayHighlighted","images","priceActions","setFromDraft","openingBid","fixedPrice","reservePrice","charity","charityId","vat","selectFeatureSwitches","setCharityAndFetchInfo","setCharityFromDraftAndFetchInfo","getAndSetShippingOptionsByWeight","shippingOptions","enableAutoSave","memberApi","endpoints","getMagicalSyiEnabled","initiate","then","result","setMagicalSyiEnabled","enabled","catch","scribe","loadDraft","setDraftIsLoading","draftService","setIsDraftSaved","navigationService","goToStart","finally","canBeResumed","hasShortDescription","trim","hasLongDescription","hasImage","Array","isArray","image","imageUrl","payload","feesActions","updatePrices","hasResponseErrorCode","responseOrNull","arrayOfErrorCodesToCheck","includes","errorCode","saveDraft","buildDraftFromState","version","setDraftId","wasNewDraftWithoutId","routeIsNew","location","href","endsWith","setDraftUrlWithoutReload","setDraftVersion","util","invalidateTags","Tags","DRAFT_LIST","responseJSON","logError","contexts","syiSave","status","setUsedAllowed","isAllowed","condition","updateItemConditionRestrictionForCategory","isUsedAllowed","categoryRestriction","syi","allowUsed","loadImagesFromDraft","browserDraftImageUrls","filter","Boolean","serverDraftImages","serverDraftImageUrls","imagesHaveChanged","x","concat","updateDraftCanBeResumed","setDraftCanBeResumed","publish","t","doneCallback","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","predictions","hasAiTitle","hasAiDescription","item_id","ai_title","ai_description","ai_images","numProcessedImages","ai_processing_time","aiProcessingTime","draft_id","goToPublished","syiPublish","handleServerValidationError","setPublishFailed","toggleModal","loadDraftIfMissing","Promise","resolve","loadDefaultDraft","resetSyi","resetCharityAndShippingInfo","resetSelectedShippingOptions","loadDefaultTemplateDraft","template","templateId","useDraftAsTemplate","setDraftReason","setItemConditionFromPrediction","selectIsItemConditionDirty","oldValue","selectItemCondition","setHasUsedAutoFill","resetItemCondition","publishAdditionalDescription","addAdditionalDescription","setDraftImages","actions","draftActions","_image$draftImage","draftImage","imageId","n","removeImageWithId","imageIndex","i","index","handleAttributeSuggestionsForImages","imageIds","forEach","isListingImage","push","setLongDescriptionFromDraftReducer","fetchOffsitePaymentDetection","createAsyncThunk","request","fetchClassificationFromFirstImage","qs","fetchPredictionsFromImages","_","_ref2","selectPreferredLanguageCode","existingShortDescription","selectShortDescription","existingLongDescription","selectLongDescription","isModalFeatureToggleEnabled","itemClassification","selectClassificationResponse","selectImageIds","selectDraftId","setPredictedShortDescription","setShouldSuggestShortDescription","setHasUsedPredictedDescription","setPredictedLongDescription","setShouldSuggestLongDescription","setLongDescription","setNumProcessedImages","setAiProcessingTime","fetchConditionAndItemTypeFromCategory","_ref4","_ref5","isCompany","setIsPureBinSelectedFromPrediction","itemType","ItemTypes","PURE_BIN","shipping","selectItemIdFromDraft","isDenmarkCountryCode","isNetherlandsCountryCode","_await$getShippingPro","getShippingProvidersByWeight","productsPerWeightSpan","setShippingOptionsByWeight","selectSelectedShippingOptions","setShippingOptionsError","setShippingRecommendations","categoryShippingRecommendations","getShippingRecommendations","recommendedWeight","shippingRecommendations","setShippingRecommendationsReducer","setFirstRecommendationAsSelected","clearShippingRecommendations","message","hasUserAutofillEnabledInSettings","selectMagicalSyiSettngEnabled","alreadySelectedShippingOptions","preFillShippingEnabled","firstRecommendation","selectFirstRecommendedByWeight","setShippingOptionSelected","ITEM_TYPE","BIN","AUCTION","AUCTION_AND_BIN","PURE_BIN_CATEGORY_IDS","draftsApi","createApi","reducerPath","baseQuery","isomorphicWebApiBaseQuery","tagTypes","Object","keys","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","_state$selectableSugg","option","suggestedAttributeValues","suggested","setCategoryAttributeOption","attributeId","optionValue","activate","o","_state$draftAttribute","_state$draftAttribute2","_a$options","_a$options2","draftAttributeValues","tav","resetSelectedAttributes","_attribute$options","_attribute$options2","_attribute$options3","reduce","acc","reducer","windowOrFallback","_windowOrFallback$loc","_windowOrFallback$loc2","pathname","queryParamCharityId","URLSearchParams","_windowOrFallback$loc3","search","preselectCharity","anonymous","Number","logoUrl","percentageToDonate","forceFreeShipping","isFreeShippingPaidByProvider","freeShippingPaidByProviderName","charitySlice","setCharityId","setCharityInfo","_ref2$payload","setCharityAnonymous","_ref3","setCharityFromDraft","resetCharity","setCharityShippingInfo","_charitySlice$actions","isLoading","additionalDescriptions","draftSlice","_action$payload$refer","_action$payload$refer2","referenceIsReadonly","reference","JSON","stringify","lastModifiedDate","toISOString","assign","setRestart","restart","disableRestart","setReference","newAdditionalDescriptions","resetDraft","magicalSyiEnabled","_draftSlice$actions","MAX_NUMBER_OF_IMAGES","ITEM_CLASSIFICATIONS_FOR_PREDICTION","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","_state$durationDays","resetDurationAndEndTime","getDefaultTemplateValue","newState","newStateWithoutCampaignRelatedProps","resetCustomEndTime","disableZeroDayAuctions","_state$durationDays2","enableZeroDayAuctions","enableRestart","_itemDurationSlice$ac","textWithHtml","elm","document","createElement","innerHTML","textContent","innerText","ensureString","s","longDescriptionSlice","isCurrentDescriptionFromDraft","fromDraftCounter","isOffsitePaymentDetected","resetLongDescription","fulfilled","_longDescriptionSlice","setValidationError","createInitalState","consent","braintree","shouldBypassConsent","signatoryVerificationRequired","shouldGiveConsent","needsConsentOfTraderaPayAgreement","hasValidationError","isUnderLicense","initalConsentGiven","memberConsentSlice","setTraderaPayConsent","hasAutoFillConsent","isLoadingPredictions","classification","canGetPredictionFromImages","isClassificationPending","hasUsedAutoFill","hasUsedPredictedDescription","predictionsSlice","shouldSuggestShortDescription","shouldSuggestLongDescription","setHasAutoFillConsent","pending","Other","rejected","_predictionsSlice$act","globalValidationError","shippingByWeight","selectedShippingOptions","shippingOptionsLoading","shippingOptionsError","offerTakeaway","offerShipping","shippingContainsProduct","shippingOption","shippingSlice","shippingContainsTakeaway","productsDecorated","weightClass","_weightClass$products","productsWithDecoration","products","product","cost","productId","providerId","uuid","uuidv4","getSelectedShippingProducts","selectedOptions","setTakeawaySelected","_shippingSlice$action","allErrorsVisible","isEditOfPublishedItem","publishPending","publishFailed","publishFailedReasonDisplayText","publishedItemPendingVip","publishedItem","openModal","openModalData","autoSaveEnabled","draftCanBeResumed","itemUpdating","itemUpdated","isDraftSaved","publishDelayed","fadeUi","syiSlice","setCreationStart","showAllErrors","setPublishedItemPendingVip","setPublishedItemDelayed","setPublishedItem","setCategoryRestriction","setItemUpdating","setItemUpdated","setFadeUi","_syiSlice$actions","templateReducer","ignoreProperties","resetIgnoreProperties","addIgnoreProperties","Set","removeIgnoreProperties","prop","_templateReducer$acti","selectSyiAttributes","views","createSelector","imageCount","selectIsPureBinSelected","isPureBinSelected","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","DropdownButton","React","forwardedRef","children","className","fluid","isOpen","iconClassName","_ref$theme","theme","nonBrandedText","props","_objectWithoutProperties","_excluded","_jsx","classNames","ref","iconRight","DropdownIcon","fixedIcon","align","ArrowDownIcon","styles","iconOpen","TraderaLogo","width","height","style","otherProps","_jsxs","role","viewBox","d","propTypes","defaultProps","MODAL_TYPES","default","wishlistReminders","selling","CHANNEL_TAG_GROUPS","buyingListingOutbid","buyingListingWon","sellingListingFirstBid","sellingListingAllBids","sellingListingSold","sellingPaymentReceived","feesApi","fetchBaseQuery","baseUrl","getCommissionFee","useGetCommissionFeeQuery","getItemState","hasEnded","hasStarted","bidCount","reservePriceReached","nextValidBidAmount","transactionType","leadingBidMemberId","isCancelled","getEndedItemState","ENDED_CANCELLED","isAuction","ITEM_TYPES","isAuctionBin","AUCTION_BIN","isPureBin","isShopItem","SHOP_ITEM","TRANSACTION_TYPES","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","UNKNOWN","ONGOING_AUCTION","ONGOING_AUCTION_BIN","ONGOING_FIXED_PRICE","getOngoingItemState","NOT_STARTED_AUCTION","NOT_STARTED_AUCTION_BIN","NOT_STARTED_FIXED_PRICE","getNotStartedItemState","NS_TOUCHWEB","NS_ATTRIBUTES","NS_CATEGORIES","NS_BACKEND","DEFAULT_LANGUAGE","URL_LANGUAGES","I18N_FRONTEND_NAMESPACES","I18N_BACKEND_NAMESPACES","SUPPORTED_LANGUAGES","TRANS_SUFFIX"],"sourceRoot":""}