UNPKG

twreporter-react

Version:

React-Redux site for The Reporter Foundation in Taiwan

204 lines (159 loc) 7.02 kB
/*eslint no-unused-vars:0, no-console:0 */ /* global __DEVELOPMENT__ */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Home = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _reactRedux = require('react-redux'); var _index = require('../utils/index'); var _articles = require('../actions/articles'); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _Daily = require('../components/Daily'); var _Daily2 = _interopRequireDefault(_Daily); var _Features = require('../components/Features'); var _Features2 = _interopRequireDefault(_Features); var _Footer = require('../components/Footer'); var _Footer2 = _interopRequireDefault(_Footer); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _SystemError = require('../components/SystemError'); var _SystemError2 = _interopRequireDefault(_SystemError); var _TopNews = require('../components/TopNews'); var _TopNews2 = _interopRequireDefault(_TopNews); var _async = require('async'); var _async2 = _interopRequireDefault(_async); var _listId = require('../conf/list-id'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var MAXRESULT = 10; var PAGE = 1; var REVIEW_CH = '評論'; var SPECIAL_TOPIC_CH = '專題'; if (process.env.BROWSER) {} function _getCatId(catName) { if (__DEVELOPMENT__) { return _listId.devCatListId[catName]; } return _listId.prodCatListId[catName]; } var Home = function (_Component) { _inherits(Home, _Component); _createClass(Home, null, [{ key: 'fetchData', value: function fetchData(_ref) { var store = _ref.store; var params = { page: PAGE, max_results: MAXRESULT }; return new Promise(function (resolve, reject) { // load tagged articles in parallel _async2.default.parallel([ /* function (callback) { store.dispatch(fetchTaggedArticlesIfNeeded('hp-projects', MAXRESULT, PAGE)) .then(() => { callback(null) }) }, */ function (callback) { store.dispatch((0, _articles.fetchArticlesByCatIdIfNeeded)(_getCatId('評論'), params)).then(function () { callback(null); }); }, function (callback) { store.dispatch((0, _articles.fetchArticlesByCatIdIfNeeded)(_getCatId('專題'), params)).then(function () { callback(null); }); }], function (err, results) { if (err) { console.warn('fetchData occurs error:', err); } resolve(); }); }); } }]); function Home(props, context) { _classCallCheck(this, Home); var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Home).call(this, props, context)); _this.loadMoreArticles = _this.loadMoreArticles.bind(_this, '專題'); return _this; } _createClass(Home, [{ key: 'componentWillMount', value: function componentWillMount() { this._loadData(this.props.fetchArticlesByCatNameIfNeeded); } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { // loadData(nextProps.fetchArticlesByCatNameIfNeeded) } }, { key: 'loadMoreArticles', value: function loadMoreArticles(cat) { var _props = this.props; var articlesByCats = _props.articlesByCats; var fetchArticlesByCatNameIfNeeded = _props.fetchArticlesByCatNameIfNeeded; var itemSize = _lodash2.default.get(articlesByCats, [cat, 'items', 'length'], 0); var page = Math.floor(itemSize / MAXRESULT) + 1; fetchArticlesByCatNameIfNeeded(cat, { page: page, max_results: MAXRESULT }); } }, { key: '_loadData', value: function _loadData() { var params = { page: PAGE, max_results: MAXRESULT }; // fetchArticlesByCatNameIfNeeded('評論', params) // fetchArticlesByCatNameIfNeeded('專題', params) } }, { key: 'render', value: function render() { var _props2 = this.props; var articlesByCats = _props2.articlesByCats; var entities = _props2.entities; var topnews_num = 5; var topnewsItems = (0, _index.denormalizeArticles)(_lodash2.default.get(articlesByCats, ['專題', 'items'], []), entities); console.log('topnewsItems:', topnewsItems); var dailyItems = (0, _index.denormalizeArticles)(_lodash2.default.get(articlesByCats, ['評論', 'items'], []), entities); if (topnewsItems) { return _react2.default.createElement( 'div', null, _react2.default.createElement(_Daily2.default, { daily: dailyItems }), _react2.default.createElement(_Features2.default, { features: topnewsItems, hasMore: _lodash2.default.get(articlesByCats, ['專題', 'nextUrl']) !== null, loadMore: this.loadMoreArticles }), this.props.children, _react2.default.createElement(_Footer2.default, null) ); } else { return _react2.default.createElement(_SystemError2.default, null); } } }]); return Home; }(_react.Component); exports.default = Home; function mapStateToProps(state) { return { articlesByCats: state.articlesByCats || {}, entities: state.entities || {} }; } exports.Home = Home; exports.default = (0, _reactRedux.connect)(mapStateToProps, { fetchArticlesByCatIdIfNeeded: _articles.fetchArticlesByCatIdIfNeeded })(Home);