{"version":3,"file":"script/bundle-9.0f555dce03.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/atoms/text/text.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/services/touchweb-syi-api.ts","webpack://touchweb/./src/state/views/view-item/constants.ts","webpack://touchweb/./src/state/views/view-item/item-state-helper.ts","webpack://touchweb/./src/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-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 timestamp: Date.now()\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 timestamp: Date.now()\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} from '../reducers/attributes';\n\nconst throttleTimeout = 2000;\nconst suggestionsThrottle = new ThrottledAction(throttleTimeout, true);\nconst imageToColorsThrottle = new ThrottledAction(throttleTimeout, false);\n\nconst INPUT_TYPE_MAP = {\n Button: 'button',\n Color: 'color',\n Dropdown: 'dropdown'\n};\n\nconst COLOR_ATTRIBUTE_ID = 2;\n\nconst transformServerOption = (serverOption) => {\n return {\n value:\n typeof serverOption === 'string'\n ? serverOption\n : serverOption.value,\n sortOrder: serverOption.sortOrder,\n isActive: false,\n warningLabel: {\n title:\n serverOption.warningLabel !== undefined &&\n serverOption.warningLabel !== null\n ? serverOption.warningLabel.title\n : null,\n text:\n serverOption.warningLabel !== undefined &&\n serverOption.warningLabel !== null\n ? serverOption.warningLabel.text\n : null\n }\n };\n};\n\nconst transformServerAttribute = (attribute) => {\n return {\n id: attribute.id,\n title: attribute.displayName,\n description: attribute.description,\n sortOrder: attribute.sortOrder,\n backingField: attribute.backingField,\n options: attribute.possibleValues.map(transformServerOption),\n inputType: INPUT_TYPE_MAP[attribute.type],\n isMultiSelect: attribute.isMultiSelect,\n maxNumberOfValues: attribute.maxNumberOfValues,\n minNumberOfValues: attribute.minNumberOfValues,\n numberOfValuesSelected: 0,\n shouldTranslateValues: attribute.shouldTranslateValues,\n preserveOptionsOrder: attribute.preserveOptionsOrder\n };\n};\n\nexport const setAttributesFromDraft = (draft) => (dispatch) => {\n dispatch(setDraftAttributes(draft.attributeValues));\n};\n\nexport const reset = () => (dispatch) => {\n dispatch(resetAttributes());\n};\n\nexport const 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 } 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-service';\nimport {\n disableAutoSave,\n enableAutoSave,\n hideAllErrors,\n resetSyi,\n setDraftCanBeResumed,\n setIsEditOfPublishedItem,\n setPublishFailed,\n setPublishPending,\n toggleModal\n} from '../reducers/syi';\nimport { selectShippingRegionCountryCodeIso2 } from 'tradera/state/shipping-region/selectors';\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';\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 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 const wasNewDraftWithoutId = !draft.draftId && !!result.draftId;\n // since this function runs on a timer, we might have moved to a new route.\n // For example, when publishing a draft, we move to the published page, but\n // this function might run afterwards, which creates a new draft. Therefore,\n // make sure to only run this if we are still on the 'new' route. TWT-6947\n const routeIsNew = window.location.href.endsWith('/new');\n if (wasNewDraftWithoutId && routeIsNew) {\n navigationService.setDraftUrlWithoutReload(result.draftId);\n }\n // Must happen after new URL is set for re-render to happen.\n dispatch(setDraftVersion(result.version));\n // KATS: This is only manually dispatched since not all of the templates API is in RTK query yet\n dispatch(util.invalidateTags([Tags.DRAFT_LIST]));\n\n return result;\n })\n .catch((result) => {\n const response = result.responseJSON;\n\n logger('Failed to save SYI draft', {\n contexts: {\n syiSave: response\n }\n });\n\n if (\n hasResponseErrorCode(response, [\n 'DraftAlreadyPublished',\n 'DraftBelongsToAnotherMember'\n ])\n ) {\n dispatch(setDraft({}));\n navigationService.goToStart();\n } else if (result.status == 404) {\n dispatch(setDraft({}));\n navigationService.goToStart();\n }\n throw result;\n });\n};\n\nconst setUsedAllowed = (isAllowed) => ({\n type: 'SET_ITEM_CONDITION_SELECTION_ERROR',\n payload: isAllowed ? null : 'syi_validation_used_not_allowed_for_category'\n});\n\nconst 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 { AppDispatch, GetState } from 'tradera/state/configure-store';\nimport { selectLongDescription } from 'tradera/apps/syi/state/selectors/syi';\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","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\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 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} = 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';\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};\nconst initialState: longDescriptionSlice = {\n longDescription: null,\n validationError: null,\n isCurrentDescriptionFromDraft: false,\n fromDraftCounter: 0\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});\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 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 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 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 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","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 { classNames } from 'tradera/utils/class-names';\nimport React, { forwardRef } from 'react';\nimport type { PolyRefFunction, OnlyAs } from 'react-polymorphed';\n\nimport styles from './text.module.scss';\n\nconst polyRef = forwardRef as PolyRefFunction;\n\nexport type FontWeight = 'light' | 'medium' | 'heavy';\n\n// This can probably be used by more components\nexport type FontColor =\n | 'branded'\n | 'danger'\n | 'dark'\n | 'function'\n | 'info'\n | 'light'\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'white'\n | 'gray-100'\n | 'gray-200'\n | 'gray-300'\n | 'gray-400'\n | 'gray-500'\n | 'gray-600'\n | 'gray-700'\n | 'gray-800'\n | 'gray-900';\n\nexport type FontFamily = 'inter' | 'hansen';\n\nexport type TextProps = {\n size?:\n | 'london'\n | 'amsterdam'\n | 'paris'\n | 'dublin'\n | 'oslo'\n | 'madrid'\n | 'berlin';\n className?: string;\n align?: 'left' | 'center' | 'right';\n color?: FontColor;\n children?: React.ReactNode;\n fontWeight?: FontWeight;\n fontStyle?: 'italic';\n font?: FontFamily;\n nowrap?: boolean;\n};\n\n/**\n * Text component\n *\n * Defaults to paragraph, but can be used as \"span\", \"strong\", \"code\" or \"em\" also with `as=\"span\"` etc.\n *\n * Font sizes (default is \"paris\"):\n * - london: 16px\n * - amsterdam: small screen: 14px, large screen: 16\n * - paris: small screen: 14px, large screen: 14px\n * - dublin: small screen: 12px, large screen: 14px\n * - oslo: small screen: 12px, large screen: 12px;\n *\n * @example\n * Some text\n *\n * @example\n * Some text\n *\n * @example\n * Some text\n */\nexport const Text = polyRef<\n 'p',\n TextProps,\n OnlyAs<'p' | 'span' | 'strong' | 'em' | 'code' | 'b' | 'label'>\n>(\n (\n {\n as: Component = 'p',\n size = 'paris',\n children,\n align,\n className,\n color,\n fontWeight,\n fontStyle,\n font,\n nowrap,\n ...props\n },\n ref\n ) => {\n return (\n \n {children}\n \n );\n }\n);\n","import React from 'react';\nimport { classNames } from 'tradera/utils/class-names';\n\nimport type { ButtonProps } from '../atoms/button/button';\nimport { Button } from '../atoms/button/button';\nimport ArrowDownIcon from '@tradera/blueprint/theme/icons2/arrow-down.svg?jsx';\n\nimport styles from './dropdown-button.module.scss';\n\n// trying to make this a bit restrictive...since if you want a Button, use that instead\nexport type DropdownButtonProps = Omit & {\n isOpen?: boolean;\n iconClassName?: string;\n theme?: 'dropdown' | 'unbutton';\n id?: string;\n};\n\n/**\n * Just a button with a specific look and feel used for dropdowns.\n *\n * Pass `isOpen` to change the icon to an open state.\n */\nexport const DropdownButton = React.forwardRef<\n React.ElementRef,\n DropdownButtonProps\n>(function DropdownButton(\n {\n children,\n className,\n fluid,\n isOpen,\n iconClassName,\n theme = 'dropdown',\n 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","import { createApi } from '@reduxjs/toolkit/query/react';\nimport { DEFAULT_LANGUAGE } from 'tradera/lang/constants.mjs';\nimport { touchWebClient } from 'tradera/utils/http';\nimport { httpClientBaseQuery } from './utils/http-client-base-query';\nimport qs from 'qs';\nimport type {\n CategorySearchApiResponse,\n CategorySearchRequest\n} from './types/webapi-discover-generated';\n\nimport { z } from 'zod';\n\nconst CategorySchema = z.object({\n name: z.string(),\n categoryId: z.number(),\n isLeaf: z.boolean()\n});\n\nconst CategorySuggestionSchema = z.object({\n matchedItemCount: z.number(),\n name: z.string(),\n categoryId: z.number(),\n isLeaf: z.boolean()\n});\n\nconst CategoriesAndSuggestionsSchema = z.object({\n categories: z.array(CategorySchema),\n // FYI: we don't get these currently in DEV\n suggestions: z.array(CategorySuggestionSchema).optional()\n});\n\ntype GetCategoriesResponse = z.infer;\n\ntype GetCategoriesParams = {\n categoryId: number;\n shortDescription?: string | null;\n locale?: string;\n currentLevel?: number;\n};\n\nexport const touchwebSyiApi = createApi({\n reducerPath: 'touchwebSyiApi',\n baseQuery: httpClientBaseQuery({ client: touchWebClient }),\n endpoints: (builder) => ({\n getCategories: builder.query<\n GetCategoriesResponse,\n GetCategoriesParams\n >({\n query: ({\n categoryId = -1,\n shortDescription,\n currentLevel = 0\n }) => {\n if (categoryId > 0 && currentLevel > 0) {\n return {\n url: `/selling/categorysuggestions`,\n method: 'POST',\n data: {\n categoryId: categoryId,\n levelToSearch: currentLevel + 1,\n title: shortDescription\n }\n };\n }\n\n return {\n url: '/selling/toplevelcategorysuggestions',\n method: 'POST',\n data: {\n title: shortDescription\n }\n };\n },\n\n transformResponse: (response: unknown, _meta, arg) => {\n const data = CategoriesAndSuggestionsSchema.parse(response);\n\n const suggestions = data?.suggestions || [];\n\n return {\n ...data,\n // just use the first 3 suggestions and merge the rest as regular categories\n suggestions: suggestions.slice(0, 3),\n categories: [...data.categories, ...suggestions.slice(3)]\n ?.slice()\n .sort((a, b) =>\n new Intl.Collator(\n arg.locale ?? DEFAULT_LANGUAGE\n ).compare(a.name, b.name)\n )\n };\n }\n }),\n categorySearch: builder.query<\n CategorySearchApiResponse,\n CategorySearchRequest\n >({\n query: (request) =>\n `/api/webapi/discover/category-search?${qs.stringify(request)}`\n })\n })\n});\n\nexport type Category = z.infer;\n\nexport const { useCategorySearchQuery, useGetCategoriesQuery, usePrefetch } =\n touchwebSyiApi;\n","export enum VIEW_ITEM_STATES {\n INITIALIZING = 'INITIALIZING',\n NOT_STARTED = 'NOT_STARTED',\n ACTIVE = 'ACTIVE',\n ENDING = 'ENDING',\n ENDED = 'ENDED'\n}\n\nexport enum ITEM_STATES {\n NOT_STARTED_AUCTION = 'NOT_STARTED_AUCTION',\n NOT_STARTED_AUCTION_BIN = 'NOT_STARTED_AUCTION_BIN',\n NOT_STARTED_FIXED_PRICE = 'NOT_STARTED_FIXED_PRICE',\n ONGOING_AUCTION = 'ONGOING_AUCTION',\n ONGOING_AUCTION_BIN = 'ONGOING_AUCTION_BIN',\n ONGOING_FIXED_PRICE = 'ONGOING_FIXED_PRICE',\n ENDED_AUCTION_WITHOUT_BID = 'ENDED_AUCTION_WITHOUT_BID',\n ENDED_AUCTION_WITH_WINNING_BID = 'ENDED_AUCTION_WITH_WINNING_BID',\n ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER = 'ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER',\n ENDED_AUCTION_WITHOUT_WINNING_BID = 'ENDED_AUCTION_WITHOUT_WINNING_BID',\n ENDED_AUCTION_BIN_BOUGHT_AS_BIN = 'ENDED_AUCTION_BIN_BOUGHT_AS_BIN',\n ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER = 'ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER',\n ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER = 'ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER',\n ENDED_FIXED_PRICE = 'ENDED_FIXED_PRICE',\n ENDED_CANCELLED = 'ENDED_CANCELLED',\n UNKNOWN = 'UNKNOWN'\n}\n","import { logger } from 'packages/logger';\nimport TRANSACTION_TYPES from 'tradera/constants/transaction-types';\nimport ITEM_TYPES from 'tradera/constants/item-types';\nimport { ITEM_STATES } from './constants';\n\nconst getEndedItemState = (\n itemType: ITEM_TYPES,\n bidCount: number,\n reservePriceReached: boolean,\n nextValidBidAmount: number,\n transactionType?: TRANSACTION_TYPES,\n leadingBidMemberId?: number,\n isCancelled?: boolean\n): ITEM_STATES => {\n if (isCancelled) {\n return ITEM_STATES.ENDED_CANCELLED;\n }\n\n const isAuction = itemType === ITEM_TYPES.AUCTION;\n const isAuctionBin = itemType === ITEM_TYPES.AUCTION_BIN;\n const isPureBin = itemType === ITEM_TYPES.PURE_BIN;\n const isShopItem = itemType === ITEM_TYPES.SHOP_ITEM;\n\n // transactionType may not be set if feature-toggle 'always-enrich-with-transactiontype' is off in WebApi.\n if (isAuctionBin) {\n switch (transactionType) {\n case TRANSACTION_TYPES.AUCTION:\n return ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID;\n case TRANSACTION_TYPES.BIN:\n return ITEM_STATES.ENDED_AUCTION_BIN_BOUGHT_AS_BIN;\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ENDED:\n return ITEM_STATES.ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER;\n }\n }\n if (isPureBin) {\n switch (transactionType) {\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ACTIVE:\n return ITEM_STATES.ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER;\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ENDED:\n return ITEM_STATES.ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER;\n }\n }\n if (isAuction) {\n switch (transactionType) {\n case TRANSACTION_TYPES.AUCTION:\n return ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID;\n case TRANSACTION_TYPES.PURCHASE_OFFER_ON_ENDED:\n return ITEM_STATES.ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER;\n }\n }\n\n // When transactionType is not available (feature toggle is off), we can still figure out\n // that the item was bought with buy-it-now price if there are no bids and a leading bidder exist.\n if (\n !transactionType &&\n isAuctionBin &&\n bidCount === 0 &&\n reservePriceReached &&\n leadingBidMemberId\n ) {\n return ITEM_STATES.ENDED_AUCTION_BIN_BOUGHT_AS_BIN;\n }\n\n if ((isAuction || isAuctionBin) && bidCount === 0) {\n return ITEM_STATES.ENDED_AUCTION_WITHOUT_BID;\n }\n if (bidCount > 0 && !reservePriceReached) {\n return ITEM_STATES.ENDED_AUCTION_WITHOUT_WINNING_BID;\n }\n if (bidCount > 0 && reservePriceReached) {\n return ITEM_STATES.ENDED_AUCTION_WITH_WINNING_BID;\n }\n if (isPureBin || isShopItem) {\n return ITEM_STATES.ENDED_FIXED_PRICE;\n }\n logger(\n `Unknown ended state for parameters: ${JSON.stringify({\n itemType,\n bidCount,\n reservePriceReached,\n nextValidBidAmount\n })}`\n );\n return ITEM_STATES.UNKNOWN;\n};\n\nconst getOngoingItemState = (itemType: ITEM_TYPES): ITEM_STATES => {\n if (itemType === ITEM_TYPES.AUCTION) {\n return ITEM_STATES.ONGOING_AUCTION;\n }\n if (itemType === ITEM_TYPES.AUCTION_BIN) {\n return ITEM_STATES.ONGOING_AUCTION_BIN;\n }\n if (itemType === ITEM_TYPES.PURE_BIN || itemType === ITEM_TYPES.SHOP_ITEM) {\n return ITEM_STATES.ONGOING_FIXED_PRICE;\n }\n logger(\n `Unknown ongoing state for parameters: ${JSON.stringify({\n itemType\n })}`\n );\n return ITEM_STATES.UNKNOWN;\n};\n\nconst getNotStartedItemState = (itemType: ITEM_TYPES): ITEM_STATES => {\n if (itemType === ITEM_TYPES.AUCTION) {\n return ITEM_STATES.NOT_STARTED_AUCTION;\n }\n if (itemType === ITEM_TYPES.AUCTION_BIN) {\n return ITEM_STATES.NOT_STARTED_AUCTION_BIN;\n }\n if (itemType === ITEM_TYPES.PURE_BIN || itemType === ITEM_TYPES.SHOP_ITEM) {\n return ITEM_STATES.NOT_STARTED_FIXED_PRICE;\n }\n logger(\n `Unknown not started state for parameters: ${JSON.stringify({\n itemType\n })}`\n );\n return ITEM_STATES.UNKNOWN;\n};\n\nexport const getItemState = (\n hasEnded: boolean,\n hasStarted: boolean,\n itemType: ITEM_TYPES,\n bidCount: number,\n reservePriceReached: boolean,\n nextValidBidAmount: number,\n transactionType?: TRANSACTION_TYPES,\n leadingBidMemberId?: number,\n isCancelled?: boolean\n) => {\n if (hasEnded) {\n return getEndedItemState(\n itemType,\n bidCount,\n reservePriceReached,\n nextValidBidAmount,\n transactionType,\n leadingBidMemberId,\n isCancelled\n );\n }\n\n if (!hasStarted) {\n return getNotStartedItemState(itemType);\n }\n\n return getOngoingItemState(itemType);\n};\n","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","timestamp","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","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","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","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","fetchClassificationFromFirstImage","createAsyncThunk","qs","fetchPredictionsFromImages","_","_ref2","selectPreferredLanguageCode","existingShortDescription","selectShortDescription","existingLongDescription","selectLongDescription","isModalFeatureToggleEnabled","selectIsFeatureEnabled","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","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","setCategoryAttributeOption","attributeId","optionValue","activate","o","_state$draftAttribute","_state$draftAttribute2","_a$options","_a$options2","draftAttributeValues","tav","resetSelectedAttributes","_attribute$options","option","_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","resetLongDescription","_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","fulfilled","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","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","Text","polyRef","forwardRef","ref","_ref$as","as","Component","_ref$size","size","children","align","className","fontWeight","fontStyle","font","nowrap","props","_objectWithoutProperties","_excluded","_jsx","classNames","styles","wrapper","DropdownButton","React","forwardedRef","fluid","isOpen","iconClassName","_ref$theme","theme","nonBrandedText","iconRight","DropdownIcon","fixedIcon","ArrowDownIcon","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","CategorySchema","z","object","string","number","isLeaf","boolean","CategorySuggestionSchema","matchedItemCount","CategoriesAndSuggestionsSchema","categories","array","suggestions","optional","touchwebSyiApi","httpClientBaseQuery","client","getCategories","_ref$categoryId","_ref$currentLevel","currentLevel","levelToSearch","_meta","arg","parse","sort","b","_arg$locale","Intl","Collator","locale","DEFAULT_LANGUAGE","compare","categorySearch","request","useCategorySearchQuery","useGetCategoriesQuery","usePrefetch","getItemState","hasEnded","hasStarted","bidCount","reservePriceReached","nextValidBidAmount","transactionType","leadingBidMemberId","isCancelled","getEndedItemState","ENDED_CANCELLED","isAuction","ITEM_TYPES","AUCTION","isAuctionBin","AUCTION_BIN","isPureBin","isShopItem","SHOP_ITEM","TRANSACTION_TYPES","BIN","ENDED_AUCTION_BIN_BOUGHT_AS_BIN","PURCHASE_OFFER_ON_ENDED","ENDED_AUCTION_BIN_SOLD_THROUGH_PURCHASE_OFFER","PURCHASE_OFFER_ON_ACTIVE","ENDED_PURE_BIN_SOLD_THROUGH_PURCHASE_OFFER","ENDED_AUCTION_SOLD_THROUGH_PURCHASE_OFFER","ENDED_AUCTION_WITHOUT_BID","ENDED_AUCTION_WITHOUT_WINNING_BID","ENDED_FIXED_PRICE","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","URL_LANGUAGES","I18N_FRONTEND_NAMESPACES","I18N_BACKEND_NAMESPACES","SUPPORTED_LANGUAGES","TRANS_SUFFIX"],"sourceRoot":""}