{"version":3,"sources":["webpack:///./Avensia.Common/Features/Shared/SlideIn/index.tsx","webpack:///./Avensia.Common/Features/Shared/Panel/index.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/Carousel.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/Navigation.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/SlideIndexMarkers.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/ElementDimensions.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/CommonCarousel.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/Bullet.tsx","webpack:///./Avensia.Common/Features/Shared/Carousel/index.tsx","webpack:///./Avensia.Common/Features/Shared/ProductsPanel/index.tsx","webpack:///./Avensia.Common/Features/Checkout/ProductsPanel/Item.tsx","webpack:///./Avensia.Common/Features/Checkout/ProductsPanel/utils.tsx","webpack:///./Avensia.Common/Features/Checkout/Pages/Checkout/Cover.tsx","webpack:///./Avensia.Common/Features/Checkout/Pages/OrderConfirmation/UpsellProducts.tsx","webpack:///./Avensia.Common/Features/Checkout/ProductsPanel/ItemUpsell.tsx","webpack:///./Avensia.Common/Features/Checkout/Pages/OrderConfirmation/OrderConfirmationPage.tsx"],"names":["DEFAULT_SCALE","DEFAULT_ROTATE","DEFAULT_OPACITY","SlideIn","isOpen","children","scaleX","onCloseEnd","transform","opacity","CloseType","CompactBase","className","style","onTransitionEnd","display","flexDirection","position","top","left","height","width","backgroundColor","zIndex","Panel","property","duration","ExtensiveBase","props","css","right","bottom","marginLeft","marginRight","marginTop","marginBottom","maxWidth","maxHeight","Header","header","theme","primaryColor","alignItems","flexShrink","color","paddingLeft","Heading","div","flexGrow","fontSize","fontWeight","textTransform","Body","overflowY","ActionButton","Button","paddingRight","BackIcon","Back","verticalAlign","state","contentDisplay","toggleContentDisplay","setState","closeCompletely","keyDown","e","keyCode","onClose","UNSAFE_componentWillMount","this","componentDidMount","window","addEventListener","componentWillUnmount","scrollFreeze","removeEventListener","freeze","unfreezeScroll","componentDidUpdate","prevProps","currentBreakpoint","Medium","requestAnimationFrame","render","appendToDOM","panelProps","panelHeader","title","onClick","variant","None","appearance","Bare","closeType","Close","panelBody","minHeight","Viewport","isCompact","compose","Overlay","enabled","Component","connect","AnimationStyle","Variant","Container","whiteSpace","SWIPE_THRESHOLD","lastDeltaX","lastDir","offsetDeltaX","slideWillChange","goToSlide","index","continuous","Math","min","itemCount","slidesPerPage","max","currentSlide","translateX","getTranslateX","onSlideChange","getAbsoluteIndex","goBack","steps","goForward","onSwiping","deltaX","velocity","disabled","items","length","isResting","diff","dir","sign","sameDir","onSwiped","currentDeltaX","slideWidth","onRest","onSwipeRest","carouselWidth","slideWidthPercent","Children","toArray","concat","itemCountUnique","itemCountCloned","setUpAutoSlide","clearInterval","autoSlideTimer","autoSlideTime","undefined","document","hidden","setInterval","componentWillReceiveProps","nextProps","hasNewSlideIndex","hasNewCarouselWidth","hasNewSlideWidth","hasNewSlidesAdded","slideShouldMoveToFront","itemCountToMoveToFront","isFirstHalf","isActiveSlideInFirstHalf","activeSlideIsInFront","slideIsInOtherHalf","indexOffsetFromEnd","getSlideTransformPercent","slideIndex","floor","thisSlidIsInFirstHalf","getLoopCount","getSpringConfig","animationStyle","Gentle","stiffness","damping","precision","noWobble","motionStyle","innerRef","elementRef","delta","trackTouch","interpolatedStyle","margin","padding","listStyle","map","item","key","flexBasis","onSlideClick","defaultProps","PureComponent","uniqueItemCount","Direction","SlideContainer","justifyContent","SlideContainerActive","pointerEvents","SlideIndex","isActive","Div","x","border","y","radius","cursor","boxShadow","restProps","SlideIndexActive","onSlideIndexClick","relativeIndex","activeSlideIndex","Array","nbrOfSlides","fill","i","Tray","mounted","unsubscribeResize","el","measureElement","onDimensionChange","dimensions","getElementDimensions","getBoundingClientRect","initialDimensions","Base","CarouselBase","overflow","ButtonContainer","SiteBanner","handleKeyPress","goPrev","goNext","nbrOfItems","isFirstSlide","isLastSlide","dimensionsProp","hideNavigationButtons","Navigation","direction","Prev","offset","navigationOffset","Next","hideIndexMarkers","borderRadius","svg","circle","transition","visibility","xy","userSelect","noRippleEffect","slideQuantityToShow","addToCart","code","product","variantCode","existingItem","find","isGift","quantity","ticket","hasPromotion","hasDiscount","isNew","averageRating","imageUrls","displayName","price","brand","url","isUpsellModal","hasMultipleVariants","current","original","topProps","productHasDiscount","imageUrl","currency","currentPrice","upsell","bottomProps","button","lineHeight","textOverflow","to","Primary","Full","Text","inStock","ContentLink","linkIdentifier","Top","Bottom","TopBase","backgroundImage","discountPercentage","src","alt","itemProp","preset","includes","Tiny","ratio","OneToOne","RatingsPlaceholder","Ratings","average","spacing","Normal","size","discount","Fragment","Title","Prices","round","priceType","New","Regular","Old","SaveUpsellTextContainer","SaveUpsellText","UpsellAll","UpsellModalItemBase","Wrapper","ImagePriceWrapper","ImageModal","TitlePriceWrapper","TitleModal","TinySaveText","Arrow","cart","dispatch","Item","flexFlow","flex","grow","shrink","basis","textAlign","textColor","wordBreak","WebkitLineClamp","WebkitBoxOrient","span","letterSpacing","minWidth","clipPath","paddingBottom","getProduct","esalesProduct","variation","Element","setCoverRef","element","elementContainerRef","visibleElement","appendChild","ref","PriceType","upsellAllProps","buttonApperance","selected","Upsell","toggleSelect","onSelect","checkBoxSelect","CheckBox","checkBoxSelectModal","CheckBoxModal","ContentUpsellModal","ButtonWrapper","Content","borderBottom","alignSelf","alignContent","getProductsPriceSum","products","mode","reduce","accum","currVal","getTimeLeft","availableUntilTimestamp","timeOffset","Date","getTime","now","panelRef","createRef","currentServerTimestamp","updateOrderProducts","selectedProduct","prevState","orderProducts","isSelected","filter","timerTimeIsUp","timeIsUp","toggleUpsellViewAllModal","upsellViewAllModalOpen","confirmOrder","preventDefault","feedback","push","sendRequest","lockMode","codes","tickets","requestUrl","pathname","query","id","orderGroupId","includeAppShellData","upsellFail","Promise","reject","timeLeft","setTimeout","FAILED_TEXT_VISIBLE_DELAY","startTimer","stopTimer","timer","Boolean","getTotalPrice","getTotalUpsellSavings","Original","getAddText","addText","culture","count","total","savings","upsellProducts","confirmText","introText","subTitle","FeedbackButton","feedbackButtonStyle","upsellModalCardStyle","ONE_MINUTE","num","twoDigits","n","String","formatTime","Section","TimesUpBody","timeIsUpText","FailedText","failedText","SubTitle","substring","indexOf","OpenModalButton","TimeMessage","UpsellViewAllModalContent","ConfirmSection","ProductsPanel","navigationOffsetWidth","CARD_WIDTH","MOBILE_CARDS","DESKTOP_CARDS","Cover","appShellData","upsellOrderComplete","orderConfirmation","behavior","KeepEnabled","textStyle","borderColor","textDecoration","section","OrderDetails","OrderDetailsText","ProductDetails","ProductRow","ProductImage","mixBlendMode","ProductDescription","ProductDescriptionMobile","ProductDescriptionHeader","ProductTitle","Quantity","QuantityHeader","PaymentDetails","PaymentDetailsRow","PaymentLabel","StyledPrice","Price","UnitPriceHeader","UnitPrice","TotalUnitsPriceHeader","TotalUnitsPrice","BasePrice","TotalPrice","PriceWrapperMobile","ProductRowsWrapperMobile","InnerWrapper","orderValue","setOrderValue","programID","setProgramID","orderNumber","discountCodes","billingAddress","trackIDCookie","getCookieData","trackID","parseInt","discountedCodes","adRecordData","couponCode","appendAdRecordScript","tp","trustpilot_invitation","recipientEmail","email","recipientName","firstName","referenceId","source","orderDetails","orderLineItems","sum","lineItem","hostName","hostname","domainID","split","toLowerCase","t","cookie","r","p","data","adrecord","orderID","isMobile","paymentMethodName","paymentType","shippingMethodName","paymentFee","totalPrice","shippingFee","tradedoublerIFrame","tradedoublerViewModel","organization","event","tduid","voucher","reportInfo","frameBorder","loading","Narrow","page","upsellTitle","upsellSubTitle","upsellAddText","upsellIntroText","upsellConfirmText","upsellTimeIsUpText","upsellFailedText","upsellAvailableUntilTimestamp","upsellOrderGroupId","trackingInformationTransaction","emailAddress","instaboxDeliveryPoint","order","productName","productUrl","listPrice"],"mappings":"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","file":"assets/27.chunk.7c1214d93a90c87d5ca0.js","sourcesContent":["import React from 'react';\r\nimport { isIOS } from '@avensia/scope/device-type';\r\n\r\nconst DEFAULT_SCALE = 0.8;\r\nconst DEFAULT_ROTATE = 20;\r\nconst DEFAULT_OPACITY = 0;\r\n\r\ntype PropType = {\r\n isOpen: boolean;\r\n children?: (style: React.CSSProperties, onCloseEnd: () => void) => React.ReactElement;\r\n scaleX?: boolean;\r\n onCloseEnd?: () => void;\r\n};\r\n\r\nexport default function SlideIn({ isOpen, scaleX = true, children, onCloseEnd }: PropType) {\r\n return children(\r\n {\r\n transform: isIOS()\r\n ? `scale(${isOpen ? 1 : DEFAULT_SCALE})`\r\n : `perspective(40cm) scale(${isOpen ? 1 : DEFAULT_SCALE}) rotateX(${isOpen ? 0 : DEFAULT_ROTATE}deg)`,\r\n opacity: isOpen ? 1 : DEFAULT_OPACITY,\r\n },\r\n onCloseEnd,\r\n );\r\n}\r\n","import React from 'react';\r\nimport { styled, StyledProps, StyledElementProps, applyClassName } from '@glitz/react';\r\nimport { ESC_KEY, Breakpoint } from '@avensia/scope';\r\nimport Button, { Appearance as ButtonAppearance, Variant as ButtonVariant } from 'Shared/Button';\r\nimport SlideIn from 'Shared/SlideIn';\r\nimport Close from 'Shared/Icon/Close';\r\nimport Back from 'Shared/Icon/Back';\r\nimport Overlay, { closeOpenOverlay } from 'Shared/Overlay';\r\nimport Viewport from 'Shared/Viewport';\r\nimport { ZIndex, large, depth, white, zeta, pixelsToUnit, transition } from 'Shared/Style';\r\nimport connect from 'Shared/connect';\r\nimport freezeScroll from 'Shared/freeze-scroll';\r\n\r\nexport enum CloseType {\r\n Close,\r\n Back,\r\n}\r\n\r\ntype ConnectStateType = {\r\n currentBreakpoint: number;\r\n};\r\n\r\ntype BasePropType = StyledProps & {\r\n isOpen: boolean;\r\n maxWidth: string;\r\n maxHeight: string;\r\n onCloseEnd?: () => void;\r\n};\r\n\r\nexport type StrictPropType = StyledProps & {\r\n isOpen?: boolean;\r\n maxWidth?: string;\r\n maxHeight?: string;\r\n};\r\n\r\nexport type PropType = StyledProps &\r\n StrictPropType &\r\n ConnectStateType & {\r\n title?: string;\r\n action?: React.StatelessComponent | React.ComponentClass;\r\n onClose: () => void;\r\n onCloseEnd?: () => void;\r\n closeType?: CloseType;\r\n };\r\n\r\nconst Transition: React.StatelessComponent = ({\r\n className,\r\n isOpen,\r\n children,\r\n onCloseEnd,\r\n}) => (\r\n \r\n {(style: React.CSSProperties) => (\r\n
\r\n {children}\r\n
\r\n )}\r\n
\r\n );\r\n\r\nconst HEADER_HEIGHT = 50;\r\nconst CompactBase = styled(applyClassName(Transition), {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n backgroundColor: 'white',\r\n zIndex: ZIndex.Panel,\r\n ...transition({\r\n property: ['opacity', 'transform'],\r\n duration: '300ms',\r\n }),\r\n});\r\n\r\nconst ExtensiveBase = styled((props: BasePropType) => (\r\n \r\n));\r\n\r\nconst Header = styled.header({\r\n backgroundColor: theme => theme.primaryColor,\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexShrink: 0,\r\n color: white,\r\n paddingLeft: '20px',\r\n height: pixelsToUnit(HEADER_HEIGHT),\r\n});\r\n\r\nconst Heading = styled.div({\r\n flexGrow: 1,\r\n fontSize: zeta,\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase',\r\n});\r\n\r\n// Using flexbox here helps us growing children to\r\n// full height in some cases\r\nconst Body = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n height: '100%',\r\n position: 'relative',\r\n overflowY: 'auto',\r\n});\r\n\r\nconst ActionButton = styled(Button, {\r\n paddingRight: '20px',\r\n});\r\n\r\nconst BackIcon = styled(Back, {\r\n width: pixelsToUnit(10.2),\r\n height: pixelsToUnit(17.6),\r\n verticalAlign: 'middle',\r\n});\r\n\r\nexport const StrictPanel = (props: StrictPropType) => {\r\n // @ts-ignore: type 'typeof globalThis' has no index signature\r\n const isOpen = !!this.props.isOpen;\r\n const panelProps = {\r\n isOpen,\r\n maxWidth: props.maxWidth,\r\n maxHeight: props.maxHeight,\r\n };\r\n return (\r\n \r\n {(isCompact: boolean) =>\r\n isCompact ? (\r\n // @ts-ignore: type 'typeof globalThis' has no index signature\r\n {this.props.children}\r\n ) : (\r\n \r\n // @ts-ignore: type 'typeof globalThis' has no index signature\r\n {this.props.children}\r\n \r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\ntype StateType = {\r\n contentDisplay: boolean;\r\n};\r\nclass Panel extends React.Component {\r\n unfreezeScroll: () => void;\r\n state: StateType = {\r\n contentDisplay: false,\r\n };\r\n UNSAFE_componentWillMount() {\r\n if (this.props.isOpen) {\r\n closeOpenOverlay();\r\n }\r\n }\r\n componentDidMount() {\r\n window.addEventListener('keydown', this.keyDown);\r\n }\r\n componentWillUnmount() {\r\n this.scrollFreeze(false);\r\n window.removeEventListener('keydown', this.keyDown);\r\n }\r\n scrollFreeze(freeze: boolean) {\r\n if (this.unfreezeScroll) {\r\n this.unfreezeScroll();\r\n }\r\n this.unfreezeScroll = freeze ? freezeScroll() : null;\r\n }\r\n toggleContentDisplay = () => {\r\n this.setState({\r\n contentDisplay: this.props.isOpen,\r\n });\r\n };\r\n closeCompletely = () => {\r\n if (!this.props.isOpen) {\r\n this.toggleContentDisplay();\r\n }\r\n if (this.props.onCloseEnd) {\r\n this.props.onCloseEnd();\r\n }\r\n };\r\n componentDidUpdate(prevProps: PropType) {\r\n if (prevProps.isOpen !== this.props.isOpen) {\r\n if (this.props.currentBreakpoint < Breakpoint.Medium) {\r\n this.scrollFreeze(this.props.isOpen);\r\n }\r\n if (this.props.isOpen) {\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n this.toggleContentDisplay();\r\n });\r\n });\r\n }\r\n }\r\n }\r\n keyDown = (e: KeyboardEvent) => {\r\n if (e.keyCode === ESC_KEY && this.props.isOpen) {\r\n this.props.onClose();\r\n }\r\n };\r\n\r\n render() {\r\n const { contentDisplay } = this.state;\r\n const { maxWidth, maxHeight, isOpen } = this.props;\r\n const appendToDOM = isOpen ? isOpen : contentDisplay;\r\n const displayPanel = isOpen ? contentDisplay : isOpen;\r\n const panelProps = {\r\n isOpen: displayPanel,\r\n maxWidth,\r\n maxHeight,\r\n onCloseEnd: this.closeCompletely,\r\n };\r\n const panelHeader = this.props.title && (\r\n
\r\n {this.props.title}\r\n \r\n {this.props.closeType && this.props.closeType === CloseType.Back ? : }\r\n \r\n
\r\n );\r\n const panelBody = (\r\n \r\n {this.props.children}\r\n \r\n );\r\n return (\r\n \r\n {(isCompact: boolean) =>\r\n appendToDOM &&\r\n (isCompact ? (\r\n \r\n {panelHeader}\r\n {panelBody}\r\n \r\n ) : (\r\n \r\n \r\n {panelHeader}\r\n {panelBody}\r\n \r\n \r\n ))\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default styled(\r\n connect(\r\n (state): ConnectStateType => ({\r\n currentBreakpoint: state.currentBreakpoint,\r\n }),\r\n )(Panel),\r\n);\r\n","import React from 'react';\r\nimport { Motion, spring, OpaqueConfig, presets } from 'react-motion';\r\nimport { Swipeable } from 'react-swipeable';\r\nimport { styled, applyClassName } from '@glitz/react';\r\n\r\nexport enum AnimationStyle {\r\n Default,\r\n Gentle,\r\n}\r\n\r\nexport enum Variant {\r\n Variation,\r\n HtmlBlock,\r\n}\r\n\r\ntype Props = {\r\n currentSlide: number;\r\n onSlideChange?: (index: number) => void;\r\n className?: string;\r\n elementRef: (element: HTMLElement) => void;\r\n carouselWidth: number;\r\n slidesPerPage: number;\r\n autoSlideTime?: number;\r\n continuous?: boolean;\r\n disabled?: boolean;\r\n animationStyle?: AnimationStyle;\r\n children?: React.ReactNode;\r\n variant?: Variant;\r\n center?: boolean;\r\n height?: string;\r\n backgroundColor?: string;\r\n assumedImageWidth?: number;\r\n onSwipeRest?: () => void;\r\n onSlideClick?: (index: number) => void;\r\n};\r\n\r\ntype State = {\r\n translateX: number;\r\n currentSlide: number;\r\n items: React.ReactNode[];\r\n};\r\n\r\ntype PlainStyleType = {\r\n translateX: TValue;\r\n};\r\n\r\nconst Container = styled.div({\r\n display: 'block',\r\n whiteSpace: 'nowrap',\r\n});\r\n\r\nconst DELTA = 3;\r\nconst SWIPE_THRESHOLD = 25;\r\n\r\nclass Carousel extends React.PureComponent {\r\n autoSlideTimer: number;\r\n slideWidth: number;\r\n slideWidthPercent: number;\r\n itemCountUnique: number;\r\n itemCountCloned: number;\r\n isResting: boolean;\r\n container: Element;\r\n lastDeltaX = 0;\r\n lastDir = 0;\r\n offsetDeltaX = 0;\r\n slideWillChange = 0;\r\n\r\n static defaultProps = {\r\n slidesPerPage: 1,\r\n };\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n this.slideWidth = props.carouselWidth / props.slidesPerPage;\r\n this.slideWidthPercent = 100 / props.slidesPerPage;\r\n\r\n let children = React.Children.toArray(this.props.children);\r\n const items = this.props.continuous ? children.concat(children) : children;\r\n this.itemCountUnique = children.length;\r\n this.itemCountCloned = items.length;\r\n\r\n this.isResting = true;\r\n this.itemCount = children.length;\r\n\r\n this.state = {\r\n translateX: 0,\r\n items,\r\n currentSlide: this.props.currentSlide ? this.props.currentSlide : 0,\r\n };\r\n }\r\n\r\n itemCount: number;\r\n\r\n componentDidMount() {\r\n this.setState({\r\n translateX: this.getTranslateX(this.props.currentSlide),\r\n });\r\n this.setUpAutoSlide();\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.autoSlideTimer);\r\n }\r\n\r\n setUpAutoSlide() {\r\n const { autoSlideTime, disabled } = this.props;\r\n if (\r\n !disabled &&\r\n this.state.items.length > 1 &&\r\n typeof autoSlideTime === 'number' &&\r\n autoSlideTime > 0 &&\r\n document.hidden !== undefined\r\n ) {\r\n this.autoSlideTimer && clearInterval(this.autoSlideTimer);\r\n this.autoSlideTimer = setInterval(() => {\r\n this.goForward(1);\r\n }, autoSlideTime);\r\n\r\n //Prevent autosliding when browser window is hidden\r\n document.addEventListener(\r\n 'visibilitychange',\r\n () => {\r\n if (document.hidden) {\r\n clearInterval(this.autoSlideTimer);\r\n } else {\r\n this.setUpAutoSlide();\r\n }\r\n },\r\n false,\r\n );\r\n }\r\n }\r\n\r\n getTranslateX(currentSlide: number) {\r\n return !this.props.disabled ? currentSlide * -this.slideWidth : 0;\r\n }\r\n\r\n componentWillReceiveProps(nextProps: Props) {\r\n const hasNewSlideIndex = nextProps.currentSlide !== this.state.currentSlide;\r\n const hasNewCarouselWidth = nextProps.carouselWidth !== this.props.carouselWidth;\r\n const hasNewSlideWidth = nextProps.slidesPerPage !== this.props.slidesPerPage;\r\n const hasNewSlidesAdded =\r\n React.Children.toArray(nextProps.children).length !== React.Children.toArray(this.props.children).length;\r\n\r\n if (hasNewCarouselWidth || hasNewSlideWidth) {\r\n this.slideWidth = nextProps.carouselWidth / nextProps.slidesPerPage;\r\n this.slideWidthPercent = 100 / nextProps.slidesPerPage;\r\n }\r\n if (hasNewSlideIndex) {\r\n this.setState({\r\n currentSlide: nextProps.currentSlide,\r\n translateX: this.getTranslateX(nextProps.currentSlide),\r\n });\r\n }\r\n if (hasNewSlideIndex || hasNewCarouselWidth || hasNewSlideWidth) {\r\n if (!hasNewSlidesAdded && !hasNewCarouselWidth && !hasNewSlideWidth) {\r\n this.isResting = false;\r\n }\r\n this.setUpAutoSlide();\r\n this.setState({ translateX: this.getTranslateX(nextProps.currentSlide) });\r\n }\r\n if (hasNewSlidesAdded) {\r\n const children = React.Children.toArray(nextProps.children);\r\n //Duplicate the slides if the carousel should be able to loop:\r\n const items = nextProps.continuous ? children.concat(children) : children;\r\n\r\n this.itemCountUnique = children.length;\r\n this.itemCountCloned = items.length;\r\n\r\n this.isResting = true;\r\n\r\n this.setState({\r\n items,\r\n translateX: this.getTranslateX(nextProps.currentSlide),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * To enable looping and to have enough items to break out of page container we duplicate all items in array.\r\n * When we navigate in the carousel we are moving the container first and foremost.\r\n * Let's say we have X unique items.\r\n * Since we support looping, we will run out of slides to show when we are have navigated X*2 times.\r\n * To overcome this we are moving all individual items X*2 * 100 percent at this stage. No it's looping!\r\n * We also want to have slides visible at the right hand side all the time so when we have stepped X times we will move\r\n * the X first slides to the right so that our two duplicate halves of slides will rotate.\r\n * Since we want to have our start slide aligned with the left hand side of the page container and items are\r\n * flowing right we need slides to move infront of the first slide. We handle this with slideShouldMoveToFront method.\r\n */\r\n slideShouldMoveToFront(index: number) {\r\n // We visibly move items from the end of the non-active half to before the active half.\r\n const itemCountToMoveToFront = this.itemCountUnique > 2 ? 2 : 1;\r\n const isFirstHalf = this.isActiveSlideInFirstHalf();\r\n const activeSlideIsInFront =\r\n getAbsoluteIndex(this.state.currentSlide, this.itemCountUnique) < itemCountToMoveToFront;\r\n const slideIsInOtherHalf =\r\n (isFirstHalf && index >= this.itemCountUnique) || (!isFirstHalf && index < this.itemCountUnique);\r\n const indexOffsetFromEnd = (isFirstHalf ? this.itemCountCloned : this.itemCountUnique) - 1 - index;\r\n return activeSlideIsInFront && slideIsInOtherHalf && indexOffsetFromEnd < itemCountToMoveToFront;\r\n }\r\n getSlideTransformPercent(slideIndex: number) {\r\n if (!this.props.continuous) {\r\n return 0;\r\n }\r\n\r\n // When all slides have passed, move them all forward so index point on first item. Enables looping.\r\n const itemCountClonedLoopCount = Math.floor(this.state.currentSlide / this.itemCountCloned);\r\n let steps = itemCountClonedLoopCount * this.itemCountCloned;\r\n\r\n /* When the half of them items has passed move it back so that our two halfs will rotate being \"active\".\r\n Balances out the slides so that we have slides in viewport all the time. */\r\n const thisSlidIsInFirstHalf = slideIndex < this.itemCountUnique;\r\n if (!this.isActiveSlideInFirstHalf() && thisSlidIsInFirstHalf) {\r\n steps += this.itemCountCloned;\r\n }\r\n\r\n /* At the start of every loop we need to move some slides to the front of first slide.\r\n Some carousels breakout of container and needs slides before active slide all the time */\r\n if (this.slideShouldMoveToFront(slideIndex)) {\r\n steps -= this.itemCountCloned;\r\n }\r\n return steps * 100;\r\n }\r\n getLoopCount() {\r\n // 1 loop means when all the unique items has passed\r\n return this.itemCountUnique < 1 ? 0 : Math.floor(this.props.currentSlide / this.itemCountUnique);\r\n }\r\n isActiveSlideInFirstHalf() {\r\n return this.getLoopCount() % 2 === 0;\r\n }\r\n\r\n goToSlide = (index: number) => {\r\n if (!this.props.continuous) {\r\n index = Math.min(index, this.itemCount - this.props.slidesPerPage);\r\n index = Math.max(index, 0);\r\n }\r\n this.setState({\r\n currentSlide: index,\r\n translateX: this.getTranslateX(index),\r\n });\r\n this.props.onSlideChange && this.props.onSlideChange(getAbsoluteIndex(index, this.itemCount));\r\n };\r\n goBack = (steps: number) => {\r\n this.goToSlide(this.state.currentSlide - steps);\r\n };\r\n goForward = (steps: number) => {\r\n this.goToSlide(this.state.currentSlide + steps);\r\n };\r\n\r\n onSwiping = ({ deltaX, velocity }: { deltaX: number; velocity: number }) => {\r\n if (!!this.props.disabled || this.state.items.length <= 1) return;\r\n this.isResting = false;\r\n const { translateX } = this.state;\r\n const diff = deltaX - this.lastDeltaX;\r\n const dir = Math.sign(diff);\r\n const sameDir = dir === this.lastDir || dir === 0;\r\n if (dir !== 0) this.lastDir = dir;\r\n //If the user changes direction, use this point as the new starting point for calculating whether to trigger a slide change\r\n if (!sameDir) {\r\n this.offsetDeltaX = this.lastDeltaX;\r\n }\r\n this.lastDeltaX = deltaX;\r\n this.setState({\r\n translateX: translateX - diff,\r\n });\r\n };\r\n\r\n onSwiped = ({ deltaX, velocity }: { deltaX: number; velocity: number }) => {\r\n if (!!this.props.disabled || this.state.items.length <= 1) return;\r\n const currentDeltaX = deltaX - this.offsetDeltaX;\r\n //Trigger a slide change if swiped over the middle of the carousel, or swipe is fast or long enough:\r\n if (\r\n deltaX < -this.slideWidth / 2 ||\r\n (currentDeltaX < -SWIPE_THRESHOLD && velocity * velocity * currentDeltaX < -2 * SWIPE_THRESHOLD)\r\n ) {\r\n this.goBack(1);\r\n } else if (\r\n deltaX > this.slideWidth / 2 ||\r\n (currentDeltaX > SWIPE_THRESHOLD && velocity * velocity * currentDeltaX > 2 * SWIPE_THRESHOLD)\r\n ) {\r\n this.goForward(1);\r\n } else {\r\n this.setState({\r\n translateX: this.getTranslateX(this.state.currentSlide),\r\n });\r\n }\r\n this.lastDeltaX = 0;\r\n this.offsetDeltaX = 0;\r\n };\r\n\r\n getSpringConfig() {\r\n if (this.props.animationStyle === AnimationStyle.Gentle) {\r\n return {\r\n stiffness: 180,\r\n damping: 25,\r\n precision: 0.01,\r\n };\r\n }\r\n return presets.noWobble;\r\n }\r\n\r\n onRest = () => {\r\n this.isResting = true;\r\n this.props.onSwipeRest && this.props.onSwipeRest();\r\n };\r\n\r\n render() {\r\n const motionStyle: PlainStyleType = {\r\n translateX: this.isResting ? this.state.translateX : spring(this.state.translateX, this.getSpringConfig()),\r\n };\r\n\r\n return (\r\n 1}\r\n style={{ height: this.props.height || 'auto' }}\r\n >\r\n \r\n {(interpolatedStyle) => (\r\n \r\n {React.Children.toArray(this.props.children).map((item, index) => {\r\n //const isActive = index % this.itemCountUnique === getAbsoluteIndex(this.state.currentSlide, this.itemCountUnique);\r\n return (\r\n \r\n this.props.onSlideClick && this.props.onSlideClick(getAbsoluteIndex(index, this.itemCountUnique))\r\n }\r\n >\r\n {item}\r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default styled(applyClassName(Carousel));\r\n\r\nexport function getAbsoluteIndex(index: number, uniqueItemCount: number) {\r\n return index < 0 ? (uniqueItemCount + (index % uniqueItemCount)) % uniqueItemCount : index % uniqueItemCount;\r\n}\r\n","import React from 'react';\r\nimport { Style } from '@glitz/type';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { transition, white, pixelsToUnit, minTinyMediaQuery } from 'Shared/Style';\r\nimport Button, { Variant as ButtonVariant, Appearance as ButtonAppearance } from 'Shared/Button';\r\nimport { Left as Prev, Right as Next } from 'Shared/Icon/Arrow';\r\n\r\nexport enum Direction {\r\n Next,\r\n Prev,\r\n}\r\n\r\ntype PropType = {\r\n onClick: (direction: Direction) => void;\r\n direction: Direction;\r\n disabled: boolean;\r\n offset?: boolean;\r\n};\r\n\r\nexport default styled((props: PropType & StyledProps) => {\r\n const { compose, disabled, offset, ...restProps } = props;\r\n const css: Style = {\r\n fontSize: pixelsToUnit(20),\r\n visibility: 'hidden',\r\n position: 'absolute',\r\n backgroundColor: white,\r\n borderRadius: '50%',\r\n padding: { xy: pixelsToUnit(5) },\r\n top: '50%',\r\n userSelect: 'none',\r\n ...transition({ property: 'opacity' }),\r\n ...(restProps.direction === Direction.Next\r\n ? {\r\n right: offset ? '-2.4rem' : 0,\r\n }\r\n : {\r\n left: offset ? '-2.4rem' : 0,\r\n }),\r\n [minTinyMediaQuery]: {\r\n visibility: 'visible',\r\n },\r\n opacity: 0.5,\r\n pointerEvents: 'auto',\r\n ...(!disabled && {\r\n cursor: 'pointer',\r\n ':hover': {\r\n opacity: 0.6,\r\n },\r\n }),\r\n ...(disabled && {\r\n cursor: 'none',\r\n opacity: 0.2,\r\n backgroundColor: 'transparent',\r\n }),\r\n };\r\n\r\n function handleClick() {\r\n restProps.onClick(restProps.direction);\r\n }\r\n\r\n return (\r\n \r\n \r\n {restProps.direction === Direction.Prev ? : }\r\n \r\n \r\n );\r\n});\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport * as style from 'Shared/Style';\r\nimport { media } from '@glitz/core';\r\n\r\ntype PropType = React.HTMLAttributes & {\r\n nbrOfSlides: number;\r\n activeSlideIndex: number;\r\n onSlideIndexClick: (relativeIndex: number) => void;\r\n} & StyledProps;\r\n\r\nconst SlideContainer = styled.div({\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n});\r\n\r\nconst SlideContainerActive = styled(SlideContainer, {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n zIndex: 1,\r\n pointerEvents: 'none',\r\n});\r\n\r\nconst SlideIndex = styled(\r\n ({ isActive, compose, ...restProps }: { isActive: boolean } & StyledProps & React.HTMLAttributes) => (\r\n \r\n ),\r\n);\r\n\r\nconst SlideIndexActive = styled(\r\n ({ isActive, compose, ...restProps }: { isActive: boolean } & StyledProps & React.HTMLAttributes) => (\r\n theme.primaryColor,\r\n opacity: 0,\r\n transform: 'scale(0.25)',\r\n ...style.transition({ property: ['opacity', 'transform'], duration: '0.5s' }),\r\n ...(isActive && {\r\n opacity: 1,\r\n transform: 'scale(1)',\r\n }),\r\n })}\r\n {...restProps}\r\n isActive={isActive}\r\n />\r\n ),\r\n);\r\n\r\nclass SlideIndexMarkers extends React.PureComponent {\r\n onSlideIndexClick = (index: number) => {\r\n const relativeIndex = index - this.props.activeSlideIndex;\r\n this.props.onSlideIndexClick(relativeIndex);\r\n };\r\n render() {\r\n return (\r\n \r\n \r\n {[...Array(this.props.nbrOfSlides).fill(1)].map((x, i) => (\r\n this.onSlideIndexClick(i)}\r\n />\r\n ))}\r\n \r\n {[...Array(this.props.nbrOfSlides).fill(1)].map((x, i) => (\r\n this.onSlideIndexClick(i)}\r\n />\r\n ))}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default styled(SlideIndexMarkers, {\r\n position: 'absolute',\r\n zIndex: style.ZIndex.Tray,\r\n bottom: style.pixelsToUnit(8),\r\n left: 0,\r\n right: 0,\r\n width: '100%',\r\n ...media('print', {\r\n display: 'none',\r\n }),\r\n});\r\n","import React, { ReactNode } from 'react';\r\n\r\ntype State = {\r\n dimensions: Dimensions;\r\n};\r\ntype Props = {\r\n children?: (args: RenderArgs) => ReactNode;\r\n onDimensionChange?: (dimensions: Dimensions) => void;\r\n};\r\ntype Dimensions = {\r\n width: number;\r\n height: number;\r\n left: number;\r\n right: number;\r\n top: number;\r\n bottom: number;\r\n};\r\ntype RenderArgs = {\r\n dimensions: Dimensions;\r\n elementRef: (el: HTMLElement) => void;\r\n};\r\n\r\nexport default class ElementDimensions extends React.PureComponent {\r\n measureElement: HTMLElement;\r\n mounted = false;\r\n unsubscribeResize = () => {};\r\n\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n dimensions: {\r\n width: null,\r\n height: null,\r\n left: null,\r\n right: null,\r\n top: null,\r\n bottom: null,\r\n },\r\n };\r\n }\r\n getElementDimensions() {\r\n return !!this.measureElement ? this.measureElement.getBoundingClientRect() : this.state.dimensions;\r\n }\r\n componentDidMount() {\r\n const initialDimensions = this.getElementDimensions();\r\n this.onDimensionChange(initialDimensions);\r\n this.setState({ dimensions: initialDimensions });\r\n\r\n window.addEventListener('resize', () => {\r\n const dimensions = this.getElementDimensions();\r\n if (this.state.dimensions !== dimensions) {\r\n this.onDimensionChange(dimensions);\r\n this.setState({ dimensions });\r\n }\r\n });\r\n }\r\n componentWillUnmount() {\r\n this.unsubscribeResize();\r\n }\r\n elementRef = (el: HTMLElement) => {\r\n this.measureElement = el;\r\n };\r\n onDimensionChange = (dimensions: Dimensions) => {\r\n this.props.onDimensionChange && this.props.onDimensionChange(dimensions);\r\n };\r\n render() {\r\n return this.props.children({ dimensions: this.state.dimensions, elementRef: this.elementRef });\r\n }\r\n}\r\n","import React, { ReactNode } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport SlideIndexMarkers from './SlideIndexMarkers';\r\nimport { Carousel, getAbsoluteIndex, AnimationStyle, Navigation, Direction } from './';\r\nimport ElementDimensions from './ElementDimensions';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype BasePropType = {\r\n height?: string;\r\n children: ReactNode;\r\n};\r\n\r\nconst Base = ({ height, children }: BasePropType) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nconst CarouselBase = styled.div({\r\n overflow: 'hidden',\r\n});\r\n\r\nconst ButtonContainer = styled.div({\r\n position: 'absolute',\r\n width: '100%',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n zIndex: style.ZIndex.SiteBanner,\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n});\r\n\r\ntype PropType = {\r\n isHero?: boolean;\r\n continuous?: boolean;\r\n disabled?: boolean;\r\n autoSlideTime?: number;\r\n hideNavigationButtons?: boolean;\r\n hideIndexMarkers?: boolean;\r\n currentSlide?: number;\r\n onSlideChange?: (index: number) => void;\r\n height?: string;\r\n backgroundColor?: string; //We could have used a glitzĀ“ styles for this, but this is easier to follow\r\n slidesPerPage?: number;\r\n navigationOffset?: boolean;\r\n};\r\n\r\ntype StateType = {\r\n currentSlide: number;\r\n};\r\n\r\nexport default class CommonCarousel extends React.Component {\r\n static defaultProps = {\r\n slidesPerPage: 1,\r\n };\r\n\r\n constructor(props: PropType) {\r\n super(props);\r\n\r\n const children = React.Children.toArray(this.props.children);\r\n this.itemCount = children.length;\r\n this.state = {\r\n currentSlide: this.props.currentSlide ? this.props.currentSlide : 0,\r\n };\r\n }\r\n\r\n itemCount: number;\r\n\r\n componentDidMount() {\r\n window.addEventListener('keydown', this.handleKeyPress);\r\n }\r\n componentWillUnmount() {\r\n window.removeEventListener('keydown', this.handleKeyPress);\r\n }\r\n\r\n componentWillReceiveProps(nextProps: PropType) {\r\n const children = React.Children.toArray(this.props.children);\r\n this.itemCount = children.length;\r\n if (nextProps.currentSlide !== this.props.currentSlide) {\r\n this.setState({\r\n currentSlide: nextProps.currentSlide ? nextProps.currentSlide : 0,\r\n });\r\n }\r\n }\r\n\r\n goToSlide = (index: number) => {\r\n if (!this.props.continuous) {\r\n index = Math.min(index, this.itemCount - this.props.slidesPerPage);\r\n index = Math.max(index, 0);\r\n }\r\n this.setState({ currentSlide: index });\r\n this.props.onSlideChange && this.props.onSlideChange(getAbsoluteIndex(index, this.itemCount));\r\n };\r\n\r\n handleKeyPress = (e: KeyboardEvent) => {\r\n if (e.keyCode === 37) {\r\n this.goPrev();\r\n } else if (e.keyCode === 39) {\r\n this.goNext();\r\n }\r\n };\r\n\r\n goPrev = () => {\r\n this.goToSlide(this.state.currentSlide - this.props.slidesPerPage);\r\n };\r\n goNext = () => {\r\n this.goToSlide(this.state.currentSlide + this.props.slidesPerPage);\r\n };\r\n onSlideIndexClick = (relativeIndex: number) => {\r\n this.goToSlide(this.state.currentSlide + relativeIndex);\r\n };\r\n render() {\r\n const { slidesPerPage } = this.props;\r\n const children = React.Children.toArray(this.props.children);\r\n const nbrOfItems = children.length > slidesPerPage ? children.length : slidesPerPage;\r\n const isFirstSlide = this.state.currentSlide === 0;\r\n const isLastSlide = this.state.currentSlide === nbrOfItems - slidesPerPage;\r\n\r\n return (\r\n \r\n \r\n \r\n {(dimensionsProp) => (\r\n {\r\n this.setState({ currentSlide: index });\r\n this.props.onSlideChange && this.props.onSlideChange(getAbsoluteIndex(index, this.itemCount));\r\n }}\r\n continuous={this.props.continuous}\r\n autoSlideTime={this.props.autoSlideTime}\r\n animationStyle={AnimationStyle.Gentle}\r\n >\r\n {children}\r\n \r\n )}\r\n \r\n \r\n {!this.props.hideNavigationButtons && !this.props.disabled && children.length > 1 && (\r\n \r\n {this.props.continuous || !isFirstSlide ? (\r\n \r\n ) : (\r\n {\r\n return false;\r\n }}\r\n direction={Direction.Prev}\r\n disabled={true}\r\n offset={this.props.navigationOffset}\r\n />\r\n )}\r\n {this.props.continuous || !isLastSlide ? (\r\n \r\n ) : (\r\n {\r\n return false;\r\n }}\r\n direction={Direction.Next}\r\n offset={this.props.navigationOffset}\r\n />\r\n )}\r\n \r\n )}\r\n {!this.props.hideIndexMarkers && !this.props.disabled && children.length > 1 && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { pseudo } from '@glitz/core';\r\nimport Button, { Variant as ButtonVariant, Appearance as ButtonAppearance } from 'Shared/Button';\r\nimport { gamma, delison, silver, scorpion } from 'Shared/Style';\r\n\r\nconst Entry = styled(Button, {\r\n borderRadius: '50%',\r\n width: gamma,\r\n height: gamma,\r\n ...pseudo(':not(:last-child)', {\r\n marginRight: '9px',\r\n }),\r\n});\r\n\r\nconst Svg = styled.svg({\r\n width: delison,\r\n height: delison,\r\n});\r\nconst Circle = styled.circle({\r\n transition: {\r\n property: 'opacity',\r\n duration: '0.5s',\r\n },\r\n});\r\n\r\ntype PropType = {\r\n isCurrent: boolean;\r\n onClick: () => void;\r\n};\r\n\r\nconst SIZE = 100;\r\nconst CENTER = SIZE / 2;\r\nconst BULLET_RADIUS = SIZE * 0.425;\r\n\r\nconst Bullet = (props: PropType) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default Bullet;\r\n","export { default as Carousel, getAbsoluteIndex, AnimationStyle } from './Carousel';\r\nexport { default as CommonCarousel } from './CommonCarousel';\r\nexport { default as Bullet } from './Bullet';\r\nexport { default as Navigation, Direction } from './Navigation';\r\n","import React from 'react';\r\nimport { styled, StyledElementProps } from '@glitz/react';\r\nimport { CommonCarousel } from 'Shared/Carousel';\r\n\r\ntype PropType = {\r\n prev?: () => void;\r\n next?: () => void;\r\n children: React.ReactNode;\r\n slideQuantityToShow: number;\r\n navigationOffsetWidth: number;\r\n} & StyledElementProps;\r\n\r\nclass ProductsPanel extends React.Component {\r\n render() {\r\n return (\r\n \r\n \r\n {this.props.children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ProductsPanel;\r\n\r\nconst Base = styled.div({\r\n position: 'relative',\r\n});\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { pseudo } from '@glitz/core';\r\nimport { translate, isIE } from '@avensia/scope';\r\nimport Price, { Type as PriceType } from 'Pricing/Price';\r\nimport Image, { Ratio, Preset } from 'Shared/Image/Ratio';\r\nimport {\r\n iota,\r\n gamma,\r\n epsilon,\r\n zeta,\r\n pixelsToUnit,\r\n whitelilac,\r\n minTinyMediaQuery,\r\n theta,\r\n kappa,\r\n wildwatermelon,\r\n white,\r\n minMicroMediaQuery,\r\n black,\r\n} from 'Shared/Style';\r\nimport connect from 'Shared/connect';\r\nimport Button, { Appearance, Variant } from 'Shared/Button';\r\nimport { formatTitleCase } from 'Shared/string-format';\r\nimport Link from 'Shared/Link';\r\nimport AddToCart from 'Product/ProductAddToCart';\r\nimport AverageRating, { Spacing, Size } from 'Product/ProductDetails/AverageRating';\r\nimport { CampaignBadge, DiscountBadge, NewBadge } from 'Product/ProductCard/Badge';\r\nimport PriceViewModel from 'Pricing/PriceViewModel.type';\r\nimport { addCartItem } from 'Checkout/action-creators';\r\nimport CartItemViewModel from 'Cart/Models/CartItemViewModel.type';\r\n\r\ntype ConnectStateType = {\r\n items: CartItemViewModel[];\r\n};\r\n\r\ntype ConnectActionType = {\r\n addToCart: (code: string, quantity: number, ticket: string) => any;\r\n};\r\n\r\nexport type ItemType = {\r\n brand: string;\r\n averageRating: number;\r\n ticket: string;\r\n price: PriceViewModel;\r\n displayName: string;\r\n variantCode: string;\r\n imageUrls: string[];\r\n isNew: boolean;\r\n inStock: boolean;\r\n isUpsellModal?: boolean;\r\n hasPromotion: boolean;\r\n hasDiscount: boolean;\r\n url: string;\r\n hasMultipleVariants: boolean;\r\n};\r\n\r\ntype PropType = {\r\n product: ItemType;\r\n} & ConnectStateType &\r\n ConnectActionType &\r\n StyledProps;\r\n\r\nclass Item extends React.Component {\r\n addToCart = () => {\r\n const code = this.props.product.variantCode;\r\n const existingItem = this.props.items.find((i) => i.code === code && !i.isGift);\r\n const quantity = existingItem ? existingItem.quantity + 1 : 1;\r\n\r\n return this.props.addToCart(code, quantity, this.props.product.ticket);\r\n };\r\n\r\n render() {\r\n const {\r\n hasPromotion,\r\n hasDiscount: productHasDiscount,\r\n isNew,\r\n averageRating,\r\n imageUrls,\r\n displayName,\r\n price,\r\n brand,\r\n url,\r\n ticket,\r\n isUpsellModal,\r\n hasMultipleVariants,\r\n } = this.props.product;\r\n const { current, original } = price;\r\n const hasDiscount = current < original;\r\n\r\n const topProps = {\r\n hasPromotion,\r\n productHasDiscount,\r\n isNew,\r\n isUpsellModal,\r\n averageRating,\r\n imageUrl: imageUrls.length ? imageUrls[0] : '',\r\n displayName,\r\n price,\r\n currency: price.currency,\r\n current,\r\n original,\r\n currentPrice: price.current,\r\n upsell: price.upsell,\r\n };\r\n\r\n const bottomProps = {\r\n brand,\r\n currency: price.currency,\r\n displayName,\r\n productHasDiscount,\r\n hasDiscount,\r\n current,\r\n original,\r\n currentPrice: price.current,\r\n upsell: price.upsell,\r\n };\r\n\r\n const button = hasMultipleVariants ? (\r\n \r\n {translate('/ProductListing/ViewProduct')}\r\n \r\n ) : (\r\n \r\n {this.props.product.inStock ? translate('/Cart/BuyMobile') : translate('/Cart/OutOfStrock')}\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {button}\r\n \r\n );\r\n }\r\n}\r\n\r\ntype TopPropType = {\r\n hasPromotion: boolean;\r\n productHasDiscount: boolean;\r\n isNew: boolean;\r\n currency: string;\r\n averageRating: number;\r\n imageUrl: string;\r\n displayName: string;\r\n price: PriceViewModel;\r\n original: number;\r\n upsell: number;\r\n};\r\n\r\nexport function Top(props: TopPropType) {\r\n return (\r\n \r\n {props.hasPromotion && (\r\n \r\n {translate('/Product/Badge/Campaign')}\r\n \r\n )}\r\n {props.productHasDiscount && !props.upsell ? (\r\n {`-${props.price.discountPercentage}%`}\r\n ) : (\r\n props.isNew && {`${translate('/Product/Badge/New')}!`}\r\n )}\r\n \r\n \r\n {!!props.averageRating && }\r\n \r\n \r\n );\r\n}\r\n\r\ntype BottomPropType = {\r\n brand: string;\r\n currency: string;\r\n displayName: string;\r\n productHasDiscount: boolean;\r\n hasDiscount: boolean;\r\n current: number;\r\n original: number;\r\n currentPrice: number;\r\n upsell: number;\r\n};\r\n\r\nexport function Bottom(props: BottomPropType) {\r\n const discount = props.original - props.currentPrice;\r\n return (\r\n \r\n {`${props.brand || ''} ${formatTitleCase(\r\n props.displayName,\r\n )}`}\r\n \r\n 0 ? { fontSize: iota, color: wildwatermelon } : { fontSize: iota, color: black }}\r\n current={props.hasDiscount && !props.upsell ? Math.round(props.current) : Math.round(props.currentPrice)}\r\n currency={props.currency}\r\n priceType={props.hasDiscount ? PriceType.New : PriceType.Regular}\r\n />\r\n {props.productHasDiscount && (\r\n \r\n )}\r\n {props.upsell > 0 && !props.productHasDiscount && props.currentPrice !== props.original && (\r\n \r\n )}\r\n \r\n \r\n {props.currentPrice !== props.original && (\r\n \r\n {translate('/Upsell/Save') + ' '}\r\n {Math.round(discount)}\r\n {translate('/Upsell/Currency')}\r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n\r\ntype UpsellAllPropType = {\r\n hasPromotion: boolean;\r\n productHasDiscount: boolean;\r\n isNew: boolean;\r\n currency: string;\r\n averageRating: number;\r\n imageUrl: string;\r\n displayName: string;\r\n price: PriceViewModel;\r\n original: number;\r\n upsell: number;\r\n isUpsellModal: boolean;\r\n brand: string;\r\n hasDiscount: boolean;\r\n current: number;\r\n currentPrice: number;\r\n};\r\n\r\nexport function UpsellAll(props: UpsellAllPropType) {\r\n const discount = props.original - props.upsell;\r\n return (\r\n \r\n {props.hasPromotion && (\r\n \r\n {translate('/Product/Badge/Campaign')}\r\n \r\n )}\r\n {props.productHasDiscount && !props.upsell ? (\r\n {`-${props.price.discountPercentage}%`}\r\n ) : (\r\n props.isNew && {`${translate('/Product/Badge/New')}!`}\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${props.brand || ''} ${formatTitleCase(\r\n props.displayName,\r\n )}`}\r\n \r\n \r\n {props.productHasDiscount && (\r\n \r\n )}\r\n {props.upsell > 0 && !props.productHasDiscount && (\r\n \r\n )}\r\n \r\n \r\n {translate('/Upsell/Save')} {discount}\r\n {translate('/Upsell/Currency')}\r\n \r\n \r\n \r\n \r\n \r\n {translate('/Upsell/Save')} {discount}\r\n {translate('/Upsell/Currency')}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default styled(\r\n connect(\r\n (state): ConnectStateType => ({\r\n items: state.cart.items,\r\n }),\r\n (dispatch): ConnectActionType => ({\r\n addToCart(code: string, quantity: number, ticket: string) {\r\n return dispatch(addCartItem(code, quantity, ticket, 'Kassakampanjer'));\r\n },\r\n }),\r\n )(Item),\r\n);\r\n\r\nexport const Base = styled.div({\r\n backgroundColor: whitelilac,\r\n display: 'flex',\r\n flexFlow: 'column nowrap',\r\n flex: {\r\n grow: 0,\r\n shrink: 0,\r\n basis: pixelsToUnit(132),\r\n },\r\n height: '100%',\r\n padding: {\r\n xy: pixelsToUnit(2),\r\n },\r\n margin: { xy: '0.2rem' },\r\n textAlign: 'center',\r\n ...pseudo(':not(:first-child)', {\r\n marginLeft: pixelsToUnit(5),\r\n }),\r\n});\r\n\r\nconst ContentLink = styled(Link, {\r\n color: (theme) => theme.textColor,\r\n display: 'flex',\r\n flexFlow: 'column nowrap',\r\n});\r\n\r\nconst TopBase = styled.div({});\r\n\r\nconst UpsellModalItemBase = styled.div({\r\n width: '100%',\r\n position: 'relative',\r\n});\r\n\r\nconst RatingsPlaceholder = styled.div({\r\n height: pixelsToUnit(13),\r\n});\r\n\r\nconst Ratings = styled(AverageRating, {\r\n height: pixelsToUnit(13),\r\n width: '100%',\r\n zIndex: 1,\r\n});\r\n\r\nconst Title = styled.div({\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n fontSize: zeta,\r\n fontWeight: 'bold',\r\n maxHeight: pixelsToUnit(66),\r\n padding: {\r\n top: pixelsToUnit(15),\r\n x: pixelsToUnit(10),\r\n bottom: 0,\r\n },\r\n wordBreak: 'break-word',\r\n WebkitLineClamp: 2,\r\n WebkitBoxOrient: 'vertical',\r\n lineHeight: pixelsToUnit(18),\r\n});\r\n\r\nconst TitleModal = styled(Title, {\r\n whiteSpace: 'normal',\r\n fontWeight: 'bold',\r\n padding: {\r\n top: pixelsToUnit(5),\r\n x: pixelsToUnit(0),\r\n bottom: 0,\r\n },\r\n});\r\n\r\nconst Prices = styled.div({\r\n flex: {\r\n grow: 0,\r\n shrink: 0,\r\n basis: pixelsToUnit(47),\r\n },\r\n fontSize: gamma,\r\n fontWeight: 'bold',\r\n maxHeight: pixelsToUnit(47),\r\n padding: {\r\n top: pixelsToUnit(8),\r\n bottom: pixelsToUnit(8),\r\n x: 0,\r\n },\r\n});\r\n\r\nconst Text = styled.span({\r\n fontSize: kappa,\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n letterSpacing: pixelsToUnit(0.8),\r\n lineHeight: pixelsToUnit(36),\r\n [minMicroMediaQuery]: {\r\n fontSize: theta,\r\n },\r\n});\r\n\r\nconst SaveUpsellText = styled.div({\r\n backgroundColor: wildwatermelon,\r\n color: white,\r\n borderRadius: pixelsToUnit(5),\r\n padding: { xy: pixelsToUnit(2) },\r\n fontWeight: 'bold',\r\n height: pixelsToUnit(30),\r\n});\r\n\r\nconst SaveUpsellTextContainer = styled.div({\r\n height: pixelsToUnit(30),\r\n marginBottom: pixelsToUnit(5),\r\n});\r\n\r\nconst ImagePriceWrapper = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n});\r\n\r\nconst TitlePriceWrapper = styled.div({\r\n marginLeft: pixelsToUnit(15),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n width: '100%',\r\n});\r\n\r\nconst Arrow = styled.div({\r\n color: white,\r\n fontWeight: 'bold',\r\n width: '9rem',\r\n height: '5rem',\r\n minWidth: '9rem',\r\n backgroundImage: 'linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,75,106,1) 35%, rgba(255,75,106,1) 100%)',\r\n clipPath: 'polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%)',\r\n display: 'none',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n [minTinyMediaQuery]: {\r\n display: 'flex',\r\n },\r\n});\r\n\r\nconst Wrapper = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n minHeight: '8rem',\r\n});\r\n\r\nconst ImageModal = styled(Image, {\r\n height: '4rem',\r\n width: '4rem',\r\n minWidth: '4rem',\r\n [minMicroMediaQuery]: {\r\n height: '6rem',\r\n width: '6rem',\r\n minWidth: '6rem',\r\n },\r\n});\r\n\r\nconst TinySaveText = styled(SaveUpsellText, {\r\n width: '7rem',\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n marginBottom: pixelsToUnit(10),\r\n [minTinyMediaQuery]: {\r\n display: 'none',\r\n },\r\n});\r\n","import EsalesProductForList from '../../../Esales/Models/EsalesProductForList.type';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\n\r\nexport function getProduct(esalesProduct: EsalesProductForList) {\r\n // return only properties that'll be displayed\r\n return {\r\n brand: esalesProduct.brand,\r\n averageRating: esalesProduct.averageRating,\r\n ticket: esalesProduct.ticket,\r\n price: esalesProduct.price,\r\n displayName: epiPropertyValue(esalesProduct.variation.displayName),\r\n variantCode: epiPropertyValue(esalesProduct.variation.code),\r\n imageUrls: esalesProduct.imageUrls || [],\r\n isNew: esalesProduct.isNew,\r\n inStock: esalesProduct.inStock,\r\n hasPromotion: esalesProduct.hasPromotion,\r\n hasDiscount: esalesProduct.hasDiscount,\r\n url: esalesProduct.url,\r\n hasMultipleVariants: esalesProduct.hasMultipleVariants,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { thin, white, black, ZIndex } from 'Shared/Style';\r\n\r\ntype PropType = {\r\n visibleElement: HTMLElement;\r\n} & StyledProps;\r\n\r\nconst Overlay = styled.div({\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: white,\r\n opacity: 0.5,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n zIndex: ZIndex.Overlay,\r\n});\r\n\r\nconst Element = styled.div({\r\n backgroundColor: white,\r\n border: {\r\n xy: {\r\n style: 'solid',\r\n width: thin,\r\n color: black,\r\n },\r\n },\r\n});\r\n\r\nexport default styled(\r\n class Cover extends React.Component {\r\n elementContainerRef: HTMLDivElement;\r\n componentDidMount() {\r\n if (this.props.visibleElement) {\r\n this.elementContainerRef.appendChild(this.props.visibleElement);\r\n }\r\n }\r\n setCoverRef = (element: HTMLDivElement) => (this.elementContainerRef = element);\r\n render() {\r\n return (\r\n {this.props.visibleElement && }\r\n );\r\n }\r\n },\r\n);\r\n","import React from 'react';\r\nimport { URLX, pathCombine, postJson, replaceState, translate } from '@avensia/scope';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\nimport { Style } from '@glitz/type';\r\nimport { styled } from '@glitz/react';\r\nimport EsalesProductForList from '../../../../Esales/Models/EsalesProductForList.type';\r\nimport {\r\n pixelsToUnit,\r\n thin,\r\n huge,\r\n theta,\r\n beta,\r\n carnation,\r\n minSmallMediaQuery,\r\n transition,\r\n white,\r\n wildwatermelon,\r\n lightGrey,\r\n} from 'Shared/Style';\r\nimport Viewport from 'Shared/Viewport';\r\nimport ProductsPanel from 'Shared/ProductsPanel';\r\nimport {\r\n connectWithFeedback,\r\n Behavior as ButtonBehavior,\r\n Appearance as ButtonAppearance,\r\n ConnectPropType as FeedbackPropType,\r\n} from 'Shared/Button/Feedback';\r\nimport { formatPrice } from 'Shared/number-format';\r\nimport connect from 'Shared/connect';\r\nimport Product, { ProductType } from 'Checkout/ProductsPanel/ItemUpsell';\r\nimport { getProduct as getPanelProduct } from 'Checkout/ProductsPanel/utils';\r\nimport { completeUpsellPurchase } from 'Checkout/action-creators';\r\nimport Cover from 'Checkout/Pages/Checkout/Cover';\r\nimport { Section, Header as Title } from './OrderConfirmationPage';\r\nimport OrderConfirmationType from './OrderConfirmationPageViewModel.type';\r\nimport { format } from '@avensia/scope';\r\nimport Panel from 'Shared/Panel';\r\nimport Icon from 'Shared/Icon/Close';\r\n\r\nenum PriceType {\r\n Current = 'current',\r\n Original = 'original',\r\n Upsell = 'upsell',\r\n}\r\n\r\ntype TimerType = {\r\n availableUntilTimestamp?: number;\r\n currentServerTimestamp?: number;\r\n};\r\n\r\ntype ConnectStateType = {\r\n currency: string;\r\n culture: string;\r\n};\r\n\r\ntype ConnectActionType = {\r\n upsellOrderComplete: (orderConfirmation: OrderConfirmationType) => void;\r\n};\r\n\r\ntype PropType = {\r\n title: string;\r\n subTitle: string;\r\n addText: string;\r\n introText: string;\r\n confirmText: string;\r\n timeIsUpText: string;\r\n failedText: string;\r\n orderGroupId: string;\r\n requestUrl: string;\r\n upsellProducts: EsalesProductForList[];\r\n} & FeedbackPropType &\r\n ConnectStateType &\r\n ConnectActionType &\r\n TimerType;\r\n\r\ntype StateType = {\r\n orderProducts: ProductType[];\r\n lockMode: boolean;\r\n timeIsUp: boolean;\r\n upsellFail: boolean;\r\n upsellViewAllModalOpen: boolean;\r\n timeLeft: number;\r\n};\r\n\r\nfunction getProductsPriceSum(products: ProductType[], mode: PriceType) {\r\n if (products.length) {\r\n return products.reduce((accum, currVal) => accum + currVal.price[mode], 0);\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction formatTime(num: number) {\r\n function twoDigits(n: number) {\r\n return n <= 9 ? `0${n}` : String(n);\r\n }\r\n\r\n if (num >= 60) {\r\n // tslint:disable-next-line:no-bitwise\r\n return `${twoDigits((num / 60) | 0)}:${twoDigits(num % 60 | 0)}`;\r\n } else {\r\n return `00:${twoDigits(num)}`;\r\n }\r\n}\r\n\r\nfunction getTimeLeft(availableUntilTimestamp: number, timeOffset: number) {\r\n return Math.floor((new Date(availableUntilTimestamp * 1000).getTime() - Date.now() + timeOffset) / 1000);\r\n}\r\nclass UpsellProducts extends React.Component {\r\n panelRef = React.createRef();\r\n timer: number;\r\n timeOffset = Date.now() - new Date(this.props.currentServerTimestamp * 1000).getTime();\r\n constructor(props: PropType) {\r\n super(props);\r\n this.state = {\r\n orderProducts: [],\r\n lockMode: false,\r\n timeIsUp: false,\r\n upsellFail: false,\r\n upsellViewAllModalOpen: false,\r\n timeLeft: getTimeLeft(this.props.availableUntilTimestamp, this.timeOffset),\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps: PropType, prevState: StateType) {\r\n if (!prevState.upsellFail && this.state.upsellFail) {\r\n setTimeout(() => {\r\n this.setState(() => ({ upsellFail: false }));\r\n }, FAILED_TEXT_VISIBLE_DELAY);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.state.timeLeft) {\r\n this.startTimer();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.stopTimer();\r\n }\r\n\r\n startTimer() {\r\n this.timer = setInterval(() => {\r\n const timeLeft = getTimeLeft(this.props.availableUntilTimestamp, this.timeOffset);\r\n if (timeLeft) {\r\n this.setState({ timeLeft });\r\n } else {\r\n this.stopTimer();\r\n this.timerTimeIsUp();\r\n }\r\n }, 1000);\r\n }\r\n\r\n stopTimer() {\r\n if (this.timer) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n }\r\n\r\n updateOrderProducts = (selectedProduct: ProductType) => {\r\n this.setState((prevState) => {\r\n const selected = this.isSelected(prevState.orderProducts, selectedProduct.code);\r\n return {\r\n orderProducts: selected\r\n ? prevState.orderProducts.filter((product) => product.code !== selectedProduct.code)\r\n : [...prevState.orderProducts, selectedProduct],\r\n };\r\n });\r\n };\r\n\r\n isSelected(products: ProductType[], code: string) {\r\n return Boolean(products.find((product) => product.code === code));\r\n }\r\n\r\n getTotalPrice() {\r\n return getProductsPriceSum(this.state.orderProducts, PriceType.Upsell);\r\n }\r\n\r\n getTotalUpsellSavings() {\r\n return getProductsPriceSum(this.state.orderProducts, PriceType.Original) - this.getTotalPrice();\r\n }\r\n\r\n getAddText() {\r\n const { addText, currency, culture } = this.props;\r\n return format(addText, {\r\n count: this.state.orderProducts.length,\r\n total: formatPrice(this.getTotalPrice(), currency, culture),\r\n savings: formatPrice(this.getTotalUpsellSavings(), currency, culture),\r\n });\r\n }\r\n\r\n timerTimeIsUp = () => this.setState(() => ({ timeIsUp: true }));\r\n\r\n toggleUpsellViewAllModal = () =>\r\n this.setState(() => ({ upsellViewAllModalOpen: !this.state.upsellViewAllModalOpen }));\r\n\r\n confirmOrder = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n this.props.feedback.push(this.sendRequest());\r\n };\r\n\r\n sendRequest = async () => {\r\n const { orderProducts } = this.state;\r\n if (orderProducts.length) {\r\n this.setState(() => ({ lockMode: true }));\r\n\r\n const codes = orderProducts.map((product) => product.code);\r\n const tickets = orderProducts.map((product) => product.ticket);\r\n\r\n const url = new URLX(this.props.requestUrl);\r\n url.pathname = pathCombine(url.pathname, 'add');\r\n\r\n const query = {\r\n id: this.props.orderGroupId,\r\n codes,\r\n tickets,\r\n };\r\n\r\n try {\r\n await postJson(url, query);\r\n replaceState(null, { includeAppShellData: true });\r\n } catch (error) {\r\n console.error('Upsell sendRequest error:', error.status);\r\n this.setState(() => ({ upsellFail: true, lockMode: false }));\r\n return Promise.reject(null);\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n const { orderProducts } = this.state;\r\n const { upsellProducts, confirmText, introText, title, subTitle } = this.props;\r\n const FeedbackButton = this.props.feedback.Button;\r\n const feedbackButtonStyle: Style = {\r\n fontSize: theta,\r\n letterSpacing: pixelsToUnit(0.75),\r\n margin: {\r\n x: 'auto',\r\n },\r\n padding: {\r\n x: huge,\r\n },\r\n [minSmallMediaQuery]: {\r\n margin: {\r\n left: 'auto',\r\n right: 0,\r\n },\r\n },\r\n };\r\n const upsellModalCardStyle: Style = {\r\n width: '100%',\r\n height: '10rem',\r\n };\r\n\r\n const timer = (\r\n ONE_MINUTE ? { fontWeight: 'bold' } : { fontWeight: 'bold', color: wildwatermelon }}\r\n >\r\n {`${formatTime(this.state.timeLeft)} ${\r\n this.state.timeLeft >= ONE_MINUTE\r\n ? translate('/CountdownBanner/Minutes')\r\n : this.state.timeLeft < ONE_MINUTE\r\n ? translate('/CountdownBanner/Seconds')\r\n : translate('/CountdownBanner/Second')\r\n }`}\r\n \r\n );\r\n\r\n return (\r\n
\r\n {this.state.timeIsUp ? (\r\n {this.props.timeIsUpText}\r\n ) : (\r\n \r\n {title}\r\n \r\n {this.props.failedText}\r\n \r\n \r\n {subTitle.substring(0, subTitle.indexOf('{'))}\r\n {timer}\r\n \r\n {translate('/Upsell/ShowYourPersonalOffers')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {translate('/Upsell/PersonalOffersExpiresIn')}\r\n {timer}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {upsellProducts.map((product) => {\r\n const code = epiPropertyValue(product.variation.code);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n \r\n {!!orderProducts.length ? this.getAddText() : introText}\r\n \r\n {confirmText}\r\n \r\n \r\n \r\n \r\n \r\n {(isCompact: boolean) => (\r\n \r\n {upsellProducts.map((product) => {\r\n const code = epiPropertyValue(product.variation.code);\r\n return (\r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n \r\n {!!orderProducts.length ? this.getAddText() : introText}\r\n \r\n {confirmText}\r\n \r\n \r\n \r\n \r\n )}\r\n {this.state.lockMode && }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state): ConnectStateType => ({\r\n currency: state.appShellData.cart.currency,\r\n culture: state.appShellData.culture,\r\n }),\r\n (dispatch): ConnectActionType => ({\r\n upsellOrderComplete: (orderConfirmation: OrderConfirmationType) => {\r\n return dispatch(completeUpsellPurchase(orderConfirmation));\r\n },\r\n }),\r\n)(connectWithFeedback({ behavior: ButtonBehavior.KeepEnabled })(UpsellProducts));\r\n\r\nconst CARD_WIDTH = 132;\r\nconst DESKTOP_CARDS = 5;\r\nconst MOBILE_CARDS = 1;\r\nconst FAILED_TEXT_VISIBLE_DELAY = 2500;\r\nconst ONE_MINUTE = 60;\r\n\r\nconst textStyle = {\r\n fontSize: theta,\r\n lineHeight: pixelsToUnit(22),\r\n letterSpacing: pixelsToUnit(0.3),\r\n};\r\n\r\nconst SubTitle = styled.div({\r\n padding: {\r\n y: pixelsToUnit(30),\r\n x: pixelsToUnit(10),\r\n },\r\n textAlign: 'center',\r\n ...textStyle,\r\n ...transition({ property: 'opacity ' }),\r\n});\r\n\r\nconst Body = styled.div({\r\n backgroundColor: 'rgba(243, 244, 251, 0.4)',\r\n padding: {\r\n xy: pixelsToUnit(30),\r\n },\r\n});\r\n\r\nconst ConfirmSection = styled.div({\r\n padding: { x: 0, y: pixelsToUnit(20) },\r\n margin: { x: pixelsToUnit(15) },\r\n textAlign: 'center',\r\n border: {\r\n top: {\r\n width: thin,\r\n style: 'solid',\r\n color: (theme) => theme.borderColor,\r\n },\r\n },\r\n [minSmallMediaQuery]: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n textAlign: 'right',\r\n },\r\n});\r\n\r\nconst Text = styled.div({\r\n marginBottom: pixelsToUnit(20),\r\n textAlign: 'center',\r\n ...textStyle,\r\n [minSmallMediaQuery]: {\r\n maxWidth: pixelsToUnit(490),\r\n margin: 0,\r\n textAlign: 'left',\r\n },\r\n});\r\n\r\nconst TimesUpBody = styled(Body, {\r\n fontSize: beta,\r\n lineHeight: 1.5,\r\n textAlign: 'center',\r\n});\r\n\r\nconst FailedText = styled(SubTitle, {\r\n color: carnation,\r\n position: 'absolute',\r\n width: '100%',\r\n});\r\n\r\nconst Close = styled.div({\r\n position: 'absolute',\r\n right: pixelsToUnit(15),\r\n top: pixelsToUnit(15),\r\n bottom: pixelsToUnit(15),\r\n});\r\n\r\nconst UpsellViewAllModalContent = styled.div({\r\n overflowY: 'auto',\r\n padding: { x: '1rem', y: 0 },\r\n});\r\n\r\nconst OpenModalButton = styled.div({\r\n backgroundColor: wildwatermelon,\r\n fontWeight: 'bold',\r\n color: white,\r\n borderRadius: pixelsToUnit(5),\r\n padding: { xy: pixelsToUnit(5) },\r\n marginTop: pixelsToUnit(5),\r\n cursor: 'pointer',\r\n ':hover': { textDecoration: 'underline' },\r\n});\r\n\r\nconst TimeMessage = styled.div({\r\n textAlign: 'center',\r\n padding: { xy: pixelsToUnit(15) },\r\n border: {\r\n bottom: {\r\n width: thin,\r\n style: 'solid',\r\n color: lightGrey,\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport { translate } from '@avensia/scope';\r\nimport { StyledProps, styled } from '@glitz/react';\r\nimport Button, { Appearance } from 'Shared/Button';\r\nimport FulfilledIcon from 'Shared/Icon/Check';\r\nimport { ItemType, Top, Bottom, Base, UpsellAll } from './Item';\r\nimport PriceViewModel from 'Pricing/PriceViewModel.type';\r\nimport { pixelsToUnit, lightGrey, minMediumMediaQuery } from 'Shared/Style';\r\n\r\nexport type ProductType = {\r\n code: string;\r\n ticket: string;\r\n price: PriceViewModel;\r\n};\r\n\r\ntype PropType = ItemType & {\r\n selected: boolean;\r\n onSelect: (product: ProductType) => void;\r\n} & StyledProps;\r\nexport default styled((props: PropType) => {\r\n const {\r\n hasPromotion,\r\n hasDiscount: productHasDiscount,\r\n isNew,\r\n isUpsellModal,\r\n averageRating,\r\n imageUrls,\r\n displayName,\r\n price,\r\n brand,\r\n } = props;\r\n const { current, original, currency } = price;\r\n const hasDiscount = current < original;\r\n\r\n const topProps = {\r\n hasPromotion,\r\n productHasDiscount,\r\n isNew,\r\n averageRating,\r\n imageUrl: imageUrls.length ? imageUrls[0] : '',\r\n displayName,\r\n currency,\r\n price,\r\n original,\r\n upsell: price.upsell,\r\n };\r\n\r\n const bottomProps = {\r\n brand,\r\n currency: price.currency,\r\n displayName,\r\n productHasDiscount,\r\n hasDiscount,\r\n current,\r\n original,\r\n upsell: price.upsell,\r\n currentPrice: price.upsell ? price.upsell : price.current,\r\n };\r\n\r\n const upsellAllProps = {\r\n hasPromotion,\r\n productHasDiscount,\r\n isNew,\r\n isUpsellModal,\r\n averageRating,\r\n imageUrl: imageUrls.length ? imageUrls[0] : '',\r\n displayName,\r\n currency,\r\n price,\r\n original,\r\n upsell: price.upsell,\r\n brand,\r\n hasDiscount,\r\n current,\r\n currentPrice: price.upsell ? price.upsell : price.current,\r\n };\r\n\r\n const buttonApperance = props.selected ? [Appearance.Upsell, Appearance.Full] : [Appearance.Primary, Appearance.Full];\r\n\r\n function toggleSelect() {\r\n props.onSelect({ code: props.variantCode, ticket: props.ticket, price: props.price });\r\n }\r\n\r\n const checkBoxSelect = (\r\n \r\n {props.selected ? : translate('/Upsell/Choose')}\r\n \r\n );\r\n\r\n const checkBoxSelectModal = (\r\n \r\n {props.selected ? : translate('/Upsell/Choose')}\r\n \r\n );\r\n\r\n return (\r\n \r\n {isUpsellModal ? (\r\n \r\n \r\n {checkBoxSelectModal}\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {checkBoxSelect}\r\n \r\n )}\r\n \r\n );\r\n});\r\n\r\nconst Content = styled.div({\r\n color: theme => theme.textColor,\r\n width: '100%',\r\n});\r\n\r\nconst ContentUpsellModal = styled.div({\r\n display: 'flex',\r\n color: theme => theme.textColor,\r\n width: '100%',\r\n borderBottom: {\r\n color: lightGrey,\r\n style: 'solid',\r\n width: pixelsToUnit(1),\r\n },\r\n});\r\n\r\nconst CheckBox = styled(Button, {\r\n lineHeight: 2.25,\r\n});\r\n\r\nconst CheckBoxModal = styled(Button, {\r\n width: '4rem',\r\n height: '4rem',\r\n borderRadius: '100%',\r\n alignSelf: 'center',\r\n [minMediumMediaQuery]: {\r\n width: '5rem',\r\n height: '5rem',\r\n },\r\n});\r\n\r\nconst ButtonWrapper = styled.div({\r\n width: '20%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignContent: 'center',\r\n});\r\n","/**\r\n * @ComponentFor OrderConfirmationPageViewModel\r\n */\r\nimport React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { pseudo } from '@glitz/core';\r\nimport connect from 'Shared/connect';\r\nimport { translate, loadScript, currentUrl, Breakpoint } from '@avensia/scope';\r\nimport { epiPropertyValue } from '@avensia/scope-episerver';\r\nimport {\r\n theta,\r\n sigma,\r\n gamma,\r\n epsilon,\r\n iota,\r\n tundora,\r\n zeta,\r\n mountainmeadow,\r\n minMicroMediaQuery,\r\n minSmallMediaQuery,\r\n pixelsToUnit,\r\n alpha,\r\n omega,\r\n whitelilac,\r\n small,\r\n} from 'Shared/Style';\r\nimport Image, { Ratio as ImageRatio } from 'Shared/Image/Ratio';\r\nimport { Main, Appearance } from 'Shared/PageLayout';\r\nimport Price from 'Pricing/Price';\r\nimport OrderConfirmationPageViewModelType from './OrderConfirmationPageViewModel.type';\r\nimport UpsellProducts from './UpsellProducts';\r\n\r\ntype StateType = {\r\n orderValue: number;\r\n programID: number;\r\n};\r\n\r\ntype ConnectStateType = { currentBreakpoint: number };\r\n\r\ntype PropType = OrderConfirmationPageViewModelType & ConnectStateType;\r\n\r\nexport const Section = styled.section({\r\n color: (theme) => theme.textColor,\r\n maxWidth: pixelsToUnit(800),\r\n margin: {\r\n x: 'auto',\r\n },\r\n padding: {\r\n y: pixelsToUnit(20),\r\n },\r\n position: 'relative',\r\n width: '100%',\r\n});\r\n\r\nexport const Header = styled.header({\r\n color: (theme) => theme.textColor,\r\n fontSize: omega,\r\n lineHeight: pixelsToUnit(42),\r\n textAlign: 'center',\r\n [minSmallMediaQuery]: {\r\n fontSize: alpha,\r\n },\r\n});\r\n\r\nconst OrderDetails = styled.div({\r\n maxWidth: pixelsToUnit(500),\r\n margin: {\r\n x: 'auto',\r\n },\r\n textAlign: 'center',\r\n fontSize: theta,\r\n lineHeight: 1.47,\r\n padding: {\r\n y: pixelsToUnit(60),\r\n },\r\n});\r\n\r\nconst OrderDetailsText = styled.span({\r\n display: 'block',\r\n marginBottom: pixelsToUnit(20),\r\n ':last-of-type': {\r\n marginBottom: 0,\r\n },\r\n ...pseudo(':nth-child(3)', {\r\n marginBottom: 0,\r\n }),\r\n});\r\n\r\nconst ProductDetails = styled.div({\r\n marginBottom: pixelsToUnit(60),\r\n backgroundColor: whitelilac,\r\n});\r\n\r\nconst ProductRow = styled.div({\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n padding: {\r\n xy: pixelsToUnit(6),\r\n },\r\n [minSmallMediaQuery]: {\r\n padding: {\r\n xy: small,\r\n },\r\n },\r\n});\r\n\r\nconst ProductImage = styled.div({\r\n flex: {\r\n grow: 1,\r\n shrink: 1,\r\n basis: pixelsToUnit(190),\r\n },\r\n mixBlendMode: 'multiply',\r\n [minSmallMediaQuery]: {\r\n marginRight: pixelsToUnit(15),\r\n },\r\n});\r\n\r\nconst ProductDescription = styled.div({\r\n display: 'flex',\r\n width: '100%',\r\n});\r\n\r\nconst ProductDescriptionMobile = styled(ProductDescription, {\r\n padding: {\r\n xy: small,\r\n },\r\n flex: {\r\n grow: 1,\r\n shrink: 1,\r\n basis: pixelsToUnit(900),\r\n },\r\n});\r\n\r\nconst ProductDescriptionHeader = styled(ProductDescription, {\r\n fontSize: zeta,\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst ProductTitle = styled.div({\r\n alignSelf: 'center',\r\n fontSize: sigma,\r\n color: tundora,\r\n lineHeight: 'normal',\r\n flex: {\r\n grow: 1,\r\n shrink: 1,\r\n },\r\n});\r\n\r\nconst Quantity = styled.div({\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n alignSelf: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst QuantityHeader = styled(Quantity, {\r\n fontSize: zeta,\r\n fontWeight: 'normal',\r\n textTransform: 'uppercase',\r\n width: '30%',\r\n});\r\n\r\nconst PaymentDetails = styled.div({\r\n maxWidth: pixelsToUnit(800),\r\n margin: {\r\n x: 'auto',\r\n bottom: pixelsToUnit(130),\r\n },\r\n});\r\n\r\nconst PaymentDetailsRow = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n color: tundora,\r\n});\r\n\r\nconst PaymentLabel = styled.div({\r\n fontSize: theta,\r\n lineHeight: 2,\r\n});\r\n\r\nconst StyledPrice = styled(Price, {\r\n fontWeight: 'bold',\r\n});\r\n\r\nconst UnitPriceHeader = styled.div({\r\n fontSize: zeta,\r\n textTransform: 'uppercase',\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst UnitPrice = styled(StyledPrice, {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n fontSize: epsilon,\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst TotalUnitsPriceHeader = styled(UnitPriceHeader, {\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst TotalUnitsPrice = styled(UnitPrice, {\r\n textAlign: 'center',\r\n width: '30%',\r\n});\r\n\r\nconst BasePrice = styled(StyledPrice, {\r\n fontSize: gamma,\r\n lineHeight: pixelsToUnit(30),\r\n});\r\n\r\nconst TotalPrice = styled(BasePrice, {\r\n fontSize: iota,\r\n color: mountainmeadow,\r\n});\r\n\r\nconst PriceWrapperMobile = styled.div({\r\n display: 'flex',\r\n width: '100%',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst ProductRowsWrapperMobile = styled.div({\r\n alignSelf: 'center',\r\n flexBasis: '35rem',\r\n [minMicroMediaQuery]: {\r\n flexBasis: pixelsToUnit(750),\r\n },\r\n});\r\n\r\nconst Wrapper = styled.div({\r\n borderBottom: {\r\n style: 'solid',\r\n color: (theme) => theme.borderColor,\r\n width: '1px',\r\n },\r\n paddingBottom: pixelsToUnit(20),\r\n});\r\n\r\nconst InnerWrapper = styled.div({\r\n display: 'flex',\r\n});\r\n\r\nclass OrderconfirmationPage extends React.Component {\r\n constructor(props: PropType) {\r\n super(props);\r\n this.state = {\r\n orderValue: this.setOrderValue(),\r\n programID: this.setProgramID(),\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { orderNumber, discountCodes, billingAddress } = this.props.orderDetails;\r\n const trackIDCookie = this.getCookieData('trackID');\r\n const trackID: number = trackIDCookie.length > 0 ? parseInt(trackIDCookie, 10) : null;\r\n const discountedCodes = discountCodes || '';\r\n\r\n const adRecordData = {\r\n ...this.state,\r\n orderNumber,\r\n couponCode: discountedCodes,\r\n trackID,\r\n };\r\n\r\n this.appendAdRecordScript(adRecordData);\r\n\r\n if (!!window.tp) {\r\n const trustpilot_invitation = {\r\n recipientEmail: billingAddress.email,\r\n recipientName: billingAddress.firstName,\r\n referenceId: orderNumber,\r\n source: 'InvitationScript',\r\n };\r\n\r\n window.tp('createInvitation', trustpilot_invitation);\r\n }\r\n }\r\n setOrderValue() {\r\n return this.props.orderDetails.orderLineItems.reduce((sum, lineItem) => sum + lineItem.price, 0);\r\n }\r\n setProgramID() {\r\n const hostName = currentUrl().hostname;\r\n const isDoggieSite = hostName.indexOf('doggie') !== -1;\r\n let domainID = 0;\r\n\r\n if (isDoggieSite) {\r\n domainID = 242;\r\n } else {\r\n const DOMAIN_NAME = 2;\r\n const domainName = hostName.split('.')[DOMAIN_NAME].toLowerCase();\r\n\r\n switch (domainName) {\r\n case 'se':\r\n domainID = 241;\r\n break;\r\n\r\n case 'fi':\r\n domainID = 779;\r\n break;\r\n\r\n case 'no':\r\n domainID = 780;\r\n break;\r\n\r\n case 'dk':\r\n domainID = 781;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n return domainID;\r\n }\r\n\r\n // This script is from adrecord\r\n getCookieData(t: string) {\r\n for (let n = document.cookie.split('; '), r = 0; r < n.length; r++) {\r\n const p = n[r].split('=');\r\n\r\n if (p[0] === t) {\r\n return p[1];\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n appendAdRecordScript(data: any) {\r\n window.adrecord = {\r\n programID: data.programID,\r\n orderID: data.orderNumber,\r\n orderValue: data.orderValue,\r\n couponCode: data.couponCode,\r\n trackID: data.trackID,\r\n };\r\n\r\n loadScript('https://track.adrecord.com/track.js');\r\n }\r\n\r\n render() {\r\n const isMobile = this.props.currentBreakpoint < Breakpoint.Medium;\r\n const { orderDetails } = this.props;\r\n const {\r\n orderNumber,\r\n paymentMethodName,\r\n paymentType,\r\n shippingMethodName,\r\n orderLineItems,\r\n currency,\r\n paymentFee,\r\n totalPrice,\r\n shippingFee,\r\n } = orderDetails;\r\n const productImageSize = '&w=100&h=100';\r\n const tradedoublerIFrame = this.props.tradedoublerViewModel ? (\r\n \r\n ) : null;\r\n\r\n return (\r\n
\r\n {tradedoublerIFrame}\r\n\r\n {!!(this.props.upsellProducts || []).length && (\r\n \r\n )}\r\n\r\n
\r\n
{translate('/OrderConfirmation/Heading')}
\r\n \r\n {`${translate('/OrderConfirmation/OrderNumber')} : ${orderNumber}`}\r\n \r\n {`${translate('/OrderConfirmation/ConfirmationMessage')}: ${\r\n this.props.trackingInformationTransaction.emailAddress\r\n }`}\r\n \r\n \r\n {`${translate('/OrderConfirmation/PaymentMethod')}: `}\r\n {paymentMethodName}\r\n {paymentType ? ` - ${paymentType}` : ''}\r\n \r\n {`${translate(\r\n '/OrderConfirmation/ShippingMethod',\r\n )}: ${shippingMethodName}`}\r\n {this.props.orderDetails.instaboxDeliveryPoint ? (\r\n {this.props.orderDetails.instaboxDeliveryPoint}\r\n ) : null}\r\n \r\n \r\n {!isMobile && (\r\n \r\n \r\n {translate('/OrderConfirmation/Product')}\r\n {translate('/OrderConfirmation/Amount')}\r\n {translate('/OrderConfirmation/PriceEach')}\r\n {translate('/OrderConfirmation/Price')}\r\n \r\n )}\r\n {orderLineItems.map((order) =>\r\n isMobile ? (\r\n \r\n \r\n \r\n {order.productName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {translate('/OrderConfirmation/Amount')}\r\n {translate('/OrderConfirmation/PriceEach')}\r\n {translate('/OrderConfirmation/Price')}\r\n \r\n \r\n \r\n {order.quantity}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {order.productName}\r\n \r\n {order.quantity}\r\n \r\n \r\n \r\n ),\r\n )}\r\n \r\n \r\n \r\n {translate('/OrderConfirmation/ShippingLabel')}\r\n \r\n \r\n \r\n {translate('/OrderConfirmation/PaymentLabel')}\r\n \r\n \r\n \r\n {translate('/OrderConfirmation/PaymentTotal')}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state): ConnectStateType => ({\r\n currentBreakpoint: state.currentBreakpoint,\r\n }),\r\n)(OrderconfirmationPage);\r\n"],"sourceRoot":""}