{"version":3,"sources":["components/study/myCourses/index.js","common/course-base/index.js","components/study/freeCourses/index.js","components/study/index.js","common/v-list-base/index.js","../node_modules/react-infinite-scroller/index.js","../node_modules/react-infinite-scroller/dist/InfiniteScroll.js"],"names":["AddCourse","React","memo","_ref","addCourseClick","react_default","a","createElement","className","onClick","Record","_ref2","_ref2$record","record","seconds","lesson_name","result","matchResult","exec","studyTime","hour","Math","floor","min","sec","getStudyTime","String","padStart","length","concat","Bottom","_ref3","item","ago","date","Date","time","isToday","format","MyCourses","state","isLoading","handleClick","id","history","_this","props","mode","course_id","push","loadFunc","debounce","courseList","fetchCoursesListIfNeeded","this","switchTab","_this2","_this$props","user","common","Fragment","hasError","data","uid","react_infinite_scroller_default","pageStart","hasMore","loadMore","useWindow","ref","el","list","map","index","Info","course_title","is_restricted","is_aist","assist_weixin","contact_type","course_qq","aist_schedule","style","width","parseFloat","myCourses_Bottom","status","course_expire","v_list_base","Object","assign","img","image_name","key","info","react_router_dom","to","Component","connect","myCourses","Course","bind","top","src","alt","title","bottom","text","audience","FreeCourse","page","num","courses","live","getFreeCourses","http","get","API","home","getFreeLive","toLive","room_id","live_status","window","location","toast_default","setState","then","res","code","Array","isArray","msg","isEmpty","_this3","element","threshold","fill","classnames","LiveStatus","common_course_base","logo","freeCourses_Bottom","category","PureComponent","Study","position","match","url","replace","activeClassName","react_router","exact","from","path","component","FreeCourses","compose","WithFullSize","WithTab","VList","react__WEBPACK_IMPORTED_MODULE_0___default","tab","module","exports","__webpack_require__","defineProperty","value","_createClass","defineProperties","target","i","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","prototype","_react","_react2","_interopRequireDefault","_propTypes2","obj","__esModule","default","InfiniteScroll","_Component","instance","TypeError","_classCallCheck","self","call","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","scrollListener","eventListenerOptions","mousewheelListener","subClass","superClass","create","constructor","setPrototypeOf","_inherits","pageLoaded","options","attachScrollListener","isReverse","parentElement","getParentElement","scrollComponent","scrollTop","scrollHeight","beforeScrollHeight","beforeScrollTop","detachScrollListener","detachMousewheelListener","passive","testOptions","document","addEventListener","removeEventListener","e","useCapture","isPassiveSupported","loader","defaultLoader","scrollEl","parentNode","scrollParent","getScrollParent","initialLoad","deltaY","preventDefault","offset","doc","documentElement","body","undefined","pageYOffset","calculateOffset","clientHeight","Number","offsetParent","calculateTopPosition","offsetHeight","innerHeight","offsetTop","renderProps","filterProps","children","keys","indexOf","hasOwnProperty","_objectWithoutProperties","node","childrenArray","unshift","propTypes","isRequired","bool","func","number","defaultProps"],"mappings":"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","file":"mrstatic/js/study.40db0e37.chunk.js","sourcesContent":["import React, { Component } from \"react\"\nimport VList from '@/common/v-list-base'\nimport './my-courses.scss'\nimport { isToday, format } from \"date-fns\"\nimport { connect } from \"react-redux\"\nimport { fetchCoursesListIfNeeded, switchTab } from \"./actions\"\nimport InfiniteScroll from 'react-infinite-scroller'\nimport { debounce } from 'lodash'\nimport { Link } from 'react-router-dom'\nimport { Loading } from \"@/common\";\n\n\nfunction getStudyTime(seconds) {\n  return {\n    hour: Math.floor(seconds / (60 * 60)),\n    min: Math.floor(seconds / 60) % 60,\n    sec: seconds % 60\n  }\n}\n\nconst AddCourse = React.memo(({addCourseClick}) => (\n  <div className='add-course'>\n    <button className='add' onClick={addCourseClick}>添加课程+</button>\n  </div>\n))\n\nfunction Record({record: {seconds, lesson_name}}) {\n  let re = /第[\\s\\S]+?课/,\n    result = ''\n\n  if (lesson_name) {\n    let matchResult = re.exec(lesson_name)\n    result += (matchResult && matchResult[0]) ? matchResult[0] : ''\n  }\n\n  if (seconds) {\n    let studyTime = getStudyTime(seconds)\n    let hour = studyTime.hour ? String(studyTime.hour).padStart(2, '0') + ':' : '',\n      min = studyTime.min ? String(studyTime.min).padStart(2, '0') + ':' : '',\n      sec = studyTime.sec ? String(studyTime.sec).padStart(2, '0') : ''\n\n    result += hour + min + sec\n  }\n\n  return (\n    <span className={'record'}>\n            {\n              result.length ? `学习到${result}` : null\n            }\n        </span>\n  )\n}\n\n\nconst Bottom = React.memo(({item}) => {\n  if (item.ago || item.seconds) {\n    let date = new Date(item.ago * 1000)\n    let time = isToday(date) ? format(date, 'HH时mm分') : format(date, 'MM月DD日')\n    return (\n      <div className=\"des\">\n        <span className='time'>{time}</span>\n        <Record record={item}/>\n      </div>\n    )\n  }\n  return (\n    <button className='start-learn'>开始学习</button>\n  )\n})\n\nclass MyCourses extends Component {\n\n  list\n\n  state = {\n    isLoading: true\n  }\n\n  handleClick = (id, item) => {\n    const {history} = this.props\n    const {mode, course_id} = item\n    if (mode && mode == 6) {\n      history.push(`/python?id=${course_id}`)\n      return\n    }\n    history.push(`/play/video?id=${id}`)\n  }\n  addCourseClick = () => {\n    this.props.history.push('/classify')\n  }\n\n  componentDidMount() {\n    this.props.switchTab(false)\n    this.props.fetchCoursesListIfNeeded()\n  }\n\n  componentWillUnmount() {\n    this.props.switchTab(true);\n  }\n\n  loadFunc = debounce(() => {\n    if (this.props.courseList.length % 10 === 0) {\n      this.props.fetchCoursesListIfNeeded()\n    }\n  }, 200)\n\n  render() {\n    let {courseList, user} = this.props\n\n    return <Loading isLoading={this.props.isLoading}>\n      {\n        courseList && courseList.length !== 0\n          ?\n          <>\n            <div className=\"my-course-uid\">\n              {`加群请备注您的学号:${!user.hasError && this.props.user.data.uid}`}\n            </div>\n            <InfiniteScroll\n              pageStart={0}\n              hasMore={true}\n              loadMore={this.loadFunc}\n              useWindow={false}\n            >\n              <ul ref={el => this.list = el}>\n                {\n                  courseList.map((item, index) => {\n\n                    const Info = (\n                      <div className=\"info\">\n                        <div className='title'>{item.course_title}</div>\n                        {\n                          !item.is_restricted && item.is_aist &&\n                          <div className='contact'>助教微信:{item.assist_weixin}</div>\n                        }\n                        {\n                          !item.is_restricted && !item.is_aist && item.contact_type == 1 && item.course_qq &&\n                          <div className='contact'>QQ群:{item.course_qq}</div>\n                        }\n                        {\n                          !item.is_restricted && !item.is_aist && item.contact_type == 2 && item.course_qq &&\n                          <div className='contact'>班主任微信:{item.course_qq}</div>\n                        }\n\n                        {\n                          item.is_aist && item.aist_schedule &&\n                          <div className=\"process-status\">\n                            <div className=\"process-wrapper\">\n                              <div className=\"process-bar\"\n                                   style={{width: `${parseFloat(item.aist_schedule)}%`}}/>\n                            </div>\n                            <div className=\"process-text\">{item.aist_schedule}</div>\n                          </div>\n                        }\n                        <Bottom item={item}/>\n                      </div>\n                    )\n\n                    const status = (\n                      item.is_aist\n                        ? <span className='status'>返现</span>\n                        : item.course_expire\n                        ? <span className='course-expire'>{item.course_expire}</span>\n                        : null\n                    )\n                    return (\n                      <VList img={item.image_name}\n                             handleClick={this.handleClick}\n                             {...item}\n                             key={index}\n                             info={Info}\n                             status={status}\n                             item={item}\n                             id={item['v_course_id']}\n                      />\n                    )\n                  })\n                }\n              </ul>\n            </InfiniteScroll>\n            {\n              courseList.length % 10 !== 0 ?\n                <AddCourse addCourseClick={this.addCourseClick}/>\n                : null\n            }\n          </>\n          :\n          <div className=\"empty\">\n            <p><i className='iconfont iconfish'/></p>\n            <p className='empty-prompt'>您还没有课程哦,赶快去选课吧~</p>\n            <p>\n              <Link className='select-course' to='/classify'>去选课</Link>\n            </p>\n          </div>\n      }\n    </Loading>\n\n  }\n}\n\nexport default connect(\n  state => ({\n    courseList: state.myCourses.courseList,\n    user: state.user,\n    isLoading: state.myCourses.isLoading\n  }),\n  {\n    fetchCoursesListIfNeeded,\n    switchTab\n  })(MyCourses)\n","import React from 'react'\nimport './course-base.scss'\n\nconst Course = (props) => {\n    return (\n        <li className={`course-base-item ${props.className}`} onClick={props.handleClick.bind(this, props.id)}>\n            {props.top}\n                <img src={props.img} alt=\"\"/>\n                <p className=\"course-title\">{props.title}</p>\n            {props.bottom}\n        </li>\n    );\n};\n\nexport default Course;\n\n","import React, { PureComponent } from 'react'\nimport { Tag } from '../../../common'\nimport Course from '@/common/course-base'\nimport { http } from '@/utils'\nimport { Toast } from \"antd-mobile\";\nimport classnames from 'classnames'\nimport { isEmpty } from 'lodash'\nimport InfiniteScroll from \"react-infinite-scroller\";\nimport {HashLoader} from 'react-spinners'\n\n\nimport './free-courses.scss'\n\nconst Bottom = (props) => (\n    <div className='bottom'>\n        <Tag className={props.className}>{props.text}</Tag>\n        <span>{props.audience}人观看</span>\n    </div>\n)\n\nclass FreeCourse extends PureComponent {\n\n    page = 1\n    num = 10\n    state = {\n        courses: [],\n        live: [],\n        page: 1,\n        hasMore: false\n    }\n\n    componentDidMount() {\n        this.getFreeCourses()\n            .then(res => {\n                let data = res.data\n                if (data.code == 200) {\n                    this.setState({\n                        courses: data.data,\n                        hasMore: true\n                    })\n                } else {\n                    Toast.info(data.msg)\n                }\n            })\n        this.getFreeLive()\n            .then(res => {\n                let data = res.data\n                if (data.code == 200) {\n                    this.setState({\n                        live: isEmpty(data.data) ? [] : data.data\n                    })\n                } else {\n                    Toast.info(data.msg, 2, null, false)\n                }\n            })\n    }\n\n    handleClick = id => {\n        this.props.history.push(`/play/video?id=${id}`)\n    }\n\n    getFreeCourses = () => {\n        return http.get(`${API.home}/m/free_course/${this.page++}/${this.num}`)\n    }\n\n    getFreeLive = () => {\n        return http.get(`${API.home}/m/live/free_list`)\n    }\n\n    toLive = live => {\n        const {room_id, live_status} = live\n        if (live_status) {\n            window.location.assign(`http://www.julyedu.com/live/m_room/${room_id}`)\n        } else {\n            Toast.info('直播即将开始,敬请期待', 2, null, false)\n        }\n    }\n\n    loadFunc = () => {\n        if (this.state.hasMore) {\n            this.setState({\n                hasMore: this.state.courses.length % 10 === 0\n            }, () => {\n                this.getFreeCourses()\n                    .then(res => {\n                        let data = res.data\n                        if (data.code == 200) {\n                            Array.isArray(data.data) && this.setState({\n                                courses: this.state.courses.concat(data.data),\n                                hasMore: data.data.length % 10 === 0\n                            })\n                        } else {\n                            Toast.info(data.msg)\n                        }\n                    })\n            })\n        }\n    }\n\n    render() {\n        return (\n            <InfiniteScroll\n                pageStart={0}\n                loadMore={this.loadFunc}\n                useWindow={false}\n                className={'free-courses'}\n                element={'ul'}\n                hasMore={this.state.hasMore}\n                threshold={250}\n            >\n                {\n                    this.state.live.map((item, index) => {\n                        const Bottom = (\n                            <div className=\"bottom\">\n                                <div className=\"animation-box\">\n                                    {new Array(4).fill('a').map((item, index) => {\n                                        return <i key={index} className={classnames('column', `column-${index + 1}`)}/>\n                                    })}\n                                </div>\n                                <div className=\"time\">{`${item['live_start_time']}`}</div>\n                            </div>\n                        )\n\n                        const LiveStatus = (\n                            item['live_status'] == 0 ? <Tag className={'tag-soon top'}>即将开始</Tag> :\n                                <Tag className={'tag-playing top'}>正在直播</Tag>\n                        )\n                        return (\n                            <Course\n                                img={item['live_cover']}\n                                title={item['live_title']}\n                                top={LiveStatus}\n                                bottom={Bottom}\n                                key={item['live_id']}\n                                className={'live'}\n                                handleClick={this.toLive.bind(this, item)}\n                                id={index}\n                            />\n                        )\n                    })\n                }\n                {\n                    this.state.courses.map((item, index) => (\n                        <Course\n                            img={item.logo}\n                            title={item['video_course_name']}\n                            handleClick={this.handleClick}\n                            bottom={\n                                <Bottom audience={item['play_times']} className={'tag-category'} text={item.category}/>\n                            }\n                            id={item['v_course_id']}\n                            key={index}\n                            className={'course-item'}\n                        />\n                    ))\n                }\n            </InfiniteScroll>\n        )\n    }\n}\n\n\nexport default FreeCourse","import React, { Component } from 'react'\nimport './study.scss'\n\nimport { NavLink, Route, Switch, Redirect } from \"react-router-dom\"\nimport MyCourses from \"./myCourses\"\nimport FreeCourses from './freeCourses'\nimport WithTab from '@/HOCs/WithTab'\nimport WithFullSize from '@/HOCs/WithFullSize'\nimport { compose } from 'redux'\n\n\nclass Study extends Component {\n\n    state = {\n        position: {}\n    }\n\n    render() {\n        const {match} = this.props;\n        return (\n            <section id='study'>\n                <div className='tab'>\n                    <div>\n                        <NavLink to={`${match.url}/my-course`}\n                                 replace\n                                 activeClassName='active'\n                        >我的课程</NavLink>\n                    </div>\n                    <div>\n                        <NavLink to={`${match.url}/free-course`}\n                                 replace\n                                 activeClassName='active'\n                        >免费课程</NavLink>\n                    </div>\n                </div>\n                <div className=\"study-container\">\n                    <Switch>\n                        <Redirect exact from='/study' to='study/my-course'/>\n                        <Route path={`${this.props.match.path}/my-course`} component={MyCourses}/>\n                        <Route path={`${this.props.match.path}/free-course`} component={FreeCourses}/>\n                    </Switch>\n                </div>\n            </section>\n        )\n    }\n\n}\n\nexport default compose(\n    WithFullSize,\n    WithTab\n)(Study)","import React from 'react';\nimport './index.scss'\n\nconst VList = (props) => {\n    return (\n        <li className='v-list-base-item' onClick={props.handleClick.bind(this, props.id, props.item)}>\n            <div className=\"content\">\n                <div className=\"cover\">\n                    {props.status}\n                    <img src={props.img} alt=\"\"/>\n                </div>\n                {props.info}\n            </div>\n            {props.tab}\n        </li>\n    );\n};\n\nexport default VList;\n","module.exports = require('./dist/InfiniteScroll');","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    default: obj\n  };\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar InfiniteScroll = function (_Component) {\n  _inherits(InfiniteScroll, _Component);\n\n  function InfiniteScroll(props) {\n    _classCallCheck(this, InfiniteScroll);\n\n    var _this = _possibleConstructorReturn(this, (InfiniteScroll.__proto__ || Object.getPrototypeOf(InfiniteScroll)).call(this, props));\n\n    _this.scrollListener = _this.scrollListener.bind(_this);\n    _this.eventListenerOptions = _this.eventListenerOptions.bind(_this);\n    _this.mousewheelListener = _this.mousewheelListener.bind(_this);\n    return _this;\n  }\n\n  _createClass(InfiniteScroll, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this.pageLoaded = this.props.pageStart;\n      this.options = this.eventListenerOptions();\n      this.attachScrollListener();\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate() {\n      if (this.props.isReverse && this.loadMore) {\n        var parentElement = this.getParentElement(this.scrollComponent);\n        parentElement.scrollTop = parentElement.scrollHeight - this.beforeScrollHeight + this.beforeScrollTop;\n        this.loadMore = false;\n      }\n\n      this.attachScrollListener();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.detachScrollListener();\n      this.detachMousewheelListener();\n    }\n  }, {\n    key: 'isPassiveSupported',\n    value: function isPassiveSupported() {\n      var passive = false;\n      var testOptions = {\n        get passive() {\n          passive = true;\n        }\n\n      };\n\n      try {\n        document.addEventListener('test', null, testOptions);\n        document.removeEventListener('test', null, testOptions);\n      } catch (e) {// ignore\n      }\n\n      return passive;\n    }\n  }, {\n    key: 'eventListenerOptions',\n    value: function eventListenerOptions() {\n      var options = this.props.useCapture;\n\n      if (this.isPassiveSupported()) {\n        options = {\n          useCapture: this.props.useCapture,\n          passive: true\n        };\n      }\n\n      return options;\n    } // Set a defaut loader for all your `InfiniteScroll` components\n\n  }, {\n    key: 'setDefaultLoader',\n    value: function setDefaultLoader(loader) {\n      this.defaultLoader = loader;\n    }\n  }, {\n    key: 'detachMousewheelListener',\n    value: function detachMousewheelListener() {\n      var scrollEl = window;\n\n      if (this.props.useWindow === false) {\n        scrollEl = this.scrollComponent.parentNode;\n      }\n\n      scrollEl.removeEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);\n    }\n  }, {\n    key: 'detachScrollListener',\n    value: function detachScrollListener() {\n      var scrollEl = window;\n\n      if (this.props.useWindow === false) {\n        scrollEl = this.getParentElement(this.scrollComponent);\n      }\n\n      scrollEl.removeEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);\n      scrollEl.removeEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);\n    }\n  }, {\n    key: 'getParentElement',\n    value: function getParentElement(el) {\n      var scrollParent = this.props.getScrollParent && this.props.getScrollParent();\n\n      if (scrollParent != null) {\n        return scrollParent;\n      }\n\n      return el && el.parentNode;\n    }\n  }, {\n    key: 'filterProps',\n    value: function filterProps(props) {\n      return props;\n    }\n  }, {\n    key: 'attachScrollListener',\n    value: function attachScrollListener() {\n      var parentElement = this.getParentElement(this.scrollComponent);\n\n      if (!this.props.hasMore || !parentElement) {\n        return;\n      }\n\n      var scrollEl = window;\n\n      if (this.props.useWindow === false) {\n        scrollEl = parentElement;\n      }\n\n      scrollEl.addEventListener('mousewheel', this.mousewheelListener, this.options ? this.options : this.props.useCapture);\n      scrollEl.addEventListener('scroll', this.scrollListener, this.options ? this.options : this.props.useCapture);\n      scrollEl.addEventListener('resize', this.scrollListener, this.options ? this.options : this.props.useCapture);\n\n      if (this.props.initialLoad) {\n        this.scrollListener();\n      }\n    }\n  }, {\n    key: 'mousewheelListener',\n    value: function mousewheelListener(e) {\n      // Prevents Chrome hangups\n      // See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257\n      if (e.deltaY === 1 && !this.isPassiveSupported()) {\n        e.preventDefault();\n      }\n    }\n  }, {\n    key: 'scrollListener',\n    value: function scrollListener() {\n      var el = this.scrollComponent;\n      var scrollEl = window;\n      var parentNode = this.getParentElement(el);\n      var offset = void 0;\n\n      if (this.props.useWindow) {\n        var doc = document.documentElement || document.body.parentNode || document.body;\n        var scrollTop = scrollEl.pageYOffset !== undefined ? scrollEl.pageYOffset : doc.scrollTop;\n\n        if (this.props.isReverse) {\n          offset = scrollTop;\n        } else {\n          offset = this.calculateOffset(el, scrollTop);\n        }\n      } else if (this.props.isReverse) {\n        offset = parentNode.scrollTop;\n      } else {\n        offset = el.scrollHeight - parentNode.scrollTop - parentNode.clientHeight;\n      } // Here we make sure the element is visible as well as checking the offset\n\n\n      if (offset < Number(this.props.threshold) && el && el.offsetParent !== null) {\n        this.detachScrollListener();\n        this.beforeScrollHeight = parentNode.scrollHeight;\n        this.beforeScrollTop = parentNode.scrollTop; // Call loadMore after detachScrollListener to allow for non-async loadMore functions\n\n        if (typeof this.props.loadMore === 'function') {\n          this.props.loadMore(this.pageLoaded += 1);\n          this.loadMore = true;\n        }\n      }\n    }\n  }, {\n    key: 'calculateOffset',\n    value: function calculateOffset(el, scrollTop) {\n      if (!el) {\n        return 0;\n      }\n\n      return this.calculateTopPosition(el) + (el.offsetHeight - scrollTop - window.innerHeight);\n    }\n  }, {\n    key: 'calculateTopPosition',\n    value: function calculateTopPosition(el) {\n      if (!el) {\n        return 0;\n      }\n\n      return el.offsetTop + this.calculateTopPosition(el.offsetParent);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var renderProps = this.filterProps(this.props);\n\n      var children = renderProps.children,\n          element = renderProps.element,\n          hasMore = renderProps.hasMore,\n          initialLoad = renderProps.initialLoad,\n          isReverse = renderProps.isReverse,\n          loader = renderProps.loader,\n          loadMore = renderProps.loadMore,\n          pageStart = renderProps.pageStart,\n          ref = renderProps.ref,\n          threshold = renderProps.threshold,\n          useCapture = renderProps.useCapture,\n          useWindow = renderProps.useWindow,\n          getScrollParent = renderProps.getScrollParent,\n          props = _objectWithoutProperties(renderProps, ['children', 'element', 'hasMore', 'initialLoad', 'isReverse', 'loader', 'loadMore', 'pageStart', 'ref', 'threshold', 'useCapture', 'useWindow', 'getScrollParent']);\n\n      props.ref = function (node) {\n        _this2.scrollComponent = node;\n\n        if (ref) {\n          ref(node);\n        }\n      };\n\n      var childrenArray = [children];\n\n      if (hasMore) {\n        if (loader) {\n          isReverse ? childrenArray.unshift(loader) : childrenArray.push(loader);\n        } else if (this.defaultLoader) {\n          isReverse ? childrenArray.unshift(this.defaultLoader) : childrenArray.push(this.defaultLoader);\n        }\n      }\n\n      return _react2.default.createElement(element, props, childrenArray);\n    }\n  }]);\n\n  return InfiniteScroll;\n}(_react.Component);\n\nInfiniteScroll.propTypes = {\n  children: _propTypes2.default.node.isRequired,\n  element: _propTypes2.default.node,\n  hasMore: _propTypes2.default.bool,\n  initialLoad: _propTypes2.default.bool,\n  isReverse: _propTypes2.default.bool,\n  loader: _propTypes2.default.node,\n  loadMore: _propTypes2.default.func.isRequired,\n  pageStart: _propTypes2.default.number,\n  ref: _propTypes2.default.func,\n  getScrollParent: _propTypes2.default.func,\n  threshold: _propTypes2.default.number,\n  useCapture: _propTypes2.default.bool,\n  useWindow: _propTypes2.default.bool\n};\nInfiniteScroll.defaultProps = {\n  element: 'div',\n  hasMore: false,\n  initialLoad: true,\n  pageStart: 0,\n  ref: null,\n  threshold: 250,\n  useWindow: true,\n  isReverse: false,\n  useCapture: false,\n  loader: null,\n  getScrollParent: null\n};\nexports.default = InfiniteScroll;\nmodule.exports = exports['default'];"],"sourceRoot":""}