'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _classnames2 = require('classnames'); var _classnames3 = _interopRequireDefault(_classnames2); var _react = require('react'); var React = _interopRequireWildcard(_react); var _rmcFeedback = require('rmc-feedback'); var _rmcFeedback2 = _interopRequireDefault(_rmcFeedback); var _carousel = require('../carousel'); var _carousel2 = _interopRequireDefault(_carousel); var _flex = require('../flex'); var _flex2 = _interopRequireDefault(_flex); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var __rest = undefined && undefined.__rest || function (s, e) { var t = {}; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; }if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]]; }return t; }; /* tslint:disable:jsx-no-multiline-js */ var Grid = function (_React$Component) { (0, _inherits3['default'])(Grid, _React$Component); function Grid() { (0, _classCallCheck3['default'])(this, Grid); var _this = (0, _possibleConstructorReturn3['default'])(this, (Grid.__proto__ || Object.getPrototypeOf(Grid)).apply(this, arguments)); _this.state = { initialSlideWidth: 0 }; _this.renderCarousel = function (rowsArr, pageCount, rowCount) { var prefixCls = _this.props.prefixCls; var carouselMaxRow = _this.props.carouselMaxRow; var pagesArr = []; for (var pageIndex = 0; pageIndex < pageCount; pageIndex++) { var pageRows = []; for (var ii = 0; ii < carouselMaxRow; ii++) { var rowIndex = pageIndex * carouselMaxRow + ii; if (rowIndex < rowCount) { pageRows.push(rowsArr[rowIndex]); } else { // 空节点为了确保末尾页的最后未到底的行有底线(样式中last-child会没线) pageRows.push(React.createElement('div', { key: 'gridline-' + rowIndex })); } } pagesArr.push(React.createElement( 'div', { key: 'pageitem-' + pageIndex, className: prefixCls + '-carousel-page' }, pageRows )); } return pagesArr; }; _this.renderItem = function (dataItem, index, columnNum, renderItem) { var prefixCls = _this.props.prefixCls; var itemEl = null; if (renderItem) { itemEl = renderItem(dataItem, index); } else { if (dataItem) { var icon = dataItem.icon, text = dataItem.text; itemEl = React.createElement( 'div', { className: prefixCls + '-item-inner-content column-num-' + columnNum }, React.isValidElement(icon) ? icon : React.createElement('img', { className: prefixCls + '-icon', src: icon }), React.createElement( 'div', { className: prefixCls + '-text' }, text ) ); } } return React.createElement( 'div', { className: prefixCls + '-item-content' }, itemEl ); }; _this.getRows = function (rowCount, dataLength) { // tslint:disable:prefer-const var _this$props = _this.props, columnNum = _this$props.columnNum, data = _this$props.data, renderItem = _this$props.renderItem, prefixCls = _this$props.prefixCls, _onClick = _this$props.onClick, activeStyle = _this$props.activeStyle, activeClassName = _this$props.activeClassName, itemStyle = _this$props.itemStyle; var rowsArr = []; columnNum = columnNum; var rowWidth = 100 / columnNum + '%'; var colStyle = (0, _extends3['default'])({ width: rowWidth }, itemStyle); for (var i = 0; i < rowCount; i++) { var rowArr = []; var _loop = function _loop(j) { var dataIndex = i * columnNum + j; var itemEl = void 0; if (dataIndex < dataLength) { var el = data && data[dataIndex]; itemEl = React.createElement( _rmcFeedback2['default'], { key: 'griditem-' + dataIndex, activeClassName: activeClassName ? activeClassName : prefixCls + '-item-active', activeStyle: activeStyle }, React.createElement( _flex2['default'].Item, { className: prefixCls + '-item', onClick: function onClick() { return _onClick && _onClick(el, dataIndex); }, style: colStyle }, _this.renderItem(el, dataIndex, columnNum, renderItem) ) ); } else { itemEl = React.createElement(_flex2['default'].Item, { key: 'griditem-' + dataIndex, className: prefixCls + '-item ' + prefixCls + '-null-item', style: colStyle }); } rowArr.push(itemEl); }; for (var j = 0; j < columnNum; j++) { _loop(j); } rowsArr.push(React.createElement( _flex2['default'], { justify: 'center', align: 'stretch', key: 'gridline-' + i }, rowArr )); } return rowsArr; }; return _this; } (0, _createClass3['default'])(Grid, [{ key: 'componentDidMount', value: function componentDidMount() { this.setState({ initialSlideWidth: document.documentElement.clientWidth }); } }, { key: 'render', value: function render() { var _classnames; var _a = this.props, prefixCls = _a.prefixCls, className = _a.className, data = _a.data, hasLine = _a.hasLine, isCarousel = _a.isCarousel, square = _a.square, activeStyle = _a.activeStyle, activeClassName = _a.activeClassName, restProps = __rest(_a, ["prefixCls", "className", "data", "hasLine", "isCarousel", "square", "activeStyle", "activeClassName"]); var columnNum = restProps.columnNum, carouselMaxRow = restProps.carouselMaxRow, onClick = restProps.onClick, renderItem = restProps.renderItem, restPropsForCarousel = __rest(restProps, ["columnNum", "carouselMaxRow", "onClick", "renderItem"]); var initialSlideWidth = this.state.initialSlideWidth; columnNum = columnNum; carouselMaxRow = carouselMaxRow; var dataLength = data && data.length || 0; var rowCount = Math.ceil(dataLength / columnNum); var rowsArr = void 0; var renderEl = void 0; if (isCarousel) { if (initialSlideWidth < 0) { // carousel server render. because carousel dependes on document return null; } if (rowCount % carouselMaxRow !== 0) { rowCount = rowCount + carouselMaxRow - rowCount % carouselMaxRow; } var pageCount = Math.ceil(rowCount / carouselMaxRow); rowsArr = this.getRows(rowCount, dataLength); var carouselProps = {}; if (pageCount <= 1) { carouselProps = { dots: false, dragging: false, swiping: false }; } renderEl = React.createElement( _carousel2['default'], (0, _extends3['default'])({ initialSlideWidth: initialSlideWidth }, restPropsForCarousel, carouselProps), this.renderCarousel(rowsArr, pageCount, rowCount) ); } else { rowsArr = this.getRows(rowCount, dataLength); renderEl = rowsArr; } var cls = (0, _classnames3['default'])(prefixCls, className, (_classnames = {}, (0, _defineProperty3['default'])(_classnames, prefixCls + '-square', square), (0, _defineProperty3['default'])(_classnames, prefixCls + '-line', hasLine), (0, _defineProperty3['default'])(_classnames, prefixCls + '-carousel', isCarousel), _classnames)); return React.createElement( 'div', { className: cls }, renderEl ); } }]); return Grid; }(React.Component); exports['default'] = Grid; Grid.defaultProps = { data: [], hasLine: true, isCarousel: false, columnNum: 4, carouselMaxRow: 2, prefixCls: 'am-grid', square: true, itemStyle: {} }; module.exports = exports['default'];