{"version":3,"sources":["components/search/recommendation/index.js","components/search/search-result.js","components/search/searchHead.js"],"names":["Recommendation","connect","state","courses","toCourseDetail","id","_this$props","_this","props","dispatch","history","push","concat","_this2","this","http","get","API","then","res","data","errno","setState","info","toast_default","a","msg","_this3","react_default","createElement","className","length","map","item","Bottom","common","key","img","title","bottom","toDetail","Component","withRouter","ForwardRefSearchHead","React","forwardRef","ref","searchHead","Object","assign","forwardedRef","_ref","price1","price0","SearchResult","prevScrollY","createRef","swipeUp","swipeDown","courseList","value","decodeURIComponent","getParam","searchHistory","JSON","parse","localStorage","getItem","fixedHeader","searchHeadStyle","top","swipeDirection","getCourses","word","course","handleClick","handleSearch","handleChange","handleScroll","throttle","y","window","scrollY","headY","current","offsetTop","position","document","addEventListener","removeEventListener","style","Info","course_title","simpledescription","search_result_Bottom","status","VList","image_name","course_id","search_recommendation","PureComponent","SearchHead","isFocus","returnPage","go","search","storeKeyword","_this$props$searchHis","some","setItem","stringify","changeFontColor","refs","focus","cls","classnames","submit-btn--active","react__WEBPACK_IMPORTED_MODULE_7___default","onClick","antd_mobile_lib_search_bar__WEBPACK_IMPORTED_MODULE_1___default","showCancelButton","cancelText","onChange","placeholder","onFocus","onBlur","onSubmit"],"mappings":"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","file":"mrstatic/js/SearchResult.6bd7cca1.chunk.js","sourcesContent":["import React, { Component } from \"react\";\nimport {connect} from 'react-redux';\nimport './recommendation.scss'\nimport { Course } from \"@/common\";\nimport { http } from \"@/utils\";\nimport { Toast } from 'antd-mobile'\nimport {withRouter} from 'react-router-dom'\nimport {getCourses} from './../../detail/actions';\n\n@connect()\nclass Recommendation extends Component {\n\n state = {\n courses: []\n }\n\n componentDidMount() {\n http.get(`${API['search-api']}/search_hot_word`)\n .then(res => {\n if (res.data.errno === 0) {\n this.setState({\n courses: res.data.data.info.courses\n })\n } else {\n Toast.info(res.data.msg)\n }\n\n })\n\n }\n\n // handleClick = (id) => {\n // this.props.history.push(`/detail?id=${id}`)\n // }\n\n toCourseDetail = (id) => {\n const { dispatch, history } = this.props;\n // dispatch(getCourses(id, () => {\n history.push(`/detail?id=${id}`)\n // }));\n }\n\n render() {\n const {courses} = this.state\n return (\n <div className=\"recommendation\">\n <div className=\"title\">推荐课程</div>\n <div className=\"courses\">\n {\n courses.length > 0 &&\n courses.map((item) => {\n const Bottom = (\n <div className='bottom'>\n <span className='price'>{item['price1']}</span>\n <span className='old-price'>{item['price0']}</span>\n </div>\n )\n return (\n <Course\n className={'text-overflow-2'}\n key={item['course_id']}\n id={item['course_id']}\n img={item['image_name']}\n title={item['course_title']}\n bottom={Bottom}\n toDetail={this.toCourseDetail}\n />\n )\n })\n }\n\n </div>\n </div>\n )\n }\n}\n\nexport default withRouter(Recommendation)\n","import React, { PureComponent } from 'react';\nimport SearchHeader from './searchHead'\nimport VList from '@/common/VList'\nimport { http, getParam } from '@/utils'\nimport './search-result.scss'\nimport Recommendation from './recommendation'\nimport throttle from 'lodash/throttle'\n\n\nconst ForwardRefSearchHead = React.forwardRef((props, ref) => {\n return <SearchHeader {...props} forwardedRef={ref}/>\n})\n\nconst Bottom = ({item}) => {\n return (\n <div className='bottom'>\n <span className='price'>¥{item.price1}</span>\n <span className='stale-price'>¥{item.price0}</span>\n </div>\n )\n}\n\nclass SearchResult extends PureComponent {\n prevScrollY = 0\n searchHead = React.createRef()\n swipeUp = 'up'\n swipeDown = 'down'\n\n state = {\n courseList: [],\n value: decodeURIComponent(getParam('word')) || '',\n searchHistory: JSON.parse(localStorage.getItem('searchHistory')) || [],\n fixedHeader: false,\n searchHeadStyle: {top: 0},\n swipeDirection: this.swipeUp\n }\n\n componentDidMount() {\n this.getCourses(getParam('word'))\n document.addEventListener('scroll', this.handleScroll)\n }\n\n componentWillUnmount() {\n document.removeEventListener('scroll', this.handleScroll)\n }\n\n\n getCourses = (word) => {\n http.get(`${API['search-api']}/search/${word}?type=course&page=1`)\n .then(res => {\n const data = res.data\n\n if (data.errno === 0) {\n this.setState({\n courseList: data.data.info['search_data'].course\n });\n }\n })\n }\n\n handleClick = id => {\n this.props.history.push(`/detail?id=${id}`)\n }\n\n handleSearch = () => {\n this.state.value && this.getCourses(this.state.value)\n }\n\n handleChange = value => {\n this.setState({value})\n }\n\n toCourseDetail = (id) => {\n const {history} = this.props;\n history.push(`/detail?id=${id}`)\n }\n\n handleScroll = throttle(() => {\n let y = window.scrollY, headY = this.searchHead.current.offsetTop\n if (y < this.prevScrollY) {\n\n if (this.state.swipeDirection === this.swipeDown) {\n\n y <= headY && this.state.searchHeadStyle.position !== 'fixed' && this.setState({\n searchHeadStyle: {\n top: `0`,\n position: 'fixed'\n }\n })\n\n } else {\n this.setState({\n swipeDirection: this.swipeDown\n }, () => {\n if (this.state.swipeDirection === this.swipeDown) {\n this.setState({\n searchHeadStyle: {\n top: `${y > headY ? y - 44 : y}px`\n }\n })\n }\n })\n }\n\n\n } else {\n this.state.swipeDirection !== this.swipeUp &&\n this.setState({\n swipeDirection: this.swipeUp,\n searchHeadStyle: {\n position: 'absolute',\n top: `${y}px`\n }\n })\n\n }\n this.prevScrollY = y\n }, 0)\n\n render() {\n const {courseList} = this.state\n\n return (\n <div\n className={'search-result'}>\n <ForwardRefSearchHead\n handleSearch={this.handleSearch}\n value={this.state.value}\n handleChange={this.handleChange}\n searchHistory={this.state.searchHistory}\n style={this.state.searchHeadStyle}\n ref={this.searchHead}\n />\n {\n\n courseList && courseList.length > 0 ?\n <ul>\n {\n courseList.map(item => {\n const Info = (\n <div className=\"info\">\n <p className='title'>{item.course_title}</p>\n <p className='des'>{item.simpledescription}</p>\n <Bottom\n item={item}\n />\n </div>\n )\n const status = (\n (item['bargain_num'] || item['groupon_num']) ?\n <div\n className='status'>\n {\n item['bargain_num'] === 0 ? `砍价减${item['groupon_num']}元` : `拼团减${item['bargain_num']}元`\n }\n </div>\n : null\n )\n return (\n <VList\n img={item.image_name}\n toDetail={this.toCourseDetail}\n key={item.course_id}\n info={Info}\n id={item['course_id']}\n status={status}\n />\n )\n })\n }\n </ul>\n : <div className=\"empty\">\n 抱歉!没有搜到相关内容\n </div>\n }\n <Recommendation/>\n\n </div>\n );\n }\n}\n\n\nexport default SearchResult;","import React, { PureComponent } from 'react'\nimport { SearchBar } from 'antd-mobile'\nimport { withRouter } from 'react-router-dom'\nimport classnames from 'classnames';\n\nimport './search_header.scss'\n\nclass SearchHead extends PureComponent {\n \n state = {\n isFocus: false\n }\n\n returnPage = () => {\n this.props.history.go(-1)\n }\n\n componentDidMount() {\n this.refs.search.focus();\n }\n\n search = () => {\n this.storeKeyword()\n this.props.handleSearch()\n }\n\n storeKeyword = () => {\n const {searchHistory = [], value} = this.props;\n const data = searchHistory.some(item =>item === value)? searchHistory : searchHistory.concat([value]);\n // value && localStorage.setItem('searchHistory', JSON.stringify([...searchHistory, value]))\n localStorage.setItem('searchHistory', JSON.stringify(data));\n }\n\n changeFontColor = (isFocus) => {\n this.setState({\n isFocus\n });\n }\n\n render() {\n const { isFocus } = this.state;\n const cls = classnames('submit-btn', {'submit-btn--active': isFocus})\n return (\n <div className=\"search-head\" style={this.props.style} ref={this.props.forwardedRef}>\n\n <div className=\"left\" onClick={this.returnPage}>\n <i className=\"iconfont iconiconfront-68\"/>\n </div>\n\n <div className=\"center\">\n <SearchBar\n value={this.props.value}\n showCancelButton\n cancelText={\" \"}\n ref=\"search\"\n focus={true}\n onChange={this.props.handleChange}\n placeholder=\"搜索课程\"\n onFocus={() => this.changeFontColor(true)}\n onBlur={() => this.changeFontColor(false)}\n onSubmit={ this.search }\n />\n </div>\n <div className=\"right right-btn\" onClick={this.search}>\n <div className={cls}>搜索</div>\n </div>\n </div>\n\n )\n }\n}\n\nexport default withRouter(SearchHead)"],"sourceRoot":""}