1 | import _defineProperty from 'babel-runtime/helpers/defineProperty';
|
2 | import _extends from 'babel-runtime/helpers/extends';
|
3 | import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
|
4 | import _createClass from 'babel-runtime/helpers/createClass';
|
5 | import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
|
6 | import _inherits from 'babel-runtime/helpers/inherits';
|
7 | var __rest = this && this.__rest || function (s, e) {
|
8 | var t = {};
|
9 | for (var p in s) {
|
10 | if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
11 | }if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
12 | if (e.indexOf(p[i]) < 0) t[p[i]] = s[p[i]];
|
13 | }return t;
|
14 | };
|
15 |
|
16 | import classnames from 'classnames';
|
17 | import React from 'react';
|
18 | import TouchFeedback from 'rmc-feedback';
|
19 | import Carousel from '../carousel';
|
20 | import Flex from '../flex';
|
21 |
|
22 | var Grid = function (_React$Component) {
|
23 | _inherits(Grid, _React$Component);
|
24 |
|
25 | function Grid() {
|
26 | _classCallCheck(this, Grid);
|
27 |
|
28 | var _this = _possibleConstructorReturn(this, (Grid.__proto__ || Object.getPrototypeOf(Grid)).apply(this, arguments));
|
29 |
|
30 | _this.state = {
|
31 | initialSlideWidth: 0
|
32 | };
|
33 | _this.renderCarousel = function (rowsArr, pageCount, rowCount) {
|
34 | var prefixCls = _this.props.prefixCls;
|
35 |
|
36 | var carouselMaxRow = _this.props.carouselMaxRow;
|
37 | var pagesArr = [];
|
38 | for (var pageIndex = 0; pageIndex < pageCount; pageIndex++) {
|
39 | var pageRows = [];
|
40 | for (var ii = 0; ii < carouselMaxRow; ii++) {
|
41 | var rowIndex = pageIndex * carouselMaxRow + ii;
|
42 | if (rowIndex < rowCount) {
|
43 | pageRows.push(rowsArr[rowIndex]);
|
44 | } else {
|
45 |
|
46 | pageRows.push(React.createElement('div', { key: 'gridline-' + rowIndex }));
|
47 | }
|
48 | }
|
49 | pagesArr.push(React.createElement(
|
50 | 'div',
|
51 | { key: 'pageitem-' + pageIndex, className: prefixCls + '-carousel-page' },
|
52 | pageRows
|
53 | ));
|
54 | }
|
55 | return pagesArr;
|
56 | };
|
57 | _this.renderItem = function (dataItem, index, columnNum, renderItem) {
|
58 | var prefixCls = _this.props.prefixCls;
|
59 |
|
60 | var itemEl = null;
|
61 | if (renderItem) {
|
62 | itemEl = renderItem(dataItem, index);
|
63 | } else {
|
64 | if (dataItem) {
|
65 | var icon = dataItem.icon,
|
66 | text = dataItem.text;
|
67 |
|
68 | itemEl = React.createElement(
|
69 | 'div',
|
70 | { className: prefixCls + '-item-inner-content column-num-' + columnNum },
|
71 | React.isValidElement(icon) ? icon : React.createElement('img', { className: prefixCls + '-icon', src: icon }),
|
72 | React.createElement(
|
73 | 'div',
|
74 | { className: prefixCls + '-text' },
|
75 | text
|
76 | )
|
77 | );
|
78 | }
|
79 | }
|
80 | return React.createElement(
|
81 | 'div',
|
82 | { className: prefixCls + '-item-content' },
|
83 | itemEl
|
84 | );
|
85 | };
|
86 | _this.getRows = function (rowCount, dataLength) {
|
87 |
|
88 | var _this$props = _this.props,
|
89 | columnNum = _this$props.columnNum,
|
90 | data = _this$props.data,
|
91 | renderItem = _this$props.renderItem,
|
92 | prefixCls = _this$props.prefixCls,
|
93 | _onClick = _this$props.onClick,
|
94 | activeStyle = _this$props.activeStyle,
|
95 | activeClassName = _this$props.activeClassName,
|
96 | itemStyle = _this$props.itemStyle;
|
97 |
|
98 | var rowsArr = [];
|
99 | columnNum = columnNum;
|
100 | var rowWidth = 100 / columnNum + '%';
|
101 | var colStyle = _extends({ width: rowWidth }, itemStyle);
|
102 | for (var i = 0; i < rowCount; i++) {
|
103 | var rowArr = [];
|
104 |
|
105 | var _loop = function _loop(j) {
|
106 | var dataIndex = i * columnNum + j;
|
107 | var itemEl = void 0;
|
108 | if (dataIndex < dataLength) {
|
109 | var el = data && data[dataIndex];
|
110 | itemEl = React.createElement(
|
111 | TouchFeedback,
|
112 | { key: 'griditem-' + dataIndex, activeClassName: activeClassName ? activeClassName : prefixCls + '-item-active', activeStyle: activeStyle },
|
113 | React.createElement(
|
114 | Flex.Item,
|
115 | { className: prefixCls + '-item', onClick: function onClick() {
|
116 | return _onClick && _onClick(el, dataIndex);
|
117 | }, style: colStyle },
|
118 | _this.renderItem(el, dataIndex, columnNum, renderItem)
|
119 | )
|
120 | );
|
121 | } else {
|
122 | itemEl = React.createElement(Flex.Item, { key: 'griditem-' + dataIndex, className: prefixCls + '-item ' + prefixCls + '-null-item', style: colStyle });
|
123 | }
|
124 | rowArr.push(itemEl);
|
125 | };
|
126 |
|
127 | for (var j = 0; j < columnNum; j++) {
|
128 | _loop(j);
|
129 | }
|
130 | rowsArr.push(React.createElement(
|
131 | Flex,
|
132 | { justify: 'center', align: 'stretch', key: 'gridline-' + i },
|
133 | rowArr
|
134 | ));
|
135 | }
|
136 | return rowsArr;
|
137 | };
|
138 | return _this;
|
139 | }
|
140 |
|
141 | _createClass(Grid, [{
|
142 | key: 'componentDidMount',
|
143 | value: function componentDidMount() {
|
144 | this.setState({
|
145 | initialSlideWidth: document.documentElement.clientWidth
|
146 | });
|
147 | }
|
148 | }, {
|
149 | key: 'render',
|
150 | value: function render() {
|
151 | var _classnames;
|
152 |
|
153 | var _a = this.props,
|
154 | prefixCls = _a.prefixCls,
|
155 | className = _a.className,
|
156 | data = _a.data,
|
157 | hasLine = _a.hasLine,
|
158 | isCarousel = _a.isCarousel,
|
159 | square = _a.square,
|
160 | activeStyle = _a.activeStyle,
|
161 | activeClassName = _a.activeClassName,
|
162 | restProps = __rest(_a, ["prefixCls", "className", "data", "hasLine", "isCarousel", "square", "activeStyle", "activeClassName"]);
|
163 | var columnNum = restProps.columnNum,
|
164 | carouselMaxRow = restProps.carouselMaxRow,
|
165 | onClick = restProps.onClick,
|
166 | renderItem = restProps.renderItem,
|
167 | restPropsForCarousel = __rest(restProps, ["columnNum", "carouselMaxRow", "onClick", "renderItem"]);
|
168 |
|
169 | var initialSlideWidth = this.state.initialSlideWidth;
|
170 |
|
171 | columnNum = columnNum;
|
172 | carouselMaxRow = carouselMaxRow;
|
173 | var dataLength = data && data.length || 0;
|
174 | var rowCount = Math.ceil(dataLength / columnNum);
|
175 | var rowsArr = void 0;
|
176 | var renderEl = void 0;
|
177 | if (isCarousel) {
|
178 | if (initialSlideWidth < 0) {
|
179 |
|
180 | return null;
|
181 | }
|
182 | if (rowCount % carouselMaxRow !== 0) {
|
183 | rowCount = rowCount + carouselMaxRow - rowCount % carouselMaxRow;
|
184 | }
|
185 | var pageCount = Math.ceil(rowCount / carouselMaxRow);
|
186 | rowsArr = this.getRows(rowCount, dataLength);
|
187 | var carouselProps = {};
|
188 | if (pageCount <= 1) {
|
189 | carouselProps = {
|
190 | dots: false,
|
191 | dragging: false,
|
192 | swiping: false
|
193 | };
|
194 | }
|
195 | renderEl = React.createElement(
|
196 | Carousel,
|
197 | _extends({ initialSlideWidth: initialSlideWidth }, restPropsForCarousel, carouselProps),
|
198 | this.renderCarousel(rowsArr, pageCount, rowCount)
|
199 | );
|
200 | } else {
|
201 | rowsArr = this.getRows(rowCount, dataLength);
|
202 | renderEl = rowsArr;
|
203 | }
|
204 | var cls = classnames(prefixCls, className, (_classnames = {}, _defineProperty(_classnames, prefixCls + '-square', square), _defineProperty(_classnames, prefixCls + '-line', hasLine), _defineProperty(_classnames, prefixCls + '-carousel', isCarousel), _classnames));
|
205 | return React.createElement(
|
206 | 'div',
|
207 | { className: cls },
|
208 | renderEl
|
209 | );
|
210 | }
|
211 | }]);
|
212 |
|
213 | return Grid;
|
214 | }(React.Component);
|
215 |
|
216 | export default Grid;
|
217 |
|
218 | Grid.defaultProps = {
|
219 | data: [],
|
220 | hasLine: true,
|
221 | isCarousel: false,
|
222 | columnNum: 4,
|
223 | carouselMaxRow: 2,
|
224 | prefixCls: 'am-grid',
|
225 | square: true,
|
226 | itemStyle: {}
|
227 | }; |
\ | No newline at end of file |