UNPKG

5.12 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.setStickyStyle = exports.fetchDataByPath = exports.statics = undefined;
5
6var _extends2 = require('babel-runtime/helpers/extends');
7
8var _extends3 = _interopRequireDefault(_extends2);
9
10var _typeof2 = require('babel-runtime/helpers/typeof');
11
12var _typeof3 = _interopRequireDefault(_typeof2);
13
14var _classnames3 = require('classnames');
15
16var _classnames4 = _interopRequireDefault(_classnames3);
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20var blackList = ['defaultProps', 'propTypes', 'contextTypes', 'childContextTypes', 'displayName', 'getDerivedStateFromProps'];
21
22var statics = exports.statics = function statics(Target, Component) {
23 Object.keys(Component).forEach(function (property) {
24 if (blackList.indexOf(property) === -1) {
25 Target[property] = Component[property];
26 }
27 });
28};
29
30var fetchDataByPath = exports.fetchDataByPath = function fetchDataByPath(object, path) {
31 if (!object || !path) {
32 return false;
33 }
34 path = path.toString();
35 var field = path.split('.');
36 var val = void 0,
37 key = void 0;
38 if (field.length) {
39 key = field[0];
40 // lists[1].name
41 if (key.indexOf('[') >= 0) {
42 key = key.match(/(.*)\[(.*)\]/);
43 if (key && (0, _typeof3.default)(key[1]) === 'object' && (0, _typeof3.default)(object[key[1]]) === 'object') {
44 val = object[key[1]][key[2]];
45 }
46 } else {
47 val = object[field[0]];
48 }
49 if (val) {
50 for (var colIndex = 1; colIndex < field.length; colIndex++) {
51 val = val[field[colIndex]];
52 if (typeof val === 'undefined') {
53 break;
54 }
55 }
56 }
57 }
58 return val;
59};
60
61/**
62 * @param {Array} lockChildren
63 * @param {String} dir 'left', 'right'
64 */
65var setStickyStyle = exports.setStickyStyle = function setStickyStyle(lockChildren, flatenChildren, dir) {
66 var offsetArr = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
67 var prefix = arguments[4];
68
69 var len = flatenChildren.length;
70
71 flatenChildren.forEach(function (col, index) {
72 var _classnames;
73
74 var isLeftLast = dir === 'left' && index === len - 1;
75 var isRightFirst = dir === 'right' && index === 0;
76 var style = {
77 position: 'sticky'
78 };
79 var offset = offsetArr[index];
80
81 if (offset > -1) {
82 style[dir] = offset;
83 }
84
85 col.className = (0, _classnames4.default)(col.className, (_classnames = {}, _classnames[prefix + 'table-fix-' + dir] = true, _classnames[prefix + 'table-fix-left-last'] = isLeftLast, _classnames[prefix + 'table-fix-right-first'] = isRightFirst, _classnames));
86 col.style = (0, _extends3.default)({}, col.style, style);
87 col.cellStyle = style;
88 });
89
90 var setOffset = function setOffset(col, index, dir, isBorder) {
91 var _classnames2;
92
93 var style = {
94 position: 'sticky'
95 };
96 var offset = offsetArr[index];
97
98 if (offset > -1) {
99 style[dir] = offset;
100 }
101
102 col.className = (0, _classnames4.default)(col.className, (_classnames2 = {}, _classnames2[prefix + 'table-fix-' + dir] = true, _classnames2[prefix + 'table-fix-left-last'] = dir === 'left' && isBorder, _classnames2[prefix + 'table-fix-right-first'] = dir === 'right' && isBorder, _classnames2));
103 col.style = (0, _extends3.default)({}, col.style, style);
104 col.cellStyle = style;
105 };
106
107 // 查看当前元素的叶子结点数量
108 var getLeafNodes = function getLeafNodes(node) {
109 var nodesLen = 0;
110 var arrLen = Array.isArray(node && node.children) && node.children.length || 0;
111 if (arrLen > 0) {
112 nodesLen = node.children.reduce(function (ret, item, idx) {
113 return ret + getLeafNodes(item.children);
114 }, 0);
115 } else {
116 nodesLen = 1;
117 }
118 return nodesLen;
119 };
120
121 var getPreNodes = function getPreNodes(arr, idx) {
122 return arr.reduce(function (ret, item, i) {
123 if (i < idx) {
124 return ret + getLeafNodes(item);
125 }
126 return ret;
127 }, 0);
128 };
129
130 // for multiple header
131 // nodesLen 前序叶子结点数
132 var loop = function loop(arr, i) {
133 dir === 'right' && arr.reverse();
134 arr.forEach(function (child, j) {
135 var p = dir === 'right' ? i - getPreNodes(arr, j) : i + getPreNodes(arr, j);
136 if (child.children) {
137 // 合并单元格的节点
138 loop(child.children, p);
139 // 查询当前元素下的 前序叶子结点数 比如为n
140 // const isBorder = (dir === 'right' && j === 0) || (dir === 'left' && j === (arr.length - 1));
141 setOffset(child, p, dir, j === arr.length - 1);
142 }
143 });
144 dir === 'right' && arr.reverse();
145 };
146
147 loop(lockChildren, dir === 'left' ? 0 : len - 1);
148};
\No newline at end of file