{"version":3,"sources":["webpack:///./node_modules/react-spring/dist/react-spring.esm.js","webpack:///./src/js/modules/groomingReport/hooks/useGroomingReport.js","webpack:///./src/js/modules/groomingReport/components/GroomingReportAreaTrail.js","webpack:///./src/js/modules/groomingReport/components/GroomingReportArea.js","webpack:///./src/js/modules/groomingReport/index.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./src/js/components/react/Svg.js","webpack:///./src/js/helpers/hooks.js"],"names":["useGroomingReport","endpoint","mountain","area","useState","areas","setAreas","objParams","fetchReport","Axios","method","url","params","data","console","error","useEffect","GroomingReportAreaTrail","trail","isGatedTerrain","value","isDayOpen","isGroomed","className","difficulty","Svg","name","altText","classNames","active","inactive","check","close","propTypes","PropTypes","object","isRequired","bool","GroomingReportArea","currentStatusLabel","groomedLabel","trails","gatedFirstColumnLabel","gatedSecondColumnLabel","open","setOpen","useElementClientRect","trailsRef","trailsClientRect","styles","useSpring","height","onClick","window","innerWidth","breakpoints","tablet","prev","div","style","ref","map","key","string","array","GroomingReport","module","exports","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","err","Error","getShim","ReactPropTypes","func","number","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","xlinkHref","useMediaQuery","query","matches","setMatches","media","matchMedia","listener","addListener","removeListener","useOnClickOutside","handler","event","current","contains","target","document","addEventListener","removeEventListener","useRef","elementClientRect","setElementClientRect","setValues","clientRect","getBoundingClientRect","useLayoutEffect"],"mappings":"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","file":"20.c1d332a399e60bfdcfc1.js","sourcesContent":["export * from '@react-spring/web';\n","import Axios from 'axios';\nimport { useEffect, useState } from 'react';\n\nconst useGroomingReport = ({ endpoint, mountain, area }) => {\n  const [areas, setAreas] = useState([]);\n\n  const objParams = {\n    mountain\n  }\n\n  if (area) {\n    objParams.area = area;\n  }\n\n  const fetchReport = async () => {\n    try {\n      const { data } = await Axios({\n        method: 'GET',\n        url: endpoint,\n        params: objParams\n      });\n\n      if (data.areas) setAreas(data.areas);\n    } catch (e) {\n      console.error(e);\n    }\n  };\n\n  useEffect(() => {\n    fetchReport();\n  }, []);\n\n  return {\n    areas\n  };\n};\n\nexport default useGroomingReport;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Svg from '../../../components/react/Svg';\nimport classNames from 'classnames';\n\nconst GroomingReportAreaTrail = ({ trail, isGatedTerrain }) => {\n  const value = isGatedTerrain ? trail.isDayOpen : trail.isGroomed;\n  return (\n    <div className=\"grooming-report__area__row trail-row\">\n      <div className=\"grooming-report__area__row__trail-name\">\n        {trail.difficulty && (\n          <div className=\"grooming-report__difficulty-icon\">\n            <Svg name={trail.difficulty} className={trail.difficulty} altText={trail.difficulty}/>\n          </div>\n        )}\n        <span>{trail.name}</span>\n      </div>\n      {!isGatedTerrain ? (\n        <div className=\"grooming-report__area__row__status current-status\">\n          <div\n            className={classNames('grooming-report__area__row__status-icon', {\n              active: trail.isDayOpen,\n              inactive: !trail.isDayOpen\n            })}\n          >\n            <Svg\n              name={trail.isDayOpen ? 'check-icon' : 'rounded-cancel'}\n              altText={trail.isDayOpen ? 'is open' : 'is closed'}\n              className={classNames('', {\n                check: trail.isDayOpen,\n                close: !trail.isDayOpen\n              })}\n            />\n          </div>\n        </div>\n      ) : null}\n      <div className=\"grooming-report__area__row__status groomed\">\n        <div\n          className={classNames('grooming-report__area__row__status-icon', {\n            active: value,\n            inactive: !value\n          })}\n        >\n          <Svg\n            name={value ? 'check-icon' : 'rounded-cancel'}\n            altText={value ? 'is open' : 'is closed'}\n            className={classNames('', {\n              check: value,\n              close: !value\n            })}\n          />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nGroomingReportAreaTrail.propTypes = {\n  trail: PropTypes.object.isRequired,\n  isGatedTerrain: PropTypes.bool\n};\n\nexport default GroomingReportAreaTrail;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSpring, animated } from 'react-spring';\nimport GroomingReportAreaTrail from './GroomingReportAreaTrail';\nimport Svg from '../../../components/react/Svg';\nimport { useElementClientRect } from '../../../helpers/hooks';\nimport { breakpoints } from '../../../helpers/constants';\nimport classNames from 'classnames';\n\nconst GroomingReportArea = ({\n  currentStatusLabel,\n  groomedLabel,\n  name,\n  trails,\n  isGatedTerrain,\n  gatedFirstColumnLabel,\n  gatedSecondColumnLabel\n}) => {\n  const [open, setOpen] = useState(false);\n  const [trailsRef, trailsClientRect] = useElementClientRect();\n  const styles = useSpring({ height: open ? trailsClientRect.height : 0 });\n  const toggleOpen = () => {\n    if (window.innerWidth >= breakpoints.tablet) return;\n    setOpen(prev => !prev);\n  };\n  return (\n    <div className=\"grooming-report__area\">\n      <button\n        className='grooming-report__area__row heading'\n        onClick={toggleOpen}\n      >\n        <span className=\"grooming-report__area__row__title\">{name}</span>\n        {!isGatedTerrain ? (\n          <span className=\"grooming-report__area__row__label\">\n            {isGatedTerrain ? gatedFirstColumnLabel : currentStatusLabel}\n          </span>\n        ) : null}\n        <span className=\"grooming-report__area__row__label\">\n          {isGatedTerrain ? gatedSecondColumnLabel : groomedLabel}\n        </span>\n        <div className=\"grooming-report__area__row__collapse-btn\">\n          <Svg name={open ? 'minus' : 'plus'} altText=\"open button\"/>\n        </div>\n      </button>\n      <animated.div\n        className=\"grooming-report__area__row__trails__placeholder\"\n        style={styles}\n      >\n        <div className=\"grooming-report__area__row__trails\" ref={trailsRef}>\n          <div\n            className='grooming-report__area__labels-row'\n          >\n            <span>Trail Name</span>\n            {!isGatedTerrain ? <span>{currentStatusLabel}</span> : null}\n            <span>\n              {isGatedTerrain ? gatedSecondColumnLabel : groomedLabel}\n            </span>\n          </div>\n          {trails?.map(trail => (\n            <GroomingReportAreaTrail\n              {...{\n                trail,\n                currentStatusLabel,\n                groomedLabel,\n                gatedFirstColumnLabel,\n                gatedSecondColumnLabel,\n                isGatedTerrain\n              }}\n              key={trail.name}\n            />\n          ))}\n        </div>\n      </animated.div>\n    </div>\n  );\n};\n\nGroomingReportArea.propTypes = {\n  currentStatusLabel: PropTypes.string.isRequired,\n  groomedLabel: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  trails: PropTypes.array,\n  gatedFirstColumnLabel: PropTypes.string,\n  gatedSecondColumnLabel: PropTypes.string,\n  isGatedTerrain: PropTypes.bool\n};\n\nexport default GroomingReportArea;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport useGroomingReport from './hooks/useGroomingReport';\nimport GroomingReportArea from './components/GroomingReportArea';\n\nconst GroomingReport = ({\n  currentStatusLabel,\n  groomedLabel,\n  endpoint,\n  mountain,\n  area,\n  gatedFirstColumnLabel,\n  gatedSecondColumnLabel\n}) => {\n  const { areas } = useGroomingReport({ endpoint, mountain, area });\n  return areas.map(area => (\n\n    <GroomingReportArea\n      key={area.name}\n      {...{\n        currentStatusLabel,\n        groomedLabel,\n        ...area,\n        gatedFirstColumnLabel,\n        gatedSecondColumnLabel\n      }}\n    />\n  ));\n};\n\nGroomingReport.propTypes = {\n  currentStatusLabel: PropTypes.string.isRequired,\n  groomedLabel: PropTypes.string.isRequired,\n  endpoint: PropTypes.string.isRequired,\n  mountain: PropTypes.string.isRequired\n};\n\nexport default GroomingReport;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Svg = ({ name, altText, ...props}) => (\n  <svg {...props}>\n    <title>{altText}</title>\n    <use xlinkHref={`#${name}`}/>\n  </svg>\n);\n\nSvg.propTypes = {\n  name: PropTypes.string.isRequired,\n  altText: PropTypes.string\n}\n\nexport default Svg;\n","import { useState, useEffect, useLayoutEffect, useRef } from 'react';\n\nexport const useMediaQuery = query => {\n  const [matches, setMatches] = useState(false);\n\n  useEffect(() => {\n    const media = window.matchMedia(query);\n    if (media.matches !== matches) {\n      setMatches(media.matches);\n    }\n    const listener = () => {\n      setMatches(media.matches);\n    };\n    media.addListener(listener);\n    return () => media.removeListener(listener);\n  }, [matches, query]);\n\n  return matches;\n};\n\nexport const useOnClickOutside = (ref, handler) => {\n  useEffect(() => {\n    const listener = event => {\n      // Do nothing if clicking ref's element or descendent elements\n      if (!ref.current || ref.current.contains(event.target)) {\n        return;\n      }\n      handler(event);\n    };\n    document.addEventListener('click', listener);\n    return () => {\n      document.removeEventListener('click', listener);\n    };\n  }, [ref, handler]);\n};\n\n\nexport const useElementClientRect = () => {\n  const ref = useRef(null);\n  const [elementClientRect, setElementClientRect] = useState({});\n\n  const setValues = () => {\n    if (!ref.current) return;\n    const clientRect = ref.current.getBoundingClientRect();\n    setElementClientRect(clientRect);\n  };\n\n  useLayoutEffect(() => {\n    setValues();\n  }, [ref.current]);\n\n  useEffect(() => {\n    window.addEventListener('resize', setValues);\n    return () => window.removeEventListener('resize', setValues);\n  }, [ref.current]);\n\n  return [ref, elementClientRect];\n};\n\n"],"sourceRoot":""}