UNPKG

16.3 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = void 0;
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
16var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
18var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
20var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
22var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
23
24var React = _interopRequireWildcard(require("react"));
25
26var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
27
28var _classnames = _interopRequireDefault(require("classnames"));
29
30var _DownOutlined = _interopRequireDefault(require("@ant-design/icons/DownOutlined"));
31
32var _checkbox = _interopRequireDefault(require("../checkbox"));
33
34var _menu = _interopRequireDefault(require("../menu"));
35
36var _dropdown = _interopRequireDefault(require("../dropdown"));
37
38var _search = _interopRequireDefault(require("./search"));
39
40var _ListBody = _interopRequireWildcard(require("./ListBody"));
41
42var _reactNode = require("../_util/reactNode");
43
44function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
45
46function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
47
48var defaultRender = function defaultRender() {
49 return null;
50};
51
52function isRenderResultPlainObject(result) {
53 return result && !(0, _reactNode.isValidElement)(result) && Object.prototype.toString.call(result) === '[object Object]';
54}
55
56function getEnabledItemKeys(items) {
57 return items.filter(function (data) {
58 return !data.disabled;
59 }).map(function (data) {
60 return data.key;
61 });
62}
63
64var TransferList = /*#__PURE__*/function (_React$PureComponent) {
65 (0, _inherits2["default"])(TransferList, _React$PureComponent);
66
67 var _super = (0, _createSuper2["default"])(TransferList);
68
69 function TransferList(props) {
70 var _this;
71
72 (0, _classCallCheck2["default"])(this, TransferList);
73 _this = _super.call(this, props);
74 _this.defaultListBodyRef = /*#__PURE__*/React.createRef(); // =============================== Filter ===============================
75
76 _this.handleFilter = function (e) {
77 var handleFilter = _this.props.handleFilter;
78 var filterValue = e.target.value;
79
80 _this.setState({
81 filterValue: filterValue
82 });
83
84 handleFilter(e);
85 };
86
87 _this.handleClear = function () {
88 var handleClear = _this.props.handleClear;
89
90 _this.setState({
91 filterValue: ''
92 });
93
94 handleClear();
95 };
96
97 _this.matchFilter = function (text, item) {
98 var filterValue = _this.state.filterValue;
99 var filterOption = _this.props.filterOption;
100
101 if (filterOption) {
102 return filterOption(filterValue, item);
103 }
104
105 return text.indexOf(filterValue) >= 0;
106 };
107
108 _this.getCurrentPageItems = function () {}; // =============================== Render ===============================
109
110
111 _this.renderListBody = function (renderList, props) {
112 var bodyContent = renderList ? renderList(props) : null;
113 var customize = !!bodyContent;
114
115 if (!customize) {
116 bodyContent = /*#__PURE__*/React.createElement(_ListBody["default"], (0, _extends2["default"])({
117 ref: _this.defaultListBodyRef
118 }, props));
119 }
120
121 return {
122 customize: customize,
123 bodyContent: bodyContent
124 };
125 };
126
127 _this.renderItem = function (item) {
128 var _this$props$render = _this.props.render,
129 render = _this$props$render === void 0 ? defaultRender : _this$props$render;
130 var renderResult = render(item);
131 var isRenderResultPlain = isRenderResultPlainObject(renderResult);
132 return {
133 renderedText: isRenderResultPlain ? renderResult.value : renderResult,
134 renderedEl: isRenderResultPlain ? renderResult.label : renderResult,
135 item: item
136 };
137 };
138
139 _this.getSelectAllLabel = function (selectedCount, totalCount) {
140 var _this$props = _this.props,
141 itemsUnit = _this$props.itemsUnit,
142 itemUnit = _this$props.itemUnit,
143 selectAllLabel = _this$props.selectAllLabel;
144
145 if (selectAllLabel) {
146 return typeof selectAllLabel === 'function' ? selectAllLabel({
147 selectedCount: selectedCount,
148 totalCount: totalCount
149 }) : selectAllLabel;
150 }
151
152 var unit = totalCount > 1 ? itemsUnit : itemUnit;
153 return /*#__PURE__*/React.createElement(React.Fragment, null, (selectedCount > 0 ? "".concat(selectedCount, "/") : '') + totalCount, " ", unit);
154 };
155
156 _this.state = {
157 filterValue: ''
158 };
159 return _this;
160 }
161
162 (0, _createClass2["default"])(TransferList, [{
163 key: "componentWillUnmount",
164 value: function componentWillUnmount() {
165 clearTimeout(this.triggerScrollTimer);
166 }
167 }, {
168 key: "getCheckStatus",
169 value: function getCheckStatus(filteredItems) {
170 var checkedKeys = this.props.checkedKeys;
171
172 if (checkedKeys.length === 0) {
173 return 'none';
174 }
175
176 if (filteredItems.every(function (item) {
177 return checkedKeys.indexOf(item.key) >= 0 || !!item.disabled;
178 })) {
179 return 'all';
180 }
181
182 return 'part';
183 } // ================================ Item ================================
184
185 }, {
186 key: "getFilteredItems",
187 value: function getFilteredItems(dataSource, filterValue) {
188 var _this2 = this;
189
190 var filteredItems = [];
191 var filteredRenderItems = [];
192 dataSource.forEach(function (item) {
193 var renderedItem = _this2.renderItem(item);
194
195 var renderedText = renderedItem.renderedText; // Filter skip
196
197 if (filterValue && !_this2.matchFilter(renderedText, item)) {
198 return null;
199 }
200
201 filteredItems.push(item);
202 filteredRenderItems.push(renderedItem);
203 });
204 return {
205 filteredItems: filteredItems,
206 filteredRenderItems: filteredRenderItems
207 };
208 }
209 }, {
210 key: "getListBody",
211 value: function getListBody(prefixCls, searchPlaceholder, filterValue, filteredItems, notFoundContent, filteredRenderItems, checkedKeys, renderList, showSearch, disabled) {
212 var search = showSearch ? /*#__PURE__*/React.createElement("div", {
213 className: "".concat(prefixCls, "-body-search-wrapper")
214 }, /*#__PURE__*/React.createElement(_search["default"], {
215 prefixCls: "".concat(prefixCls, "-search"),
216 onChange: this.handleFilter,
217 handleClear: this.handleClear,
218 placeholder: searchPlaceholder,
219 value: filterValue,
220 disabled: disabled
221 })) : null;
222
223 var _this$renderListBody = this.renderListBody(renderList, (0, _extends2["default"])((0, _extends2["default"])({}, (0, _omit["default"])(this.props, _ListBody.OmitProps)), {
224 filteredItems: filteredItems,
225 filteredRenderItems: filteredRenderItems,
226 selectedKeys: checkedKeys
227 })),
228 bodyContent = _this$renderListBody.bodyContent,
229 customize = _this$renderListBody.customize;
230
231 var bodyNode; // We should wrap customize list body in a classNamed div to use flex layout.
232
233 if (customize) {
234 bodyNode = /*#__PURE__*/React.createElement("div", {
235 className: "".concat(prefixCls, "-body-customize-wrapper")
236 }, bodyContent);
237 } else {
238 bodyNode = filteredItems.length ? bodyContent : /*#__PURE__*/React.createElement("div", {
239 className: "".concat(prefixCls, "-body-not-found")
240 }, notFoundContent);
241 }
242
243 return /*#__PURE__*/React.createElement("div", {
244 className: (0, _classnames["default"])(showSearch ? "".concat(prefixCls, "-body ").concat(prefixCls, "-body-with-search") : "".concat(prefixCls, "-body"))
245 }, search, bodyNode);
246 }
247 }, {
248 key: "getCheckBox",
249 value: function getCheckBox(filteredItems, onItemSelectAll, showSelectAll, disabled, prefixCls) {
250 var checkStatus = this.getCheckStatus(filteredItems);
251 var checkedAll = checkStatus === 'all';
252 var checkAllCheckbox = showSelectAll !== false && /*#__PURE__*/React.createElement(_checkbox["default"], {
253 disabled: disabled,
254 checked: checkedAll,
255 indeterminate: checkStatus === 'part',
256 className: "".concat(prefixCls, "-checkbox"),
257 onChange: function onChange() {
258 // Only select enabled items
259 onItemSelectAll(filteredItems.filter(function (item) {
260 return !item.disabled;
261 }).map(function (_ref) {
262 var key = _ref.key;
263 return key;
264 }), !checkedAll);
265 }
266 });
267 return checkAllCheckbox;
268 }
269 }, {
270 key: "render",
271 value: function render() {
272 var _classNames,
273 _this3 = this;
274
275 var filterValue = this.state.filterValue;
276 var _this$props2 = this.props,
277 prefixCls = _this$props2.prefixCls,
278 dataSource = _this$props2.dataSource,
279 titleText = _this$props2.titleText,
280 checkedKeys = _this$props2.checkedKeys,
281 disabled = _this$props2.disabled,
282 footer = _this$props2.footer,
283 showSearch = _this$props2.showSearch,
284 style = _this$props2.style,
285 searchPlaceholder = _this$props2.searchPlaceholder,
286 notFoundContent = _this$props2.notFoundContent,
287 selectAll = _this$props2.selectAll,
288 selectCurrent = _this$props2.selectCurrent,
289 selectInvert = _this$props2.selectInvert,
290 removeAll = _this$props2.removeAll,
291 removeCurrent = _this$props2.removeCurrent,
292 renderList = _this$props2.renderList,
293 onItemSelectAll = _this$props2.onItemSelectAll,
294 onItemRemove = _this$props2.onItemRemove,
295 showSelectAll = _this$props2.showSelectAll,
296 showRemove = _this$props2.showRemove,
297 pagination = _this$props2.pagination; // Custom Layout
298
299 var footerDom = footer && footer(this.props);
300 var listCls = (0, _classnames["default"])(prefixCls, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-with-pagination"), !!pagination), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-with-footer"), !!footerDom), _classNames)); // ====================== Get filtered, checked item list ======================
301
302 var _this$getFilteredItem = this.getFilteredItems(dataSource, filterValue),
303 filteredItems = _this$getFilteredItem.filteredItems,
304 filteredRenderItems = _this$getFilteredItem.filteredRenderItems; // ================================= List Body =================================
305
306
307 var listBody = this.getListBody(prefixCls, searchPlaceholder, filterValue, filteredItems, notFoundContent, filteredRenderItems, checkedKeys, renderList, showSearch, disabled); // ================================ List Footer ================================
308
309 var listFooter = footerDom ? /*#__PURE__*/React.createElement("div", {
310 className: "".concat(prefixCls, "-footer")
311 }, footerDom) : null;
312 var checkAllCheckbox = !showRemove && !pagination && this.getCheckBox(filteredItems, onItemSelectAll, showSelectAll, disabled, prefixCls);
313 var menu = null;
314
315 if (showRemove) {
316 menu = /*#__PURE__*/React.createElement(_menu["default"], null, pagination && /*#__PURE__*/React.createElement(_menu["default"].Item, {
317 onClick: function onClick() {
318 var _a;
319
320 var pageKeys = getEnabledItemKeys((((_a = _this3.defaultListBodyRef.current) === null || _a === void 0 ? void 0 : _a.getItems()) || []).map(function (entity) {
321 return entity.item;
322 }));
323 onItemRemove === null || onItemRemove === void 0 ? void 0 : onItemRemove(pageKeys);
324 }
325 }, removeCurrent), /*#__PURE__*/React.createElement(_menu["default"].Item, {
326 onClick: function onClick() {
327 onItemRemove === null || onItemRemove === void 0 ? void 0 : onItemRemove(getEnabledItemKeys(filteredItems));
328 }
329 }, removeAll));
330 } else {
331 menu = /*#__PURE__*/React.createElement(_menu["default"], null, /*#__PURE__*/React.createElement(_menu["default"].Item, {
332 onClick: function onClick() {
333 var keys = getEnabledItemKeys(filteredItems);
334 onItemSelectAll(keys, keys.length !== checkedKeys.length);
335 }
336 }, selectAll), pagination && /*#__PURE__*/React.createElement(_menu["default"].Item, {
337 onClick: function onClick() {
338 var _a;
339
340 var pageItems = ((_a = _this3.defaultListBodyRef.current) === null || _a === void 0 ? void 0 : _a.getItems()) || [];
341 onItemSelectAll(getEnabledItemKeys(pageItems.map(function (entity) {
342 return entity.item;
343 })), true);
344 }
345 }, selectCurrent), /*#__PURE__*/React.createElement(_menu["default"].Item, {
346 onClick: function onClick() {
347 var _a;
348
349 var availableKeys;
350
351 if (pagination) {
352 availableKeys = getEnabledItemKeys((((_a = _this3.defaultListBodyRef.current) === null || _a === void 0 ? void 0 : _a.getItems()) || []).map(function (entity) {
353 return entity.item;
354 }));
355 } else {
356 availableKeys = getEnabledItemKeys(filteredItems);
357 }
358
359 var checkedKeySet = new Set(checkedKeys);
360 var newCheckedKeys = [];
361 var newUnCheckedKeys = [];
362 availableKeys.forEach(function (key) {
363 if (checkedKeySet.has(key)) {
364 newUnCheckedKeys.push(key);
365 } else {
366 newCheckedKeys.push(key);
367 }
368 });
369 onItemSelectAll(newCheckedKeys, true);
370 onItemSelectAll(newUnCheckedKeys, false);
371 }
372 }, selectInvert));
373 }
374
375 var dropdown = /*#__PURE__*/React.createElement(_dropdown["default"], {
376 className: "".concat(prefixCls, "-header-dropdown"),
377 overlay: menu,
378 disabled: disabled
379 }, /*#__PURE__*/React.createElement(_DownOutlined["default"], null)); // ================================== Render ===================================
380
381 return /*#__PURE__*/React.createElement("div", {
382 className: listCls,
383 style: style
384 }, /*#__PURE__*/React.createElement("div", {
385 className: "".concat(prefixCls, "-header")
386 }, checkAllCheckbox, dropdown, /*#__PURE__*/React.createElement("span", {
387 className: "".concat(prefixCls, "-header-selected")
388 }, this.getSelectAllLabel(checkedKeys.length, filteredItems.length)), /*#__PURE__*/React.createElement("span", {
389 className: "".concat(prefixCls, "-header-title")
390 }, titleText)), listBody, listFooter);
391 }
392 }]);
393 return TransferList;
394}(React.PureComponent);
395
396exports["default"] = TransferList;
397TransferList.defaultProps = {
398 dataSource: [],
399 titleText: '',
400 showSearch: false
401};
\No newline at end of file