@lemon-fe/components 1.5.7-alpha.0 → 1.5.7-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/data-grid/components/selected.d.ts +11 -5
- package/es/data-grid/components/selected.js +41 -15
- package/es/data-grid/index.js +2 -1
- package/es/data-grid/index.less +1 -1
- package/es/data-grid/typings.d.ts +14 -0
- package/es/data-grid/utils/index.d.ts +6 -6
- package/es/data-grid/utils/index.js +14 -11
- package/es/data-grid/utils/text-width.js +3 -3
- package/package.json +2 -2
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type ReactNode, type ReactElement } from 'react';
|
|
2
2
|
import { type Selection } from '../utils';
|
|
3
|
-
declare
|
|
4
|
-
selection: Selection<
|
|
3
|
+
declare type SelectedProps<T> = {
|
|
4
|
+
selection: Selection<T>;
|
|
5
5
|
onClear: () => void;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
renderSelected?: (params: {
|
|
7
|
+
selectedKeys: string[];
|
|
8
|
+
selectedRows: T[];
|
|
9
|
+
clearNode: ReactElement;
|
|
10
|
+
}) => ReactNode;
|
|
11
|
+
};
|
|
12
|
+
declare const Selected: <T = unknown>(props: SelectedProps<T>) => ReactElement | null;
|
|
13
|
+
export default Selected;
|
|
@@ -4,28 +4,54 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
4
4
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
-
import React, { useEffect, useState, memo } from 'react';
|
|
7
|
+
import React, { useEffect, useState, memo, useMemo } from 'react';
|
|
8
8
|
import { useLocaleReceiver } from "../../locale-receiver";
|
|
9
9
|
import { parseLocalTemplate } from "../../locale/locale";
|
|
10
10
|
import { prefix } from "../utils";
|
|
11
|
-
|
|
11
|
+
function SelectedImpl(props) {
|
|
12
12
|
var selection = props.selection,
|
|
13
|
-
onClear = props.onClear
|
|
14
|
-
|
|
13
|
+
onClear = props.onClear,
|
|
14
|
+
renderSelected = props.renderSelected;
|
|
15
|
+
var _useState = useState(function () {
|
|
16
|
+
return selection.getSelected();
|
|
17
|
+
}),
|
|
15
18
|
_useState2 = _slicedToArray(_useState, 2),
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
selected = _useState2[0],
|
|
20
|
+
setSelected = _useState2[1];
|
|
18
21
|
var _useLocaleReceiver = useLocaleReceiver('DataGrid'),
|
|
19
22
|
_useLocaleReceiver2 = _slicedToArray(_useLocaleReceiver, 1),
|
|
20
23
|
dataGridLocale = _useLocaleReceiver2[0];
|
|
21
24
|
useEffect(function () {
|
|
22
|
-
return selection.listen(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
return selection.listen(function () {
|
|
26
|
+
setSelected(new Map(selection.getSelected()));
|
|
27
|
+
});
|
|
28
|
+
}, [selection]);
|
|
29
|
+
var _useMemo = useMemo(function () {
|
|
30
|
+
var keys = [];
|
|
31
|
+
var rows = [];
|
|
32
|
+
selected.forEach(function (val, key) {
|
|
33
|
+
if (val) {
|
|
34
|
+
rows.push(val);
|
|
35
|
+
}
|
|
36
|
+
keys.push(key);
|
|
37
|
+
});
|
|
38
|
+
return [keys, rows];
|
|
39
|
+
}, [selected]),
|
|
40
|
+
_useMemo2 = _slicedToArray(_useMemo, 2),
|
|
41
|
+
selectedKeys = _useMemo2[0],
|
|
42
|
+
selectedRows = _useMemo2[1];
|
|
43
|
+
var clearNode = /*#__PURE__*/React.createElement("a", {
|
|
29
44
|
onClick: onClear
|
|
30
|
-
}, dataGridLocale.clearSelectedText)
|
|
31
|
-
|
|
45
|
+
}, dataGridLocale.clearSelectedText);
|
|
46
|
+
return selected.size > 0 ? /*#__PURE__*/React.createElement("span", {
|
|
47
|
+
className: prefix('selected')
|
|
48
|
+
}, renderSelected ? renderSelected({
|
|
49
|
+
clearNode: clearNode,
|
|
50
|
+
selectedKeys: selectedKeys,
|
|
51
|
+
selectedRows: selectedRows
|
|
52
|
+
}) : /*#__PURE__*/React.createElement(React.Fragment, null, clearNode, parseLocalTemplate(dataGridLocale.selectedTipText, {
|
|
53
|
+
length: selected.size
|
|
54
|
+
}))) : null;
|
|
55
|
+
}
|
|
56
|
+
var Selected = /*#__PURE__*/memo(SelectedImpl);
|
|
57
|
+
export default Selected;
|
package/es/data-grid/index.js
CHANGED
|
@@ -1862,7 +1862,8 @@ var InternalDataGrid = /*#__PURE__*/function (_Component) {
|
|
|
1862
1862
|
footer.push( /*#__PURE__*/React.createElement(Selected, {
|
|
1863
1863
|
selection: this.selected,
|
|
1864
1864
|
onClear: this.handleClearSelected,
|
|
1865
|
-
key: "selection"
|
|
1865
|
+
key: "selection",
|
|
1866
|
+
renderSelected: rowSelection.renderSelected
|
|
1866
1867
|
}));
|
|
1867
1868
|
}
|
|
1868
1869
|
} else {
|
package/es/data-grid/index.less
CHANGED
|
@@ -87,6 +87,20 @@ export declare type RowSelectionType<T = any> = {
|
|
|
87
87
|
* @description 是否按页面显示的数据进行全选
|
|
88
88
|
*/
|
|
89
89
|
headerCheckboxSelectionFilteredOnly?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* @description 自定义已选结果显示
|
|
92
|
+
* @param params.selectedKeys 当前选中的行 key 列表(包含没有加载数据的 key)
|
|
93
|
+
* @param params.selectedRows 当前已有数据的选中行列表(已过滤掉为 null 的项)
|
|
94
|
+
* @param params.clearNode 触发清空选中项的交互节点
|
|
95
|
+
* 为什么选择 keys 和 rows 分成两个属性:
|
|
96
|
+
* 因为 rowSelection 的初始 selectedRowKeys 可能会被赋值,此时部分已选择项由于没有数据都是 null,
|
|
97
|
+
* 为了便于外部处理,selectedRows 中已经过滤掉了这些项。
|
|
98
|
+
*/
|
|
99
|
+
renderSelected?: (params: {
|
|
100
|
+
selectedKeys: string[];
|
|
101
|
+
selectedRows: T[];
|
|
102
|
+
clearNode: ReactElement;
|
|
103
|
+
}) => ReactNode;
|
|
90
104
|
};
|
|
91
105
|
export declare type PaginationType = {
|
|
92
106
|
current?: number;
|
|
@@ -36,18 +36,18 @@ export declare class Selection<T> {
|
|
|
36
36
|
private dirty;
|
|
37
37
|
private observers;
|
|
38
38
|
constructor(keys?: string[]);
|
|
39
|
-
flush(): readonly [string[], T[]];
|
|
40
|
-
get(id: string): T | undefined;
|
|
39
|
+
flush(): readonly [string[], (T | null)[]];
|
|
40
|
+
get(id: string): T | null | undefined;
|
|
41
41
|
has(id: string): boolean;
|
|
42
|
-
set(id: string, data: T): void;
|
|
42
|
+
set(id: string, data: T | null): void;
|
|
43
43
|
delete(id: string): void;
|
|
44
44
|
clear(): void;
|
|
45
|
-
clone(data: Map<string, T>): void;
|
|
45
|
+
clone(data: Map<string, T | null>): void;
|
|
46
46
|
isSameKeys(keys: string[]): boolean;
|
|
47
47
|
isDirty(): boolean;
|
|
48
|
-
|
|
48
|
+
getSelected(): Map<string, T | null>;
|
|
49
49
|
forEach(cb: (key: string) => void): void;
|
|
50
|
-
listen(cb: (
|
|
50
|
+
listen(cb: () => void): () => void;
|
|
51
51
|
}
|
|
52
52
|
export declare const columnTypes: Record<string, ColDef>;
|
|
53
53
|
export declare function getDefaultColumnTypes(locale: DataGridLocale): Record<string, ColDef<any>>;
|
|
@@ -116,21 +116,20 @@ export var Store = /*#__PURE__*/function () {
|
|
|
116
116
|
}();
|
|
117
117
|
export var Selection = /*#__PURE__*/function () {
|
|
118
118
|
function Selection() {
|
|
119
|
-
var
|
|
119
|
+
var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
120
120
|
_classCallCheck(this, Selection);
|
|
121
121
|
_defineProperty(this, "record", void 0);
|
|
122
122
|
_defineProperty(this, "keys", void 0);
|
|
123
123
|
_defineProperty(this, "dirty", false);
|
|
124
124
|
_defineProperty(this, "observers", new Set());
|
|
125
|
-
this.record = new Map(
|
|
125
|
+
this.record = new Map(keys.map(function (key) {
|
|
126
126
|
return [key, null];
|
|
127
127
|
}));
|
|
128
|
-
this.keys =
|
|
128
|
+
this.keys = keys;
|
|
129
129
|
}
|
|
130
130
|
_createClass(Selection, [{
|
|
131
131
|
key: "flush",
|
|
132
132
|
value: function flush() {
|
|
133
|
-
var _this2 = this;
|
|
134
133
|
var result = _toConsumableArray(this.record);
|
|
135
134
|
var keys = [];
|
|
136
135
|
var values = [];
|
|
@@ -141,7 +140,7 @@ export var Selection = /*#__PURE__*/function () {
|
|
|
141
140
|
this.keys = keys;
|
|
142
141
|
this.dirty = false;
|
|
143
142
|
_toConsumableArray(this.observers).forEach(function (cb) {
|
|
144
|
-
return cb(
|
|
143
|
+
return cb();
|
|
145
144
|
});
|
|
146
145
|
return [keys, values];
|
|
147
146
|
}
|
|
@@ -185,6 +184,8 @@ export var Selection = /*#__PURE__*/function () {
|
|
|
185
184
|
if (this.dirty) {
|
|
186
185
|
this.flush();
|
|
187
186
|
}
|
|
187
|
+
|
|
188
|
+
/** 提高比较的效率,浅比较虽然比较安全,但是大部分场景这样足矣 */
|
|
188
189
|
return this.keys === keys;
|
|
189
190
|
}
|
|
190
191
|
}, {
|
|
@@ -193,22 +194,24 @@ export var Selection = /*#__PURE__*/function () {
|
|
|
193
194
|
return this.dirty;
|
|
194
195
|
}
|
|
195
196
|
}, {
|
|
196
|
-
key: "
|
|
197
|
-
value: function
|
|
198
|
-
return this.
|
|
197
|
+
key: "getSelected",
|
|
198
|
+
value: function getSelected() {
|
|
199
|
+
return this.record;
|
|
199
200
|
}
|
|
200
201
|
}, {
|
|
201
202
|
key: "forEach",
|
|
202
203
|
value: function forEach(cb) {
|
|
203
|
-
this.
|
|
204
|
+
this.record.forEach(function (val, key) {
|
|
205
|
+
return cb(key);
|
|
206
|
+
});
|
|
204
207
|
}
|
|
205
208
|
}, {
|
|
206
209
|
key: "listen",
|
|
207
210
|
value: function listen(cb) {
|
|
208
|
-
var
|
|
211
|
+
var _this2 = this;
|
|
209
212
|
this.observers.add(cb);
|
|
210
213
|
return function () {
|
|
211
|
-
|
|
214
|
+
_this2.observers.delete(cb);
|
|
212
215
|
};
|
|
213
216
|
}
|
|
214
217
|
}]);
|
|
@@ -21,13 +21,13 @@ export function getTextWidth(text) {
|
|
|
21
21
|
continue;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
// 泰文、高棉文、缅甸文、老挝文;马来文 / 英文使用拉丁字符规则
|
|
24
|
+
// 泰文、高棉文、缅甸文、老挝文;马来文 / 越南语 / 英文使用拉丁字符规则
|
|
25
25
|
if (isSEAComplexScript(code)) {
|
|
26
26
|
width += 1;
|
|
27
27
|
continue;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
//
|
|
30
|
+
// 拉丁字母、数字、标点;覆盖英文、马来文、越南语预组合字符
|
|
31
31
|
width += 0.6;
|
|
32
32
|
}
|
|
33
33
|
} catch (err) {
|
|
@@ -64,7 +64,7 @@ function isSEAComplexScript(code) {
|
|
|
64
64
|
}
|
|
65
65
|
function isCombiningMark(code) {
|
|
66
66
|
return code >= 0x0300 && code <= 0x036f ||
|
|
67
|
-
//
|
|
67
|
+
// Vietnamese and other Latin combining marks
|
|
68
68
|
code === 0x0e31 || code >= 0x0e34 && code <= 0x0e3a || code >= 0x0e47 && code <= 0x0e4e ||
|
|
69
69
|
// Thai vowels and tones
|
|
70
70
|
code === 0x0eb1 || code >= 0x0eb4 && code <= 0x0ebc || code >= 0x0ec8 && code <= 0x0ece ||
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemon-fe/components",
|
|
3
|
-
"version": "1.5.7-alpha.
|
|
3
|
+
"version": "1.5.7-alpha.1",
|
|
4
4
|
"description": "> TODO: description",
|
|
5
5
|
"homepage": "",
|
|
6
6
|
"license": "MIT",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"registry": "https://registry.npmjs.org"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "71b81afd6fac9ca7e66b3f527c9e6f104e9e30bd"
|
|
62
62
|
}
|