{"version":3,"file":"js/1508-82162b4d3ffbefbf2611.chunk.js","mappings":"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","sources":["webpack:///./app/javascript/components/SharedComponents/CompareIcon/index.jsx","webpack:///./app/javascript/utils/ComparableLocations.js"],"sourcesContent":["import React from 'react';\nimport cookie from 'react-cookies';\nimport ReactTooltip from 'react-tooltip';\n\nimport { updateComparables } from \"../../../utils/ComparableLocations\";\nimport Portal from '../Portal';\nimport Notification from '../Notification';\nimport { SvgIco } from \"../Icons\";\n\nimport './index.sass';\n\n\nexport class CompareIcon extends React.PureComponent {\n\n  handleIsActive = () => {\n    const { siteKey, locationId } = this.props;\n    const retrievedComparableLocations = localStorage && localStorage.getItem(`my.comparable_lease_${siteKey}`);\n    const comparableLocations = JSON.parse(retrievedComparableLocations) || {};\n    let allIds = [];\n\n    for (let prop in comparableLocations) {\n      if (comparableLocations.hasOwnProperty(prop)) {\n        allIds = allIds.concat(comparableLocations[prop]);\n      }\n    }\n    const isActive = allIds.indexOf(`${locationId}`) >= 0;\n\n    this.setState({ isActive });\n  };\n\n  componentDidMount() {\n    this.handleIsActive();\n  };\n\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    const { comparableLimitExceededError, showLimitExceedMessage } = this.state;\n\n    comparableLimitExceededError && comparableLimitExceededError !== prevState.comparableLimitExceededError && this.showLimitExceedMessage();\n    this.props.comparableLocations !== prevProps.comparableLocations && this.handleIsActive();\n    showLimitExceedMessage && showLimitExceedMessage !== prevState.showLimitExceedMessage && document.addEventListener('click', this.handleClickOutside);\n  };\n\n  handleClickOutside = () => {\n    const { showLimitExceedMessage } = this.state;\n\n    document.removeEventListener('click', this.handleClickOutside);\n    showLimitExceedMessage && this.hideLimitExceedMessage();\n  }\n\n  constructor(props) {\n    super(props);\n    this.typingTimer = null;\n\n    this.state = {\n      policyIsAccepted: cookie.load('cookie_consent_shown'),\n      comparableLimitExceededError: false,\n      showLimitExceedMessage: false,\n      descriptionPopup: false,\n      isActive: false,\n    };\n  }\n\n\n  handleClick = () => {\n    const { comparableLimitExceededError, isActive } = this.state;\n    const { updateComparableLocations, siteKey, locationId, hideTooltip, kind } = this.props;\n\n    if (comparableLimitExceededError && !isActive) {\n      this.showLimitExceedMessage();\n    } else {\n      const showInfoPopup = !(localStorage && localStorage.getItem(`my.comparable_message_shown`));\n      const newComparablesList = updateComparables(locationId, siteKey, kind, this.bounce);\n\n      showInfoPopup &&\n      this.setState({ descriptionPopup: true }, () => {\n        clearTimeout(this.typingTimer);\n        localStorage && localStorage.setItem(`my.comparable_message_shown`, 'true')\n        this.typingTimer = setTimeout(() => this.setState({ descriptionPopup: false }), 6000);\n      });\n\n      if (newComparablesList.limitExceededError) {\n        this.setState({ comparableLimitExceededError: !this.state.comparableLimitExceededError });\n      } else {\n        const { comparableLocations } = newComparablesList;\n        const kindPresent = comparableLocations[kind] && comparableLocations[kind].length;\n\n        this.setState({ isActive: kindPresent && comparableLocations[kind].indexOf(`${locationId}`) >= 0 });\n        updateComparableLocations && updateComparableLocations(comparableLocations);\n      }\n\n      !hideTooltip && ReactTooltip.hide(this[`compareIcon${locationId}`]);\n    }\n  };\n\n\n  bounce = () => {\n    const iconWrapper = document.getElementById(`iconWrapper${this.props.locationId}`);\n\n    iconWrapper.classList.add('bounce');\n    setTimeout(() => iconWrapper.classList.remove('bounce'), 1000);\n  };\n\n\n  showLimitExceedMessage = () =>\n    this.setState({ showLimitExceedMessage: true }, () => {\n      this.typingTimer = setTimeout(() => this.setState({ showLimitExceedMessage: false }), 6000);\n    });\n\n\n  hideLimitExceedMessage = () => {\n    clearTimeout(this.typingTimer);\n    this.setState({ showLimitExceedMessage: false });\n  };\n\n\n  closeDescriptionPopup = () => {\n    clearTimeout(this.typingTimer);\n    this.setState({ descriptionPopup: false });\n    localStorage && localStorage.setItem(`my.comparable_message_shown`, 'true');\n  };\n\n\n  render() {\n\n    const { descriptionPopup, isActive, policyIsAccepted, showLimitExceedMessage } = this.state;\n    const { indentation, locationId, notificationWrapperId, tooltipPosition, withLabel } = this.props;\n    const tooltipText = isActive ? I18n.t('compare.icon.tooltip_text.remove') : I18n.t('compare.icon.tooltip_text.add');\n    const limitExceedMessage = I18n.t('compare.icon.tooltip_text.limit_exceed_message');\n\n\n    return (\n      <div className=\"compare-icon\">\n        { withLabel\n          ?\n          <div className=\"compare-icon__with-label\" onClick={this.handleClick}>\n            <div className=\"compare-icon__wrapper compare-icon__wrapper--with-label\" id={`iconWrapper${locationId}`}>\n              <SvgIco name=\"compare\" size={22} className={isActive ? 'active' : ''}/>\n              { isActive &&\n                <div className=\"compare-icon__check-wrapper\">\n                  <SvgIco name=\"check\" size={7} />\n                </div>\n              }\n            </div>\n            <span className=\"compare-icon__label\">\n              { I18n.t('compare.icon.tooltip_text.add') }\n            </span>\n          </div>\n          :\n          <div role=\"button\" className=\"compare-icon__wrapper\" id={`iconWrapper${locationId}`}>\n            <div className=\"compare-icon__click-area\"\n                 role=\"button\"\n                 onClick={this.handleClick}\n                 aria-labelledby=\"compare-icon\"\n                 style={indentation && {top: '32px'}}>\n              <div className={`compare-icon__icon${ isActive ? ' active' : '' }`}\n                   data-tip={ tooltipText }\n                   data-class=\"compare-icon__tooltip\"\n                   data-for={'compareIconTooltip' + locationId}\n                   ref={ el => this[`compareIcon${ locationId }`] = el }>\n                  <SvgIco name=\"compare\" size={18} />\n              </div>\n\n              { isActive &&\n                <div className=\"compare-icon__check-wrapper\">\n                  <SvgIco name=\"check\" size={6} />\n                </div>\n              }\n\n              { <ReactTooltip place={ tooltipPosition } effect='solid' id={'compareIconTooltip' + locationId}/> }\n            </div>\n          </div>\n        }\n\n        <Portal>\n          <div ref={el => this.notificationWrapper = el}\n               className=\"notifications-wrapper\"\n               id={notificationWrapperId}\n               role=\"button\"\n               style={{ display: 'flex', justifyContent: 'center' }}>\n\n            <Notification\n              message={I18n.t('compare.icon.tooltip_text.was_added')}\n              visible={descriptionPopup}\n              customClass={!policyIsAccepted ? 'with-policy-block bottom-center' : 'bottom-center'}\n              handleClose={this.closeDescriptionPopup} />\n\n            <Notification\n              message={limitExceedMessage}\n              visible={showLimitExceedMessage}\n              customClass=\"dark bottom-center\"\n              handleClose={this.hideLimitExceedMessage} />\n          </div>\n        </Portal>\n\n      </div>\n    )\n  }\n}\n\n\nexport default CompareIcon;\n","import { handleComparableLocationsCounter } from './topBarHelper';\n\n\nexport const updateComparables = (locationId, siteKey, kind, bounceFunction) => {\n  const locationsLimit = 4;\n  const locationIdStr = `${locationId}`;\n  const comparableLocations = (localStorage && JSON.parse(localStorage.getItem(`my.comparable_lease_${siteKey}`))) || {};\n  const comparableCount = comparableLocations && Object.keys(comparableLocations).length;\n  const locationKindPresent = comparableCount && comparableLocations[kind];\n  const locationIsInTheList = locationKindPresent && comparableLocations[kind].indexOf(locationIdStr) >= 0;\n  const limitExceededError = comparableCount && locationKindPresent && comparableLocations[kind].length === locationsLimit && !locationIsInTheList;\n\n  if (limitExceededError) {\n    return { limitExceededError };\n  } else {\n    if (locationIsInTheList) {\n      comparableLocations[kind].splice(comparableLocations[kind].indexOf(locationIdStr), 1);\n      comparableLocations[kind].length === 0 && delete comparableLocations[kind];\n    } else {\n      bounceFunction && bounceFunction(locationId);\n      comparableLocations[kind]\n        ? comparableLocations[kind].unshift(locationIdStr)\n        : comparableLocations[kind] = [locationIdStr];\n    }\n\n    localStorage.setItem(`my.comparable_lease_${siteKey}`, JSON.stringify(comparableLocations));\n    handleComparableLocationsCounter(siteKey, !locationIsInTheList);\n\n    return { comparableLocations };\n  }\n};\n"],"names":["CompareIcon","_React$PureComponent","_inherits","_super","_createSuper","props","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_this$props","siteKey","locationId","retrievedComparableLocations","localStorage","getItem","concat","comparableLocations","JSON","parse","allIds","prop","hasOwnProperty","isActive","indexOf","setState","showLimitExceedMessage","state","document","removeEventListener","handleClickOutside","hideLimitExceedMessage","_this$state","comparableLimitExceededError","_this$props2","updateComparableLocations","hideTooltip","kind","showInfoPopup","newComparablesList","bounceFunction","locationIdStr","comparableCount","Object","keys","length","locationKindPresent","locationIsInTheList","limitExceededError","splice","unshift","setItem","stringify","handleComparableLocationsCounter","updateComparables","bounce","descriptionPopup","clearTimeout","typingTimer","setTimeout","kindPresent","ReactTooltip","hide","iconWrapper","getElementById","classList","add","remove","policyIsAccepted","cookie","_createClass","key","value","this","handleIsActive","prevProps","prevState","snapshot","_this$state2","addEventListener","_this2","_this$state3","_this$props3","indentation","notificationWrapperId","tooltipPosition","withLabel","tooltipText","I18n","t","limitExceedMessage","React","className","onClick","handleClick","id","SvgIco","name","size","role","style","top","ref","el","place","effect","Portal","notificationWrapper","display","justifyContent","Notification","message","visible","customClass","handleClose","closeDescriptionPopup"],"sourceRoot":""}