{"version":3,"sources":["webpack:///./src/themes/smwe/views/wine-finder-by-zip.view.tsx?1dba","webpack:///./src/modules/wine-finder-by-zip/wine-finder-by-zip.view.tsx?e28a","webpack:///./src/modules/wine-finder-by-zip/wine-finder-by-zip.tsx?7308","webpack:///./src/themes/h3-theme/views/wine-finder-by-zip.view.tsx?5baf","webpack:///./src/themes/h3theme/views/wine-finder-by-zip.view.tsx?182c","webpack:///./src/modules/multi-carousel/multi-carousel.tsx?d2a7"],"names":["WineFinderByZipView","React","constructor","props","super","_queryZipcode","this","_handleQueryZipcodeChange","bind","_keyup","_doQuery","render","className","htmlFor","id","type","value","onChange","onKeyUp","disabled","_isInvalid","onClick","event","target","keyCode","test","window","open","config","wineBrandUrl","__decorate","observable","observer","placeholder","WineFinderByZip","renderView","_handleHowToBuyNav","_smoothVerticalScrolling","_scrollingHelper","componentDidMount","addEventListener","context","request","url","requestUrl","search","includes","location","hash","componentWillUnmount","removeEventListener","parentContainer","ReactDOM","parentNode","history","pushState","origin","document","title","pathname","e","time","where","eAmt","getBoundingClientRect","top","curTime","setTimeout","scrollBy","MultiCarousel","state","_handleKeyPress","_handleArrow","container","hasSlots","slots","slides","length","total","toShow","_getSlidesToShow","toScroll","_getSlidesToScroll","scrollThreshold","indicatorsTotal","slidesToShow","_calculateIndicators","widthContainer","activeSlide","lastCurrentSlide","_getLastCurrentSlide","activeIndicator","_handleResize","_hoverStart","_hoverEnd","_handleTouchStart","_handleTouchEnd","_setInterval","_clearInterval","showArrows","showIndicators","widthSlide","_calculateWidthSlide","widthSlideTrack","_calculateWidthSlideTrack","readyToRenderSlides","classnames","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","_renderArrow","ref","element","style","width","_assignWidth","Object","assign","_assignTransform","_renderSlides","_renderIndicators","setState","offsetWidth","slidesToScroll","items","map","slide","index","isCurrent","isActive","key","undefined","targetSlide","transform","autoplay","autoplaySpeed","cycleInterval","setInterval","nextIndicator","_handleScrollIndicator","clearInterval","pauseOnHover","_checkEnd","direction","rightEnd","_checkNearEnd","leftNearEnd","rightNearEnd","_calculateRemainder","isDisabled","role","isNearEnd","remainder","_handleScrollArrow","prevState","newActiveSlide","slidesNotShown","Math","max","ceil","indicatorsArray","Array","keys","indicator","touches","scrollStart","screenX","changedTouches","delta"],"mappings":"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","file":"static/js/25.137d6ccafb7499de2af3.chunk.js","sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IWineFinderByZipViewProps } from '../../../modules/wine-finder-by-zip/./wine-finder-by-zip';\r\n\r\n/**\r\n * Class definition responsible for redirecting to findusawine.com to find local wine retailers based on the user inputted zipcode\r\n */\r\n@observer\r\nexport class WineFinderByZipView extends React.PureComponent {\r\n /**\r\n * field representing the location being typed in by the user\r\n */\r\n @observable private _queryZipcode: string = '';\r\n\r\n public constructor(props: IWineFinderByZipViewProps) {\r\n super(props);\r\n this._handleQueryZipcodeChange = this._handleQueryZipcodeChange.bind(this);\r\n this._keyup = this._keyup.bind(this);\r\n this._doQuery = this._doQuery.bind(this);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * handles changes for the zipcode entered\r\n */\r\n private _handleQueryZipcodeChange(event: React.ChangeEvent): void {\r\n this._queryZipcode = event.target.value;\r\n }\r\n\r\n /**\r\n * checks if the enter/return key has been pressed to submit a zipcode query\r\n */\r\n private _keyup(event: React.KeyboardEvent): void {\r\n if (event.keyCode === 13 && !this._isInvalid()) {\r\n this._doQuery();\r\n }\r\n }\r\n\r\n /**\r\n * process to disable the Search button if the user's text input is not a 5 digit entry (findusawine.com does not support 9 digit zip codes)\r\n */\r\n private _isInvalid(): boolean {\r\n const regex = /^\\d{5}$/;\r\n return (!regex.test(this._queryZipcode));\r\n }\r\n\r\n /**\r\n * process to send the zip code query to findusawine.com\r\n */\r\n private _doQuery(): void {\r\n window.open(`https://www.findusawine.com/${this.props.config.wineBrandUrl}/locate/domestic-results?location=${this._queryZipcode}&product_key=&header=&retail=true&restaurant=true`, '_blank');\r\n }\r\n\r\n}\r\n\r\nexport default WineFinderByZipView;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IWineFinderByZipViewProps } from './wine-finder-by-zip';\r\n\r\n/**\r\n * Class definition responsible for redirecting to findusawine.com to find local wine retailers based on the user inputted zipcode\r\n */\r\n@observer\r\nexport class WineFinderByZipView extends React.Component {\r\n /**\r\n * field representing the location being typed in by the user\r\n */\r\n @observable private _queryZipcode: string = '';\r\n\r\n public constructor(props: IWineFinderByZipViewProps) {\r\n super(props);\r\n this._handleQueryZipcodeChange = this._handleQueryZipcodeChange.bind(this);\r\n this._keyup = this._keyup.bind(this);\r\n this._doQuery = this._doQuery.bind(this);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * handles changes for the zipcode entered\r\n */\r\n private _handleQueryZipcodeChange(event: React.ChangeEvent): void {\r\n this._queryZipcode = event.target.value;\r\n }\r\n\r\n /**\r\n * checks if the enter/return key has been pressed to submit a zipcode query\r\n */\r\n private _keyup(event: React.KeyboardEvent): void {\r\n if (event.keyCode === 13 && !this._isInvalid()) {\r\n this._doQuery();\r\n }\r\n }\r\n\r\n /**\r\n * process to disable the Search button if the user's text input is not a 5 digit entry (findusawine.com does not support 9 digit zip codes)\r\n */\r\n private _isInvalid(): boolean {\r\n const regex = /^\\d{5}$/;\r\n return (!regex.test(this._queryZipcode));\r\n }\r\n\r\n /**\r\n * process to send the zip code query to findusawine.com\r\n */\r\n private _doQuery(): void {\r\n window.open(`https://www.findusawine.com/${this.props.config.wineBrandUrl}/locate/domestic-results?location=${this._queryZipcode}&product_key=&header=&retail=true&restaurant=true`, '_blank');\r\n }\r\n\r\n}\r\n\r\nexport default WineFinderByZipView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IWineFinderByZipData } from './wine-finder-by-zip.data';\r\nimport { IWineFinderByZipProps } from './wine-finder-by-zip.props.autogenerated';\r\n\r\nexport interface IWineFinderByZipViewProps extends IWineFinderByZipProps {\r\n\r\n}\r\n\r\n/**\r\n *\r\n * WineFinderByZip component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass WineFinderByZip extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default WineFinderByZip;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { IWineFinderByZipViewProps } from '../../../modules/wine-finder-by-zip/./wine-finder-by-zip';\r\n\r\n/**\r\n * Class definition responsible for redirecting to findusawine.com to find local wine retailers based on the user inputted zipcode\r\n */\r\n@observer\r\nexport class WineFinderByZipView extends React.PureComponent {\r\n /**\r\n * field representing the location being typed in by the user\r\n */\r\n @observable private _queryZipcode: string = '';\r\n\r\n public constructor(props: IWineFinderByZipViewProps) {\r\n super(props);\r\n this._handleQueryZipcodeChange = this._handleQueryZipcodeChange.bind(this);\r\n this._doQuery = this._doQuery.bind(this);\r\n this._handleHowToBuyNav = this._handleHowToBuyNav.bind(this);\r\n this._keyup = this._keyup.bind(this);\r\n this._smoothVerticalScrolling = this._smoothVerticalScrolling.bind(this);\r\n this._scrollingHelper = this._scrollingHelper.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n window.addEventListener('hashchange', this._handleHowToBuyNav);\r\n // remove includes statment before going live (only check for location hash)\r\n if (this.props.context.request.url.requestUrl.search.includes('divId=how-to-buy') || location.hash === '#how-to-buy') {\r\n this._handleHowToBuyNav();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('hashchange', this._handleHowToBuyNav);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * handles changes for the zipcode entered\r\n */\r\n private _handleQueryZipcodeChange(event: React.ChangeEvent): void {\r\n this._queryZipcode = event.target.value;\r\n }\r\n\r\n /**\r\n * checks if the enter/return key has been pressed to submit a zipcode query\r\n */\r\n private _keyup(event: React.KeyboardEvent): void {\r\n if (event.keyCode === 13 && !this._isInvalid()) {\r\n this._doQuery();\r\n }\r\n }\r\n\r\n /**\r\n * process to disable the Search button if the user's text input is not a 5 digit entry (findusawine.com does not support 9 digit zip codes)\r\n */\r\n private _isInvalid(): boolean {\r\n const regex = /^\\d{5}$/;\r\n return (!regex.test(this._queryZipcode));\r\n }\r\n\r\n /**\r\n * process to send the zip code query to findusawine.com\r\n */\r\n private _doQuery(): void {\r\n window.open(`https://www.findusawine.com/${this.props.config.wineBrandUrl}/locate/domestic-results?location=${this._queryZipcode}&product_key=&header=&retail=true&restaurant=true`, '_blank');\r\n }\r\n\r\n /**\r\n * handles navigation to the #how-to-buy anchor tag (to be slightly modified before going live)\r\n */\r\n private _handleHowToBuyNav(): void {\r\n if (location.hash === '#how-to-buy' || !location.hash) {\r\n // eslint-disable-next-line react/no-find-dom-node\r\n const parentContainer = ReactDOM.findDOMNode(this)!.parentNode as Element;\r\n this._smoothVerticalScrolling(parentContainer, 300, 'top');\r\n // following if statement to be removed. only required while we utilize a query parameter for how-to-buy\r\n if (this.props.context.request.url.requestUrl.search.includes('divId=how-to-buy')) {\r\n history.pushState({}, '', `${this.props.context.request.url.requestUrl.origin}/?domain=www.h3wines.com`);\r\n } else {\r\n history.pushState('', document.title, window.location.pathname + window.location.search);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * custom process to scroll to an element (since smooth scrolling with window.ScrollTo is not supported by Safari and IE)\r\n */\r\n private _smoothVerticalScrolling(e: Element, time: number, where: string): void {\r\n const eTop = e.getBoundingClientRect().top;\r\n const eAmt = eTop / 100;\r\n let curTime = 0;\r\n while (curTime <= time) {\r\n window.setTimeout(this._scrollingHelper, curTime, eAmt, where);\r\n curTime += time / 100;\r\n }\r\n }\r\n\r\n /**\r\n * helper process for _SmoothVerticalScrolling\r\n */\r\n private _scrollingHelper(eAmt: number, where: string): void {\r\n if (where === 'center' || where === '') {\r\n window.scrollBy(0, eAmt / 2);\r\n }\r\n if (where === 'top') {\r\n window.scrollBy(0, eAmt / 1.044);\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default WineFinderByZipView;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { IWineFinderByZipViewProps } from '../../../modules/wine-finder-by-zip/./wine-finder-by-zip';\r\n\r\n/**\r\n * Class definition responsible for redirecting to findusawine.com to find local wine retailers based on the user inputted zipcode\r\n */\r\n@observer\r\nexport class WineFinderByZipView extends React.PureComponent {\r\n /**\r\n * field representing the location being typed in by the user\r\n */\r\n @observable private _queryZipcode: string = '';\r\n\r\n public constructor(props: IWineFinderByZipViewProps) {\r\n super(props);\r\n this._handleQueryZipcodeChange = this._handleQueryZipcodeChange.bind(this);\r\n this._doQuery = this._doQuery.bind(this);\r\n this._handleHowToBuyNav = this._handleHowToBuyNav.bind(this);\r\n this._keyup = this._keyup.bind(this);\r\n this._smoothVerticalScrolling = this._smoothVerticalScrolling.bind(this);\r\n this._scrollingHelper = this._scrollingHelper.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n window.addEventListener('hashchange', this._handleHowToBuyNav);\r\n // remove includes statment before going live (only check for location hash)\r\n if (this.props.context.request.url.requestUrl.search.includes('divId=how-to-buy') || location.hash === '#how-to-buy') {\r\n this._handleHowToBuyNav();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('hashchange', this._handleHowToBuyNav);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * handles changes for the zipcode entered\r\n */\r\n private _handleQueryZipcodeChange(event: React.ChangeEvent): void {\r\n this._queryZipcode = event.target.value;\r\n }\r\n\r\n /**\r\n * checks if the enter/return key has been pressed to submit a zipcode query\r\n */\r\n private _keyup(event: React.KeyboardEvent): void {\r\n if (event.keyCode === 13 && !this._isInvalid()) {\r\n this._doQuery();\r\n }\r\n }\r\n\r\n /**\r\n * process to disable the Search button if the user's text input is not a 5 digit entry (findusawine.com does not support 9 digit zip codes)\r\n */\r\n private _isInvalid(): boolean {\r\n const regex = /^\\d{5}$/;\r\n return (!regex.test(this._queryZipcode));\r\n }\r\n\r\n /**\r\n * process to send the zip code query to findusawine.com\r\n */\r\n private _doQuery(): void {\r\n window.open(`https://www.findusawine.com/${this.props.config.wineBrandUrl}/locate/domestic-results?location=${this._queryZipcode}&product_key=&header=&retail=true&restaurant=true`, '_blank');\r\n }\r\n\r\n /**\r\n * handles navigation to the #how-to-buy anchor tag (to be slightly modified before going live)\r\n */\r\n private _handleHowToBuyNav(): void {\r\n if (location.hash === '#how-to-buy' || !location.hash) {\r\n // eslint-disable-next-line react/no-find-dom-node\r\n const parentContainer = ReactDOM.findDOMNode(this)!.parentNode as Element;\r\n this._smoothVerticalScrolling(parentContainer, 300, 'top');\r\n // following if statement to be removed. only required while we utilize a query parameter for how-to-buy\r\n if (this.props.context.request.url.requestUrl.search.includes('divId=how-to-buy')) {\r\n history.pushState({}, '', `${this.props.context.request.url.requestUrl.origin}/?domain=www.h3wines.com`);\r\n } else {\r\n history.pushState('', document.title, window.location.pathname + window.location.search);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * custom process to scroll to an element (since smooth scrolling with window.ScrollTo is not supported by Safari and IE)\r\n */\r\n private _smoothVerticalScrolling(e: Element, time: number, where: string): void {\r\n const eTop = e.getBoundingClientRect().top;\r\n const eAmt = eTop / 100;\r\n let curTime = 0;\r\n while (curTime <= time) {\r\n window.setTimeout(this._scrollingHelper, curTime, eAmt, where);\r\n curTime += time / 100;\r\n }\r\n }\r\n\r\n /**\r\n * helper process for _SmoothVerticalScrolling\r\n */\r\n private _scrollingHelper(eAmt: number, where: string): void {\r\n if (where === 'center' || where === '') {\r\n window.scrollBy(0, eAmt / 2);\r\n }\r\n if (where === 'top') {\r\n window.scrollBy(0, eAmt / 1.044);\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default WineFinderByZipView;","import classnames from 'classnames';\r\nimport CSS from 'csstype';\r\nimport * as React from 'react';\r\n\r\nimport { IMultiCarouselProps } from './multi-carousel.props.autogenerated';\r\n\r\nexport type IMultiCarouselState = {\r\n widthContainer: number | null;\r\n activeSlide: number;\r\n lastCurrentSlide: number;\r\n activeIndicator: number;\r\n};\r\n\r\nexport type slidesType = {\r\n total: number;\r\n toShow: number;\r\n toScroll: number;\r\n};\r\n\r\n// =============================================================================\r\n/**\r\n * MultiCarousel component\r\n * @extends {React.PureComponent, IMultiCarouselState>}\r\n */\r\n// =============================================================================\r\nclass MultiCarousel extends React.PureComponent, IMultiCarouselState> {\r\n\r\n //==========================================================================\r\n // VARIABLES\r\n //==========================================================================\r\n\r\n private container: HTMLDivElement | null;\r\n private hasSlots: number;\r\n private slides: slidesType;\r\n private indicatorsTotal: number;\r\n private cycleInterval?: ReturnType;\r\n private scrollThreshold: number;\r\n private scrollStart: number | undefined;\r\n\r\n //==========================================================================\r\n // LIFE CYCLE\r\n //==========================================================================\r\n\r\n constructor(props: IMultiCarouselProps<{}>, state: IMultiCarouselState) {\r\n super(props);\r\n this.container = null;\r\n this.hasSlots = this.props.slots && this.props.slots.slides && this.props.slots.slides.length;\r\n this.slides = {\r\n total: this.hasSlots,\r\n toShow: this._getSlidesToShow(),\r\n toScroll: this._getSlidesToScroll()\r\n };\r\n this.scrollThreshold = 100;\r\n\r\n // If there are more total slides than set slidesToShow, then calculate the number of indicators needed.\r\n // If there are more slidesToShow than total slides, then all slides will be shown at once,\r\n // so only 1 indicator is needed.\r\n this.indicatorsTotal = (this.slides.total > this.props.config.slidesToShow) ? this._calculateIndicators(this.slides) : 1;\r\n\r\n this.state = {\r\n widthContainer: null,\r\n activeSlide: 0,\r\n lastCurrentSlide: this._getLastCurrentSlide(0),\r\n activeIndicator: 0\r\n };\r\n\r\n // This-bindings\r\n this._handleResize = this._handleResize.bind(this);\r\n this._hoverStart = this._hoverStart.bind(this);\r\n this._hoverEnd = this._hoverEnd.bind(this);\r\n this._handleTouchStart = this._handleTouchStart.bind(this);\r\n this._handleTouchEnd = this._handleTouchEnd.bind(this);\r\n this._handleKeyPress = this._handleKeyPress.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n // Obtain starting carousel container width.\r\n this._handleResize();\r\n\r\n // Set autoplay interval.\r\n this._setInterval();\r\n\r\n // Listen to window resize for responsiveness.\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined' && window.addEventListener) {\r\n window.addEventListener('resize', this._handleResize);\r\n this._handleResize();\r\n }\r\n\r\n // Add event listener for key presses.\r\n document.addEventListener('keyup', this._handleKeyPress);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n // Clear autoplay interval.\r\n this._clearInterval();\r\n\r\n // Clear window resize event listener.\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined' && window.addEventListener) {\r\n window.removeEventListener('resize', this._handleResize);\r\n }\r\n\r\n // Remove event listener for key presses.\r\n document.removeEventListener('keyup', this._handleKeyPress);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { widthContainer } = this.state;\r\n const { config, slots } = this.props;\r\n const { showArrows, showIndicators} = config;\r\n const widthSlide = widthContainer && this._calculateWidthSlide(widthContainer);\r\n const widthSlideTrack = widthSlide && this._calculateWidthSlideTrack(widthSlide);\r\n const readyToRenderSlides = this.hasSlots && widthContainer && widthSlide ? true : false;\r\n\r\n return (\r\n \r\n
\r\n {showArrows && this._renderArrow('left')}\r\n this.container = element}\r\n style={{width: this._assignWidth(widthContainer)}}\r\n >\r\n \r\n {readyToRenderSlides && this._renderSlides(slots.slides, widthSlide!)}\r\n
\r\n \r\n {showArrows && this._renderArrow('right')}\r\n \r\n {showIndicators && this._renderIndicators(this.indicatorsTotal)}\r\n \r\n );\r\n }\r\n\r\n //==========================================================================\r\n // BASE FUNCTIONALITY\r\n //==========================================================================\r\n\r\n // Obtain carousel container width pre-render to calculate width of each slide.\r\n private _handleResize(): void {\r\n this.container && this.setState({widthContainer: this.container.offsetWidth});\r\n }\r\n\r\n // If slidesToShow is set to less than or equal to total slides, then return slidesToShow.\r\n // And if slidesToShow is set to 0, return 1.\r\n // Otherwise, if total slides is less than slidesToShow, return the total slides instead.\r\n private _getSlidesToShow(): number {\r\n if (this.props.config.slidesToShow <= this.hasSlots) {\r\n return this.props.config.slidesToShow || 1;\r\n }\r\n return this.hasSlots;\r\n }\r\n\r\n // Return set slidesToScroll unless it's 0, then return 1.\r\n private _getSlidesToScroll(): number {\r\n return this.props.config.slidesToScroll || 1;\r\n }\r\n\r\n // Return index of the last slide that is shown on the carousel.\r\n private _getLastCurrentSlide(activeSlide: number): number {\r\n return activeSlide + (this.slides.toShow - 1);\r\n }\r\n\r\n // Calculate width of each slide by dividing the container width by how many slides are shown.\r\n private _calculateWidthSlide(widthContainer: number): number {\r\n return widthContainer / this.slides.toShow;\r\n }\r\n\r\n // Calculate total width of the slide track (even parts not shown) by multiplying slide width by total slides.\r\n private _calculateWidthSlideTrack(widthSlide: number): number {\r\n return widthSlide * this.slides.total;\r\n }\r\n\r\n // Render each slide.\r\n private _renderSlides(items: React.ReactNode[], widthSlide: number): JSX.Element {\r\n return (\r\n \r\n {items.map((slide: React.ReactNode, index: number) => {\r\n // Checks if the slide is currently shown on the carousel.\r\n const isCurrent = ((index >= this.state.activeSlide) && (index <= this.state.lastCurrentSlide)) ? true : false;\r\n // Checks if the slide is the current active slide (first of the shown slides).\r\n const isActive = (index === this.state.activeSlide) ? true : false;\r\n return (\r\n \r\n {slide}\r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n\r\n // Assign a calculated width to an element via inline-styling.\r\n private _assignWidth(width: number | null): string | undefined {\r\n return width ? `${width}px` : undefined;\r\n }\r\n\r\n // Assign a translateX transformation to the slide track via inline-styling depending on the new active slide.\r\n private _assignTransform(targetSlide: number, widthSlide: number | null): CSS.Properties | undefined {\r\n if (widthSlide) {\r\n const translateValue: number = targetSlide * widthSlide * -1;\r\n return {transform: `translateX(${translateValue}px)`};\r\n }\r\n return undefined;\r\n }\r\n\r\n //==========================================================================\r\n // AUTOPLAY\r\n //==========================================================================\r\n\r\n // If autoplay is enabled, move scroll indicator by +1 at set autoplaySpeed intervals.\r\n // After reaching last indicator, restart at the first indicator via modulus.\r\n private _setInterval(): void {\r\n const { autoplay, autoplaySpeed } = this.props.config;\r\n if (autoplay && autoplaySpeed) {\r\n this.cycleInterval = setInterval(\r\n () => {\r\n const nextIndicator = (this.state.activeIndicator + 1) % this.indicatorsTotal;\r\n this._handleScrollIndicator(nextIndicator);\r\n },\r\n autoplaySpeed\r\n );\r\n }\r\n }\r\n\r\n // Clear autoplay interval.\r\n private _clearInterval(): void {\r\n clearInterval(this.cycleInterval!);\r\n }\r\n\r\n //==========================================================================\r\n // PAUSE ON HOVER\r\n //==========================================================================\r\n\r\n // If pauseOnHover is enabled, clear the autoplay interval on carousel's mouseEnter event.\r\n private _hoverStart(): void {\r\n if (this.props.config.pauseOnHover) {\r\n this._clearInterval();\r\n }\r\n }\r\n\r\n // If pauseOnHover is enabled, restart the autoplay interval on carousel's mouseLeave event.\r\n private _hoverEnd(): void {\r\n if (this.props.config.pauseOnHover) {\r\n this._setInterval();\r\n }\r\n }\r\n\r\n //==========================================================================\r\n // ARROWS\r\n //==========================================================================\r\n\r\n // Check if active slide is at the left or right limit in order to disable the corresponding arrow.\r\n private _checkEnd(direction: string): boolean {\r\n const leftEnd: number = 0;\r\n const rightEnd: number = this.slides.total - this.slides.toShow;\r\n if (\r\n ((direction === 'left') && (this.state.activeSlide <= leftEnd)) ||\r\n ((direction === 'right') && (this.state.activeSlide >= rightEnd))\r\n ) { return true; }\r\n return false;\r\n }\r\n\r\n // Check if active slide is near the left or right limit in order to calculate the remainder of slides before\r\n // reaching the limit.\r\n private _checkNearEnd(direction: string): boolean {\r\n const leftNearEnd: number = this.state.activeSlide;\r\n const rightNearEnd: number = this.slides.total - (this.state.activeSlide + this.slides.toShow);\r\n if (\r\n ((direction === 'left') && (leftNearEnd < this.slides.toScroll)) ||\r\n ((direction === 'right') && (rightNearEnd < this.slides.toScroll))\r\n ) { return true; }\r\n return false;\r\n }\r\n\r\n // Calculate remainder of how much more to scroll on arrow click, so the track slide does not go out of bounds.\r\n private _calculateRemainder(direction: string): number | void {\r\n const leftNearEnd: number = this.state.activeSlide;\r\n const rightNearEnd: number = this.slides.total - (this.state.activeSlide + this.slides.toShow);\r\n if (direction === 'left') {\r\n return leftNearEnd % this.slides.toScroll;\r\n } else if (direction === 'right') {\r\n return rightNearEnd % this.slides.toScroll;\r\n }\r\n }\r\n\r\n // Render each arrow.\r\n private _renderArrow(direction: string): JSX.Element {\r\n const isDisabled: boolean = this._checkEnd(direction);\r\n return (\r\n
\r\n this._handleArrow(direction)}\r\n >\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n // If arrow is not disabled, check first if active slide is near end or not.\r\n // If near end and has a remainder, then handle scroll with the remainder slides.\r\n // If not near end, then handle scroll with the set slidesToScroll.\r\n // If near end and no remainder, do nothing (at the limit).\r\n private _handleArrow(direction: string): void {\r\n const isNearEnd = this._checkNearEnd(direction);\r\n const remainder = this._calculateRemainder(direction);\r\n if (isNearEnd && remainder) {\r\n this._handleScrollArrow(direction, remainder);\r\n } else if (!isNearEnd) {\r\n this._handleScrollArrow(direction, this.slides.toScroll);\r\n }\r\n }\r\n\r\n // Set state with new active slide, the last showing current slide, and the active corresponding indicator.\r\n private _handleScrollArrow(direction: string, slidesToScroll: number): void {\r\n if (direction === 'left') {\r\n this.setState(prevState => {\r\n const newActiveSlide: number = prevState.activeSlide - slidesToScroll;\r\n return {\r\n activeSlide: newActiveSlide,\r\n lastCurrentSlide: this._getLastCurrentSlide(newActiveSlide),\r\n activeIndicator: prevState.activeIndicator - 1\r\n };\r\n });\r\n } else if (direction === 'right') {\r\n this.setState(prevState => {\r\n const newActiveSlide: number = prevState.activeSlide + slidesToScroll;\r\n return {\r\n activeSlide: newActiveSlide,\r\n lastCurrentSlide: this._getLastCurrentSlide(newActiveSlide),\r\n activeIndicator: prevState.activeIndicator + 1\r\n };\r\n });\r\n }\r\n }\r\n\r\n //==========================================================================\r\n // INDICATORS\r\n //==========================================================================\r\n\r\n // Calculate how many indicators are needed based on how many scrolls it will take to get to the end of\r\n // the carousel without going out of bounds.\r\n private _calculateIndicators(slides: slidesType): number {\r\n const slidesNotShown = Math.max(0, slides.total - slides.toShow);\r\n return Math.ceil((slidesNotShown / slides.toScroll) + 1);\r\n }\r\n\r\n // Render each indicator.\r\n private _renderIndicators(indicatorsTotal: number): JSX.Element {\r\n const indicatorsArray = [...Array(indicatorsTotal).keys()];\r\n return (\r\n
\r\n
    \r\n {indicatorsArray.map((indicator: number) => {\r\n const isDisabled: boolean = (indicator === this.state.activeIndicator) ? true : false;\r\n return (\r\n
  • \r\n this._handleScrollIndicator(indicator)}\r\n >\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n // Set state with the clicked indicator, the new active slide, the last showing current slide.\r\n private _handleScrollIndicator(indicator: number): void {\r\n if ((indicator + 1) === this.indicatorsTotal) {\r\n const newActiveSlide: number = this.slides.total - this.slides.toShow;\r\n this.setState({\r\n activeSlide: newActiveSlide,\r\n lastCurrentSlide: this._getLastCurrentSlide(newActiveSlide)\r\n });\r\n } else {\r\n const newActiveSlide: number = indicator * this.slides.toScroll;\r\n this.setState({\r\n activeSlide: newActiveSlide,\r\n lastCurrentSlide: this._getLastCurrentSlide(newActiveSlide)\r\n });\r\n }\r\n this.setState({activeIndicator: indicator});\r\n }\r\n\r\n //==========================================================================\r\n // ACCESSIBILITY\r\n //==========================================================================\r\n\r\n // Detects touch start on mobile touchscreen devices.\r\n private _handleTouchStart(event: React.TouchEvent): void {\r\n if (event.touches.length === 0) {\r\n this.scrollStart = undefined;\r\n } else {\r\n this.scrollStart = event.touches[0].screenX;\r\n }\r\n }\r\n\r\n // Calculates the touchscreen swipe direction and distance to determine scroll behavior.\r\n private _handleTouchEnd(event: React.TouchEvent): void {\r\n if (event.changedTouches.length > 0 && this.scrollStart !== undefined) {\r\n const newTarget: number = event.changedTouches[0].screenX;\r\n const delta = newTarget - this.scrollStart;\r\n\r\n if (delta > this.scrollThreshold) {\r\n this._handleArrow('left');\r\n }\r\n\r\n if (delta < -this.scrollThreshold) {\r\n this._handleArrow('right');\r\n }\r\n }\r\n\r\n this.scrollStart = undefined;\r\n\r\n return;\r\n }\r\n\r\n // Allows keyboard arrows to scroll through the carousel.\r\n // tslint:disable-next-line:no-any\r\n private _handleKeyPress = (event: any) => {\r\n if (event.keyCode === 37) {\r\n this._handleArrow('left');\r\n } else if (event.keyCode === 39) {\r\n this._handleArrow('right');\r\n }\r\n };\r\n}\r\n\r\nexport default MultiCarousel;\r\n"],"sourceRoot":""}