{"version":3,"file":"govx-desktop.productpage.ddf11d91cec32e2289a7.js","mappings":"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","sources":["webpack://@govx/govx-shop/./src/api/vimeoApi.js","webpack://@govx/govx-shop/./src/components/TrustPilot/index.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliatePage/OccupationUtilities.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/ShippingPolicy.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/ReturnPolicy.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/ProductDetails.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/Price.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/DiscountCodeModal.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/InfoCard.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/Image.js","webpack://@govx/govx-shop/./src/desktop/components/AffiliateProductPage/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductInfo/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductRating/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductPrice/PriceBehavior/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductPrice/PriceTag/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductPrice/PriceMessage/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductPrice/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductOptions/Thumbnails/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductOptions/AttributeGroup/AttributeButtons/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductOptions/AttributeGroup/AttributeSelect/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductOptions/AttributeGroup/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductOptions/SizeChartModal/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductOptions/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductVideo/VideoThumbnail/YouTubeThumbnail.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductVideo/VideoThumbnail/VimeoThumbnail.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductVideo/VideoThumbnail/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductImage/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductActions/BackInStockModal/subscribe.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductActions/BackInStockModal/unsubscribe.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductActions/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/Warranty/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ShippingPolicy/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ReturnPolicy/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductDetails/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/GiftWithPurchase/GiftPreview.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductKeyFeatures/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductReviews/WriteAReviewLink.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductReviews/NoReviews.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductReviews/Review.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductReviews/WithReviews.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductReviews/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductQAndA/Reply/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductQAndA/Answer/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductQAndA/Question/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductQAndA/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/ProductReviewsAndQA/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/DiscountDetails/index.js","webpack://@govx/govx-shop/./src/desktop/components/ProductPage/index.js","webpack://@govx/govx-shop/./src/desktop/components/common/Lightbox/index.js","webpack://@govx/govx-shop/./src/desktop/components/common/Lightbox/LightboxRoot.js","webpack://@govx/govx-shop/./src/desktop/components/common/inputs/Select/classic/index.js","webpack://@govx/govx-shop/./src/hooks/useCordialEvent.js","webpack://@govx/govx-shop/./src/redux/modules/offers/index.js"],"sourcesContent":["export const fetchVideo = (id) => {\n return fetch(`https://vimeo.com/api/v2/video/${id}.json`, {\n method: 'GET',\n }).then((response) => {\n return response.json()\n })\n}\n","import React, { Component } from 'react'\nconst TrustBox = ({\n trustBoxRef,\n 'data-template-id': dataTemplateId,\n 'data-style-height': dataStyleHeight,\n 'data-style-width': dataStyleWidth,\n}) => (\n <div\n ref={trustBoxRef} // We need a reference to this element to load the TrustBox in componentDidMount.\n className='trustpilot-widget'\n data-review-languages='en'\n data-locale='en-US'\n data-template-id={dataTemplateId}\n data-businessunit-id='5197cd6e000064000534c5bd'\n data-style-height={dataStyleHeight}\n data-style-width={dataStyleWidth}\n data-theme='light'\n data-stars='4,5'\n >\n <a\n href='https://www.trustpilot.com/review/govx.com'\n target='_blank'\n rel='noopener noreferrer'\n style={{ color: 'white' }}\n >\n Trustpilot\n </a>\n </div>\n)\n\nclass TrustBoxContainer extends Component {\n constructor(props) {\n super(props)\n this.trustBoxRef = React.createRef()\n }\n componentDidMount() {\n // If window.Trustpilot is available it means that we need to load the TrustBox from our ref.\n // If it's not, it means the script you pasted into <head /> isn't loaded just yet.\n // When it is, it will automatically load the TrustBox.\n if (window.Trustpilot) {\n window.Trustpilot.loadFromElement(this.trustBoxRef.current, true)\n }\n }\n render() {\n return <TrustBox trustBoxRef={this.trustBoxRef} {...this.props} />\n }\n}\nexport default TrustBoxContainer\n","export const getEligibleGroupsText = (eligibleGroups) => {\n let value = ''\n let validGroups = eligibleGroups.filter((g) => g <= 4)\n let newValues = []\n let milTitle\n \n if (validGroups.filter((g) => g === 1 || g === 2).length === 2) {\n milTitle = 'U.S. Military'\n } else if (validGroups.some((g) => g === 1)) {\n milTitle = 'U.S. Military'\n } else if (validGroups.some((g) => g === 2)) {\n milTitle = 'U.S. Military Families'\n }\n \n if (milTitle) {\n newValues.push(milTitle)\n }\n for (var i = 0; i < validGroups.length; i++) {\n switch (validGroups[i]) {\n case 3:\n newValues.push('Law Enforcement')\n newValues.push('Fire')\n newValues.push('Medical')\n break\n case 4:\n newValues.push('U.S. Government')\n break\n default:\n break\n }\n }\n \n for (let i = 0; i < newValues.length; i++) {\n let val = newValues[i]\n \n if (i > 0 && i === newValues.length - 1) {\n value += `, and ${val}`\n } else if (i > 0) {\n value += `, ${val}`\n } else {\n value += val\n }\n }\n \n return value\n }","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, mapProps } from 'recompose'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport Typography from '@material-ui/core/Typography'\n\nexport const ShippingPolicy = ({ text, expanded }) => (\n <div style={{ margin: '1em 0em' }}>\n {text && (\n <Accordion\n defaultExpanded={expanded}\n style={{ border: 'solid 1px #e3e3e3' }}\n elevation={0}\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'shipping info',\n })}\n >\n <AccordionSummary expandIcon={<ExpandIcon />}>\n <span style={{ fontWeight: 'bold' }}>Shipping</span>\n </AccordionSummary>\n <AccordionDetails>\n <span>\n <span dangerouslySetInnerHTML={{ __html: text }} />\n </span>\n </AccordionDetails>\n </Accordion>\n )}\n </div>\n)\n\nShippingPolicy.propTypes = {\n text: PropTypes.node,\n expanded: PropTypes.bool,\n}\n\nconst enhance = compose(\n mapProps((o) => {\n let sellerName = o.seller.name.toUpperCase()\n let text = `This product is shipped directly from ${sellerName}. Please consult the ${sellerName} website for time to ship and associated costs.`\n return {\n text,\n expanded: o.expanded,\n }\n }),\n)\n\nexport default enhance(ShippingPolicy)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, mapProps } from 'recompose'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport { getConfiguration } from '../../../../src/setup/configuration'\n\nexport const DefaultPolicy = () => (\n <div>\n Need to make an executive decision? This product qualifies for FREE (and\n super easy) return shipping. \n <a href={getConfiguration().supportUrl} target='_blank' rel='noopener'>\n Learn more\n </a>\n </div>\n)\n\nexport const ReturnPolicy = ({ text, expanded }) => (\n <div style={{ margin: '1em 0em' }}>\n {text && (\n <Accordion\n defaultExpanded={expanded}\n style={{ border: 'solid 1px #e3e3e3' }}\n elevation={0}\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'returns',\n })}\n >\n <AccordionSummary expandIcon={<ExpandIcon />}>\n <span style={{ fontWeight: 'bold' }}>Returns</span>\n </AccordionSummary>\n <AccordionDetails>\n <div>\n {text === 'ReturnPolicy.GovXDefault' ? (\n <DefaultPolicy />\n ) : (\n <span dangerouslySetInnerHTML={{ __html: text }} />\n )}\n </div>\n </AccordionDetails>\n </Accordion>\n )}\n </div>\n)\n\nReturnPolicy.propTypes = {\n text: PropTypes.node,\n}\n\nconst enhance = compose(\n mapProps((o) => {\n let sellerName = o.seller.name.toUpperCase()\n let text = `All purchases for this product are made through the ${sellerName} website and are subject to the seller's return policy. GOVX cannot process returns on this item. Please contact the seller directly.`\n return {\n text,\n expanded: o.expanded,\n }\n }),\n)\n\nexport default enhance(ReturnPolicy)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography'\nimport { removeScriptTags } from '../../../utilities/string-util'\n\nconst styles = (theme) => ({\n container: {\n color: '#333',\n\n '@global': {\n a: {\n color: theme.colors.darkGray,\n textDecoration: 'none',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n 'img, iframe': {\n maxWidth: '100%',\n maxHeight: '100%',\n },\n },\n },\n title: {\n fontSize: '24px',\n fontFamily: 'geomanist-medium',\n },\n})\n\nexport const ProductDetails = ({ classes, product }) =>\n product &&\n product.description && (\n <div>\n <Typography variant='h6' className={classes.title} align='center'>\n <strong>PRODUCT DETAILS</strong>\n </Typography>\n <div className={classes.container}>\n <div\n dangerouslySetInnerHTML={{\n __html: removeScriptTags(product.description),\n }}\n />\n </div>\n </div>\n )\n\nProductDetails.propTypes = {\n product: PropTypes.object.isRequired,\n}\n\nconst enhance = compose(withStyles(styles))\n\nexport default enhance(ProductDetails)\n","import React from 'react'\nimport { compose, mapProps } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Grid from '@material-ui/core/Grid'\nimport Typography from '@material-ui/core/Typography'\nimport {\n dollar,\n calcSavings,\n getAffiliateProductPriceInfo,\n minPercentToShow,\n} from '../../../utilities/price-util'\nconst styles = {\n test: {\n fontSize: '20px',\n },\n priceTag: {\n fontSize: '24px',\n fontFamily: 'geomanist-regular',\n color: '#333333',\n },\n link: {\n textDecoration: 'underline',\n cursor: 'pointer',\n fontFamily: 'geomanist-regular, Helvetica, sans-serif',\n fontWeight: '400',\n color: '#0E5777',\n '&:hover': {\n color: '#000',\n },\n '&:active': {\n color: '#0E5777',\n backgroundColor: '#B1E2F5',\n },\n },\n priceCell: {\n height: '40px',\n position: 'relative',\n },\n priceLabelCell: {\n height: '25px',\n position: 'relative',\n },\n withCode: {\n fontSize: '12px',\n bottom: '0px',\n color: '#666666',\n position: 'absolute',\n },\n}\n\nexport const SaleDisplay = ({ priceInfo, classes }) => (\n <Grid item xs={4} style={{ padding: '0px 16px' }}>\n <Grid container direction='column'>\n <Grid item className={classes.priceLabelCell}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '14px', fontWeight: '600' }}\n >\n GOVX Price\n </Typography>\n </Grid>\n <Grid item className={classes.priceCell}>\n <Typography variant='h6' style={{ position: 'relative', top: '-10px' }}>\n <strong>\n <span className={classes.priceTag}>\n ${priceInfo.dollars.toLocaleString()}.{priceInfo.cents}\n </span>\n </strong>\n </Typography>\n <div className={classes.withCode}>WITH CODE</div>\n </Grid>\n </Grid>\n </Grid>\n)\n\nconst RetailPrice = ({ retailPrice, classes }) => (\n <Grid\n item\n xs={3}\n style={{\n borderLeft: 'solid 1px #ccc',\n padding: '0px 16px',\n height: '65px',\n }}\n >\n <Grid container direction='column'>\n <Grid item xs={12} className={classes.priceLabelCell}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '14px', fontWeight: '600' }}\n >\n Retail Price\n </Typography>\n </Grid>\n <Grid item xs={12} className={classes.priceCell}>\n <Typography\n variant='caption'\n style={{\n position: 'relative',\n bottom: '4px',\n color: '#666',\n fontSize: '20px',\n fontWeight: '600',\n }}\n >\n <span style={{ textDecoration: 'line-through' }}>\n {dollar(retailPrice)}\n </span>\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n)\n\nconst SavingsPercent = ({ savings, classes }) => (\n <Grid\n item\n xs={3}\n style={{\n borderLeft: 'solid 1px #ccc',\n padding: '0px 16px',\n height: '65px',\n }}\n >\n <Grid container direction='column'>\n <Grid item className={classes.priceLabelCell}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '14px', fontWeight: '600' }}\n >\n You Save\n </Typography>\n </Grid>\n <Grid item className={classes.priceCell}>\n <Typography\n variant='caption'\n style={{\n color: '#666',\n position: 'relative',\n bottom: '6px',\n fontSize: '20px',\n fontWeight: '600',\n }}\n >\n {savings}%\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n)\n\nexport const Price = ({\n priceInfo,\n price,\n classes,\n savings,\n membershipPending,\n}) => {\n return (\n <Grid\n container\n alignItems='flex-start'\n style={{\n padding: '4px 0px',\n borderTop: 'solid 1px #ccc',\n borderBottom: 'solid 1px #ccc',\n }}\n alignContent='space-between'\n >\n <SaleDisplay priceInfo={priceInfo} classes={classes} />\n <RetailPrice retailPrice={price.retailPrice} classes={classes} />\n <SavingsPercent savings={savings} classes={classes} />\n </Grid>\n )\n}\n\nconst enhance = compose(\n mapProps((o) => {\n return {\n price: o.price,\n priceInfo: getAffiliateProductPriceInfo(o.price),\n savings: calcSavings(o.price.price, o.price.retailPrice),\n }\n }),\n withStyles(styles),\n)\n\nexport default enhance(Price)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose, lifecycle, withHandlers, withState } from 'recompose'\nimport ModalContainer from '../common/modals/ModalContainer'\nimport Button from '../common/Button/Primary'\nimport CancelButton from '../common/Button/Cancel'\nimport ExternalLink from '../common/links/ExternalLink'\nimport {\n hideModal,\n addedAffiliateProduct,\n clickAffiliateProductModalDiscountCode,\n fetchOffer,\n gotoRegister,\n clickAffiliateProductOffer,\n} from '../../../redux/actions'\nimport DialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport LinearProgress from '@material-ui/core/LinearProgress'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport useCordialEvent from '../../../hooks/useCordialEvent'\nimport { getEligibleGroupsText } from '../AffiliatePage/OccupationUtilities'\n\nconst styles = (theme) => ({\n cancelButton: {\n color: theme.colors.darkBlue,\n border: 'solid 2px ' + theme.colors.darkBlue,\n fontWeight: '600',\n '&:hover': {\n color: theme.colors.white,\n backgroundColor: theme.colors.darkBlue,\n border: 'solid 2px ' + theme.colors.darkBlue,\n },\n },\n})\n\nconst DiscountModal = ({\n product,\n offer,\n onOfferClick,\n classes,\n onCopyCouponCode,\n copy,\n}) => {\n const useCodeEvent = useCordialEvent('click-offer', {\n sellerId: product.affiliate.id,\n sellerName: product.affiliate.name,\n })\n return (\n <ModalContainer title=\"Here's your discount code!\" maxWidth='440px'>\n <div>\n <DialogContent>\n <div\n style={{\n width: '100%',\n padding: offer ? '5px' : '24px 15px 23px 15px',\n textAlign: 'center',\n backgroundColor: '#e3e3e3',\n }}\n >\n {offer ? (\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: '0 0 0 25%',\n }}\n >\n <strong>{offer.discountCode}</strong>\n <Button type='cta' onClick={onCopyCouponCode}>\n {copy}\n </Button>\n </div>\n ) : (\n <LinearProgress />\n )}\n </div>\n {offer && offer.instructions ? (\n <p>{offer.instructions}</p>\n ) : (\n <>\n <p>\n Please copy this code, then click the button below to proceed\n with your purchase. You'll need to enter the code at checkout to\n apply your discount.\n </p>\n <p style={{ color: '#999', fontSize: '14px' }}>\n You will be redirected to{' '}\n {(product.seller && product.seller.name) || 'another site'} to\n complete your purchase.\n </p>\n </>\n )}\n </DialogContent>\n\n {offer && offer.link && (\n <ExternalLink unstyled url={offer.link} newWindow={true}>\n <Button\n children='Use your code'\n type='cta'\n style={{ width: '100%' }}\n onClick={() => {\n onOfferClick(offer)\n useCodeEvent()\n }}\n />\n </ExternalLink>\n )}\n </div>\n </ModalContainer>\n )\n}\n\nconst ErrorModal = ({ error, closeModal, classes, goRegister }) => (\n <ModalContainer title={error.title} maxWidth='440px'>\n <div>\n <DialogContent>{error.content}</DialogContent>\n <DialogActions>\n <CancelButton\n children='Dismiss'\n onClick={closeModal}\n className={classes.cancelButton}\n />\n {!error && (\n <Button\n children='Get Verified'\n color='secondary'\n onClick={() => goRegister()}\n />\n )}\n </DialogActions>\n </div>\n </ModalContainer>\n)\nconst getGenericErrorMessage = () => ({\n type: 'general_error',\n title: 'Something went wrong',\n content: (\n <p>\n Unfortunately, this offer is not currently available. We apologize for the\n inconvenience. Please try back again later.\n </p>\n ),\n})\n\nconst getErrorMessage = (offer, eligibleGroupsDescription) => {\n if (!offer) return null\n\n switch (offer.type) {\n case 'DiscountCodeWithLinkModel':\n return null\n case 'OfferEventErrorModel':\n case 'ClaimOfferErrorModel':\n if (offer.title === '24_hour_limit') {\n return {\n type: '24_hour_limit',\n title: 'Coupon limit reached',\n content: (\n <>\n <p>\n Our records show that you claimed a coupon code in the last day.\n This offer is limited to one coupon per 24 hours, which means\n you have reached the daily limit.\n </p>\n <p>Please check back again tomorrow to claim a new code.</p>\n </>\n ),\n }\n } else if (offer.title === 'User is not eligible') {\n let notEligibleDescription = (\n <>\n <p>This offer is only available to select groups.</p>\n </>\n )\n if (eligibleGroupsDescription)\n notEligibleDescription = (\n <>\n <p>\n This offer is only available to select groups, including members\n of the {eligibleGroupsDescription}.\n </p>\n </>\n )\n\n return {\n type: 'not_eligible',\n title: \"Sorry! It looks like you don't qualify for this offer.\",\n content: notEligibleDescription,\n }\n } else {\n return getGenericErrorMessage()\n }\n default:\n return getGenericErrorMessage()\n }\n}\n\nexport const DiscountCodeModal = ({\n goRegister,\n eligibleGroupsText,\n product,\n offer,\n onOfferClick,\n closeModal,\n classes,\n onCopyCouponCode,\n copy,\n}) => {\n var error = getErrorMessage(offer, eligibleGroupsText)\n return error\n ? ErrorModal({ error, closeModal, classes, goRegister })\n : DiscountModal({\n product,\n offer,\n onOfferClick,\n classes,\n onCopyCouponCode,\n copy,\n })\n}\n\nDiscountCodeModal.propTypes = {\n product: PropTypes.object.isRequired,\n onOfferClick: PropTypes.func.isRequired,\n copy: PropTypes.string.isRequired,\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n getOffer: () =>\n dispatch(fetchOffer(ownProps.product.offer.id, ownProps.product.id)),\n goRegister: () => {\n return dispatch(gotoRegister())\n },\n onOfferClick: (offer) => {\n dispatch(\n clickAffiliateProductModalDiscountCode({ product: ownProps.product, offer: offer }),\n )\n dispatch(addedAffiliateProduct(ownProps.product))\n },\n closeModal: () => {\n dispatch(hideModal())\n },\n setOfferViewed: (offerClaim) => {\n dispatch(clickAffiliateProductOffer({ product: {discountCode: offerClaim.discountCode, ...ownProps.product} }))\n }\n})\n\nconst enhance = compose(\n connect(null, mapDispatchToProps),\n withState('copy', 'setCopy', () => 'Copy'),\n withState('eligibleGroupsText', 'setEligibleGroupsText', null),\n withState('offer', 'setOffer', null),\n withHandlers({\n onCopyCouponCode: (props) => (e) => {\n e && e.preventDefault()\n navigator.clipboard.writeText(props.offer.discountCode)\n props.setCopy('Copied!')\n setTimeout(\n function () {\n props.setCopy('Copy')\n }.bind(this),\n 2000,\n )\n },\n }),\n withStyles(styles),\n lifecycle({\n componentDidMount() {\n if (this.props.affiliate?.offers && this.props.affiliate.offers[0]) {\n this.props.setEligibleGroupsText(\n getEligibleGroupsText(this.props.affiliate.offers[0].eligibleGroups),\n )\n }\n this.props.getOffer().then((r) => {\n this.props.setOffer(r)\n this.props.setOfferViewed(r)\n })\n },\n }),\n)\n\nexport default enhance(DiscountCodeModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {\n compose,\n withHandlers,\n mapProps,\n withState,\n lifecycle,\n} from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Grid from '@material-ui/core/Grid'\nimport Price from './Price'\nimport Button from '../common/Button/Primary'\nimport { connect } from 'react-redux'\nimport DiscountCodeModal from './DiscountCodeModal'\nimport {\n showModal,\n clickAffiliateProductOffer,\n clickedOffer,\n clickLogin,\n clickJoin,\n} from '../../../redux/actions'\nimport { selectUser } from '../../../redux/selectors'\nimport {\n gotoLogin,\n gotoRegister,\n fetchAffiliateDetails,\n} from '../../../redux/actions'\nimport useCordialEvent from '../../../hooks/useCordialEvent'\nimport { productTypes } from '../../../common/productTypes'\nconst styles = {\n card: {\n border: 'solid 1px #737950',\n overflow: 'hidden',\n borderRadius: '3px',\n },\n description: {\n marginBottom: '17px',\n },\n marketplaceTab: {\n overflow: 'hidden',\n width: '150px',\n height: '30px',\n display: 'flex',\n transform: 'skewX(-25deg)',\n transformOrigin: 'top left',\n backgroundColor: '#737950',\n },\n content: {\n padding: '16px',\n },\n iconContainer: {\n position: 'relative',\n zIndex: '1',\n padding: '5px 5px 5px 20px',\n transform: 'skewX(25deg)',\n transformOrigin: 'top left',\n },\n icon: {\n position: 'relative',\n top: '1px',\n color: 'white',\n },\n rest: {\n backgroundColor: 'white',\n },\n link: {\n textDecoration: 'underline',\n cursor: 'pointer',\n fontFamily: 'geomanist-regular, Helvetica, sans-serif',\n fontWeight: '400',\n color: '#0E5777',\n '&:hover': {\n color: '#000',\n },\n '&:active': {\n color: '#0E5777',\n backgroundColor: '#B1E2F5',\n },\n },\n}\n\n// Context for what button generated the offer, populated as content in Offer.EventData\nconst offerButtonName = 'product-button'\n\nexport const InfoCard = ({\n classes,\n handleDiscountClick,\n product,\n user,\n membershipPending,\n handleJoin,\n handleLogin,\n}) => {\n const getDiscountCodeEvent = useCordialEvent('click-offer', {\n productId: product.id,\n productName: product.name,\n sellerId: product.affiliate.id,\n sellerName: product.affiliate.name,\n })\n return (\n <div className={classes.card}>\n <div className={classes.marketplaceTab}>\n <div className={classes.iconContainer}>\n <img\n src='../../images/mktplace-logo-white.svg'\n alt='Marketplace'\n width={100}\n className={classes.icon}\n />\n </div>\n </div>\n\n <div className={classes.content}>\n {user && !membershipPending ? (\n <div className={classes.description}>\n This is a GOVX Marketplace product. Click below for your unique\n discount code. You'll then be taken to the seller's site to use your\n code at checkout.\n </div>\n ) : (\n <div className={classes.description}>\n Current and former military, law enforcement, firefighters,\n healthcare workers and government employees can join the GOVX\n community for FREE to shop this product and thousands more.\n </div>\n )}\n {user &&\n !membershipPending &&\n product.pricing &&\n product.pricing.price > 0 && <Price price={product.pricing} />}\n {user && !membershipPending && (\n <Button\n onClick={() => {\n handleDiscountClick()\n getDiscountCodeEvent()\n }}\n type='cta'\n style={{ width: '100%', marginTop: '16px' }}\n >\n Get Discount Code\n </Button>\n )}\n {(!user || membershipPending) && (\n <div style={{ margin: '1em 0em 0em', textAlign: 'center' }}>\n <Button\n onClick={handleJoin}\n type='cta'\n style={{ width: '100%', height: '60px' }}\n >\n Join GOVX For Free\n </Button>\n <div\n style={{\n width: '100%',\n textAlign: 'center',\n marginTop: '11px',\n fontSize: '14px',\n }}\n >\n <span style={{ color: '#9B9B9B' }}>Already a member?</span>\n <span> </span>\n <a\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'login',\n })}\n onClick={handleLogin}\n className={classes.link}\n >\n Log In\n </a>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n user: selectUser(state),\n})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n clickLogin: (product, productType) =>\n dispatch(clickLogin(product, productType)),\n clickJoin: (product, productType) =>\n dispatch(clickJoin(product, productType)),\n getAffiliateDetails: (id) => dispatch(fetchAffiliateDetails(id)),\n onOfferClick: (e, affiliate) => {\n e && e.preventDefault()\n dispatch(clickedOffer(ownProps.affiliate))\n return dispatch(\n showModal('DYNAMIC', {\n component: DiscountCodeModal,\n product: ownProps.product,\n affiliate: ownProps.affiliate,\n offerButtonName,\n }),\n )\n },\n gotoLogin: () => dispatch(gotoLogin()),\n gotoRegister: () => dispatch(gotoRegister()),\n})\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n handleLogin: () => {\n dispatchProps.clickLogin(ownProps.product, productTypes.MARKETPLACE)\n dispatchProps.gotoLogin()\n },\n handleJoin: () => {\n dispatchProps.clickJoin(ownProps.product, productTypes.MARKETPLACE)\n dispatchProps.gotoRegister()\n },\n})\n\nconst enhance = compose(\n withState('affiliate', 'setAffiliate', null),\n connect(mapStateToProps, mapDispatchToProps, mergeProps),\n mapProps((o) => {\n return {\n ...o,\n membershipPending: o.user && o.user.isRegistered && !o.user.isApproved,\n user: o.user,\n product: o.product,\n }\n }),\n withHandlers({\n handleDiscountClick: (props) => () => {\n props.onOfferClick()\n },\n }),\n lifecycle({\n componentDidMount() {\n this.props\n .getAffiliateDetails(this.props.product.affiliate.id)\n .then((a) => {\n this.props.setAffiliate(a)\n })\n },\n }),\n withStyles(styles),\n)\n\nexport default enhance(InfoCard)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n compose,\n withProps,\n withState,\n lifecycle,\n shouldUpdate,\n withHandlers,\n} from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport classNames from 'classnames'\nimport PanoramaIcon from '@material-ui/icons/Panorama'\nimport SearchIcon from '@material-ui/icons/Search'\nimport Typography from '@material-ui/core/Typography'\nimport Paper from '@material-ui/core/Paper'\nimport { buildPictureUrl } from '../../../utilities/picture-util'\nimport { showLightbox } from '../../../redux/actions'\nimport NoActionLink from '../common/links/NoActionLink'\nimport LightboxRoot from '../common/Lightbox/LightboxRoot'\nimport { viewedMarketplaceProductImage } from '../../../redux/modules/catalog/products/actions'\nconst styles = {\n '@global': {\n '@keyframes pulse': {\n '0%, 100%': {\n backgroundColor: '#fff',\n },\n '50%': {\n backgroundColor: '#e3e3e3',\n },\n },\n },\n mainImageContainer: {\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n objectFit: 'contain',\n height: '600px',\n borderBottom: '1px solid #e3e3e3',\n overflow: 'hidden',\n padding: '20px',\n },\n mainImageAlt: {\n maxWidth: '100%',\n maxHeight: '580px',\n cursor: 'pointer',\n },\n mainImage: {\n maxWidth: '100%',\n maxHeight: '580px',\n },\n imageLoading: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '250px',\n },\n alternateImages: {\n display: 'flex',\n alignItems: 'center',\n height: 'calc(106px + 1em)',\n padding: '.5em',\n overflowX: 'auto',\n overflowY: 'hidden',\n },\n centeredAlternateImages: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 'calc(106px + 1em)',\n padding: '.5em',\n },\n alternateImageContainer: {\n width: '106px',\n minWidth: '106px',\n height: '106px',\n maxHeight: '106px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n objectFit: 'contain',\n padding: '3px',\n cursor: 'pointer',\n\n '&:not(:last-child)': {\n marginRight: '7px',\n },\n },\n alternateImage: {\n maxWidth: '100%',\n maxHeight: '100px',\n },\n videoThumbnailContainer: {\n height: '100px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n objectFit: 'contain',\n cursor: 'pointer',\n },\n videoThumbnail: {\n maxWidth: '100%',\n height: '100px',\n },\n\n imageWrapper: {\n '&:hover > .overlay1': {\n opacity: '.75 !important',\n width: '500px',\n },\n },\n}\n\nexport const MissingImage = ({ classes }) => (\n <div className={classes.imageLoading}>\n <PanoramaIcon\n style={{ width: '3em', height: '3em', marginBottom: '.5em' }}\n />\n <Typography variant='subtitle1' align='center'>\n Product image not available\n </Typography>\n </div>\n)\n\nexport const Image = ({\n classes,\n onPictureClick,\n pictures,\n seoName,\n video,\n index,\n lightboxPics,\n variant,\n primaryPicture,\n onMainPictureClick,\n}) => (\n <Paper elevation={0}>\n <div className={classes.mainImageContainer} id='mainImageContainer'>\n {primaryPicture && (\n <div className={classes.imageWrapper}>\n <img\n src={buildPictureUrl(primaryPicture, seoName, 683)}\n className={classes.mainImageAlt}\n alt='Product image'\n onClick={() => onMainPictureClick(lightboxPics, index, seoName)}\n />\n <div\n className='overlay1'\n style={{\n position: 'absolute',\n top: '46%',\n left: '46%',\n display: 'block',\n width: '50px',\n height: '50px',\n opacity: 0,\n backgroundColor: '#fff',\n }}\n >\n <a onClick={() => onMainPictureClick(lightboxPics, index, seoName)}>\n <SearchIcon\n style={{ width: '50px', height: '50px', marginLeft: '2px' }}\n />\n </a>\n </div>\n </div>\n )}\n\n {!primaryPicture && (\n <div className={classes.imageLoading}>\n <CircularProgress />\n </div>\n )}\n </div>\n\n <div\n className={classNames(\n pictures && pictures.length > 3\n ? classes.alternateImages\n : classes.centeredAlternateImages,\n 'product-page-images',\n )}\n >\n {pictures &&\n pictures.map((p, i) => (\n <NoActionLink\n className={classes.alternateImageContainer}\n onClick={() => onPictureClick(p, i)}\n onKeyPress={(e) => e.key == 'Enter' && onPictureClick(p, i)}\n key={i}\n >\n <img\n src={buildPictureUrl(p, seoName, 100)}\n className={classes.alternateImage}\n alt={`Product image ${i + 1}`}\n />\n </NoActionLink>\n ))}\n </div>\n <LightboxRoot />\n </Paper>\n)\n\nImage.propTypes = {\n classes: PropTypes.object,\n onPictureClick: PropTypes.func,\n pictures: PropTypes.array,\n seoName: PropTypes.string,\n video: PropTypes.object,\n index: PropTypes.number,\n lightboxPics: PropTypes.array,\n setLightboxPics: PropTypes.func,\n open: PropTypes.bool,\n onMainPictureClick: PropTypes.func,\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n viewedMarketplaceProductImage: () =>\n dispatch(\n viewedMarketplaceProductImage({\n product: ownProps.product,\n }),\n ),\n onLightboxPictureNav: () => {\n dispatch(\n viewedMarketplaceProductImage({\n product: ownProps.product,\n }),\n )\n },\n})\n\nconst mapDispatchToProps2 = (dispatch, ownProps) => ({\n onMainPictureClick: (lightboxPics, index, seoName) => {\n dispatch(\n showLightbox({\n pictures: lightboxPics,\n initialIndex: index,\n seoName: seoName,\n onLightboxPictureNav: ownProps.onLightboxPictureNav,\n }),\n )\n dispatch(\n viewedMarketplaceProductImage({\n product: ownProps.product,\n }),\n )\n },\n})\n\nconst enhance = compose(\n withProps((o) => {\n return {\n pictures: o.product.images,\n seoName: o.product.seoName,\n }\n }),\n withState('imageContainerWidth', 'setImageContainerWidth', (props) => 0),\n withState('index', 'setIndex', 0),\n withState('open', 'setOpen', false),\n withState('primaryPicture', 'setPrimaryPicture', (o) => {\n return o.pictures[0]\n }),\n withState('lightboxPics', 'setLightboxPics', (o) => {\n return o.pictures\n }),\n connect(null, mapDispatchToProps),\n connect(null, mapDispatchToProps2),\n lifecycle({\n componentDidMount() {\n this.props.setImageContainerWidth(\n document.getElementById('mainImageContainer').offsetWidth,\n )\n },\n componentWillReceiveProps(nextProps) {},\n }),\n withHandlers({\n onPictureClick: (props) => (picture, index) => {\n props.setIndex(index)\n props.setPrimaryPicture(picture)\n props.setLightboxPics(props.pictures)\n props.viewedMarketplaceProductImage()\n },\n }),\n shouldUpdate(\n (props, nextProps) =>\n props.primaryPicture !== nextProps.primaryPicture ||\n props.open !== nextProps.open,\n ),\n withStyles(styles),\n)\n\nexport default enhance(Image)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { withStyles } from '@material-ui/core/styles'\nimport {\n compose,\n lifecycle,\n branch,\n withState,\n withHandlers,\n renderNothing,\n} from 'recompose'\nimport Grid from '@material-ui/core/Grid'\nimport {\n selectAffiliateProductDetails,\n selectCart,\n selectVariantByDisplayOrderThenPrice,\n selectUser,\n} from '../../../redux/selectors'\nimport ShippingPolicy from './ShippingPolicy'\nimport ReturnPolicy from './ReturnPolicy'\nimport ProductDetails from './ProductDetails'\nimport { withRouter } from 'react-router'\nimport InfoCard from './InfoCard'\nimport Image from './Image'\nimport Typography from '@material-ui/core/Typography'\nimport AffiliateLink from '../common/links/AffiliateLink'\nimport {\n viewedAffiliateProduct,\n addedAffiliateProduct,\n onEvent,\n} from '../../../redux/actions'\n\nconst styles = {\n title: {\n fontSize: '24px',\n fontFamily: 'geomanist-regular',\n },\n}\n\nexport const AffiliateProductPage = ({\n classes,\n onSellerClick,\n onSelectThumbnail,\n pageState,\n product,\n user,\n}) => (\n <>\n {product && (\n <div style={{ maxWidth: '1200px', margin: '3em auto 0' }}>\n <Grid container spacing={5}>\n <Grid item xs={7}>\n <Image product={product} />\n </Grid>\n <Grid item xs={5}>\n <div style={{ marginBottom: '20px' }}>\n {product.affiliate && (\n <Typography variant='body1' gutterBottom color='primary'>\n <AffiliateLink\n style={{ textDecoration: 'underline' }}\n onClick={() =>\n onSellerClick(null, { seller: product.affiliate })\n }\n affiliate={product.affiliate}\n >\n {product.affiliate.name.toUpperCase()}\n </AffiliateLink>\n </Typography>\n )}\n <Typography\n variant='h5'\n classes={{ root: classes.title }}\n gutterBottom\n style={{ lineHeight: '1.25em' }}\n >\n <strong>{product.name}</strong>\n </Typography>\n </div>\n\n <div style={{ position: 'relative' }}>\n <div\n id='imageZoomPortal'\n style={{ position: 'absolute', left: '-5px' }}\n />\n <InfoCard product={product} />\n <ShippingPolicy seller={product.affiliate} />\n <ReturnPolicy seller={product.affiliate} />\n </div>\n </Grid>\n\n {product.description && (\n <Grid item xs={12}>\n <ProductDetails product={product} />\n </Grid>\n )}\n </Grid>\n </div>\n )}\n </>\n)\n\nAffiliateProductPage.propTypes = {\n cart: PropTypes.object,\n onSelectAttribute: PropTypes.func,\n onSelectThumbnail: PropTypes.func,\n pageSate: PropTypes.object,\n product: PropTypes.object,\n}\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n product: selectAffiliateProductDetails(state),\n user: selectUser(state),\n cart: selectCart(state),\n }\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n viewedAffiliateProduct: (product) =>\n dispatch(viewedAffiliateProduct(product)),\n addedAffiliateProduct: (product) => dispatch(addedAffiliateProduct(product)),\n onSellerClick: (e, entity) => {\n e && e.preventDefault()\n dispatch(\n onEvent({\n category: 'Partner Directory',\n label: 'Affiliate partner',\n action: `${entity.seller.name}_${entity.seller.id}`,\n }),\n )\n },\n})\n\nconst enhance = compose(\n withRouter,\n connect(mapStateToProps, mapDispatchToProps),\n withState('ready', 'setReady', true),\n withHandlers({}),\n lifecycle({\n componentDidMount() {\n this.props.viewedAffiliateProduct(this.props.product)\n },\n }),\n withStyles(styles),\n branch(\n ({ ready }) => !ready,\n () => renderNothing(),\n ),\n)\n\nexport default enhance(AffiliateProductPage)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withProps } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport BrandLink from '../../common/links/BrandLink'\nimport { withStyles } from '@material-ui/core/styles'\n\nconst styles = (theme) => ({\n title: {\n fontSize: '24px',\n fontFamily: 'geomanist-regular',\n },\n})\n\nexport const ProductInfo = ({ product, brand, classes }) => (\n <div>\n {brand && (\n <Typography\n variant='body1'\n style={{ textTransform: 'uppercase' }}\n gutterBottom\n color='primary'\n >\n <BrandLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'brand',\n })}\n brand={brand}\n underlined\n >\n {brand.name}\n </BrandLink>\n </Typography>\n )}\n <Typography\n variant='h5'\n gutterBottom\n classes={{ root: classes.title }}\n style={{ lineHeight: '1.25em' }}\n >\n <strong>{product.name}</strong>\n </Typography>\n </div>\n)\n\nProductInfo.propTypes = {\n brand: PropTypes.object,\n product: PropTypes.object.isRequired,\n}\n\nconst enhance = compose(\n withProps((o) => ({\n brand: o.product.brand,\n })),\n withStyles(styles),\n)\n\nexport default enhance(ProductInfo)\n","import React from 'react'\nimport { compose, withHandlers, lifecycle, withProps } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography'\nimport { connect } from 'react-redux'\nimport Grid from '@material-ui/core/Grid'\n\nimport RatingStars from '../../common/RatingStars'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport { selectQAndA, selectUser } from '../../../../redux/selectors'\n\nconst styles = {\n ratingWrapper: {\n display: 'flex',\n alignItems: 'center',\n padding: '0px',\n margin: '1em auto',\n },\n conversationWrapper: {\n display: 'flex',\n alignItems: 'center',\n margin: '1em auto',\n },\n}\n\nexport const ProductRating = ({\n classes,\n gotoReviews,\n ratingInfo,\n gotoQAndA,\n user,\n qAndA,\n hasRatings,\n}) => (\n <Grid container align='center'>\n {hasRatings && (\n <Grid\n item\n xs={user && user.isApproved && qAndA && qAndA.total > 0 ? 5 : 12}\n className={classes.ratingWrapper}\n >\n <RatingStars\n rating={ratingInfo.averageRating}\n style={{ marginRight: '10px' }}\n />\n {ratingInfo.totalReviews > 0 ? (\n <NoActionLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'product recommendations',\n })}\n onClick={gotoReviews}\n >\n <Typography\n variant='caption'\n style={{ display: 'inline', color: '#666666' }}\n >{`${ratingInfo.totalRatings} rating${ratingInfo.totalRatings > 1 ? 's' : ''}`}</Typography>\n </NoActionLink>\n ) : ratingInfo.totalRatings > 0 ? (\n <Typography variant='caption' style={{ display: 'inline' }}>\n {ratingInfo.totalRatings} rating\n {ratingInfo.totalRatings > 1 ? 's' : ''}\n </Typography>\n ) : null}\n </Grid>\n )}\n {user && user.isApproved && qAndA && qAndA.total > 0 && (\n <Grid\n item\n xs={hasRatings ? 7 : 12}\n className={classes.conversationWrapper}\n style={{\n borderLeft: hasRatings ? 'solid 1px #ccc' : 'none',\n padding: hasRatings ? '0px 24px' : '0px',\n }}\n >\n {\n <Typography\n variant='caption'\n style={{ display: 'inline', color: '#666666' }}\n >\n <NoActionLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'qa-teaser',\n })}\n onClick={gotoQAndA}\n style={{ textDecoration: 'underline' }}\n children={`${qAndA && qAndA.total > 0 ? `${qAndA.total} Conversation${qAndA && qAndA.total > 1 ? 's' : ''}` : `Ask a question`}`}\n />\n </Typography>\n }\n </Grid>\n )}\n </Grid>\n)\n\nconst mapStateToProps = (state, ownProps) => ({\n qAndA: selectQAndA(ownProps.product.id)(state),\n user: selectUser(state),\n})\n\nconst enhance = compose(\n connect(mapStateToProps),\n withProps((o) => ({\n hasRatings: o.ratingInfo && o.ratingInfo.totalRatings > 0,\n })),\n withHandlers({\n gotoReviews: (props) => () => {\n let targetEl = document.getElementById('productReviews')\n if (targetEl)\n window.scroll({ top: targetEl.offsetTop - 90, behavior: 'smooth' })\n },\n gotoQAndA: (props) => () => {\n let targetEl = document.getElementById('qAndA')\n if (targetEl)\n window.scroll({ top: targetEl.offsetTop - 90, behavior: 'smooth' })\n },\n }),\n lifecycle({\n componentDidCatch(error, info) {},\n }),\n withStyles(styles),\n)\n\nexport default enhance(ProductRating)\n","import React from 'react'\nimport { compose } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport { priceBehaviorBits } from '../../../../../utilities/price-util'\n\nconst PriceBehaviorBase = ({ classes, behavior }) => (\n <div className={classes.wrapper}>\n <Typography variant='caption' classes={{ caption: classes.text }}>\n {behavior.name.toUpperCase()}\n </Typography>\n </div>\n)\n\nconst xDealStyles = (theme) => ({\n wrapper: {\n backgroundColor: theme.colors.orange,\n padding: '2px 0px',\n textAlign: 'center',\n borderRadius: '2px',\n },\n text: {\n fontSize: '12px',\n color: theme.colors.white,\n },\n})\n\nconst enhanceXDeal = compose(withStyles(xDealStyles))\n\nconst XDeal = enhanceXDeal(PriceBehaviorBase)\n\nconst flashDealStyles = (theme) => ({\n wrapper: {\n backgroundColor: theme.colors.darkGray,\n padding: '2px 0px',\n textAlign: 'center',\n borderRadius: '2px',\n },\n text: {\n fontSize: '12px',\n color: '#e6a013',\n },\n})\n\nconst enhanceFlashDeal = compose(withStyles(flashDealStyles))\n\nconst FlashDeal = enhanceFlashDeal(PriceBehaviorBase)\n\nconst clearanceStyles = (theme) => ({\n wrapper: {\n backgroundColor: theme.colors.red,\n padding: '2px 0px',\n textAlign: 'center',\n borderRadius: '2px',\n },\n text: {\n fontSize: '12px',\n color: theme.colors.white,\n },\n})\n\nconst enhanceClearance = compose(withStyles(clearanceStyles))\n\nconst Clearance = enhanceClearance(PriceBehaviorBase)\n\n\nconst openBoxStyles = (theme) => ({\n wrapper: {\n backgroundColor: '#D74F27',\n padding: '2px 0px',\n textAlign: 'center',\n borderRadius: '2px',\n },\n text: {\n fontSize: '12px',\n color: theme.colors.white,\n },\n})\n\nconst enhanceOpenBox = compose(withStyles(openBoxStyles))\nconst OpenBox = enhanceOpenBox(PriceBehaviorBase)\n\n\nexport default ({ behavior }) => (\n <div>\n {behavior.id === priceBehaviorBits.none && (\n <div style={{ marginBottom: '2px', fontWeight: '600' }}>GOVX Price</div>\n )}\n {behavior.id === priceBehaviorBits.xDeal && <XDeal behavior={behavior} />}\n {behavior.id === priceBehaviorBits.flashDeal && (\n <FlashDeal behavior={behavior} />\n )}\n {behavior.id === priceBehaviorBits.clearance && (\n <Clearance behavior={behavior} />\n )}\n {behavior.id === priceBehaviorBits.openBox && <OpenBox behavior={behavior} />}\n </div>\n)\n","import React from 'react'\nimport { compose } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport { priceBehaviorBits } from '../../../../../utilities/price-util'\n\nconst priceTagStyles = (theme) => ({\n openBox: {\n color: '#D74F27',\n },\n xDeal: {\n color: theme.colors.orange,\n },\n flashDeal: {\n color: '#e6a013',\n },\n clearance: {\n color: theme.colors.red,\n },\n standard: {\n color: '#333',\n },\n price: {\n fontSize: '24px',\n fontFamily: 'geomanist-regular',\n },\n})\n\nconst PriceTagBase = ({ classes, priceInfo }) => {\n let selectedClass = null\n if (priceInfo.priceBehavior.id === priceBehaviorBits.xDeal)\n selectedClass = classes.xDeal\n else if (priceInfo.priceBehavior.id === priceBehaviorBits.flashDeal)\n selectedClass = classes.flashDeal\n else if (priceInfo.priceBehavior.id === priceBehaviorBits.clearance)\n selectedClass = classes.clearance\n else if (priceInfo.priceBehavior.id === priceBehaviorBits.openBox)\n selectedClass = classes.openBox\n else selectedClass = classes.standard\n\n return (\n <div>\n <Typography\n variant='h6'\n classes={{ h6: selectedClass }}\n style={{ fontSize: '0px' }}\n >\n <strong>\n <span className={classes.price}>\n ${priceInfo.dollars.toLocaleString()}.{priceInfo.cents}\n </span>\n </strong>\n </Typography>\n </div>\n )\n}\nconst enhancePriceTag = compose(withStyles(priceTagStyles))\n\nexport default enhancePriceTag(PriceTagBase)\n","import React from 'react'\nimport { compose, withProps } from 'recompose'\nimport { priceBehaviorBits } from '../../../../../utilities/price-util'\nimport Typography from '@material-ui/core/Typography'\n\nconst PriceMessage = ({ message }) => (\n <div>\n <Typography\n variant='caption'\n style={{ color: '#7B7E84', fontSize: '12px', fontFamily: 'geomanist-book, Helvetica, sans-serif' }}\n >\n {message}\n </Typography>\n </div>\n)\n\nconst getMessage = (behavior) => {\n switch (behavior.id) {\n case priceBehaviorBits.flashDeal:\n return ''\n break\n case priceBehaviorBits.clearance:\n return 'Closeout pricing while supplies last. Final sale. No returns.'\n break\n case priceBehaviorBits.openBox:\n return 'Closeout pricing while supplies last. Final sale. No returns.'\n break\n }\n}\n\nconst enhance = compose(\n withProps((o) => ({\n message: getMessage(o.priceInfo.priceBehavior),\n })),\n)\n\nexport default enhance(PriceMessage)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose, mapProps, withState, lifecycle } from 'recompose'\nimport Grid from '@material-ui/core/Grid'\nimport Typography from '@material-ui/core/Typography'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport {\n dollar,\n getSavings,\n getPriceInfo,\n minPercentToShow,\n} from '../../../../utilities/price-util'\nimport { gotoLogin, gotoRegister } from '../../../../redux/actions'\nimport { selectUser } from '../../../../redux/selectors'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport PriceBehavior from './PriceBehavior'\nimport PriceTag from './PriceTag'\nimport PriceMessage from './PriceMessage'\nimport Button from '../../common/Button/Primary'\nimport { clickLogin, clickJoin } from '../../../../redux/actions'\nimport { productTypes } from '../../../../common/productTypes'\nconst day = 1000 * 60 * 60 * 24\nconst hour = 1000 * 60 * 60\nconst minute = 1000 * 60\n\nconst styles = (theme) => ({\n message: {\n color: theme.colors.orange,\n marginTop: '10px',\n padding: '0px 16px',\n },\n})\n\nconst priceStyles = () => ({\n link: {\n textDecoration: 'underline',\n cursor: 'pointer',\n fontFamily: 'geomanist-regular, Helvetica, sans-serif',\n fontWeight: '400',\n color: '#0E5777',\n '&:hover': {\n color: '#000',\n },\n '&:active': {\n color: '#0E5777',\n backgroundColor: '#B1E2F5',\n },\n },\n})\n\nconst DealTimerBase = ({ classes, dealMessage, expires }) =>\n dealMessage &&\n expires && (\n <Typography variant='caption' className={classes.message}>\n {dealMessage.toUpperCase()}\n </Typography>\n )\nexport const DealTimer = compose(withStyles(styles))(DealTimerBase)\n\nlet _timeout = null\n\nconst createTimeout = (props) => {\n let now = new Date()\n let diff = props.expires - now\n\n _timeout && clearTimeout(_timeout)\n\n if (diff <= 0) {\n props.setDealMessage('Deal expired. Refresh to see new price!')\n } else if (diff > day * 31) {\n props.setDealMessage(null)\n } else if (diff > day * 30) {\n props.setDealMessage(`Hurry! Limited Time Price!`)\n _timeout = setTimeout(() => createTimeout(props), hour)\n } else if (diff > day * 26) {\n props.setDealMessage(`Deal expires in a month!`)\n _timeout = setTimeout(() => createTimeout(props), hour)\n } else if (diff > day) {\n props.setDealMessage(`Deal expires in ${Math.ceil(diff / day)} days!`)\n _timeout = setTimeout(() => createTimeout(props), hour)\n } else if (diff > hour) {\n props.setDealMessage(`Deal expires in ${Math.ceil(diff / hour)} hours!`)\n _timeout = setTimeout(() => createTimeout(props), minute)\n } else if (diff > minute) {\n props.setDealMessage(`Deal expires in ${Math.ceil(diff / minute)} minutes!`)\n _timeout = setTimeout(() => createTimeout(props), 1000)\n } else {\n props.setDealMessage(`Deal expires in less than a minute!`)\n _timeout = setTimeout(() => createTimeout(props), 1000)\n }\n}\n\nexport const MissingVariant = () => (\n <div style={{ margin: '1em 0em 1.5em' }}>\n <Typography variant='h6' color='secondary' gutterBottom>\n Unavailable\n </Typography>\n <Typography variant='caption' style={{ paddingBottom: '6px' }}>\n This product is currently unavailable.\n </Typography>\n </div>\n)\n\nexport const Expired = () => (\n <div>\n <Typography variant='caption'>\n <strong>DEAL EXPIRED, REFRESH TO SEE NEW PRICE!</strong>\n </Typography>\n </div>\n)\n\nexport const SaleDisplay = ({ priceInfo, showSalePriceWide }) => (\n <Grid item xs={showSalePriceWide ? 4 : 3} style={{ padding: '0px 16px' }}>\n <Grid container direction='column'>\n <Grid item style={{ height: '30px' }}>\n <PriceBehavior behavior={priceInfo.priceBehavior} />\n </Grid>\n <Grid item style={{ height: '30px' }}>\n <PriceTag priceInfo={priceInfo} />\n </Grid>\n </Grid>\n </Grid>\n)\n\nexport const WasPrice = ({ priceInfo }) => (\n <Grid\n item\n xs={3}\n style={{ borderLeft: 'solid 1px #ccc', padding: '0px 16px' }}\n >\n <Grid container direction='column'>\n <Grid item style={{ height: '30px' }}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '14px', fontWeight: '600' }}\n >\n Was\n </Typography>\n </Grid>\n <Grid item style={{ height: '30px' }}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '20px', fontWeight: '600' }}\n >\n {dollar(priceInfo.preSalePrice)}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n)\n\nconst RetailPrice = ({ price }) => (\n <Grid\n item\n xs={3}\n style={{ borderLeft: 'solid 1px #ccc', padding: '0px 16px' }}\n >\n <Grid container direction='column'>\n <Grid item style={{ height: '30px' }}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '14px', fontWeight: '600' }}\n >\n Retail Price\n </Typography>\n </Grid>\n <Grid item style={{ height: '30px' }}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '20px', fontWeight: '600' }}\n >\n <span style={{ textDecoration: 'line-through' }}>\n {dollar(price.msrp)}\n </span>\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n)\n\nconst SavingsPercent = ({ savings, showSavingsSmall }) => (\n <Grid\n item\n xs={showSavingsSmall ? 2 : 3}\n style={{ borderLeft: 'solid 1px #ccc', padding: '0px 16px' }}\n >\n <Grid container direction='column'>\n <Grid item style={{ height: '30px' }}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '14px', fontWeight: '600' }}\n >\n {showSavingsSmall ? '' : 'You'} Save\n </Typography>\n </Grid>\n <Grid item style={{ height: '30px' }}>\n <Typography\n variant='caption'\n style={{ color: '#666', fontSize: '20px', fontWeight: '600' }}\n >\n {savings}%\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n)\n\nexport const Price = ({\n classes,\n price,\n priceInfo,\n dealMessage,\n expires,\n product,\n}) => {\n let savings = getSavings(price)\n let passesSavingsThreshold = savings > minPercentToShow\n let showSalePriceWide = priceInfo.formatted && priceInfo.formatted.length > 7\n let showWasPrice =\n passesSavingsThreshold &&\n priceInfo.priceBehavior.sale &&\n priceInfo.preSalePrice > priceInfo.price\n let showRetailPrice = passesSavingsThreshold && priceInfo.price !== price.msrp\n let showSavingsSmall = showSalePriceWide && showWasPrice && showRetailPrice\n\n return (\n <div style={{ marginBottom: '14px' }}>\n <Grid\n container\n alignItems='flex-end'\n style={{\n padding: '4px 0px',\n borderTop: 'solid 1px #ccc',\n borderBottom: 'solid 1px #ccc',\n }}\n alignContent='space-between'\n >\n <SaleDisplay\n priceInfo={priceInfo}\n showSalePriceWide={showSalePriceWide}\n />\n {showWasPrice && <WasPrice priceInfo={priceInfo} />}\n {showRetailPrice && <RetailPrice price={price} />}\n {showRetailPrice && (\n <SavingsPercent\n savings={savings}\n showSavingsSmall={showSavingsSmall}\n />\n )}\n <Grid item xs={12} style={{ marginTop: '5px' }}>\n {priceInfo.priceBehavior.showTimer ? (\n <DealTimer dealMessage={dealMessage} expires={expires} />\n ) : (\n <PriceMessage priceInfo={priceInfo} />\n )}\n </Grid>\n </Grid>\n </div>\n )\n}\n\nexport const MissingPrice = ({\n membershipPending,\n user,\n handleLogin,\n handleJoin,\n classes,\n}) =>\n membershipPending ? (\n <div style={{ margin: '1em 0em 1.5em' }}>\n <Typography variant='h6' color='secondary' gutterBottom>\n Why can't I see prices?\n </Typography>\n <Typography variant='caption'>\n We've negotiated prices so good, our brand partners don't allow us to\n share them with people who aren't approved members of GOVX. Once your\n pending membership is approved, you'll be able to see prices and shop.\n </Typography>\n </div>\n ) : user ? (\n <MissingVariant />\n ) : (\n <div style={{ margin: '1em 0em 1.5em' }}>\n <span>\n <span>\n Current and former military, law enforcement, firefighters, healthcare\n workers and government employees can join the GOVX community for FREE\n to shop this product and thousands more.\n </span>\n <br />\n\n {(!user || membershipPending) && (\n <div style={{ margin: '1em 0em 0em', textAlign: 'center' }}>\n <Button onClick={handleJoin} type='cta' style={{ width: '100%' }}>\n Join GOVX For Free\n </Button>\n <div\n style={{\n width: '100%',\n textAlign: 'center',\n marginTop: '8px',\n fontSize: '14px',\n }}\n >\n <span style={{ color: '#9B9B9B' }}>Already a member?</span>\n <span> </span>\n <a\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'login',\n })}\n onClick={handleLogin}\n className={classes.link}\n >\n Log In\n </a>\n </div>\n </div>\n )}\n </span>\n </div>\n )\n\nexport const ProductPrice = ({\n classes,\n handleLogin,\n handleJoin,\n membershipPending,\n user,\n price,\n variant,\n priceInfo,\n dealMessage,\n expires,\n product,\n}) => {\n if (!variant) return <MissingVariant />\n if (!price || (!price.price && price.price !== 0.0))\n return (\n <MissingPrice\n membershipPending={membershipPending}\n classes={classes}\n handleLogin={handleLogin}\n handleJoin={handleJoin}\n user={user}\n />\n )\n if (priceInfo && priceInfo.expired) return <Expired />\n return (\n <Price\n classes={classes}\n expires={expires}\n dealMessage={dealMessage}\n price={price}\n priceInfo={priceInfo}\n product={product}\n />\n )\n}\n\nProductPrice.propTypes = {\n membershipPending: PropTypes.bool,\n price: PropTypes.object,\n user: PropTypes.object,\n variant: PropTypes.object,\n priceInfo: PropTypes.object,\n product: PropTypes.object.isRequired,\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n user: selectUser(state),\n})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n clickLogin: (product, productType) =>\n dispatch(clickLogin(product, productType)),\n clickJoin: (product, productType) =>\n dispatch(clickJoin(product, productType)),\n gotoLogin: () => dispatch(gotoLogin()),\n gotoRegister: () => dispatch(gotoRegister()),\n})\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n handleLogin: () => {\n dispatchProps.clickLogin(ownProps.product, productTypes.SHOP)\n dispatchProps.gotoLogin()\n },\n handleJoin: () => {\n dispatchProps.clickJoin(ownProps.product, productTypes.SHOP)\n dispatchProps.gotoRegister()\n },\n})\n\nconst enhance = compose(\n connect(mapStateToProps, mapDispatchToProps, mergeProps),\n withState('dealMessage', 'setDealMessage', null),\n mapProps((o) => {\n let variant = o.product.variants.find((v) => v.id === o.variantId)\n let price = variant && variant.price\n\n return {\n variant,\n price: price,\n membershipPending: o.user && o.user.isRegistered && !o.user.isApproved,\n user: o.user,\n priceInfo: getPriceInfo(price),\n expires:\n price && price.endDateTimeUtc && new Date(price.endDateTimeUtc + 'Z'),\n dealMessage: o.dealMessage,\n setDealMessage: o.setDealMessage,\n product: o.product,\n gotoLogin: o.gotoLogin,\n gotoRegister: o.gotoRegister,\n handleLogin: o.handleLogin,\n handleJoin: o.handleJoin,\n }\n }),\n lifecycle({\n componentDidMount() {\n createTimeout(this.props)\n },\n componentWillReceiveProps(nextProps) {\n if (!nextProps.expires) _timeout && clearTimeout(_timeout)\n if (\n nextProps.expires &&\n (!this.props.expires ||\n nextProps.expires.getTime() != this.props.expires.getTime())\n )\n createTimeout(nextProps)\n },\n componentWillUnmount() {\n _timeout && clearTimeout(_timeout)\n },\n }),\n withStyles(priceStyles),\n)\n\nexport default enhance(ProductPrice)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withHandlers } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport NoActionLink from '../../../common/links/NoActionLink'\nimport { buildPictureUrl } from '../../../../../utilities/picture-util'\nimport { getAttributeName } from '../../../../../utilities/product-util'\nconst styles = (theme) => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: '-7px',\n },\n thumbnail: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n objectFit: 'contain',\n width: '58px',\n height: '58px',\n backgroundColor: '#fff',\n marginBottom: '7px',\n overflow: 'hidden',\n cursor: 'pointer',\n border: '1px solid #ccc',\n\n '&:not(:last-child)': {\n marginRight: '7px',\n },\n },\n selected: {\n border: `2px solid ${theme.colors.lightBlue}`,\n },\n image: {\n maxWidth: '50px',\n maxHeight: '50px',\n },\n})\n\nexport const hasSameId = (el, index, arr) =>\n index === 0 || el.id === arr[index - 1].id\n\nexport const renderThumbnail = (\n attributeGroups,\n classes,\n onThumbnailClick,\n t,\n) => (\n <NoActionLink\n key={t.attributeId}\n onClick={() => onThumbnailClick(t)}\n className={[classes.thumbnail, t.selected && classes.selected].join(' ')}\n >\n <img\n src={buildPictureUrl(t.picture, null, 50)}\n className={classes.image}\n alt={getAttributeName(t.attributeId, attributeGroups)}\n />\n </NoActionLink>\n)\n\nexport const Thumbnails = ({\n attributeGroups,\n classes,\n onThumbnailClick,\n thumbnails,\n}) =>\n thumbnails &&\n thumbnails.length && (\n <div className={classes.container}>\n {thumbnails.every(hasSameId)\n ? renderThumbnail(attributeGroups, classes, () => {}, {\n ...thumbnails[0],\n selected: true,\n })\n : thumbnails.map((t) =>\n renderThumbnail(attributeGroups, classes, onThumbnailClick, t),\n )}\n </div>\n )\n\nThumbnails.propTypes = {\n classes: PropTypes.object.isRequired,\n onThumbnailClick: PropTypes.func.isRequired,\n thumbnails: PropTypes.array.isRequired,\n}\n\nconst enhance = compose(\n withHandlers({\n onThumbnailClick: (props) => (t) => props.onSelectThumbnail(t),\n }),\n withStyles(styles),\n)\n\nexport default enhance(Thumbnails)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withProps, withHandlers } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography'\n\nimport Button from '../../../../common/Button'\n\nconst styles = {\n buttons: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n button: {\n marginBottom: '7px',\n\n '&:not(:last-child)': {\n marginRight: '7px',\n },\n },\n}\n\nexport const AttributeButtons = ({\n attributes,\n classes,\n label,\n onAttributeClick,\n selectedId,\n}) => (\n <div style={{ margin: '1.5em 0em' }}>\n <Typography variant='button' gutterBottom>\n {label}\n </Typography>\n <div className={classes.buttons}>\n {attributes.map((a) => (\n <Button\n key={a.id}\n children={a.name}\n aria-label={`${a.name} - ${!a.available ? 'not available' : ''}`}\n size='small'\n //disabled={ !a.available }\n color={\n !a.available\n ? 'default'\n : selectedId === a.id\n ? 'secondary'\n : 'primary'\n }\n className={classes.button}\n onClick={() => onAttributeClick(a)}\n />\n ))}\n </div>\n </div>\n)\n\nAttributeButtons.propTypes = {\n attributes: PropTypes.array.isRequired,\n classes: PropTypes.object.isRequired,\n onAttributeClick: PropTypes.func.isRequired,\n selectedId: PropTypes.number,\n}\n\nconst enhance = compose(\n withProps((o) => ({\n attributes: o.group.attributes,\n label: o.group.uiLabel,\n selectedId: o.group.value,\n })),\n withHandlers({\n onAttributeClick: (props) => (attribute) =>\n props.onSelectAttribute(props.group, attribute.id),\n }),\n withStyles(styles),\n)\n\nexport default enhance(AttributeButtons)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withProps, withHandlers } from 'recompose'\nimport ClassicSelect from '../../../../common/inputs/Select/classic'\nimport withStyles from '@material-ui/core/styles/withStyles'\nexport const formatAttributes = (attributes) => {\n let options = []\n\n attributes.map((a) => {\n let label = a.name + (a.available ? '' : ' - not available')\n options.push({ label, value: a.id, key: a.id, ...a })\n })\n\n return options\n}\n\nconst styles = (theme) => ({})\n\nexport const AttributeSelect = ({\n attributes,\n label,\n onChangeAttribute,\n value,\n classes,\n}) => (\n <div style={{ margin: '1.5em 0em' }}>\n <ClassicSelect\n label={label}\n labelStyle={{\n backgroundColor: '#fff',\n padding: '0px 7px',\n fontSize: '1.1rem',\n color: '#333',\n }}\n name={`select-${label}`}\n value={value}\n fullWidth\n onChange={onChangeAttribute}\n items={attributes}\n />\n </div>\n)\n\nAttributeSelect.propTypes = {\n attributes: PropTypes.array.isRequired,\n label: PropTypes.string.isRequired,\n onChangeAttribute: PropTypes.func,\n value: PropTypes.number,\n}\n\nconst enhance = compose(\n withProps((o) => ({\n attributes: formatAttributes(o.group.attributes),\n label: `Select a ${o.group.uiLabel}`,\n value: o.group.value,\n })),\n withHandlers({\n onChangeAttribute: (props) => (e) => {\n const attributeID =\n e.target.value !== ''\n ? props.attributes.find((a) => a.id == e.target.value).id\n : null\n props.onSelectAttribute(props.group, attributeID)\n },\n }),\n withStyles(styles),\n)\n\nexport default enhance(AttributeSelect)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\n\nimport AttributeButtons from './AttributeButtons'\nimport AttributeSelect from './AttributeSelect'\n\nconst SingleAttribute = ({ label, value }) => (\n <div style={{ margin: '1.5em 0em' }}>\n <Typography variant='button'>{label}</Typography>\n <Typography variant='body1'>\n <strong>{value}</strong>\n </Typography>\n </div>\n)\n\nexport const AttributeGroup = ({ group, onSelectAttribute }) => {\n if (group.attributes.length < 1) return null\n\n if (group.attributes.length === 1)\n return (\n <SingleAttribute label={group.uiLabel} value={group.attributes[0].name} />\n )\n\n switch (group.templateType) {\n case 1:\n return (\n <AttributeSelect group={group} onSelectAttribute={onSelectAttribute} />\n )\n case 2:\n return (\n <AttributeButtons group={group} onSelectAttribute={onSelectAttribute} />\n )\n default:\n return null\n }\n}\n\nAttributeGroup.propTypes = {\n group: PropTypes.object.isRequired,\n onSelectAttribute: PropTypes.func.isRequired,\n}\n\nconst enhance = compose()\n\nexport default enhance(AttributeGroup)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose, lifecycle, withProps } from 'recompose'\nimport Table from '@material-ui/core/Table'\nimport TableBody from '@material-ui/core/TableBody'\nimport TableCell from '@material-ui/core/TableCell'\nimport TableHead from '@material-ui/core/TableHead'\nimport TableRow from '@material-ui/core/TableRow'\nimport Typography from '@material-ui/core/Typography'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport ModalContainer from '../../../common/modals/ModalContainer'\nimport { selectSizeChart } from '../../../../../redux/selectors'\nimport { requireSizeChart } from '../../../../../redux/actions'\nimport DialogContent from '@material-ui/core/DialogContent'\n\nconst styles = (theme) => ({\n header: {\n padding: '4px 16px 4px 24px',\n fontSize: '12px',\n color: 'rgba(0,0,0,.54)',\n },\n})\n\nconst SizeChartModal = ({ classes, brandName, sizeChart }) =>\n sizeChart && (\n <ModalContainer title={`${brandName} size chart`} maxWidth='1200px'>\n <DialogContent>\n <Table>\n <TableHead>\n <TableRow style={{ height: '56px' }}>\n {Object.keys(sizeChart.chartValues[0]).map((label) => (\n <TableCell classes={{ root: classes.header }} key={label}>\n {label}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {sizeChart.chartValues.map((row, i) => (\n <TableRow\n key={i}\n style={{\n height: '48px',\n backgroundColor: i % 2 === 0 ? '#fafafa' : '#fff',\n }}\n >\n {Object.keys(row)\n .map((k) => row[k])\n .map((value, i) => (\n <TableCell key={i}>{value}</TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n {sizeChart.notes && (\n <Typography\n variant='caption'\n style={{ color: 'rgba(0,0,0,.87)', marginTop: '1.5em' }}\n >\n {sizeChart.notes}\n </Typography>\n )}\n </DialogContent>\n </ModalContainer>\n )\n\nSizeChartModal.propTypes = {\n brandName: PropTypes.string.isRequired,\n productId: PropTypes.number.isRequired,\n sizeChart: PropTypes.object,\n sizeChartId: PropTypes.number.isRequired,\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n sizeChart: selectSizeChart(state),\n})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n requireSizeChart: (sizeChartId, productId) =>\n dispatch(requireSizeChart(ownProps.productId, ownProps.sizeChartId)),\n})\n\nconst enhance = compose(\n withProps({}), // Not sure why, but the modal breaks w/out this\n connect(mapStateToProps, mapDispatchToProps),\n lifecycle({\n componentDidMount() {\n this.props.requireSizeChart(this.props.productId, this.props.sizeChartId)\n },\n }),\n withStyles(styles),\n)\n\nexport default enhance(SizeChartModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose, withProps } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport GridIcon from '@material-ui/icons/GridOn'\n\nimport { showModal } from '../../../../redux/actions'\nimport { selectBrand, selectUser } from '../../../../redux/selectors'\nimport Thumbnails from './Thumbnails'\nimport AttributeGroup from './AttributeGroup'\nimport SizeChartModal from './SizeChartModal'\nimport NoActionLink from '../../common/links/NoActionLink'\n\nexport const ProductOptions = ({\n attributeGroups,\n brand,\n onSelectAttribute,\n onSelectThumbnail,\n openSizeChartModal,\n product,\n thumbnails,\n user,\n}) => (\n <div>\n {thumbnails && thumbnails.length > 0 && (\n <Thumbnails\n thumbnails={thumbnails}\n onSelectThumbnail={onSelectThumbnail}\n attributeGroups={attributeGroups}\n />\n )}\n {user &&\n attributeGroups &&\n attributeGroups\n .sort((left, right) => left.displayOrder - right.displayOrder)\n .map((a) => (\n <div key={a.id}>\n <AttributeGroup onSelectAttribute={onSelectAttribute} group={a} />\n {product.sizeChart &&\n a.displayOrder === product.sizeChart.displayAttributeNumber && (\n <Typography variant='body1' style={{ marginTop: '-1.5em' }}>\n <NoActionLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'size-chart',\n })}\n onClick={() =>\n openSizeChartModal(\n product.id,\n product.sizeChart.sizeChartId,\n brand.name,\n )\n }\n color='primary'\n >\n <GridIcon\n style={{\n width: '18px',\n height: '18px',\n margin: '0px 5px -4px 0px',\n }}\n />\n Size chart\n </NoActionLink>\n {product.sizeChart.fitIndicatorType && (\n <span> | {product.sizeChart.fitIndicatorType}</span>\n )}\n </Typography>\n )}\n </div>\n ))}\n </div>\n)\n\nProductOptions.propTypes = {\n attributeGroups: PropTypes.array,\n brand: PropTypes.object,\n onSelectAttribute: PropTypes.func,\n onSelectThumbnail: PropTypes.func,\n product: PropTypes.object.isRequired,\n thumbnails: PropTypes.array,\n user: PropTypes.object,\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n brand: selectBrand(ownProps.product.brandId)(state),\n user: selectUser(state),\n})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n openSizeChartModal: (productId, sizeChartId, brandName) =>\n dispatch(\n showModal('DYNAMIC', {\n component: SizeChartModal,\n productId,\n sizeChartId,\n brandName,\n }),\n ),\n})\n\nconst enhance = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withProps((o) => ({\n thumbnails: o.pageState.thumbnails,\n attributeGroups: o.pageState.attributeGroups,\n })),\n)\n\nexport default enhance(ProductOptions)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'recompose'\nimport NoActionLink from '../../../common/links/NoActionLink'\nimport { showModal } from '../../../../../redux/actions'\n\nexport const YouTubeThumbnail = ({ onClick, video }) =>\n video ? (\n <NoActionLink\n onClick={onClick}\n onKeyPress={(e) => e.key === 'Enter' && onClick()}\n >\n <img\n src={`//img.youtube.com/vi/${video.id}/hqdefault.jpg`}\n height='100'\n alt='YouTube Video'\n />\n </NoActionLink>\n ) : null\n\nYouTubeThumbnail.propTypes = {\n onClick: PropTypes.func.isRequired,\n video: PropTypes.object.isRequired,\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n onClick: () =>\n dispatch(\n showModal('VIDEO', {\n url: `https://www.youtube.com/watch?v=${ownProps.video.id}`,\n category: 'Product Page',\n }),\n ),\n})\n\nconst enhance = compose(connect(null, mapDispatchToProps))\n\nexport default enhance(YouTubeThumbnail)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose, lifecycle, withState } from 'recompose'\nimport NoActionLink from '../../../common/links/NoActionLink'\nimport { showModal } from '../../../../../redux/actions'\nimport { fetchVideo } from '../../../../../api/vimeoApi'\n\nexport const VimeoThumbnail = ({ onClick, video, vimeoInfo }) =>\n vimeoInfo ? (\n <NoActionLink\n onClick={onClick}\n onKeyPress={(e) => e.key === 'Enter' && onClick()}\n >\n <img height='100' src={vimeoInfo.thumbnail_medium} alt='Vimeo Video' />\n </NoActionLink>\n ) : null\n\nVimeoThumbnail.propTypes = {\n onClick: PropTypes.func.isRequired,\n video: PropTypes.object.isRequired,\n vimeoInfo: PropTypes.object,\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n onClick: () =>\n dispatch(\n showModal('VIDEO', {\n url: ownProps.vimeoInfo.url,\n category: 'Product Page',\n }),\n ),\n})\n\nconst enhance = compose(\n withState('vimeoInfo', 'setVimeoInfo', null),\n connect(null, mapDispatchToProps),\n lifecycle({\n componentDidMount() {\n fetchVideo(this.props.video.id)\n .then((vimeo) => {\n this.props.setVimeoInfo(vimeo[0])\n })\n .catch((err) => console.log('Error fetching Vimeo video: ', err))\n },\n }),\n)\n\nexport default enhance(VimeoThumbnail)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { withStyles } from '@material-ui/core/styles'\n\nimport YouTubeThumbnail from './YouTubeThumbnail'\nimport VimeoThumbnail from './VimeoThumbnail'\n\nconst styles = {\n container: {\n width: '133.328px',\n height: '100px',\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 100,\n\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n top: 'calc(50% - 25px)',\n left: 'calc(50% - 25px)',\n width: '50px',\n height: '50px',\n borderRadius: '50%',\n backgroundColor: 'rgba(255, 255, 255, .6)',\n zIndex: 200,\n cursor: 'pointer',\n pointerEvents: 'none',\n },\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n top: 'calc(50% - 10px)',\n left: 'calc(50% - 4px)',\n width: '0px',\n height: '0px',\n borderTop: '10px solid transparent',\n borderBottom: '10px solid transparent',\n borderLeft: '15px solid #e31837',\n zIndex: 300,\n cursor: 'pointer',\n pointerEvents: 'none',\n },\n '&:hover:before': {\n backgroundColor: '#fff',\n },\n '&:empty': {\n display: 'none',\n },\n },\n}\n\nexport const VideoThumbnail = ({ classes, video }) => {\n switch (video.type) {\n case 1:\n return (\n <div className={classes.container}>\n <YouTubeThumbnail video={video} />\n </div>\n )\n case 2:\n return (\n <div className={classes.container}>\n <VimeoThumbnail video={video} />\n </div>\n )\n default:\n return null\n }\n}\n\nVideoThumbnail.propTypes = {\n classes: PropTypes.object.isRequired,\n video: PropTypes.object.isRequired,\n}\n\nexport default withStyles(styles)(VideoThumbnail)\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport {\r\n compose,\r\n withProps,\r\n withState,\r\n lifecycle,\r\n shouldUpdate,\r\n withHandlers,\r\n getContext,\r\n} from 'recompose'\r\nimport { withStyles } from '@material-ui/core/styles'\r\nimport classNames from 'classnames'\r\nimport PanoramaIcon from '@material-ui/icons/Panorama'\r\nimport SearchIcon from '@material-ui/icons/Search'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Slide from '@material-ui/core/Slide'\r\nimport { buildPictureUrl } from '../../../../utilities/picture-util'\r\nimport VideoThumbnail from '../ProductVideo/VideoThumbnail'\r\nimport { showLightbox } from '../../../../redux/actions'\r\nimport NoActionLink from '../../common/links/NoActionLink'\r\nimport LightboxRoot from '../../common/Lightbox/LightboxRoot'\r\nimport { viewedShopProductImage, viewedShopProductVideo } from '../../../../redux/actions'\r\nconst styles = {\r\n '@global': {\r\n '@keyframes pulse': {\r\n '0%, 100%': {\r\n backgroundColor: '#fff',\r\n },\r\n '50%': {\r\n backgroundColor: '#e3e3e3',\r\n },\r\n },\r\n },\r\n mainImageContainer: {\r\n position: 'relative',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n objectFit: 'contain',\r\n height: '600px',\r\n borderBottom: '1px solid #e3e3e3',\r\n overflow: 'hidden',\r\n padding: '20px',\r\n },\r\n mainImageAlt: {\r\n maxWidth: '100%',\r\n maxHeight: '580px',\r\n cursor: 'pointer',\r\n },\r\n mainImage: {\r\n maxWidth: '100%',\r\n maxHeight: '580px',\r\n },\r\n imageLoading: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '250px',\r\n },\r\n alternateImages: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: 'calc(106px + 1em)',\r\n padding: '.5em',\r\n overflowX: 'auto',\r\n overflowY: 'hidden',\r\n },\r\n centeredAlternateImages: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: 'calc(106px + 1em)',\r\n padding: '.5em',\r\n },\r\n alternateImageContainer: {\r\n width: '106px',\r\n minWidth: '106px',\r\n height: '106px',\r\n maxHeight: '106px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n objectFit: 'contain',\r\n padding: '3px',\r\n cursor: 'pointer',\r\n\r\n '&:not(:last-child)': {\r\n marginRight: '7px',\r\n },\r\n },\r\n alternateImage: {\r\n maxWidth: '100%',\r\n maxHeight: '100px',\r\n },\r\n videoThumbnailContainer: {\r\n height: '100px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n objectFit: 'contain',\r\n cursor: 'pointer',\r\n },\r\n videoThumbnail: {\r\n maxWidth: '100%',\r\n height: '100px',\r\n },\r\n\r\n imageWrapper: {\r\n '&:hover > .overlay1': {\r\n opacity: '.75 !important',\r\n width: '500px',\r\n },\r\n },\r\n}\r\n\r\nexport const MissingImage = ({ classes }) => (\r\n <div className={classes.imageLoading}>\r\n <PanoramaIcon\r\n style={{ width: '3em', height: '3em', marginBottom: '.5em' }}\r\n />\r\n <Typography variant='subtitle1' align='center'>\r\n Product image not available\r\n </Typography>\r\n </div>\r\n)\r\n\r\nexport const ProductImage = ({\r\n classes,\r\n onPictureClick,\r\n onVideoClick,\r\n pictures,\r\n seoName,\r\n video,\r\n index,\r\n lightboxPics,\r\n variant,\r\n primaryPicture,\r\n onMainPictureClick,\r\n}) => (\r\n <Paper elevation={0}>\r\n <div className={classes.mainImageContainer} id='mainImageContainer'>\r\n {primaryPicture && primaryPicture.id !== 0 && (\r\n <div className={classes.imageWrapper}>\r\n <img\r\n src={buildPictureUrl(primaryPicture, seoName, 683)}\r\n className={classes.mainImageAlt}\r\n alt='Product image'\r\n onClick={() => onMainPictureClick(lightboxPics, index, seoName)}\r\n />\r\n <div\r\n className='overlay1'\r\n style={{\r\n position: 'absolute',\r\n top: '46%',\r\n left: '46%',\r\n display: 'block',\r\n width: '50px',\r\n height: '50px',\r\n opacity: 0,\r\n backgroundColor: '#fff',\r\n }}\r\n >\r\n <a onClick={() => onMainPictureClick(lightboxPics, index, seoName)}>\r\n <SearchIcon\r\n style={{ width: '50px', height: '50px', marginLeft: '2px' }}\r\n />\r\n </a>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {primaryPicture && primaryPicture.id === 0 && (\r\n <div className={classes.mainImage}>\r\n <MissingImage classes={classes} />\r\n </div>\r\n )}\r\n {!primaryPicture && (\r\n <div className={classes.imageLoading}>\r\n <CircularProgress />\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div\r\n className={classNames(\r\n pictures && pictures.length > 3\r\n ? classes.alternateImages\r\n : classes.centeredAlternateImages,\r\n 'product-page-images',\r\n )}\r\n >\r\n {pictures &&\r\n pictures.map((p, i) => (\r\n <NoActionLink\r\n className={classes.alternateImageContainer}\r\n onClick={() => onPictureClick(p, i)}\r\n onKeyPress={(e) => e.key == 'Enter' && onPictureClick(p, i)}\r\n key={p.id}\r\n >\r\n <img\r\n src={buildPictureUrl(p, seoName, 100)}\r\n className={classes.alternateImage}\r\n alt={`Product image ${i + 1}`}\r\n />\r\n </NoActionLink>\r\n ))}\r\n {video && (\r\n <div className={classes.videoThumbnailContainer}>\r\n <div className={classes.videoThumbnail}>\r\n <NoActionLink\r\n onClick={() => onVideoClick(video)}\r\n onKeyPress={(e) => e.key == 'Enter' && onVideoClick(video)}>\r\n <VideoThumbnail video={video} />\r\n </NoActionLink>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n <LightboxRoot />\r\n </Paper>\r\n)\r\n\r\nProductImage.propTypes = {\r\n classes: PropTypes.object,\r\n onPictureClick: PropTypes.func,\r\n onVideoClick: PropTypes.func,\r\n pictures: PropTypes.array,\r\n seoName: PropTypes.string,\r\n video: PropTypes.object,\r\n index: PropTypes.number,\r\n lightboxPics: PropTypes.array,\r\n setLightboxPics: PropTypes.func,\r\n open: PropTypes.bool,\r\n onMainPictureClick: PropTypes.func,\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => ({\r\n viewedShopProductImage: (variantId) =>\r\n dispatch(\r\n viewedShopProductImage({\r\n product: ownProps.product,\r\n variantId: variantId\r\n }),\r\n ),\r\n onLightboxPictureNav: () => {\r\n dispatch(\r\n viewedShopProductImage({\r\n product: ownProps.product,\r\n variantId: ownProps.pageState?.selection?.variantId,\r\n }),\r\n )\r\n },\r\n viewedShopProductVideo: (variantId) => \r\n dispatch(\r\n viewedShopProductVideo({\r\n product: ownProps.product,\r\n variantId: variantId\r\n }),\r\n )\r\n})\r\n\r\nconst mapDispatchToProps2 = (dispatch, ownProps) => ({\r\n onMainPictureClick: (lightboxPics, index, seoName) => {\r\n dispatch(\r\n showLightbox({\r\n pictures: lightboxPics,\r\n initialIndex: index,\r\n seoName: seoName,\r\n onLightboxPictureNav: ownProps.onLightboxPictureNav,\r\n }),\r\n )\r\n dispatch(\r\n viewedShopProductImage({\r\n product: ownProps.product,\r\n variantId: ownProps.pageState?.selection?.variantId,\r\n }),\r\n )\r\n },\r\n})\r\n\r\nconst enhance = compose(\r\n withProps((o) => ({\r\n pictures: o.product.pictures\r\n .slice()\r\n .sort((left, right) => left.displayOrder - right.displayOrder),\r\n seoName: o.product.seoName,\r\n video: o.product.videoId\r\n ? { id: o.product.videoId, type: o.product.videoType }\r\n : null,\r\n })),\r\n withState('imageContainerWidth', 'setImageContainerWidth', (props) => 0),\r\n withState('index', 'setIndex', 0),\r\n withState('open', 'setOpen', false),\r\n withState('primaryPicture', 'setPrimaryPicture', (o) => {\r\n let variant = o.product.variants.find((v) => v.id === o.variantId)\r\n const pictures = o.pictures\r\n .slice()\r\n .sort((left, right) => left.displayOrder - right.displayOrder)\r\n const primaryPicture = (variant && variant.picture) || pictures[0]\r\n\r\n return primaryPicture\r\n }),\r\n withState('lightboxPics', 'setLightboxPics', (o) => {\r\n let variant = o.product.variants.find((v) => v.id === o.variantId)\r\n const pictures = o.pictures\r\n .slice()\r\n .sort((left, right) => left.displayOrder - right.displayOrder)\r\n if (variant && variant.picture) return [variant.picture, ...pictures]\r\n else return pictures\r\n }),\r\n getContext({\r\n pageState: PropTypes.object,\r\n }),\r\n getContext({\r\n pageState: PropTypes.object,\r\n }),\r\n connect(null, mapDispatchToProps),\r\n connect(null, mapDispatchToProps2),\r\n lifecycle({\r\n componentDidMount() {\r\n this.props.setImageContainerWidth(\r\n document.getElementById('mainImageContainer').offsetWidth,\r\n )\r\n },\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.variantId !== nextProps.variantId) {\r\n let variant = nextProps.product.variants.find(\r\n (v) => v.id === nextProps.variantId,\r\n )\r\n if (variant) {\r\n this.props.setLightboxPics([\r\n variant.picture || { id: 0 },\r\n ...this.props.pictures,\r\n ])\r\n this.props.setPrimaryPicture(variant.picture || { id: 0 })\r\n this.props.setIndex(0)\r\n }\r\n }\r\n },\r\n }),\r\n withHandlers({\r\n onPictureClick: (props) => (picture, index) => {\r\n let selectedVariantId = props.pageState.selection.variantId\r\n props.viewedShopProductImage(selectedVariantId)\r\n props.setIndex(index)\r\n props.setPrimaryPicture(picture)\r\n props.setLightboxPics(props.pictures)\r\n },\r\n onVideoClick: (props) => (video) => {\r\n let selectedVariantId = props.pageState.selection.variantId\r\n props.viewedShopProductVideo(selectedVariantId)\r\n }\r\n }),\r\n shouldUpdate(\r\n (props, nextProps) =>\r\n props.primaryPicture.id !== nextProps.primaryPicture.id ||\r\n props.open !== nextProps.open,\r\n ),\r\n withStyles(styles),\r\n)\r\n\r\nexport default enhance(ProductImage)\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport ModalContainer from '../../../common/modals/ModalContainer'\nimport Button from '../../../common/Button'\nimport { subscribeBackInStock, hideModal } from '../../../../../redux/actions'\nimport DialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport useCordialEvent from '../../../../../hooks/useCordialEvent'\nconst BackInStockSubscribeModal = ({ onNotifyClick, product }) => {\n const notifyEvent = useCordialEvent('notify-me', {\n productId: product.id,\n productName: product.name,\n sellerId: product.brand.id,\n sellerName: product.brand.name,\n })\n return (\n <ModalContainer title='Receive an email when this arrives in stock'>\n <DialogContent>\n As soon as we have this product back on the site, you'll be the first to\n know about it. We'll send a one-time email to alert you, then it's up to\n you to grab the deal while you can!\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => {\n onNotifyClick()\n notifyEvent()\n }}\n color='secondary'\n >\n Notify Me\n </Button>\n </DialogActions>\n </ModalContainer>\n )\n}\n\nBackInStockSubscribeModal.propTypes = {\n onNotifyClick: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = (state, ownProps) => ({})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n onNotifyClick: () => {\n return dispatch(subscribeBackInStock(ownProps.variantId)).then(\n (response) => {\n dispatch(hideModal())\n },\n )\n },\n})\n\nconst enhance = compose(connect(mapStateToProps, mapDispatchToProps))\n\nexport default enhance(BackInStockSubscribeModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport ModalContainer from '../../../common/modals/ModalContainer'\nimport Button from '../../../common/Button'\nimport { unsubscribeBackInStock, hideModal } from '../../../../../redux/actions'\nimport DialogContent from '@material-ui/core/DialogContent'\nimport DialogActions from '@material-ui/core/DialogActions'\n\nconst BackInStockUnsubscribeModal = ({ onUnsubscribeClick }) => (\n <ModalContainer title='Are you sure?'>\n <DialogContent>\n You can always subscribe to this item again if you change your mind.\n </DialogContent>\n\n <DialogActions>\n <Button onClick={onUnsubscribeClick} color='secondary'>\n Unsubscribe\n </Button>\n </DialogActions>\n </ModalContainer>\n)\n\nBackInStockUnsubscribeModal.propTypes = {\n onUnsubscribeClick: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = (state, ownProps) => ({})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n onUnsubscribeClick: () => {\n return dispatch(unsubscribeBackInStock(ownProps.variantId)).then(\n (response) => {\n dispatch(hideModal())\n },\n )\n },\n})\n\nconst enhance = compose(connect(mapStateToProps, mapDispatchToProps))\n\nexport default enhance(BackInStockUnsubscribeModal)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n compose,\n withState,\n withHandlers,\n branch,\n renderNothing,\n lifecycle,\n} from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Grid from '@material-ui/core/Grid'\nimport Typography from '@material-ui/core/Typography'\nimport AddOutlineIcon from '@material-ui/icons/AddCircleOutline'\nimport AddIcon from '@material-ui/icons/AddCircle'\nimport RemoveIcon from '@material-ui/icons/RemoveCircle'\nimport SavedIcon from '@material-ui/icons/Done'\nimport ErrorIcon from '@material-ui/icons/Error'\nimport CheckIcon from '@material-ui/icons/CheckCircle'\nimport BackInStockSubscribeModal from './BackInStockModal/subscribe'\nimport BackInStockUnsubscribeModal from './BackInStockModal/unsubscribe'\nimport withTheme from '@material-ui/core/styles/withTheme'\nimport {\n selectWishlistItem,\n hasBackInStockSubscription,\n canSeePrices,\n selectCrossSells,\n selectGifts,\n selectTracking,\n} from '../../../../redux/selectors'\nimport {\n addToCart,\n addWishlistItem,\n removeWishlistItem,\n showModal,\n gotoCrossSells,\n cartChange,\n} from '../../../../redux/actions'\nimport Button from '../../common/Button'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport { getLowStockActivitySettings } from '../../../../utilities/product-util'\nimport TextField from '../../common/inputs/TextField'\nimport GiftWithPurchaseModal from '../../../../components/common/modals/GiftWithPurchaseModal'\nimport Fab from '@material-ui/core/'\nimport useCordialEvent from '../../../../hooks/useCordialEvent'\n\nconst styles = (theme) => ({\n unavailableContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '.5em .25em',\n border: '2px dashed #e31837',\n color: '#e31837',\n },\n notifyMeContainer: {\n // Applies to both \"out of stock\" and \"coming soon\", just swap these classes based on subscription status\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '.5em .25em',\n border: '2px dashed #ffb300',\n },\n subscribedContainer: {\n // Applies to both \"out of stock\" and \"coming soon\", just swap these classes based on subscription status\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '.5em .25em',\n border: '2px dashed rgb(76, 175, 80)',\n },\n quantityButton: {\n width: '35px',\n height: '35px',\n float: 'left',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#fff',\n border: 0,\n outline: 'none',\n fontSize: '18px',\n },\n quantityIcon: {\n fill: theme.colors.lightBlue,\n\n '&:hover': {\n fill: theme.colors.darkBlue,\n },\n },\n quantityInput: {\n width: '65px',\n '& input': {\n textAlign: 'center',\n padding: '8px 0px',\n },\n },\n disabledWishlistButton: {\n border: 0,\n },\n link: {\n color: theme.colors.darkGray,\n },\n})\n\nexport const OutOfStock = ({\n lowStockActivityType,\n classes,\n showNotifyMe,\n available,\n hasBackInStockSubscription,\n onUnsubscribeClick,\n}) => {\n let settings = getLowStockActivitySettings(\n available ? lowStockActivityType : 0,\n )\n\n if (settings.showNotifyMe && hasBackInStockSubscription)\n return (\n <div className={classes.subscribedContainer}>\n <Typography variant='caption' style={{ color: '#333' }}>\n <CheckIcon\n style={{ width: '16px', height: '16px', marginRight: '5px' }}\n />\n We'll email you when this arrives in stock. \n <NoActionLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'unsubscribe',\n })}\n onClick={onUnsubscribeClick}\n >\n Unsubscribe\n </NoActionLink>\n </Typography>\n </div>\n )\n\n return (\n <div className={classes[settings.className]}>\n <Typography variant='caption' style={{ color: '#333' }}>\n <ErrorIcon\n style={{ width: '16px', height: '16px', marginRight: '5px' }}\n />\n {settings.message}\n </Typography>\n {settings.showNotifyMe && (\n <Typography variant='caption' style={{ color: '#333', textDecoration: 'underline' }}>\n <NoActionLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'notify-me',\n })}\n onClick={showNotifyMe}\n >\n Notify me when available\n </NoActionLink>\n </Typography>\n )}\n </div>\n )\n}\n\nexport const PleaseSelect = ({ clickedState, unselected }) => {\n if (!(unselected && unselected.length)) {\n return null\n }\n if (\n !(clickedState && (clickedState.addToCart || clickedState.addToWishList))\n ) {\n return null\n }\n let i = 0\n let attributes = unselected[i++].uiLabel\n while (i < unselected.length - 1) {\n attributes += ', ' + unselected[i++].uiLabel\n }\n if (i < unselected.length) {\n attributes += ' and ' + unselected[i].uiLabel\n }\n let startsWithVowel = 'aeiou'.indexOf(attributes[0].toLowerCase()) > -1\n return (\n <Typography style={{ textAlign: 'center', color: '#e31837' }}>\n Please select {startsWithVowel ? 'an' : 'a'} {attributes}\n </Typography>\n )\n}\n\nexport const ProductActions = ({\n classes,\n clickedState,\n disabled,\n unselected,\n onAddToCartCheck,\n onAddToWishlistCheck,\n onDeleteFromWishlist,\n wishlistItem,\n available,\n variant,\n product,\n showNotifyMe,\n hasBackInStockSubscription,\n onUnsubscribeClick,\n quantity,\n updateQuantity,\n setQuantity,\n addToCartClickedState,\n wishlistClickedState,\n theme,\n}) => {\n const eventData = {\n productId: product.id,\n productName: product.name,\n sellerId: product.brand.id,\n sellerName: product.brand.name,\n }\n const addToWishListEvent = useCordialEvent('add-to-wishlist', eventData)\n return (\n <div style={{ marginTop: '20px' }}>\n {\n //product.orderMinimumQuantity > 1 &&\n <div>\n <Typography\n style={{\n textTransform: 'uppercase',\n fontSize: '0.875rem',\n color: '#333',\n }}\n >\n Quantity\n </Typography>\n <Grid container wrap='nowrap' alignItems='center'>\n <Grid item>\n <Button\n variant='text'\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'qty_minus',\n })}\n onClick={() => updateQuantity(quantity - 1)}\n style={{ cursor: 'pointer', color: '#333' }}\n className={classes.quantityButton}\n aria-label='Decrease quantity'\n >\n <RemoveIcon className={classes.quantityIcon} />\n </Button>\n </Grid>\n <Grid item>\n <TextField\n inputProps={{\n pattern: '[0-9]',\n 'aria-label': 'Product Quantity',\n }}\n variant='filled'\n value={quantity || ''}\n className={classes.quantityInput}\n onBlur={(e) => updateQuantity(e.target.value)}\n onChange={(e) => setQuantity(e.target.value)}\n />\n </Grid>\n <Grid item>\n <Button\n variant='text'\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'qty_plus',\n })}\n onClick={() => updateQuantity(quantity + 1)}\n style={{ cursor: 'pointer', color: '#333' }}\n className={classes.quantityButton}\n aria-label='Increase quantity'\n >\n <AddIcon className={classes.quantityIcon} />\n </Button>\n </Grid>\n </Grid>\n {product.orderMinimumQuantity > 1 &&\n quantity <= product.orderMinimumQuantity && (\n <Typography variant='caption' color='primary'>\n The minimum quantity allowed for purchase is{' '}\n {product.orderMinimumQuantity}.\n </Typography>\n )}\n {product.orderMaximumQuantity <= quantity && (\n <Typography variant='caption' color='primary'>\n The maximum quantity allowed for purchase is{' '}\n {product.orderMaximumQuantity}.\n </Typography>\n )}\n </div>\n }\n <div style={{ margin: '1.5em 0em' }}>\n {available && variant && variant.price && !variant.price.outOfStock ? (\n <Grid container spacing={1}>\n <Grid item xs={9}>\n <Button\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'addtocart',\n })}\n disabled={addToCartClickedState}\n fullWidth\n color={disabled ? 'inherit' : 'secondary'}\n onClick={() => {\n onAddToCartCheck()\n }}\n children='Add to cart'\n />\n <PleaseSelect\n unselected={unselected}\n clickedState={clickedState}\n />\n </Grid>\n <Grid item xs={3}>\n {wishlistItem && !disabled ? (\n <Button\n fullWidth\n variant='text'\n disabled={disabled}\n onClick={() => onDeleteFromWishlist(wishlistItem)}\n >\n <SavedIcon\n style={{\n width: '.85em',\n height: '.85em',\n marginRight: '10px',\n }}\n />\n Wish Listed\n </Button>\n ) : (\n <Button\n style={{\n color:\n disabled || wishlistClickedState\n ? theme.colors.lightGray\n : theme.colors.blue,\n }}\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'wishlist',\n })}\n fullWidth\n variant='text'\n onClick={() => {\n onAddToWishlistCheck()\n addToWishListEvent()\n }}\n classes={{ disabled: classes.disabledWishlistButton }}\n >\n <AddOutlineIcon\n style={{\n width: '.85em',\n height: '.85em',\n marginRight: '6px',\n }}\n />\n Wish List\n </Button>\n )}\n </Grid>\n </Grid>\n ) : (\n <div>\n <OutOfStock\n onUnsubscribeClick={onUnsubscribeClick}\n hasBackInStockSubscription={hasBackInStockSubscription}\n lowStockActivityType={product.lowStockActivityType}\n available={available}\n showNotifyMe={showNotifyMe}\n classes={classes}\n />\n </div>\n )}\n </div>\n </div>\n )\n}\n\nProductActions.propTypes = {\n cart: PropTypes.object,\n classes: PropTypes.object.isRequired,\n disabled: PropTypes.bool.isRequired,\n unselected: PropTypes.array.isRequired,\n onAddToCart: PropTypes.func.isRequired,\n onAddToWishlist: PropTypes.func.isRequired,\n onDeleteFromWishlist: PropTypes.func.isRequired,\n variantId: PropTypes.number,\n wishlistItem: PropTypes.object,\n variant: PropTypes.object,\n showNotifyMe: PropTypes.func.isRequired,\n hasBackInStockSubscription: PropTypes.bool.isRequired,\n onUnsubscribeClick: PropTypes.func.isRequired,\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n wishlistItem: selectWishlistItem(ownProps.variantId)(state),\n available: ownProps.variantId,\n variant: ownProps.product.variants.find((v) => v.id === ownProps.variantId),\n hasBackInStockSubscription: hasBackInStockSubscription(ownProps.variantId)(\n state,\n ),\n canSeePrices: canSeePrices(state),\n crossSells: selectCrossSells(state),\n gifts: selectGifts(state),\n trackingInfo: selectTracking(state),\n})\n\nconst getVariantAttributes = (options, variantId) => {\n let groups = options.attributeGroups\n let attributeMap =\n options.variants.find((a) => a.productVariantId === variantId) &&\n options.variants.find((a) => a.productVariantId === variantId).attributeMap\n\n if (!attributeMap) return ''\n\n let attributes = []\n\n groups\n .slice()\n .sort((left, right) => left.displayOrder - right.displayOrder)\n .forEach((g) => {\n let attribute = g.attributes.find(\n (a) => a.id === findAttribute(g.id, attributeMap).attributeId,\n )\n\n if (attribute) attributes.push(attribute.name)\n })\n\n return attributes.join('|')\n}\n\nconst findAttribute = (id, attributeMap) => {\n return (\n attributeMap.find((a) => a.attributeGroupId === id) || { attributeId: -1 }\n )\n}\n\nconst getVariantInfo = (props) => {\n let variant = props.product.variants.find((v) => v.id === props.variantId)\n\n return {\n variantId: props.variantId,\n name: props.product.name,\n productId: props.product.id,\n brandName: props.product.brand.name,\n price: variant.price.price,\n variantAttribute: getVariantAttributes(props.product.options, variant.id),\n }\n}\n\nconst mapTrackingInfo = (props) => {\n return {\n index: props.product.displayOrder,\n listInfo: {\n id: props.trackingInfo.list.id,\n name: props.trackingInfo.list.name,\n listType: props.trackingInfo.list.type,\n path: props.trackingInfo.list.path,\n },\n }\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n onAddToCart: () =>\n dispatch(\n addToCart(\n getVariantInfo(ownProps),\n ownProps.quantity,\n false,\n false,\n mapTrackingInfo(ownProps),\n ),\n ),\n onAddToWishlist: () =>\n dispatch(addWishlistItem({ productVariantId: ownProps.variantId })),\n onDeleteFromWishlist: (wishlistItem) =>\n dispatch(removeWishlistItem(wishlistItem.id)),\n fetchCart: () => dispatch(cartChange()),\n gotoCrossSells: (ids, productId, variantId) =>\n dispatch(gotoCrossSells(ids, productId, variantId)),\n showNotifyMe: () =>\n dispatch(\n showModal('DYNAMIC', {\n component: BackInStockSubscribeModal,\n variantId: ownProps.variantId,\n product: ownProps.product,\n }),\n ),\n onUnsubscribeClick: () =>\n dispatch(\n showModal('DYNAMIC', {\n component: BackInStockUnsubscribeModal,\n variantId: ownProps.variantId,\n }),\n ),\n showGiftWithPurchase: () =>\n dispatch(\n showModal('DYNAMIC', {\n component: GiftWithPurchaseModal,\n meta: {\n action: 'open',\n category: 'GWP modal',\n label: 'open',\n },\n }),\n ),\n})\n\nconst enhance = compose(\n withTheme,\n withState(\n 'quantity',\n 'setQuantity',\n (props) => (props.product && props.product.orderMinimumQuantity) || 1,\n ),\n connect(mapStateToProps),\n connect(null, mapDispatchToProps),\n withState('clickedState', 'setClickedState', {\n addToCart: false,\n onAddToWishList: false,\n }),\n withState('addToCartClickedState', 'setAddToCartClickedState', false),\n withState('wishlistClickedState', 'setWishlistClickedState', false),\n withHandlers({\n onAddToCartCheck: (props) => () => {\n props.setAddToCartClickedState(true)\n let newState = { ...props.clickedState, addToCart: true }\n props.setClickedState(newState)\n return props.unselected && props.unselected.length\n ? props.setAddToCartClickedState(false)\n : props\n .onAddToCart()\n .then((bundle) => {\n props.setAddToCartClickedState(false)\n props.setQuantity(props.product.orderMinimumQuantity || 1)\n if (bundle.hasCrossSells) {\n return props.gotoCrossSells(bundle.item.id, props.product.id)\n } else if (bundle.hasAvailableGifts) {\n return props.showGiftWithPurchase()\n } else {\n return props.fetchCart()\n }\n })\n .catch((err) => {\n props.setAddToCartClickedState(false)\n throw err\n })\n },\n updateQuantity: (props) => (newQuantity) => {\n newQuantity = parseInt(newQuantity)\n if (!newQuantity || newQuantity < props.product.orderMinimumQuantity) {\n props.setQuantity(props.product.orderMinimumQuantity)\n } else if (\n props.product.orderMinimumQuantity <= newQuantity &&\n newQuantity <= props.product.orderMaximumQuantity\n ) {\n props.setQuantity(newQuantity)\n } else {\n props.setQuantity(props.product.orderMaximumQuantity)\n }\n },\n onAddToWishlistCheck: (props) => () => {\n props.setWishlistClickedState(true)\n let newState = { ...props.clickedState, addToWishList: true }\n props.setClickedState(newState)\n return props.unselected && props.unselected.length\n ? props.setWishlistClickedState(false)\n : props\n .onAddToWishlist()\n .then(() => {\n props.setWishlistClickedState(false)\n })\n .catch((err) => {\n props.setWishlistClickedState(false)\n throw err\n })\n },\n }),\n branch(\n ({ canSeePrices }) => canSeePrices,\n (x) => x,\n renderNothing,\n ),\n withStyles(styles),\n lifecycle({\n componentDidUpdate(prevProps) {\n if (prevProps.product.id !== this.props.product.id) {\n this.props.setQuantity(this.props.product.orderMinimumQuantity || 1)\n }\n },\n }),\n)\n\nexport default enhance(ProductActions)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, mapProps } from 'recompose'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport Typography from '@material-ui/core/Typography'\nimport { withStyles } from '@material-ui/core/styles'\n\nconst styles = {\n container: {\n overflowWrap: 'break-word',\n width: '100%',\n },\n}\n\nexport const Warranty = ({ warranty, classes }) => (\n <div style={{ margin: '1em 0em' }}>\n {warranty && warranty.text && (\n <Accordion style={{ border: 'solid 1px #e3e3e3' }} elevation={0}>\n <AccordionSummary expandIcon={<ExpandIcon />}>\n <span style={{ fontWeight: 'bold' }}>{warranty.label}</span>\n </AccordionSummary>\n <AccordionDetails>\n <div\n className={classes.container}\n style={{\n color: '-webkit-link',\n textDecoration: 'underline',\n }}\n >\n <span dangerouslySetInnerHTML={{ __html: warranty.text }} />\n </div>\n </AccordionDetails>\n </Accordion>\n )}\n </div>\n)\n\nWarranty.propTypes = {\n warranty: PropTypes.object,\n}\n\nconst enhance = compose(\n mapProps((o) => ({\n warranty: {\n label: o.product.policies.warrantyLabel,\n text: o.product.policies.warrantyText,\n },\n })),\n withStyles(styles),\n)\n\nexport default enhance(Warranty)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, mapProps } from 'recompose'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport Typography from '@material-ui/core/Typography'\n\nexport const ShippingPolicy = ({ shippingMessage, expanded }) => (\n <div style={{ margin: '1em 0em' }}>\n {shippingMessage && (\n <Accordion\n defaultExpanded={expanded}\n style={{ border: 'solid 1px #e3e3e3' }}\n elevation={0}\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'shipping info',\n })}\n >\n <AccordionSummary expandIcon={<ExpandIcon />}>\n <span style={{ fontWeight: 'bold' }}>Shipping</span>\n </AccordionSummary>\n <AccordionDetails>\n <span>\n <span dangerouslySetInnerHTML={{ __html: shippingMessage }} />\n </span>\n </AccordionDetails>\n </Accordion>\n )}\n </div>\n)\n\nShippingPolicy.propTypes = {\n shippingMessage: PropTypes.node,\n expanded: PropTypes.bool,\n}\n\nconst enhance = compose(\n mapProps((o) => ({\n shippingMessage: o.product.policies.shippingMessage,\n expanded: o.expanded,\n })),\n)\n\nexport default enhance(ShippingPolicy)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, mapProps } from 'recompose'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport Typography from '@material-ui/core/Typography'\nimport { getConfiguration } from '../../../../../src/setup/configuration'\nimport {\n getActivePriceBehavior,\n priceBehaviorBits,\n} from '../../../../utilities/price-util'\n\nexport const GovXDefault = ({ priceBehavior, returnPolicyText }) => {\n if (\n priceBehavior.id === priceBehaviorBits.openBox ||\n priceBehavior.id === priceBehaviorBits.clearance\n ) {\n return <OpenBoxPolicy />\n } else {\n return returnPolicyText?.toLowerCase() === 'returnpolicy.govxdefault' ? (\n <DefaultPolicy />\n ) : (\n <span dangerouslySetInnerHTML={{ __html: returnPolicyText }} />\n )\n }\n}\n\nexport const DefaultPolicy = () => (\n <div>\n Need to make an executive decision? This product qualifies for FREE (and\n super easy) return shipping. \n <a href={getConfiguration().supportUrl} target='_blank' rel='noopener'>\n Learn more\n </a>\n </div>\n)\n\nexport const OpenBoxPolicy = () => (\n <div>No returns or cancellations will be accepted on this item.</div>\n)\n\nexport const ReturnPolicy = ({ returnPolicyText, priceBehavior }) => (\n <div style={{ margin: '1em 0em' }}>\n {returnPolicyText && (\n <Accordion\n style={{ border: 'solid 1px #e3e3e3' }}\n elevation={0}\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'returns',\n })}\n >\n <AccordionSummary expandIcon={<ExpandIcon />}>\n <span style={{ fontWeight: 'bold' }}>Returns</span>\n </AccordionSummary>\n <AccordionDetails>\n <div>\n <GovXDefault\n priceBehavior={priceBehavior}\n returnPolicyText={returnPolicyText}\n />\n </div>\n </AccordionDetails>\n </Accordion>\n )}\n </div>\n)\n\nReturnPolicy.propTypes = {\n returnPolicyText: PropTypes.node,\n}\n\nconst enhance = compose(\n mapProps((o) => ({\n returnPolicyText: o.product.policies.returnPolicyText,\n priceBehavior: getActivePriceBehavior(\n o.product.variants.find((v) => v.id === o.variantId)?.price\n ?.priceBehavior,\n ),\n })),\n)\n\nexport default enhance(ReturnPolicy)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography'\n\nconst styles = (theme) => ({\n container: {\n color: '#333',\n\n '@global': {\n a: {\n color: theme.colors.darkGray,\n textDecoration: 'none',\n\n '&:hover': {\n textDecoration: 'underline',\n },\n },\n 'img, iframe': {\n maxWidth: '100%',\n maxHeight: '100%',\n },\n },\n },\n title: {\n fontSize: '24px',\n fontFamily: 'geomanist-medium',\n },\n})\n\nexport const ProductDetails = ({ classes, product }) =>\n product &&\n product.fullDescription && (\n <div>\n <Typography variant='h6' className={classes.title} align='center'>\n <strong>PRODUCT DETAILS</strong>\n </Typography>\n <div className={classes.container}>\n <div dangerouslySetInnerHTML={{ __html: product.fullDescription }} />\n </div>\n </div>\n )\n\nProductDetails.propTypes = {\n product: PropTypes.object.isRequired,\n}\n\nconst enhance = compose(withStyles(styles))\n\nexport default enhance(ProductDetails)\n","import React from 'react'\nimport Typography from '@material-ui/core/Typography'\nimport Paper from '@material-ui/core/Paper'\nimport { compose, mapProps } from 'recompose'\nimport Grid from '@material-ui/core/Grid'\nimport { buildPictureUrl } from '../../../../utilities/picture-util'\n\nexport const GiftPreview = ({ gifts }) => (\n <div>\n {gifts &&\n gifts.map((gift) => (\n <Paper\n key={gift.id}\n elevation={0}\n style={{\n margin: '4px 0px',\n padding: '6px 0px',\n border: 'solid 1px #e3e3e3',\n }}\n >\n <Grid container direction='row'>\n <Grid\n item\n xs={12}\n md={4}\n style={{ padding: '0px 4px', minWidth: '100px' }}\n >\n <Grid container justify='center'>\n <Grid item>\n <img\n src={buildPictureUrl(gift.picture, 'gift-picture', 100)}\n alt='Gift Picture'\n style={{ width: '100%', height: '100%' }}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={8} style={{ padding: '0px 4px', alignContent: 'center' }}>\n <Typography variant='body2'>{gift.description}</Typography>\n </Grid>\n </Grid>\n </Paper>\n ))}\n </div>\n)\n\nconst enhance = compose(\n mapProps((o) => {\n let gifts =\n o.product.availableGifts &&\n o.product.availableGifts.filter((x) =>\n x.variantIds.some((v) => v == o.variantId),\n )\n return {\n gifts: gifts,\n }\n }),\n)\nexport default enhance(GiftPreview)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withProps } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\n\nexport const ProductKeyFeatures = ({ fallbackDescription, keyFeatures }) =>\n keyFeatures && keyFeatures.length > 0 ? (\n <ul style={{ margin: '1em 0em', padding: '0px 0px 0px 20px' }}>\n {keyFeatures.map((k, i) => (\n <li key={i} style={{ padding: '4px 0px' }}>\n <span style={{ lineHeight: '1.4em' }}>{k.text}</span>\n </li>\n ))}\n </ul>\n ) : fallbackDescription ? (\n <Typography variant='body1' component='div'>\n <div dangerouslySetInnerHTML={{ __html: fallbackDescription }} />\n </Typography>\n ) : null\n\nProductKeyFeatures.propTypes = {\n fallbackDescription: PropTypes.string,\n keyFeatures: PropTypes.array.isRequired,\n}\n\nconst enhance = compose(\n withProps((o) => ({\n keyFeatures: o.product.keyFeatures\n .slice(0)\n .sort((left, right) => left.displayOrder - right.displayOrder),\n fallbackDescription: o.product.shortDescription,\n })),\n)\n\nexport default enhance(ProductKeyFeatures)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport CreateIcon from '@material-ui/icons/Create'\nimport Typography from '@material-ui/core/Typography'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport { showModal } from '../../../../redux/actions'\nimport { compose } from 'recompose'\n\nconst styles = (theme) => ({\n icon: {\n width: '18px',\n height: '18px',\n margin: '0px 5px -4px 0px',\n fill: theme.colors.red,\n },\n})\n\nexport const WriteAReviewLink = ({\n classes,\n dispatch,\n product,\n setReviewed,\n}) => (\n <Typography variant='body1'>\n <NoActionLink\n aria-label='Write a review'\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'write-a-review',\n })}\n onClick={() =>\n dispatch(\n showModal('CREATE_PRODUCT_REVIEW', {\n product,\n setReviewed,\n picture: product.pictures.sort(\n (left, right) => left.displayOrder - right.displayOrder,\n )[0],\n }),\n )\n }\n >\n <CreateIcon className={classes.icon} />\n Write a review\n </NoActionLink>\n </Typography>\n)\n\nWriteAReviewLink.propTypes = {\n dispatch: PropTypes.func.isRequired,\n product: PropTypes.object.isRequired,\n setReviewed: PropTypes.func.isRequired,\n}\n\nconst enhance = compose(connect(), withStyles(styles))\n\nexport default enhance(WriteAReviewLink)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport Typography from '@material-ui/core/Typography'\nimport CheckIcon from '@material-ui/icons/CheckCircle'\nimport { selectUser } from '../../../../redux/selectors'\nimport WriteAReviewLink from './WriteAReviewLink'\n\nexport const NoReviews = ({ product, reviewed, setReviewed, user }) => (\n <div style={{ textAlign: 'center' }}>\n <Typography variant='body1' paragraph>\n <strong>{user && user.firstName}</strong>, are you familiar with this\n product?\n <br />\n Help out your fellow GOVX members by leaving a review!\n </Typography>\n {reviewed ? (\n <Typography>\n <CheckIcon\n style={{ width: '16px', height: '16px', marginRight: '5px' }}\n />{' '}\n Product Reviewed\n </Typography>\n ) : (\n <WriteAReviewLink product={product} setReviewed={setReviewed} />\n )}\n </div>\n)\n\nNoReviews.propTypes = {\n product: PropTypes.object.isRequired,\n reviewed: PropTypes.bool.isRequired,\n setReviewed: PropTypes.func.isRequired,\n user: PropTypes.object,\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n user: selectUser(state),\n})\n\nexport default connect(mapStateToProps)(NoReviews)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withState, withHandlers } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport { decode } from 'he'\nimport Typography from '@material-ui/core/Typography'\n\nimport { getLocalDateString } from '../../../../utilities/date-util'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport RatingStars from '../../common/RatingStars'\n\nconst styles = {\n wrapper: {\n position: 'relative',\n width: '600px',\n margin: '1em 0em 0em',\n padding: '3em 1em 1em',\n border: '1px solid #e3e3e3',\n },\n topSection: {\n width: 'calc(100% - 2em)',\n height: '18px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n position: 'absolute',\n top: '1em',\n right: '1em',\n left: '1em',\n },\n topSectionLeft: {\n display: 'flex',\n alignItems: 'center',\n maxWidth: 'calc(100% - 85px)',\n },\n}\n\nexport const Review = ({ classes, handleVote, review, voted }) =>\n (review.title || review.text) && (\n <div className={classes.wrapper}>\n <div className={classes.topSection}>\n <div className={classes.topSectionLeft}>\n <RatingStars rating={review.rating} style={{ marginRight: '1em' }} />\n <Typography variant='body1' noWrap>\n {review.author}\n </Typography>\n </div>\n <Typography align='right' variant='body1'>\n {getLocalDateString(review.createdOnUtc)}\n </Typography>\n </div>\n\n {review.title && (\n <Typography variant='subtitle1' gutterBottom>\n <strong>{decode(review.title)}</strong>\n </Typography>\n )}\n {review.text && (\n <Typography variant='body1' paragraph>\n {decode(review.text)}\n </Typography>\n )}\n\n {voted ? (\n <Typography variant='caption'>Vote submitted</Typography>\n ) : (\n <Typography variant='caption'>\n Was this review helpful?\n <span style={{ marginLeft: '5px' }}>\n <NoActionLink onClick={() => handleVote(review.id, true)}>\n Yes\n </NoActionLink>\n / \n <NoActionLink onClick={() => handleVote(review.id, false)}>\n No\n </NoActionLink>\n </span>\n <span style={{ marginLeft: '5px' }}>\n (+{review.helpfulYesTotal} / -{review.helpfulNoTotal})\n </span>\n </Typography>\n )}\n </div>\n )\n\nReview.propTypes = {\n classes: PropTypes.object.isRequired,\n onHelpfulClick: PropTypes.func.isRequired,\n review: PropTypes.object.isRequired,\n}\n\nconst enhance = compose(\n withState('voted', 'setVoted', (props) => false),\n withHandlers({\n handleVote: (props) => (reviewId, wasHelpful) => {\n props.setVoted(true)\n props.onHelpfulClick(reviewId, wasHelpful)\n },\n }),\n withStyles(styles),\n)\n\nexport default enhance(Review)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, withProps, lifecycle } from 'recompose'\nimport { withStyles } from '@material-ui/core/styles'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport Typography from '@material-ui/core/Typography'\nimport CheckIcon from '@material-ui/icons/CheckCircle'\nimport WriteAReviewLink from './WriteAReviewLink'\nimport Review from './Review'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport { parse } from 'query-string'\nimport { withRouter } from 'react-router'\n\nconst styles = {\n wrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n}\n\nexport const WithReviews = ({\n classes,\n onHelpfulClick,\n onViewLessClick,\n onViewMoreClick,\n product,\n query,\n reviewed,\n reviews,\n setReviewed,\n total,\n}) => (\n <div className={classes.wrapper} id='product-reviews'>\n {reviewed ? (\n <Typography>\n <CheckIcon\n style={{ width: '16px', height: '16px', marginRight: '5px' }}\n />{' '}\n Product Reviewed\n </Typography>\n ) : (\n <WriteAReviewLink product={product} setReviewed={setReviewed} />\n )}\n {reviews.map((review, i) => (\n <Review key={i} review={review} onHelpfulClick={onHelpfulClick} />\n ))}\n <div style={{ marginTop: '1em' }}>\n {total <= reviews.length ? (\n total > 10 ? (\n <NoActionLink onClick={onViewLessClick}>\n <Typography variant='subtitle1'>Collapse reviews</Typography>\n </NoActionLink>\n ) : null\n ) : (\n <NoActionLink\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'click',\n label: 'reviews-show-more',\n })}\n onClick={onViewMoreClick}\n >\n <Typography variant='subtitle1'>\n {query.size === 10 ? (\n <span>\n Viewing top {reviews.length} most helpful reviews.\n <strong>\n View More{' '}\n <ExpandIcon style={{ marginBottom: '-5px' }} />\n </strong>\n </span>\n ) : (\n <span>\n Viewing {reviews.length} of {total} reviews.\n <strong>\n View More{' '}\n <ExpandIcon style={{ marginBottom: '-5px' }} />\n </strong>\n </span>\n )}\n </Typography>\n </NoActionLink>\n )}\n </div>\n </div>\n)\n\nWithReviews.propTypes = {\n classes: PropTypes.object.isRequired,\n onHelpfulClick: PropTypes.func.isRequired,\n onViewLessClick: PropTypes.func.isRequired,\n onViewMoreClick: PropTypes.func.isRequired,\n product: PropTypes.object.isRequired,\n query: PropTypes.object.isRequired,\n reviewed: PropTypes.bool.isRequired,\n reviews: PropTypes.array.isRequired,\n setReviewed: PropTypes.func.isRequired,\n total: PropTypes.number.isRequired,\n}\n\nconst enhance = compose(\n withRouter,\n withProps((o) => ({\n total: o.productReviews.total,\n reviews: o.productReviews.reviews.slice(0, o.query.size),\n })),\n withStyles(styles),\n)\n\nexport default enhance(WithReviews)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n compose,\n withState,\n lifecycle,\n withHandlers,\n branch,\n renderNothing,\n} from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport { withStyles } from '@material-ui/core/styles'\nimport {\n requireProductReviews,\n voteProductReview,\n fetchProductReviews,\n} from '../../../../redux/actions'\nimport {\n selectProductReviews,\n hasReviewedProduct,\n selectUser,\n} from '../../../../redux/selectors'\nimport NoReviews from './NoReviews'\nimport WithReviews from './WithReviews'\nimport Divider from '@material-ui/core/Divider'\nconst styles = {\n title: {\n fontSize: '24px',\n fontFamily: 'geomanist-medium',\n },\n}\n\nexport const ProductReviews = ({\n product,\n productReviews,\n onHelpfulClick,\n onViewLessClick,\n onViewMoreClick,\n onWriteReviewClick,\n query,\n reviewed,\n setReviewed,\n classes,\n}) => (\n <div id='productReviews'>\n <Typography\n variant='h6'\n align='center'\n classes={{ root: classes.title }}\n gutterBottom\n >\n <strong>REVIEWS</strong>\n </Typography>\n {productReviews && productReviews.reviews.length === 0 && (\n <NoReviews\n product={product}\n reviewed={reviewed}\n setReviewed={setReviewed}\n />\n )}\n {productReviews && productReviews.reviews.length > 0 && (\n <WithReviews\n product={product}\n productReviews={productReviews}\n onViewMoreClick={onViewMoreClick}\n onViewLessClick={onViewLessClick}\n query={query}\n onHelpfulClick={onHelpfulClick}\n onWriteReviewClick={onWriteReviewClick}\n reviewed={reviewed}\n setReviewed={setReviewed}\n />\n )}\n <Divider light />\n </div>\n)\n\nProductReviews.propTypes = {\n productReviews: PropTypes.object,\n}\n\nexport const mapStateToProps = (state, ownProps) => ({\n productReviews: selectProductReviews(ownProps.product.id)(state),\n hasReviewedProduct: hasReviewedProduct(ownProps.product.id)(state),\n user: selectUser(state),\n})\n\nexport const mapDispatchToProps = (dispatch, ownProps) => ({\n requireProductReviews: (productId, from, size) =>\n dispatch(requireProductReviews(productId, from, size)),\n fetchProductReviews: (productId, from, size) =>\n dispatch(fetchProductReviews(productId, from, size)),\n onHelpfulClick: (reviewId, wasHelpful) =>\n dispatch(voteProductReview(ownProps.product.id, reviewId, wasHelpful)),\n})\n\nconst loadComponent = (currentProps) => {\n currentProps.setReviewed(currentProps.hasReviewedProduct)\n}\n\nconst enhance = compose(\n connect(mapStateToProps, mapDispatchToProps),\n branch(\n ({ user }) => user && user.isApproved,\n (x) => x,\n renderNothing,\n ),\n withState('query', 'setQuery', { from: 0, size: 10 }),\n withState('reviewed', 'setReviewed', (props) => props.hasReviewedProduct),\n withHandlers({\n onViewMoreClick: (props) => (e) => {\n let size = props.query.size\n if (size < 50) size = 0\n size += 50\n\n props.fetchProductReviews(props.product.id, 0, size).then((x) => {\n props.setQuery({ ...props.query, size: size })\n })\n },\n onViewLessClick: (props) => (e) => {\n props.fetchProductReviews(props.product.id, 0, 10).then((x) => {\n props.setQuery({ ...props.query, size: 10 })\n })\n },\n }),\n withStyles(styles),\n)\n\nexport default enhance(ProductReviews)\n","import React from 'react'\nimport Grid from '@material-ui/core/Grid'\nimport Typography from '@material-ui/core/Typography'\nimport { formatPrettyDate } from '../../../../../utilities/date-util'\nimport Paper from '@material-ui/core/Paper'\n\nexport const Reply = ({ reply, classes }) => (\n <Grid item xs={12}>\n <Paper square={true} className={classes.paperWrapper}>\n <Typography variant='body1' className={classes.text}>\n {`${reply.text}`}\n </Typography>\n <Typography\n variant='body1'\n style={{\n padding: '0px 0px 0px 10px',\n color: 'rgb(102, 102, 102)',\n fontSize: '.75em',\n }}\n >\n {`${reply.user.nickName} - ${formatPrettyDate(reply.dateCreated)}`}\n </Typography>\n </Paper>\n </Grid>\n)\n\nexport default Reply\n","import React from 'react'\nimport Grid from '@material-ui/core/Grid'\nimport {\n compose,\n withHandlers,\n withState,\n withProps,\n lifecycle,\n} from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport { formatPrettyDate } from '../../../../../utilities/date-util'\nimport Reply from '../Reply'\nimport NoActionLink from '../../../common/links/NoActionLink'\nimport TextField from '../../../common/inputs/TextField'\nimport Button from '../../../common/Button'\nimport { connect } from 'react-redux'\nimport {\n createReply,\n voteAnswerUp,\n} from '../../../../../redux/modules/catalog/products'\nimport Paper from '@material-ui/core/Paper'\nimport withStyles from '@material-ui/core/styles/withStyles'\n\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess'\nimport CancelButton from '../../../common/Button/Cancel'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport { parse } from 'query-string'\nimport { withRouter } from 'react-router'\nimport { flattenDeep } from '../../../../../utilities/array-util'\n\nconst styles = (theme) => ({\n icon: {\n width: '18px',\n height: '18px',\n margin: '0px 5px -4px 0px',\n fill: theme.colors.black,\n },\n nickName: {\n padding: '0px 0px 10px 10px',\n color: 'rgb(102, 102, 102)',\n fontSize: '.75em',\n },\n dateCreated: {\n padding: '1em 1em',\n },\n text: {\n padding: '10px 0px 0px 10px',\n fontSize: '1em',\n fontWeight: '500',\n },\n answerOption: {\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n },\n likeOption: {\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n },\n replyButton: {\n padding: '1em 1em 1em 1em',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n },\n cancelButton: {\n padding: '1em 1em 1em 1em',\n fontSize: '13px',\n fontWeight: '700',\n },\n paperWrapper: {\n padding: '0em 0em 1em 0em',\n boxShadow: 'none',\n borderLeft: '1px solid #424242',\n backgroundColor: '#eee',\n },\n answerPaperWrapper: {\n padding: '0em 0em 0em 0em',\n boxShadow: 'none',\n border: '1px solid rgb(227, 227, 227)',\n },\n showMore: {\n padding: '0px 0px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#323440',\n },\n})\n\nexport const Answer = ({\n answer,\n setShowReplyBox,\n showReplyBox,\n replyToAnswer,\n replyChange,\n text,\n replied,\n handleUpvote,\n upvoted,\n totalUpvotes,\n classes,\n setShowReplies,\n showReplies,\n handleShowLessReplies,\n}) => (\n <Grid item xs={12} id={`answer-${answer.id}`}>\n <Paper className={classes.answerPaperWrapper}>\n <Typography variant='body1' className={classes.text}>\n {`${answer.text}`}\n </Typography>\n <Typography variant='body1' className={classes.nickName}>\n {`${answer.user.nickName} - ${formatPrettyDate(answer.dateCreated)}`}\n </Typography>\n <Grid container>\n <Grid item xs={1} />\n <Grid item xs={10}>\n {answer &&\n answer.replies &&\n answer.replies.length !== 0 &&\n showReplies && (\n <Grid container spacing={1}>\n {answer.replies.map((reply, i) => (\n <Reply\n key={`${reply.id} - ${reply.parentAnswerId}`}\n reply={reply}\n classes={classes}\n />\n ))}\n </Grid>\n )}\n </Grid>\n <Grid item xs={1} />\n {answer &&\n answer.replies &&\n answer.replies.length !== 0 &&\n (showReplies ? (\n <NoActionLink\n style={{ color: '#333' }}\n onClick={handleShowLessReplies}\n >\n <Typography variant='subtitle1' className={classes.showMore}>\n <strong>\n Hide replies{' '}\n <ExpandLessIcon style={{ marginBottom: '-5px' }} />\n </strong>\n </Typography>\n </NoActionLink>\n ) : (\n <NoActionLink\n style={{ color: '#333' }}\n onClick={() => setShowReplies(true)}\n >\n <Typography variant='subtitle1' className={classes.showMore}>\n <strong>\n View replies{' '}\n <ExpandMoreIcon style={{ marginBottom: '-5px' }} />\n </strong>\n </Typography>\n </NoActionLink>\n ))}\n <Grid item xs={12}>\n <Grid container align='left'>\n <Grid item xs={12}>\n <Typography\n style={{\n padding: '0px 0px 10px 0px',\n }}\n variant='caption'\n >\n {!replied &&\n (!showReplyBox ? (\n <NoActionLink\n style={{\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n }}\n onClick={() => setShowReplyBox(true)}\n >\n Reply\n </NoActionLink>\n ) : (\n <span className={classes.answerOption}> Reply </span>\n ))}\n {!upvoted ? (\n <NoActionLink\n style={{\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n }}\n onClick={() => handleUpvote(true)}\n >\n {`Upvote (${totalUpvotes})`}\n </NoActionLink>\n ) : (\n <span className={classes.answerOption}>\n {' '}\n {`Upvote (${totalUpvotes})`}{' '}\n </span>\n )}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n {showReplyBox && (\n <Grid item xs={12}>\n <Grid container>\n <Grid item xs={1} />\n <Grid item xs={10}>\n <TextField\n // className={classes.answerText}\n id={`replyToAnswer-${answer.id}`}\n value={text || ''}\n label='Your reply'\n InputProps={{ rows: 3 }}\n fullWidth\n multiline\n onChange={(e) => replyChange(e.target.value)}\n // helperText={ `${maxLength - ((giftOrder.message && giftOrder.message.length) || 0)} character${ maxLength - ((giftOrder.message && giftOrder.message.length) || 0) !== 1 ? 's' : '' } remaining` }\n maxLength={500}\n />\n </Grid>\n <Grid item xs={1} />\n <Grid item xs={6} />\n <Grid item xs={5}>\n <DialogActions\n style={{\n padding: '0px 0px 10px 0px',\n }}\n >\n <CancelButton\n children='Cancel'\n onClick={() => setShowReplyBox(false)}\n />\n <Button\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'submit',\n label: 'submit-reply',\n })}\n type='button'\n color='secondary'\n children='Submit Reply'\n onClick={replyToAnswer}\n />\n </DialogActions>\n </Grid>\n <Grid item x={1} />\n </Grid>\n </Grid>\n )}\n {replied && (\n <Typography\n style={{\n padding: '0px 10px 10px 10px',\n }}\n >\n Thanks! Your reply will be reviewed and posted soon.\n </Typography>\n )}\n </Grid>\n </Paper>\n </Grid>\n)\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n createReply: (answerId, parentReplyId, text) =>\n dispatch(createReply(answerId, parentReplyId, text)),\n voteAnswerUp: (answerId) => dispatch(voteAnswerUp(answerId)),\n})\n\nconst enhance = compose(\n withRouter,\n connect(null, mapDispatchToProps),\n withProps((o) => ({\n replyIds: flattenDeep(o.answer.replies).map((r) => r.id),\n repliesRepliedTo: [],\n })),\n withState('showReplyBox', 'setShowReplyBox', false),\n withState('text', 'setText', ''),\n withState('replyToReplyText', 'setReplyToReplyText'),\n withState('replied', 'setReplied', false),\n withState('selected', 'setSelected', null),\n withState('repliesRepliedTo', 'setRepliesRepliedTo', []),\n withState('upvoted', 'setUpvoted', false),\n withState('totalUpvotes', 'setTotalUpvotes', (props) => props.answer.upVotes),\n withState('showReplies', 'setShowReplies', false),\n withHandlers({\n replyChange: (props) => (text) => {\n props.setText(text)\n },\n replyToReplyChange: (props) => (text) => {\n props.setReplyToReplyText(text)\n },\n replyToAnswer: (props) => () => {\n props.createReply(props.answer.id, null, props.text)\n props.setReplied(true)\n props.setShowReplyBox(false)\n props.setText('')\n },\n replyToReply: (props) => () => {\n props.createReply(props.answer.id, props.selected, props.replyToReplyText)\n props.setReplyToReplyText('')\n props.setRepliesRepliedTo([...props.repliesRepliedTo, props.selected])\n props.setSelected(null)\n },\n handleUpvote: (props) => () => {\n props.voteAnswerUp(props.answer.id)\n props.setUpvoted(true)\n props.setTotalUpvotes(props.answer.upVotes + 1)\n },\n handleShowLessReplies: (props) => () => {\n props.setShowReplies(false)\n // let targetEl = document.getElementById(`answer-${props.answer.id}`)\n // if (targetEl)\n // window.scroll({ top: targetEl.offsetTop, behavior: 'instant' })\n },\n }),\n withStyles(styles),\n lifecycle({\n componentDidMount() {\n let query = parse(this.props.location.search)\n if (query.turntoQuestionId) {\n if (query.turntoAnswerId) {\n if (query.turntoAnswerId == this.props.answer.id) {\n let targetEl = document.getElementById(\n `answer-${query.turntoAnswerId}`,\n )\n if (targetEl) {\n window.scroll({\n top: targetEl.offsetTop - 100,\n behavior: 'instant',\n })\n if (!query.turntoReplyId) {\n this.props.setShowReplyBox(true)\n } else {\n this.props.setShowReplies(true)\n }\n }\n }\n }\n }\n },\n }),\n)\n\nexport default enhance(Answer)\n","import React from 'react'\nimport Grid from '@material-ui/core/Grid'\nimport { compose, withHandlers, withState, lifecycle } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport { formatPrettyDate } from '../../../../../utilities/date-util'\nimport Answer from '../Answer'\nimport NoActionLink from '../../../common/links/NoActionLink'\nimport TextField from '../../../common/inputs/TextField'\nimport Button from '../../../common/Button'\nimport { connect } from 'react-redux'\nimport {\n createAnswer,\n voteQuestionUp,\n} from '../../../../../redux/modules/catalog/products'\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess'\n\nimport Paper from '@material-ui/core/Paper'\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport CancelButton from '../../../common/Button/Cancel'\nimport DialogActions from '@material-ui/core/DialogActions'\nimport { withRouter } from 'react-router'\nimport { parse } from 'query-string'\n\nconst styles = (theme) => ({\n icon: {\n width: '18px',\n height: '18px',\n margin: '0px 5px -4px 0px',\n fill: theme.colors.black,\n },\n nickName: {\n padding: '0px 0px 20px 10px',\n color: 'rgb(102, 102, 102)',\n fontSize: '.75em',\n },\n dateCreated: {\n padding: '1em 1em',\n },\n text: {\n padding: '10px 10px 0px 10px',\n fontSize: '1.1em',\n fontWeight: '700',\n },\n answerOption: {\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n },\n likeOption: {\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n },\n answerButton: {\n padding: '1em 1em 1em 1em',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n },\n cancelButton: {\n padding: '1em 1em 1em 1em',\n fontSize: '13px',\n fontWeight: '700',\n },\n paperWrapper: {\n padding: '0em 0em 0em 0em',\n backgroundColor: '#eee',\n borderRadius: '2px',\n boxShadow: 'none',\n },\n showMore: {\n padding: '0px 0px 10px 0px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#323440',\n },\n})\n\nexport const Question = ({\n classes,\n question,\n setShowAnswerBox,\n showAnswerBox,\n answerQuestion,\n answerChange,\n text,\n productId,\n answered,\n handleUpvote,\n upvoted,\n totalUpvotes,\n setShowMoreAnswers,\n showMoreAnswers,\n handleShowLessAnswers,\n}) => (\n <Grid item xs={12} id={`question-${question.id}`}>\n <Paper className={classes.paperWrapper}>\n <Typography variant='body1' className={classes.text}>\n {`${question.text}`}\n </Typography>\n <Typography variant='body1' className={classes.nickName}>\n {`${question.user.nickName} - ${formatPrettyDate(question.dateCreated)}`}\n </Typography>\n <Grid container>\n <Grid item xs={1} />\n <Grid item xs={10}>\n {question &&\n question.answers &&\n question.answers.length !== 0 &&\n (question.answers.length > 1 ? (\n showMoreAnswers ? (\n <Grid container spacing={1}>\n {question.answers.map((answer, i) => (\n <Answer\n key={i}\n answer={answer}\n productId={productId}\n setShowAnswerBox={setShowAnswerBox}\n />\n ))}\n </Grid>\n ) : (\n <Grid container spacing={1}>\n <Answer\n answer={question.answers[0]}\n productId={productId}\n setShowAnswerBox={setShowAnswerBox}\n />\n </Grid>\n )\n ) : (\n <Grid container spacing={1}>\n <Answer\n answer={question.answers[0]}\n productId={productId}\n setShowAnswerBox={setShowAnswerBox}\n />\n </Grid>\n ))}\n </Grid>\n <Grid item xs={1} />\n <Grid item xs={1} />\n <Grid item xs={11}>\n <Grid container align='left'>\n {question.answers.length > 1 && showMoreAnswers ? (\n <Grid item xs={12}>\n <NoActionLink\n style={{ color: '#333' }}\n onClick={handleShowLessAnswers}\n >\n <Typography variant='subtitle1' className={classes.showMore}>\n <strong>\n View less answers{' '}\n <ExpandLessIcon style={{ marginBottom: '-5px' }} />\n </strong>\n </Typography>\n </NoActionLink>\n </Grid>\n ) : (\n question.answers.length > 1 && (\n <Grid item xs={12}>\n <NoActionLink\n style={{ color: '#333' }}\n onClick={() => setShowMoreAnswers(true)}\n >\n <Typography\n variant='subtitle1'\n className={classes.showMore}\n >\n <strong>\n View more answers{' '}\n <ExpandMoreIcon style={{ marginBottom: '-5px' }} />\n </strong>\n </Typography>\n </NoActionLink>\n </Grid>\n )\n )}\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Grid container align='left'>\n <Grid item xs={12}>\n <Typography\n style={{\n padding: '0px 0px 10px 0px',\n }}\n variant='caption'\n >\n {!answered &&\n (!showAnswerBox ? (\n <NoActionLink\n style={{\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n }}\n onClick={() => setShowAnswerBox(true)}\n >\n Add answer\n </NoActionLink>\n ) : (\n <span className={classes.answerOption}> Add answer </span>\n ))}\n {!upvoted ? (\n <NoActionLink\n style={{\n padding: '10px 10px 10px 10px',\n fontSize: '13px',\n fontWeight: '700',\n color: '#0c9ac4',\n }}\n onClick={() => handleUpvote(true)}\n >\n {`I have this question too (${totalUpvotes})`}\n </NoActionLink>\n ) : (\n <span className={classes.answerOption}>\n {' '}\n {`I have this question too (${totalUpvotes})`}{' '}\n </span>\n )}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n {showAnswerBox && (\n <Grid\n item\n xs={12}\n style={{\n padding: '10px 0px 0px 0px',\n }}\n >\n <Grid container>\n <Grid item xs={1} />\n <Grid item xs={10}>\n <TextField\n // className={classes.answerText}\n style={{ backgroundColor: '#ffffff' }}\n id={`answerQuestion-${question.id}`}\n value={text || ''}\n label='Your answer'\n InputProps={{ rows: 3 }}\n fullWidth\n multiline\n onChange={(e) => answerChange(e.target.value)}\n // helperText={ `${maxLength - ((giftOrder.message && giftOrder.message.length) || 0)} character${ maxLength - ((giftOrder.message && giftOrder.message.length) || 0) !== 1 ? 's' : '' } remaining` }\n maxLength={500}\n />\n </Grid>\n <Grid item xs={1} />\n <Grid item xs={6} />\n <Grid item xs={5}>\n <DialogActions\n style={{\n padding: '0px 0px 10px 0px',\n }}\n >\n <CancelButton\n children='Cancel'\n onClick={() => setShowAnswerBox(false)}\n />\n <Button\n data-event-tracking={JSON.stringify({\n category: 'Product Page',\n action: 'submit',\n label: 'submit-answer',\n })}\n type='button'\n color='secondary'\n children='Submit Answer'\n onClick={answerQuestion}\n />\n </DialogActions>\n </Grid>\n <Grid item x={1} />\n </Grid>\n </Grid>\n )}\n {answered && (\n <Typography\n style={{\n padding: '0px 10px 10px 10px',\n }}\n >\n Thanks! Your answer will be reviewed and posted soon.\n </Typography>\n )}\n </Grid>\n </Paper>\n </Grid>\n)\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n createAnswer: (questionId, productId, text) =>\n dispatch(createAnswer(questionId, productId, text)),\n voteQuestionUp: (questionId) => dispatch(voteQuestionUp(questionId)),\n})\n\nconst enhance = compose(\n withRouter,\n connect(null, mapDispatchToProps),\n withState('showAnswerBox', 'setShowAnswerBox', false),\n withState('text', 'setText', ''),\n withState('answered', 'setAnswered', false),\n withState('upvoted', 'setUpvoted', false),\n withState(\n 'totalUpvotes',\n 'setTotalUpvotes',\n (props) => props.question.upVotes,\n ),\n withState(\n 'showMoreAnswers',\n 'setShowMoreAnswers',\n (props) => props.openAnswer,\n ),\n withHandlers({\n answerChange: (props) => (text) => {\n props.setText(text)\n },\n answerQuestion: (props) => () => {\n props.setShowAnswerBox(false)\n\n props\n .createAnswer(props.question.id, props.productId, props.text)\n .then((response) => {\n props.setAnswered(true)\n props.setText('')\n })\n .catch((err) => {\n props.setShowAnswerBox(true)\n })\n },\n handleUpvote: (props) => () => {\n props.voteQuestionUp(props.question.id)\n props.setUpvoted(true)\n props.setTotalUpvotes(props.question.upVotes + 1)\n },\n handleShowLessAnswers: (props) => () => {\n props.setShowMoreAnswers(false)\n let targetEl = document.getElementById(`question-${props.question.id}`)\n if (targetEl)\n window.scroll({ top: targetEl.offsetTop, behavior: 'instant' })\n },\n }),\n lifecycle({\n componentDidMount() {\n let query = parse(this.props.location.search)\n if (\n query.turntoQuestionId &&\n !query.turntoAnswerId &&\n query.turntoQuestionId == this.props.question.id\n ) {\n let targetEl = document.getElementById(\n `question-${query.turntoQuestionId}`,\n )\n if (targetEl) {\n window.scroll({ top: targetEl.offsetTop - 100, behavior: 'instant' })\n this.props.setShowAnswerBox(true)\n }\n }\n },\n }),\n withStyles(styles),\n)\n\nexport default enhance(Question)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { compose, withState, withHandlers, withProps } from 'recompose'\nimport Typography from '@material-ui/core/Typography'\nimport { withStyles } from '@material-ui/core/styles'\nimport { selectQAndA, selectUser } from '../../../../redux/selectors'\nimport Grid from '@material-ui/core/Grid'\nimport Question from './Question'\nimport NoActionLink from '../../common/links/NoActionLink'\nimport { createQuestion } from '../../../../redux/modules/catalog/products'\nimport QuestionAnswerIcon from '@material-ui/icons/QuestionAnswer'\nimport { showModal } from '../../../../redux/actions'\nimport { parse } from 'query-string'\nimport { withRouter } from 'react-router'\n\nconst styles = (theme) => ({\n title: {\n fontSize: '24px',\n fontFamily: 'geomanist-medium',\n },\n icon: {\n width: '18px',\n height: '18px',\n margin: '0px 5px -4px 0px',\n fill: theme.colors.red,\n },\n question: {\n padding: '1em',\n },\n})\n\nexport const ProductQAndA = ({\n product,\n classes,\n qAndA,\n openQuestionModal,\n user,\n openAnswerListForQuestion,\n}) =>\n user &&\n user.isApproved && (\n <div>\n <Typography\n id='qAndA'\n variant='h6'\n align='center'\n classes={{ root: classes.title }}\n gutterBottom\n >\n <strong>{`Q & A`}</strong>\n </Typography>\n <Grid container align='center'>\n <Grid item xs={12}>\n <Typography classes={{ root: classes.question }} variant='body1'>\n <NoActionLink onClick={openQuestionModal}>\n <QuestionAnswerIcon className={classes.icon} />\n Ask fellow GOVX Members a question\n </NoActionLink>\n </Typography>\n </Grid>\n <Grid item xs={2} sm={2} />\n <Grid item xs={8} sm={8}>\n <Grid container spacing={1} align='left'>\n {qAndA &&\n qAndA.questions &&\n qAndA.questions.map((question, i) => (\n <Question\n key={i}\n question={question}\n productId={product.id}\n openAnswer={openAnswerListForQuestion == question.id}\n />\n ))}\n </Grid>\n </Grid>\n <Grid item xs={2} sm={2} />\n </Grid>\n </div>\n )\n\nconst mapStateToProps = (state, ownProps) => ({\n qAndA: selectQAndA(ownProps.product.id)(state),\n user: selectUser(state),\n})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n createQuestion: (productId, text, title) =>\n dispatch(createQuestion(productId, text, title)),\n openQuestionModal: () =>\n dispatch(\n showModal('CREATE_PRODUCT_QUESTION', {\n product: ownProps.product,\n setAsked: ownProps.setAsked,\n picture: ownProps.product.pictures.sort(\n (left, right) => left.displayOrder - right.displayOrder,\n )[0],\n }),\n ),\n})\n\nconst enhance = compose(\n withRouter,\n withState('text', 'setText', ''),\n withState('asked', 'setAsked', (props) => false),\n withState(\n 'openAnswerListForQuestion',\n 'setOpenAnswerListForQuestion',\n (props) => {\n let query = parse(props.location.search)\n if (query.turntoQuestionId) {\n if (query.turntoAnswerId) {\n return query.turntoQuestionId\n }\n }\n },\n ),\n connect(mapStateToProps, mapDispatchToProps),\n withProps((o) => ({\n brand: o.product.brand.name.toUpperCase(),\n })),\n withStyles(styles),\n withHandlers({\n handleQuestionChange: (props) => (text) => {\n props.setText(text)\n },\n askQuestion: (props) => () => {\n props.createQuestion(props.product.id, props.text, props.product.name)\n // props.setAsked(true)\n },\n }),\n)\n\nexport default enhance(ProductQAndA)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { compose, lifecycle } from 'recompose'\nimport { connect } from 'react-redux'\nimport ProductReviews from '../ProductReviews'\nimport ProductQAndA from '../ProductQAndA'\nimport Grid from '@material-ui/core/Grid'\nimport Divider from '@material-ui/core/Divider'\nimport {\n requireProductReviews,\n requireProductQAndA,\n} from '../../../../redux/actions'\nimport { getConfiguration } from '../../../../setup/configuration'\n\nexport const ProductReviewsAndQA = ({ product }) => (\n <div>\n <Grid item xs={12}>\n <ProductReviews product={product} />\n </Grid>\n\n {getConfiguration().turnTo.enabled && (\n <div>\n <Grid item xs={12}>\n <ProductQAndA product={product} />\n </Grid>\n\n <Grid item xs={12}>\n <Divider light />\n </Grid>\n </div>\n )}\n </div>\n)\n\nProductReviewsAndQA.propTypes = {\n product: PropTypes.object,\n}\n\nexport const mapDispatchToProps = (dispatch, ownProps) => ({\n loadProductReviews: () =>\n dispatch(requireProductReviews(ownProps.product.id, 0, 10)),\n loadQAndA: () => dispatch(requireProductQAndA(ownProps.product.id)),\n})\n\nconst enhance = compose(\n connect(null, mapDispatchToProps),\n lifecycle({\n componentDidMount() {\n this.props\n .loadProductReviews()\n .then(() => {\n this.props.loadQAndA().catch((err) => {})\n })\n .catch(() => {\n this.props.loadQAndA()\n })\n },\n componentDidCatch(error, info) {},\n }),\n)\n\nexport default enhance(ProductReviewsAndQA)\n","import React from 'react'\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandIcon from '@material-ui/icons/ExpandMore'\nimport { priceBehaviorBits, getPriceBehaviorDiscountDetailsText, getPriceBehaviorName, getPriceInfo } from '../../../../utilities/price-util'\n\nexport const DiscountDetails = ({ product, variantId }) => {\n let variant = product.variants.find((v) => v.id === variantId)\n let price = variant && variant.price\n let priceInfo = price && getPriceInfo(price)\n let priceBehavior = priceInfo && priceInfo.priceBehavior\n return (\n <div style={{ margin: '1em 0em' }}>\n {priceBehavior && priceBehavior.id === priceBehaviorBits.openBox && (\n <Accordion\n style={{ border: 'solid 1px #e3e3e3' }}\n elevation={0}\n data-event-tracking={JSON.stringify({\n category: 'Discount Details',\n action: 'click',\n label: 'discountdetails',\n })}\n >\n <AccordionSummary expandIcon={<ExpandIcon />}>\n <span style={{ fontWeight: 'bold' }}>About { getPriceBehaviorName(priceBehavior) }</span>\n </AccordionSummary>\n <AccordionDetails>\n <div>\n <span dangerouslySetInnerHTML={{ __html: getPriceBehaviorDiscountDetailsText(priceBehavior) }} />\n </div>\n </AccordionDetails>\n </Accordion>\n )}\n </div>\n)}","import React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n compose,\n lifecycle,\n branch,\n withState,\n withHandlers,\n renderNothing,\n withContext,\n} from 'recompose'\nimport Grid from '@material-ui/core/Grid'\nimport Divider from '@material-ui/core/Divider'\nimport {\n selectProductDetails,\n selectLowestPriceVariant,\n selectCart,\n selectVariantByDisplayOrderThenPrice,\n selectVariantByPriceThenDisplayOrder,\n selectUser,\n} from '../../../redux/selectors'\nimport { viewedProductVariant } from '../../../redux/actions'\nimport { viewedShopProductImage } from '../../../redux/actions'\nimport { priceSort } from '../../../utilities/product-util'\nimport ProductInfo from './ProductInfo'\nimport ProductRating from './ProductRating'\nimport ProductPrice from './ProductPrice'\nimport ProductOptions from './ProductOptions'\nimport ProductImage from './ProductImage'\nimport ProductActions from './ProductActions'\nimport Warranty from './Warranty'\nimport ShippingPolicy from './ShippingPolicy'\nimport ShippingMessage from './ShippingMessage'\nimport ReturnPolicy from './ReturnPolicy'\nimport ProductDetails from './ProductDetails'\nimport GiftPreview from './GiftWithPurchase/GiftPreview'\nimport ProductReviews from './ProductReviews'\nimport ProductKeyFeatures from './ProductKeyFeatures'\nimport ProductRecommendations from '../../certona/components/ProductRecommendations'\nimport { withRouter } from 'react-router'\nimport { parse } from 'query-string'\nimport ProductReviewsAndQA from './ProductReviewsAndQA'\nimport { getConfiguration } from '../../../setup/configuration'\nimport TrustBoxContainer from '../../../components/TrustPilot'\nimport { requireTrustPilot } from '../../../trustpilot'\nimport { DiscountDetails } from './DiscountDetails'\nconst SHOW_PRODUCT = 'product'\nconst SHOW_VARIANT = 'variant'\n\nexport const ProductPage = ({\n cart,\n onSelectAttribute,\n onSelectThumbnail,\n pageState,\n product,\n user,\n}) => {\n return (\n <div style={{ maxWidth: '1200px', margin: '3em auto 0' }}>\n <Grid container spacing={5}>\n <Grid item xs={7}>\n <ProductImage\n product={product}\n variantId={pageState.selection.variantId}\n />\n </Grid>\n <Grid item xs={5}>\n <div style={{ position: 'relative' }}>\n <div\n id='imageZoomPortal'\n style={{ position: 'absolute', left: '-5px' }}\n />\n <ProductInfo product={product} />\n <ProductRating\n key={product.id}\n product={product}\n ratingInfo={product.ratings}\n />\n <ProductPrice\n product={product}\n variantId={pageState.selection.variantId}\n />\n <ShippingMessage user={user} />\n <ProductOptions\n product={product}\n pageState={pageState}\n onSelectThumbnail={onSelectThumbnail}\n onSelectAttribute={onSelectAttribute}\n />\n <ProductActions\n product={product}\n variantId={pageState.selection.variantId}\n cart={cart}\n disabled={!pageState.selection.purchasable}\n unselected={pageState.unselected}\n />\n <GiftPreview\n product={product}\n variantId={pageState.selection.variantId}\n />\n <ProductKeyFeatures product={product} />\n <Warranty product={product} />\n <ShippingPolicy expanded={true} product={product} />\n <ReturnPolicy\n product={product}\n variantId={pageState.selection.variantId}\n />\n <DiscountDetails product={product} variantId={pageState.selection.variantId}\n />\n </div>\n </Grid>\n\n <Grid item xs={12}>\n <Divider light />\n </Grid>\n\n <Grid item xs={12}>\n <ProductRecommendations schemeName='product1_rr' />\n </Grid>\n\n <Grid item xs={12}>\n <ProductRecommendations schemeName='product2_rr' />\n </Grid>\n\n <Grid item xs={12}>\n <ProductDetails product={product} />\n </Grid>\n\n <Grid item xs={12}>\n <ProductReviewsAndQA key={product.id} product={product} />\n </Grid>\n\n {!(user && user.isRegistered && user.isApproved) && (\n <Grid item xs={12} style={{ margin: '16px 0' }}>\n <TrustBoxContainer\n data-template-id='53aa8912dec7e10d38f59f36'\n data-style-height='140px'\n data-style-width='100%'\n />\n </Grid>\n )}\n </Grid>\n </div>\n )\n}\n\nProductPage.propTypes = {\n cart: PropTypes.object,\n onSelectAttribute: PropTypes.func,\n onSelectThumbnail: PropTypes.func,\n pageSate: PropTypes.object,\n product: PropTypes.object,\n}\n\nconst mapStateToProps = (state, ownProps) => {\n let product = selectProductDetails(state)\n return {\n user: selectUser(state),\n product,\n lowestPriceVariant: selectVariantByPriceThenDisplayOrder(product),\n cart: selectCart(state),\n }\n}\n\nconst adjustPageState = (selection, currentState) => {\n let remainingOptions = [...currentState.map]\n let purchasable = true\n\n Object.keys(selection.attributes).forEach((k) => {\n let value = selection.attributes[k]\n if (value)\n remainingOptions = remainingOptions.filter(\n (o) => o.attributes[k] === value,\n )\n else purchasable = false\n })\n\n let newState = {\n ...currentState,\n selection: {\n ...selection,\n purchasable: purchasable,\n },\n thumbnails: currentState.thumbnails\n .map((t) => ({\n ...t,\n selected:\n t.attributeId ===\n selection.attributes[currentState.primaryAttributeGroup],\n }))\n .sort(\n (left, right) =>\n ((left.variants[0] && left.variants[0].displayOrder) || 0) -\n ((right.variants[0] && right.variants[0].displayOrder) || 0) ||\n ((left.variants[0] &&\n left.variants[0].price &&\n left.variants[0].price.price) ||\n 999) -\n ((right.variants[0] &&\n right.variants[0].price &&\n right.variants[0].price.price) ||\n -999),\n ),\n attributeGroups: currentState.attributeGroups.map((ag) => ({\n ...ag,\n value: selection.attributes[ag.id],\n attributes: ag.attributes.map((a) => {\n let result = {\n ...a,\n selected: a.id === selection.attributes[ag.id],\n }\n\n let filtered = currentState.map\n .slice()\n .filter((m) => m.attributes[ag.id] === a.id)\n Object.keys(selection.attributes).forEach((k) => {\n if (k != ag.id) {\n let value = selection.attributes[k]\n if (value)\n filtered = filtered.filter(\n (m) => m.attributes[k] === selection.attributes[k],\n )\n }\n })\n\n filtered = filtered.filter((f) => {\n let p = currentState.details.variants.find(\n (v) => v.id === f.productVariantId,\n )\n return p && p.price && !p.price.outOfStock\n })\n\n result.available = filtered.length > 0\n\n return result\n }),\n })),\n }\n\n if (!newState.selection.variantId && remainingOptions.length > 0) {\n let allVariantsWithAttribute = currentState.details.variants.filter((v) =>\n remainingOptions.map((ro) => ro.productVariantId).includes(v.id),\n )\n let lowestPriceVariantWithAttribute = selectLowestPriceVariant({\n variants: allVariantsWithAttribute,\n })\n newState.selection.variantId = lowestPriceVariantWithAttribute.id\n }\n\n newState.unselected = newState.attributeGroups.filter((ag) => {\n return ag.attributes.length <= 1 || newState.selection.attributes[ag.id] > 0\n ? null\n : ag\n })\n\n return newState\n}\n\nconst getVariantId = (props) => {\n const variants = props.product?.variants\n if (variants === null || variants === undefined) return null\n\n let params = parse(props.location.search)\n let variantId = params.variant !== null ? parseInt(params.variant) : null\n let isValid = variants.find((v) => v.id === variantId)\n return isValid ? variantId : null\n}\n\nconst getMode = (props) => {\n let params = parse(props.location.search)\n let mode = params.mode\n ? params.mode === SHOW_PRODUCT\n ? SHOW_PRODUCT\n : SHOW_VARIANT\n : SHOW_PRODUCT\n return mode\n}\n\nconst loadComponent = (currentProps) => {\n const variantOptions = currentProps.product.options.variants\n const variants = currentProps.product.variants\n const attributeGroups = currentProps.product.options.attributeGroups\n .slice()\n .sort((left, right) => left.displayOrder - right.displayOrder)\n\n let pageState = {\n thumbnails: [],\n primaryAttributeGroup: null,\n map: [],\n attributeGroups: [],\n selection: {\n purchasable: false,\n variantId: null,\n attributes: {},\n },\n details: currentProps.product,\n }\n\n pageState.selection.variantId =\n currentProps.variantId !== null\n ? currentProps.variantId\n : currentProps.lowestPriceVariant.id\n\n pageState.attributeGroups = attributeGroups.map((ag, i) => {\n let group = {\n ...ag,\n attributes: [\n ...ag.attributes\n .slice()\n .sort((left, right) => left.displayOrder - right.displayOrder)\n .map((a) => ({ ...a, selected: false })),\n ],\n }\n\n return group\n })\n\n if (pageState.attributeGroups.length > 0)\n pageState.primaryAttributeGroup = pageState.attributeGroups[0].id\n\n pageState.attributeGroups.forEach((ag) => {\n if (ag.attributes.length > 1) pageState.selection.attributes[ag.id] = null\n })\n\n variantOptions.forEach((v) => {\n const mapItem = v.attributeMap.reduce(\n (result, currentValue) => {\n result.attributes[currentValue.attributeGroupId] =\n currentValue.attributeId\n return result\n },\n { productVariantId: v.productVariantId, attributes: {} },\n )\n\n pageState.map.push(mapItem)\n\n const variant = variants.find((v2) => v2.id === v.productVariantId)\n let attributeId = mapItem.attributes[pageState.primaryAttributeGroup]\n\n if (variant.picture) {\n let currentThumbnail = pageState.thumbnails.find(\n (t) => t.attributeId === attributeId,\n )\n\n if (!currentThumbnail) {\n currentThumbnail = {\n id: variant.picture.id,\n picture: variant.picture,\n variants: [],\n selected: false,\n }\n pageState.thumbnails.push(currentThumbnail)\n currentThumbnail.attributeId = attributeId\n }\n currentThumbnail.variants.push(variant)\n }\n\n if (variant.id === pageState.selection.variantId) {\n if (currentProps.mode === SHOW_PRODUCT) {\n pageState.selection.attributes[pageState.primaryAttributeGroup] =\n attributeId\n } else {\n let attributes = mapItem.attributes\n for (var key in attributes) {\n if (attributes.hasOwnProperty(key)) {\n pageState.selection.attributes[key] = attributes[key]\n }\n }\n }\n }\n //pageState.selection.attributes[pageState.primaryAttributeGroup] = attributeId\n })\n\n pageState.thumbnails.forEach((th) => {\n th.variants = priceSort(th.variants)\n })\n\n let adjusted = adjustPageState(pageState.selection, pageState)\n\n currentProps.setPageState(adjusted)\n currentProps.setReady(true)\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n viewedProductVariant: (product, variantId) => {\n return dispatch(viewedProductVariant({ product, variantId }))\n },\n\n loadPayPal: () =>\n dispatch({\n type: 'setLoadingStatus',\n value: 'SCRIPT_LOADING_STATE.PENDING',\n }),\n viewedShopProductImage: (product, variantId) =>\n dispatch(\n viewedShopProductImage({\n product: product,\n variantId: variantId,\n }),\n ),\n})\n\nconst enhance = compose(\n withRouter,\n\n withState('ready', 'setReady', false),\n withState('pageState', 'setPageState', { selection: null }),\n connect(mapStateToProps, mapDispatchToProps),\n withState('variantId', 'setVariantId', (props) => getVariantId(props)),\n withState('mode', 'setMode', (props) => getMode(props)),\n withHandlers({\n onSelectThumbnail: (props) => (thumbnail) => {\n let currentState = props.pageState\n\n let bestVariant =\n selectVariantByPriceThenDisplayOrder(thumbnail) || thumbnail.variants[0]\n\n let selection = {\n variantId: bestVariant.id,\n attributes: { ...currentState.selection.attributes },\n }\n\n Object.keys(selection.attributes).forEach((k) => {\n selection.attributes[k] = null\n })\n\n selection.attributes[currentState.primaryAttributeGroup] =\n thumbnail.attributeId\n\n let adjusted = adjustPageState(selection, currentState)\n props.setPageState(adjusted)\n props.viewedShopProductImage(props.product, bestVariant.id)\n },\n onSelectAttribute: (props) => (group, attributeID) => {\n let currentState = props.pageState\n let selection = {\n attributes: {\n ...currentState.selection.attributes,\n },\n }\n\n selection.attributes[group.id] = attributeID\n\n let adjusted = adjustPageState(selection, currentState)\n props.setPageState(adjusted)\n },\n }),\n lifecycle({\n componentDidUpdate(prevProps) {\n let variantId = getVariantId(this.props)\n if (\n this.props.product?.id !== prevProps.product?.id ||\n variantId !== prevProps.variantId\n ) {\n this.props.setVariantId(variantId)\n loadComponent(this.props)\n }\n if (\n this.props.pageState?.selection?.variantId !==\n prevProps.pageState?.selection?.variantId\n ) {\n this.props.viewedProductVariant(\n this.props.product,\n this.props.pageState?.selection?.variantId,\n )\n }\n },\n componentDidMount() {\n requireTrustPilot()\n if (this.props.product) {\n loadComponent(this.props)\n }\n },\n }),\n withContext(\n {\n pageState: PropTypes.object,\n },\n (props) => ({\n pageState: props.pageState,\n }),\n ),\n branch(\n ({ ready }) => !ready,\n () => renderNothing(),\n ),\n)\n\nexport default enhance(ProductPage)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport {\n compose,\n withProps,\n withState,\n lifecycle,\n shouldUpdate,\n withHandlers,\n} from 'recompose'\nimport { buildPictureUrl } from '../../../../utilities/picture-util'\nimport { hideLightbox } from '../../../../redux/actions'\nimport ReactImageLightbox from 'react-image-lightbox'\nimport 'react-image-lightbox/style.css'\n\nexport const Lightbox = ({\n pictures,\n seoName,\n index,\n onNavClick,\n onCloseLightbox,\n open,\n isAffiliate,\n}) => (\n <ReactImageLightbox\n mainSrc={\n isAffiliate\n ? pictures[index]\n : buildPictureUrl(pictures[index], seoName, 683)\n }\n nextSrc={\n isAffiliate\n ? pictures[index + 1]\n : buildPictureUrl(pictures[index + 1], seoName, 683)\n }\n prevSrc={\n isAffiliate\n ? pictures[index - 1]\n : buildPictureUrl(pictures[index - 1], seoName, 683)\n }\n onCloseRequest={() => onCloseLightbox()}\n onMoveNextRequest={() => onNavClick((index + 1) % pictures.length)}\n onMovePrevRequest={() =>\n onNavClick((index + pictures.length - 1) % pictures.length)\n }\n reactModalStyle={{\n overlay: {\n zIndex: 15000, //the header is at 2000\n },\n }}\n />\n)\n\nLightbox.propTypes = {\n classes: PropTypes.object,\n onPictureClick: PropTypes.func,\n pictures: PropTypes.array,\n open: PropTypes.bool,\n index: PropTypes.number,\n setIndex: PropTypes.func,\n onClose: PropTypes.func,\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n onClose: () => dispatch(hideLightbox()),\n})\n\nconst enhance = compose(\n connect(null, mapDispatchToProps),\n withProps((o) => ({\n pictures: o.pictures,\n initialIndex: o.initialIndex,\n seoName: o.seoName,\n onClose: o.onClose,\n isAffiliate: o.isAffiliate,\n })),\n withState('open', 'setOpen', false),\n withState('index', 'setIndex', (o) => o.initialIndex),\n withHandlers({\n onPictureClick: (props) => (picture) => {\n props.setOpen(true)\n props.onLightboxPictureNav()\n },\n onNavClick: (props) => (index) => {\n props.setIndex(index)\n props.onLightboxPictureNav()\n },\n onCloseLightbox: (props) => () => {\n props.onClose()\n props.onLightboxPictureNav()\n },\n }),\n)\n\nexport default enhance(Lightbox)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport Lightbox from './'\nexport const LightboxRoot = ({ lightboxProps }) =>\n lightboxProps && <Lightbox {...lightboxProps} />\nexport default connect((state) => state.lightbox)(LightboxRoot)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport Classic from '../../../../../../components/common/inputs/Select/Classic'\n\nconst ClassicSelect = ({ label, items, onChange, value, name }) => (\n <Classic\n label={label}\n items={items}\n onChange={onChange}\n value={value}\n name={name}\n />\n)\n\nexport default ClassicSelect\n","import { cordialPromise, legacyEventsAreEnabled } from '../analytics/cordial'\nimport { getConfiguration } from '../setup/configuration'\n\nexport default function useCordialEvent(eventName, data) {\n const config = getConfiguration().cordial\n if (!legacyEventsAreEnabled(config)) {\n try {\n // console.log('CORDIAL EVENT', eventName, data)\n return async (additionalData = {}) => {\n await cordialPromise()\n return window.crdl('event', eventName, {\n ...data,\n ...additionalData,\n target: 'v2',\n datetime: new Date().toISOString(),\n })\n }\n } catch (err) {\n console.error('CORDIAL ERROR', err)\n return () => {}\n }\n }\n return () => {} // ignore event if target is legacy\n}\n","import { createSelector } from 'reselect'\nimport * as offerApi from '../../../api/offerApi'\n\nexport const FETCH_OFFER_REQUEST = 'FETCH_OFFER_REQUEST'\nexport const FETCH_OFFER_SUCCESS = 'FETCH_OFFER_SUCCESS'\nexport const FETCH_OFFER_FAILURE = 'FETCH_OFFER_FAILURE'\n\nexport const fetchOffer =\n (id, productId = '', offerButtonName) =>\n (dispatch) => {\n dispatch({ type: FETCH_OFFER_REQUEST })\n return offerApi\n .fetchOffer(id, productId, offerButtonName)\n .then((response) => {\n dispatch({ type: FETCH_OFFER_SUCCESS, offer: response })\n return response\n })\n .catch((err) => {\n let errorResponse = {\n type: 'OfferEventErrorModel',\n title: 'Error',\n message: 'Error fetching discount code.',\n }\n dispatch({ type: FETCH_OFFER_FAILURE, offer: errorResponse })\n return errorResponse\n })\n }\n"],"names":["fetchVideo","id","fetch","concat","method","then","response","json","TrustBox","_ref","trustBoxRef","dataTemplateId","dataStyleHeight","dataStyleWidth","React","ref","className","href","target","rel","style","color","_Component","TrustBoxContainer","props","_this","_classCallCheck","_callSuper","_inherits","key","value","window","Trustpilot","loadFromElement","this","current","_extends","Component","getEligibleGroupsText","eligibleGroups","milTitle","validGroups","filter","g","newValues","length","some","push","i","val","ShippingPolicy","text","expanded","margin","Accordion","defaultExpanded","border","elevation","JSON","stringify","category","action","label","AccordionSummary","expandIcon","ExpandIcon","fontWeight","AccordionDetails","dangerouslySetInnerHTML","__html","propTypes","PropTypes","compose","mapProps","o","sellerName","seller","name","toUpperCase","DefaultPolicy","getConfiguration","supportUrl","ReturnPolicy","ProductDetails","classes","product","description","Typography","variant","title","align","container","removeScriptTags","isRequired","withStyles","theme","a","colors","darkGray","textDecoration","maxWidth","maxHeight","fontSize","fontFamily","SaleDisplay","priceInfo","Grid","item","xs","padding","direction","priceLabelCell","priceCell","position","top","priceTag","dollars","toLocaleString","cents","withCode","RetailPrice","_ref2","retailPrice","borderLeft","height","bottom","dollar","SavingsPercent","_ref3","savings","price","getAffiliateProductPriceInfo","calcSavings","test","link","cursor","backgroundColor","_ref4","membershipPending","alignItems","borderTop","borderBottom","alignContent","getGenericErrorMessage","type","content","DiscountCodeModal","goRegister","eligibleGroupsText","offer","onOfferClick","closeModal","onCopyCouponCode","copy","error","eligibleGroupsDescription","notEligibleDescription","getErrorMessage","ModalContainer","DialogContent","DialogActions","CancelButton","children","onClick","cancelButton","Button","ErrorModal","useCodeEvent","useCordialEvent","sellerId","affiliate","width","textAlign","display","flexDirection","justifyContent","discountCode","LinearProgress","instructions","ExternalLink","unstyled","url","newWindow","DiscountModal","connect","dispatch","ownProps","getOffer","fetchOffer","gotoRegister","clickAffiliateProductModalDiscountCode","addedAffiliateProduct","hideModal","setOfferViewed","offerClaim","clickAffiliateProductOffer","_objectSpread","withState","withHandlers","e","preventDefault","navigator","clipboard","writeText","setCopy","setTimeout","bind","darkBlue","white","lifecycle","componentDidMount","_this$props$affiliate","_this2","offers","setEligibleGroupsText","r","setOffer","state","user","selectUser","clickLogin","productType","clickJoin","getAffiliateDetails","fetchAffiliateDetails","clickedOffer","showModal","component","offerButtonName","gotoLogin","stateProps","dispatchProps","handleLogin","productTypes","MARKETPLACE","handleJoin","isRegistered","isApproved","handleDiscountClick","setAffiliate","card","overflow","borderRadius","marginBottom","marketplaceTab","transform","transformOrigin","iconContainer","zIndex","icon","rest","getDiscountCodeEvent","productId","productName","src","alt","pricing","Price","marginTop","Image","onPictureClick","pictures","seoName","index","video","lightboxPics","primaryPicture","onMainPictureClick","Paper","mainImageContainer","imageWrapper","buildPictureUrl","mainImageAlt","left","opacity","SearchIcon","marginLeft","imageLoading","CircularProgress","classNames","alternateImages","centeredAlternateImages","map","p","NoActionLink","alternateImageContainer","onKeyPress","alternateImage","LightboxRoot","setLightboxPics","open","withProps","images","viewedMarketplaceProductImage","onLightboxPictureNav","showLightbox","initialIndex","setImageContainerWidth","document","getElementById","offsetWidth","componentWillReceiveProps","nextProps","picture","setIndex","setPrimaryPicture","shouldUpdate","objectFit","mainImage","overflowX","overflowY","minWidth","marginRight","videoThumbnailContainer","videoThumbnail","AffiliateProductPage","onSellerClick","onSelectThumbnail","pageState","spacing","gutterBottom","AffiliateLink","root","lineHeight","InfoCard","cart","onSelectAttribute","pageSate","withRouter","selectAffiliateProductDetails","selectCart","viewedAffiliateProduct","entity","onEvent","branch","ready","renderNothing","ProductInfo","brand","textTransform","BrandLink","underlined","qAndA","selectQAndA","hasRatings","ratingInfo","totalRatings","gotoReviews","targetEl","scroll","offsetTop","behavior","gotoQAndA","componentDidCatch","info","ratingWrapper","conversationWrapper","total","RatingStars","rating","averageRating","totalReviews","PriceBehaviorBase","wrapper","caption","XDeal","orange","enhanceXDeal","FlashDeal","enhanceFlashDeal","Clearance","red","enhanceClearance","OpenBox","enhanceOpenBox","priceBehaviorBits","none","xDeal","flashDeal","clearance","openBox","standard","selectedClass","priceBehavior","h6","getMessage","message","day","hour","minute","DealTimer","dealMessage","expires","_timeout","createTimeout","now","Date","diff","clearTimeout","setDealMessage","Math","ceil","MissingVariant","paddingBottom","Expired","showSalePriceWide","PriceBehavior","PriceTag","WasPrice","preSalePrice","msrp","_ref5","showSavingsSmall","_ref6","getSavings","passesSavingsThreshold","minPercentToShow","formatted","showWasPrice","sale","showRetailPrice","showTimer","PriceMessage","MissingPrice","_ref7","ProductPrice","_ref8","expired","SHOP","variants","find","v","variantId","getPriceInfo","endDateTimeUtc","getTime","componentWillUnmount","hasSameId","el","arr","renderThumbnail","attributeGroups","onThumbnailClick","t","attributeId","thumbnail","selected","join","image","getAttributeName","Thumbnails","thumbnails","every","flexWrap","lightBlue","AttributeButtons","attributes","onAttributeClick","selectedId","buttons","available","size","button","group","uiLabel","attribute","AttributeSelect","onChangeAttribute","ClassicSelect","labelStyle","fullWidth","onChange","items","options","attributeID","SingleAttribute","AttributeGroup","templateType","SizeChartModal","brandName","sizeChart","Table","TableHead","TableRow","Object","keys","chartValues","TableCell","header","TableBody","row","k","notes","sizeChartId","selectSizeChart","requireSizeChart","ProductOptions","openSizeChartModal","sort","right","displayOrder","displayAttributeNumber","GridIcon","fitIndicatorType","selectBrand","brandId","YouTubeThumbnail","VimeoThumbnail","vimeoInfo","thumbnail_medium","vimeo","setVimeoInfo","err","console","log","VideoThumbnail","pointerEvents","MissingImage","PanoramaIcon","ProductImage","onVideoClick","slice","videoId","videoType","_toConsumableArray","getContext","viewedShopProductImage","_ownProps$pageState","selection","viewedShopProductVideo","_ownProps$pageState2","selectedVariantId","BackInStockSubscribeModal","onNotifyClick","notifyEvent","subscribeBackInStock","BackInStockUnsubscribeModal","onUnsubscribeClick","unsubscribeBackInStock","OutOfStock","lowStockActivityType","showNotifyMe","hasBackInStockSubscription","settings","getLowStockActivitySettings","subscribedContainer","CheckIcon","ErrorIcon","PleaseSelect","clickedState","unselected","addToCart","addToWishList","startsWithVowel","indexOf","toLowerCase","ProductActions","disabled","onAddToCartCheck","onAddToWishlistCheck","onDeleteFromWishlist","wishlistItem","quantity","updateQuantity","setQuantity","addToCartClickedState","wishlistClickedState","eventData","addToWishListEvent","wrap","quantityButton","RemoveIcon","quantityIcon","TextField","inputProps","pattern","quantityInput","onBlur","AddIcon","orderMinimumQuantity","orderMaximumQuantity","outOfStock","SavedIcon","lightGray","blue","disabledWishlistButton","AddOutlineIcon","onAddToCart","onAddToWishlist","getVariantAttributes","groups","attributeMap","productVariantId","forEach","findAttribute","attributeGroupId","withTheme","selectWishlistItem","canSeePrices","crossSells","selectCrossSells","gifts","selectGifts","trackingInfo","selectTracking","variantAttribute","listInfo","list","listType","path","mapTrackingInfo","addWishlistItem","removeWishlistItem","fetchCart","cartChange","gotoCrossSells","ids","showGiftWithPurchase","GiftWithPurchaseModal","meta","onAddToWishList","setAddToCartClickedState","newState","setClickedState","bundle","hasCrossSells","hasAvailableGifts","newQuantity","parseInt","setWishlistClickedState","x","unavailableContainer","notifyMeContainer","float","outline","fill","componentDidUpdate","prevProps","Warranty","warranty","policies","warrantyLabel","warrantyText","overflowWrap","shippingMessage","GovXDefault","returnPolicyText","OpenBoxPolicy","_o$product$variants$f","getActivePriceBehavior","fullDescription","availableGifts","variantIds","gift","md","justify","ProductKeyFeatures","fallbackDescription","keyFeatures","shortDescription","WriteAReviewLink","setReviewed","CreateIcon","NoReviews","reviewed","paragraph","firstName","Review","handleVote","review","voted","topSection","topSectionLeft","noWrap","author","getLocalDateString","createdOnUtc","decode","helpfulYesTotal","helpfulNoTotal","onHelpfulClick","reviewId","wasHelpful","setVoted","WithReviews","onViewLessClick","onViewMoreClick","query","reviews","productReviews","ProductReviews","onWriteReviewClick","Divider","light","selectProductReviews","hasReviewedProduct","requireProductReviews","from","fetchProductReviews","voteProductReview","setQuery","reply","square","paperWrapper","nickName","formatPrettyDate","dateCreated","createReply","answerId","parentReplyId","voteAnswerUp","replyIds","flattenDeep","answer","replies","repliesRepliedTo","upVotes","replyChange","setText","replyToReplyChange","setReplyToReplyText","replyToAnswer","setReplied","setShowReplyBox","replyToReply","replyToReplyText","setRepliesRepliedTo","setSelected","handleUpvote","setUpvoted","setTotalUpvotes","handleShowLessReplies","setShowReplies","black","answerOption","likeOption","replyButton","boxShadow","answerPaperWrapper","showMore","parse","location","search","turntoQuestionId","turntoAnswerId","turntoReplyId","showReplyBox","replied","upvoted","totalUpvotes","showReplies","Reply","parentAnswerId","ExpandLessIcon","ExpandMoreIcon","InputProps","rows","multiline","maxLength","createAnswer","questionId","voteQuestionUp","question","openAnswer","answerChange","answerQuestion","setShowAnswerBox","setAnswered","handleShowLessAnswers","setShowMoreAnswers","answerButton","showAnswerBox","answered","showMoreAnswers","answers","Answer","createQuestion","openQuestionModal","setAsked","handleQuestionChange","askQuestion","openAnswerListForQuestion","QuestionAnswerIcon","sm","questions","Question","ProductReviewsAndQA","turnTo","enabled","ProductQAndA","loadProductReviews","loadQAndA","requireProductQAndA","DiscountDetails","getPriceBehaviorName","getPriceBehaviorDiscountDetailsText","SHOW_PRODUCT","ProductPage","ProductRating","ratings","ShippingMessage","purchasable","GiftPreview","ProductRecommendations","schemeName","adjustPageState","currentState","remainingOptions","primaryAttributeGroup","ag","result","filtered","m","f","details","allVariantsWithAttribute","ro","includes","lowestPriceVariantWithAttribute","selectLowestPriceVariant","getVariantId","_props$product","params","loadComponent","currentProps","variantOptions","lowestPriceVariant","mapItem","reduce","currentValue","v2","currentThumbnail","mode","hasOwnProperty","th","priceSort","adjusted","setPageState","setReady","selectProductDetails","selectVariantByPriceThenDisplayOrder","viewedProductVariant","loadPayPal","getMode","bestVariant","_this$props$product","_prevProps$product","_this$props$pageState","_prevProps$pageState","_this$props$pageState2","setVariantId","requireTrustPilot","withContext","Lightbox","onNavClick","onCloseLightbox","isAffiliate","ReactImageLightbox","mainSrc","nextSrc","prevSrc","onCloseRequest","onMoveNextRequest","onMovePrevRequest","reactModalStyle","overlay","onClose","hideLightbox","setOpen","lightbox","lightboxProps","Classic","_regeneratorRuntime","prototype","n","defineProperty","Symbol","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","l","s","y","GeneratorFunction","GeneratorFunctionPrototype","d","getPrototypeOf","values","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","callInvokeWithMethodAndArg","Error","done","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","delegateYield","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","apply","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","toPrimitive","String","_toPrimitive","_toPropertyKey","asyncGeneratorStep","_asyncToGenerator","_next","_throw","eventName","data","config","cordial","legacyEventsAreEnabled","_callee","additionalData","_args","_context","undefined","cordialPromise","crdl","datetime","toISOString","offerApi","errorResponse"],"sourceRoot":""}