{"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.&nbsp;\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>&nbsp;&nbsp;</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>&nbsp;&nbsp;</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.&nbsp;\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.&nbsp;\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            &nbsp;/&nbsp;\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                  &nbsp;View More{' '}\n                  <ExpandIcon style={{ marginBottom: '-5px' }} />\n                </strong>\n              </span>\n            ) : (\n              <span>\n                Viewing {reviews.length} of {total} reviews.\n                <strong>\n                  &nbsp;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":""}