@hi-ui/check-select 4.0.0-alpha.32 → 4.0.0-alpha.36
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/README.md +21 -20
- package/lib/cjs/CheckSelect.js +117 -39
- package/lib/cjs/CheckSelect.js.map +1 -1
- package/lib/cjs/hooks/use-data.js +104 -0
- package/lib/cjs/hooks/use-data.js.map +1 -0
- package/lib/cjs/hooks/use-flatten-data.js +78 -0
- package/lib/cjs/hooks/use-flatten-data.js.map +1 -0
- package/lib/cjs/use-check-select.js +35 -130
- package/lib/cjs/use-check-select.js.map +1 -1
- package/lib/esm/CheckSelect.js +115 -40
- package/lib/esm/CheckSelect.js.map +1 -1
- package/lib/esm/hooks/use-data.js +94 -0
- package/lib/esm/hooks/use-data.js.map +1 -0
- package/lib/esm/hooks/use-flatten-data.js +69 -0
- package/lib/esm/hooks/use-flatten-data.js.map +1 -0
- package/lib/esm/use-check-select.js +36 -124
- package/lib/esm/use-check-select.js.map +1 -1
- package/lib/types/CheckSelect.d.ts +8 -0
- package/lib/types/context.d.ts +2 -10
- package/lib/types/hooks/index.d.ts +2 -0
- package/lib/types/hooks/use-data.d.ts +4 -0
- package/lib/types/hooks/use-flatten-data.d.ts +2 -0
- package/lib/types/hooks/use-search.d.ts +2 -2
- package/lib/types/types.d.ts +3 -3
- package/lib/types/use-check-select.d.ts +5 -33
- package/package.json +21 -20
@@ -0,0 +1,94 @@
|
|
1
|
+
/** @LICENSE
|
2
|
+
* @hi-ui/check-select
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-select#readme
|
4
|
+
*
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
6
|
+
*
|
7
|
+
* This source code is licensed under the MIT license found in the
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
9
|
+
*/
|
10
|
+
import { __rest } from 'tslib';
|
11
|
+
import { useMemo, isValidElement } from 'react';
|
12
|
+
import { toArray } from '@hi-ui/use-children';
|
13
|
+
var NOOP_ARRAY = [];
|
14
|
+
|
15
|
+
var useData = function useData(_ref) {
|
16
|
+
var data = _ref.data,
|
17
|
+
children = _ref.children;
|
18
|
+
return useMemo(function () {
|
19
|
+
var mergedData; // data 优先级大于内嵌式组合
|
20
|
+
|
21
|
+
if (Array.isArray(data)) {
|
22
|
+
mergedData = data;
|
23
|
+
} else if (children) {
|
24
|
+
mergedData = parseChildren(children);
|
25
|
+
}
|
26
|
+
|
27
|
+
return mergedData || NOOP_ARRAY;
|
28
|
+
}, [children, data]);
|
29
|
+
};
|
30
|
+
|
31
|
+
var parseChildren = function parseChildren(children) {
|
32
|
+
var data = [];
|
33
|
+
var list = toArray(children);
|
34
|
+
list.forEach(function (item) {
|
35
|
+
if (! /*#__PURE__*/isValidElement(item)) return;
|
36
|
+
if (!item.type) return;
|
37
|
+
var HiName = item.type.HiName;
|
38
|
+
|
39
|
+
switch (HiName) {
|
40
|
+
case 'CheckSelectOption':
|
41
|
+
var option = parseOption(item);
|
42
|
+
data.push(option);
|
43
|
+
break;
|
44
|
+
|
45
|
+
case 'CheckSelectOptionGroup':
|
46
|
+
var optGroup = parseOptionGroup(item);
|
47
|
+
data.push(optGroup);
|
48
|
+
break;
|
49
|
+
}
|
50
|
+
});
|
51
|
+
return data;
|
52
|
+
};
|
53
|
+
|
54
|
+
var parseOption = function parseOption(node) {
|
55
|
+
var _a = node.props,
|
56
|
+
value = _a.value,
|
57
|
+
children = _a.children,
|
58
|
+
disabled = _a.disabled,
|
59
|
+
rest = __rest(_a, ["value", "children", "disabled", "groupTitle"]);
|
60
|
+
|
61
|
+
var option = {
|
62
|
+
id: value,
|
63
|
+
title: children,
|
64
|
+
disabled: disabled,
|
65
|
+
// TODO:使用 Symbol 注入,避免 data 传入使用
|
66
|
+
rootProps: rest
|
67
|
+
};
|
68
|
+
return option;
|
69
|
+
};
|
70
|
+
|
71
|
+
var parseOptionGroup = function parseOptionGroup(node) {
|
72
|
+
var key = node.key,
|
73
|
+
_a = node.props,
|
74
|
+
groupId = _a.groupId,
|
75
|
+
label = _a.label,
|
76
|
+
children = _a.children,
|
77
|
+
rest = __rest(_a, ["groupId", "label", "children"]);
|
78
|
+
|
79
|
+
var optGroup = {
|
80
|
+
groupId: groupId !== null && groupId !== void 0 ? groupId : key,
|
81
|
+
groupTitle: label,
|
82
|
+
rootProps: rest,
|
83
|
+
children: []
|
84
|
+
};
|
85
|
+
|
86
|
+
if (children) {
|
87
|
+
optGroup.children = parseChildren(children);
|
88
|
+
}
|
89
|
+
|
90
|
+
return optGroup;
|
91
|
+
};
|
92
|
+
|
93
|
+
export { parseChildren, useData };
|
94
|
+
//# sourceMappingURL=use-data.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-data.js","sources":["../../../src/hooks/use-data.ts"],"sourcesContent":[null],"names":["NOOP_ARRAY","useData","data","children","useMemo","mergedData","Array","isArray","parseChildren","list","toArray","forEach","item","isValidElement","type","HiName","option","parseOption","push","optGroup","parseOptionGroup","node","_a","value","disabled","rest","id","title","rootProps","key","groupId","label","groupTitle"],"mappings":";;;;;;;;;;;;AAIA,IAAMA,UAAU,GAAG,EAAnB;;IAEaC,OAAO,GAAG,SAAVA,OAAU,KAAA;MAAGC,YAAAA;MAAMC,gBAAAA;SACvBC,OAAO,CAAC;QACTC;;QAGAC,KAAK,CAACC,OAAND,CAAcJ,IAAdI,GAAqB;AACvBD,MAAAA,UAAU,GAAGH,IAAbG;AADF,WAEO,IAAIF,QAAJ,EAAc;AACnBE,MAAAA,UAAU,GAAGG,aAAa,CAACL,QAAD,CAA1BE;;;WAGKA,UAAU,IAAIL;AAVT,GAAA,EAWX,CAACG,QAAD,EAAWD,IAAX,CAXW;;;IAcHM,aAAa,GAAG,SAAhBA,aAAgB,CAACL,QAAD;MACrBD,IAAI,GAAG;MACPO,IAAI,GAAGC,OAAO,CAACP,QAAD;AAEpBM,EAAAA,IAAI,CAACE,OAALF,CAAa,UAACG,IAAD;QACP,eAACC,cAAc,CAACD,IAAD,GAAQ;QACvB,CAACA,IAAI,CAACE,MAAM;QAGNC,MADV,GAEIH,IAFJ,CACEE,IACEF,CADMG;;YAGFA;WACD;YACGC,MAAM,GAAGC,WAAW,CAACL,IAAD;AAC1BV,QAAAA,IAAI,CAACgB,IAALhB,CAAUc,MAAVd;;;WAEG;YACGiB,QAAQ,GAAGC,gBAAgB,CAACR,IAAD;AACjCV,QAAAA,IAAI,CAACgB,IAALhB,CAAUiB,QAAVjB;;;AAfN,GAAAO;SAoBOP;;;AAGT,IAAMe,WAAW,GAAG,SAAdA,WAAc,CAACI,IAAD;MAEhBC,KACED,IAAI;MADGE,KAAT,KAAA,CAASA;MAAOpB,QAAhB,KAAA,CAAgBA;MAAUqB,QAA1B,KAAA,CAA0BA;MAAyBC,IAAnD,cAAO,QAAA,YAAA,YAAA,cAAA;;MAGHT,MAAM,GAAG;AACbU,IAAAA,EAAE,EAAEH,KADS;AAEbI,IAAAA,KAAK,EAAExB,QAFM;AAGbqB,IAAAA,QAAQ,EAAEA,QAHG;;AAKbI,IAAAA,SAAS,EAAEH;AALE;SAQRT;AAbT,CAAA;;AAgBA,IAAMI,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,IAAD;MAErBQ,GADI,GAGFR,IAHE,CACJQ;MACAP,EAFI,GAGFD,IAAI;MADGS,OAFL,KAAA,CAEKA;MAASC,KAFd,KAAA,CAEcA;MAAO5B,QAFrB,KAAA,CAEqBA;MAAasB,IAFlC,cAEG,UAAA,SAAA,YAAA;;MAGHN,QAAQ,GAAG;AACfW,IAAAA,OAAO,EAAEA,OAAO,SAAPA,IAAAA,OAAO,WAAPA,GAAAA,OAAAA,GAAWD,GADL;AAEfG,IAAAA,UAAU,EAAED,KAFG;AAGfH,IAAAA,SAAS,EAAEH,IAHI;AAIftB,IAAAA,QAAQ,EAAE;AAJK;;MAObA,UAAU;AACZgB,IAAAA,QAAQ,CAAChB,QAATgB,GAAoBX,aAAa,CAACL,QAAD,CAAjCgB;;;SAGKA;AAjBT,CAAA;;"}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/** @LICENSE
|
2
|
+
* @hi-ui/check-select
|
3
|
+
* https://github.com/XiaoMi/hiui/tree/master/packages/ui/check-select#readme
|
4
|
+
*
|
5
|
+
* Copyright (c) HIUI <mi-hiui@xiaomi.com>.
|
6
|
+
*
|
7
|
+
* This source code is licensed under the MIT license found in the
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
9
|
+
*/
|
10
|
+
import { useMemo } from 'react';
|
11
|
+
import { baseFlattenTree } from '@hi-ui/tree-utils';
|
12
|
+
var NOOP_ARRAY = [];
|
13
|
+
var DEFAULT_FIELD_NAMES = {};
|
14
|
+
|
15
|
+
var useFlattenData = function useFlattenData(_ref) {
|
16
|
+
var _ref$data = _ref.data,
|
17
|
+
data = _ref$data === void 0 ? NOOP_ARRAY : _ref$data,
|
18
|
+
_ref$fieldNames = _ref.fieldNames,
|
19
|
+
fieldNames = _ref$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _ref$fieldNames;
|
20
|
+
var flattedData = useMemo(function () {
|
21
|
+
return flattenData({
|
22
|
+
data: data,
|
23
|
+
fieldNames: fieldNames
|
24
|
+
});
|
25
|
+
}, [data, fieldNames]);
|
26
|
+
return flattedData;
|
27
|
+
};
|
28
|
+
|
29
|
+
var flattenData = function flattenData(_ref2) {
|
30
|
+
var _ref2$data = _ref2.data,
|
31
|
+
data = _ref2$data === void 0 ? NOOP_ARRAY : _ref2$data,
|
32
|
+
_ref2$fieldNames = _ref2.fieldNames,
|
33
|
+
fieldNames = _ref2$fieldNames === void 0 ? DEFAULT_FIELD_NAMES : _ref2$fieldNames; // 转换对象
|
34
|
+
|
35
|
+
var getKeyFields = function getKeyFields(node, key) {
|
36
|
+
return node[fieldNames[key] || key];
|
37
|
+
};
|
38
|
+
|
39
|
+
return baseFlattenTree({
|
40
|
+
tree: data,
|
41
|
+
childrenFieldName: function childrenFieldName(node) {
|
42
|
+
return getKeyFields(node, 'children');
|
43
|
+
},
|
44
|
+
transform: function transform(node) {
|
45
|
+
var _a; // 不对外暴露
|
46
|
+
|
47
|
+
|
48
|
+
delete node.parent;
|
49
|
+
var raw = node.raw;
|
50
|
+
|
51
|
+
if ('groupId' in raw) {
|
52
|
+
// 用于虚拟列表唯一 id
|
53
|
+
node.id = raw.groupId;
|
54
|
+
node.groupId = raw.groupId;
|
55
|
+
node.groupTitle = raw.groupTitle;
|
56
|
+
} else {
|
57
|
+
// 支持 fieldNames 转换
|
58
|
+
node.id = getKeyFields(raw, 'id');
|
59
|
+
node.title = getKeyFields(raw, 'title');
|
60
|
+
node.disabled = (_a = getKeyFields(raw, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
61
|
+
}
|
62
|
+
|
63
|
+
return node;
|
64
|
+
}
|
65
|
+
});
|
66
|
+
};
|
67
|
+
|
68
|
+
export { flattenData, useFlattenData };
|
69
|
+
//# sourceMappingURL=use-flatten-data.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"use-flatten-data.js","sources":["../../../src/hooks/use-flatten-data.ts"],"sourcesContent":[null],"names":["NOOP_ARRAY","DEFAULT_FIELD_NAMES","useFlattenData","data","fieldNames","flattedData","useMemo","flattenData","getKeyFields","node","key","baseFlattenTree","tree","childrenFieldName","transform","parent","raw","id","groupId","groupTitle","title","disabled"],"mappings":";;;;;;;;;;;AAIA,IAAMA,UAAU,GAAG,EAAnB;AACA,IAAMC,mBAAmB,GAAG,EAA5B;;IAEaC,cAAc,GAAG,SAAjBA,cAAiB,KAAA;uBAAGC;MAAAA,8BAAOH;6BAAYI;MAAAA,0CAAaH;MACzDI,WAAW,GAAGC,OAAO,CAAC;WACnBC,WAAW,CAAC;AAAEJ,MAAAA,IAAI,EAAJA,IAAF;AAAQC,MAAAA,UAAU,EAAVA;AAAR,KAAD;AADO,GAAA,EAExB,CAACD,IAAD,EAAOC,UAAP,CAFwB;SAIpBC;;;IAGIE,WAAW,GAAG,SAAdA,WAAc,MAAA;yBAAGJ;MAAAA,+BAAOH;+BAAYI;MAAAA,2CAAaH;;MAEtDO,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD,EAAYC,GAAZ;WAAyCD,IAAI,CAACL,UAAU,CAACM,GAAD,CAAVN,IAAmBM,GAApB;AAAlE;;SAEOC,eAAe,CAAC;AACrBC,IAAAA,IAAI,EAAET,IADe;AAErBU,IAAAA,iBAAiB,EAAE,0BAAA,CAACJ,IAAD;aAAUD,YAAY,CAACC,IAAD,EAAO,UAAP;AAFpB,KAAA;AAGrBK,IAAAA,SAAS,EAAE,kBAAA,CAACL,IAAD;;;;aAEFA,IAAI,CAACM;UAEJC,GAAR,GAAgBP,IAAhB,CAAQO;;UAEJ,aAAaA,KAAK;;AAEpBP,QAAAA,IAAI,CAACQ,EAALR,GAAUO,GAAG,CAACE,OAAdT;AACAA,QAAAA,IAAI,CAACS,OAALT,GAAeO,GAAG,CAACE,OAAnBT;AACAA,QAAAA,IAAI,CAACU,UAALV,GAAkBO,GAAG,CAACG,UAAtBV;AAJF,aAKO;;AAELA,QAAAA,IAAI,CAACQ,EAALR,GAAUD,YAAY,CAACQ,GAAD,EAAM,IAAN,CAAtBP;AACAA,QAAAA,IAAI,CAACW,KAALX,GAAaD,YAAY,CAACQ,GAAD,EAAM,OAAN,CAAzBP;AACAA,QAAAA,IAAI,CAACY,QAALZ,GAAgB,MAAAD,YAAY,CAACQ,GAAD,EAAM,UAAN,CAAZ,UAAA,iBAAA,KAAA,GAAiC,KAAjDP;;;aAEKA;;AApBY,GAAD;;;"}
|
@@ -8,15 +8,17 @@
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
9
9
|
*/
|
10
10
|
import { __rest } from 'tslib';
|
11
|
-
import
|
11
|
+
import { useRef, useCallback } from 'react';
|
12
12
|
import { useUncontrolledState } from '@hi-ui/use-uncontrolled-state';
|
13
|
+
import { uniqBy } from 'lodash';
|
13
14
|
import { useCheck } from '@hi-ui/use-check';
|
14
|
-
import {
|
15
|
-
import {
|
16
|
-
import {
|
15
|
+
import { useLatestRef, useLatestCallback } from '@hi-ui/use-latest';
|
16
|
+
import { useData } from './hooks/use-data.js';
|
17
|
+
import { useFlattenData } from './hooks/use-flatten-data.js';
|
18
|
+
import '@hi-ui/env';
|
19
|
+
import '@hi-ui/type-assertion';
|
17
20
|
var NOOP_ARRAY = [];
|
18
21
|
var NOOP_VALUE = [];
|
19
|
-
var DEFAULT_FIELD_NAMES = {};
|
20
22
|
|
21
23
|
var useCheckSelect = function useCheckSelect(_a) {
|
22
24
|
var _a$data = _a.data,
|
@@ -29,127 +31,51 @@ var useCheckSelect = function useCheckSelect(_a) {
|
|
29
31
|
defaultValue = _a$defaultValue === void 0 ? NOOP_VALUE : _a$defaultValue,
|
30
32
|
onChangeProp = _a.onChange,
|
31
33
|
onSelect = _a.onSelect,
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
list.forEach(function (item) {
|
45
|
-
if (! /*#__PURE__*/React.isValidElement(item)) return; // @ts-ignore
|
46
|
-
|
47
|
-
if (item.type.HiName === 'CheckSelectOption') {
|
48
|
-
var props = item.props;
|
49
|
-
|
50
|
-
var _value = props.value,
|
51
|
-
_children = props.children,
|
52
|
-
_disabled = props.disabled,
|
53
|
-
_rest = __rest(props, ["value", "children", "disabled", "groupTitle"]);
|
54
|
-
|
55
|
-
var option = {
|
56
|
-
id: _value,
|
57
|
-
title: _children,
|
58
|
-
disabled: _disabled,
|
59
|
-
rootProps: _rest
|
60
|
-
};
|
61
|
-
arr.push(option); // @ts-ignore
|
62
|
-
} else if (item.type.HiName === 'CheckSelectOptionGroup') {
|
63
|
-
var _props = item.props;
|
64
|
-
|
65
|
-
var groupId = _props.groupId,
|
66
|
-
label = _props.label,
|
67
|
-
_children2 = _props.children,
|
68
|
-
_rest2 = __rest(_props, ["groupId", "label", "children"]);
|
69
|
-
|
70
|
-
var optGroup = {
|
71
|
-
groupId: groupId,
|
72
|
-
groupTitle: label,
|
73
|
-
children: [],
|
74
|
-
rootProps: _rest2
|
75
|
-
}; // @ts-ignore
|
76
|
-
|
77
|
-
if (_children2) {
|
78
|
-
// @ts-ignore
|
79
|
-
optGroup.children = dfs(_children2);
|
80
|
-
}
|
81
|
-
|
82
|
-
arr.push(optGroup);
|
83
|
-
}
|
84
|
-
});
|
85
|
-
return arr;
|
86
|
-
};
|
87
|
-
|
88
|
-
return dfs(children);
|
89
|
-
}
|
90
|
-
|
91
|
-
return dataProp;
|
92
|
-
}, [children, dataProp]);
|
93
|
-
/**
|
94
|
-
* 转换对象
|
95
|
-
*/
|
96
|
-
|
97
|
-
var getKeyFields = useCallback(function (node, key) {
|
98
|
-
return node[fieldNames[key] || key];
|
99
|
-
}, [fieldNames]);
|
100
|
-
var flattedData = useMemo(function () {
|
101
|
-
// @ts-ignore
|
102
|
-
return flattenTree(data, function (node) {
|
103
|
-
var _a;
|
104
|
-
|
105
|
-
if ('groupId' in node.raw) {
|
106
|
-
// @ts-ignore
|
107
|
-
node.id = node.raw.groupId; // @ts-ignore
|
108
|
-
|
109
|
-
node.groupTitle = node.raw.groupTitle; // @ts-ignore
|
110
|
-
|
111
|
-
node.groupId = node.raw.groupId;
|
112
|
-
} else {
|
113
|
-
// TODO:support children field map
|
114
|
-
node.id = getKeyFields(node.raw, 'id'); // @ts-ignore
|
115
|
-
|
116
|
-
node.title = getKeyFields(node.raw, 'title'); // @ts-ignore
|
117
|
-
|
118
|
-
node.disabled = (_a = getKeyFields(node.raw, 'disabled')) !== null && _a !== void 0 ? _a : false;
|
119
|
-
}
|
120
|
-
|
121
|
-
return node;
|
122
|
-
});
|
123
|
-
}, [data, getKeyFields]);
|
34
|
+
fieldNames = _a.fieldNames,
|
35
|
+
rest = __rest(_a, ["data", "children", "disabled", "value", "defaultValue", "onChange", "onSelect", "fieldNames"]);
|
36
|
+
|
37
|
+
var data = useData({
|
38
|
+
data: dataProp,
|
39
|
+
children: children
|
40
|
+
});
|
41
|
+
var flattedData = useFlattenData({
|
42
|
+
data: data,
|
43
|
+
fieldNames: fieldNames
|
44
|
+
});
|
45
|
+
var flattedDataRef = useLatestRef(flattedData);
|
124
46
|
|
125
47
|
var _useUncontrolledState = useUncontrolledState(defaultValue, valueProp, onChangeProp),
|
126
48
|
value = _useUncontrolledState[0],
|
127
49
|
tryChangeValue = _useUncontrolledState[1];
|
128
50
|
|
129
51
|
var onSelectLatest = useLatestCallback(onSelect);
|
130
|
-
var
|
52
|
+
var selectedItemsRef = useRef([]);
|
131
53
|
var proxyTryChangeValue = useCallback(function (value, item, shouldChecked) {
|
132
|
-
// 调用用户的select
|
133
|
-
var checkedItems = flattedDataRef.current // 使用最新的value
|
134
|
-
.filter(function (item) {
|
135
|
-
return value.includes(item.id);
|
136
|
-
}).map(function (item) {
|
137
|
-
return item.raw;
|
138
|
-
});
|
139
54
|
var changedItems = item;
|
140
55
|
|
141
56
|
if (!Array.isArray(item)) {
|
142
57
|
changedItems = [item];
|
58
|
+
|
59
|
+
if (shouldChecked) {
|
60
|
+
selectedItemsRef.current.push(item);
|
61
|
+
}
|
62
|
+
|
143
63
|
onSelectLatest(value, item, shouldChecked);
|
144
64
|
}
|
145
65
|
|
66
|
+
var selectedItems = uniqBy([].concat(changedItems, selectedItemsRef.current, flattedDataRef.current), 'id'); // 调用用户的select
|
67
|
+
|
68
|
+
var checkedItems = selectedItems // 使用最新的value
|
69
|
+
.filter(function (item) {
|
70
|
+
return value.includes(item.id);
|
71
|
+
}).map(function (item) {
|
72
|
+
return 'raw' in item ? item.raw : item;
|
73
|
+
});
|
146
74
|
tryChangeValue(value, // TODO: 处理脏数据
|
147
75
|
changedItems.map(function (item) {
|
148
76
|
return 'raw' in item ? item.raw : item;
|
149
77
|
}), checkedItems);
|
150
|
-
},
|
151
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
152
|
-
[tryChangeValue, onSelectLatest, flattedDataRef]);
|
78
|
+
}, [tryChangeValue, onSelectLatest, flattedDataRef, selectedItemsRef]);
|
153
79
|
|
154
80
|
var _useCheckDefault = useCheck({
|
155
81
|
disabled: disabled,
|
@@ -158,30 +84,16 @@ var useCheckSelect = function useCheckSelect(_a) {
|
|
158
84
|
allowCheck: allowCheck
|
159
85
|
}),
|
160
86
|
onOptionCheck = _useCheckDefault[0],
|
161
|
-
isCheckedId = _useCheckDefault[1];
|
162
|
-
// const getSearchInputProps = useCallback(
|
163
|
-
// () => ({
|
164
|
-
// placeholder: searchPlaceholder,
|
165
|
-
// value: inputProps.value,
|
166
|
-
// onChange: inputProps.onChange,
|
167
|
-
// }),
|
168
|
-
// [searchPlaceholder, inputProps]
|
169
|
-
// )
|
170
|
-
|
87
|
+
isCheckedId = _useCheckDefault[1];
|
171
88
|
|
172
89
|
return {
|
173
90
|
rootProps: rest,
|
174
|
-
// data: inSearch ? matchedItems : data,
|
175
91
|
data: data,
|
176
92
|
flattedData: flattedData,
|
177
93
|
value: value,
|
178
94
|
tryChangeValue: proxyTryChangeValue,
|
179
95
|
onSelect: onOptionCheck,
|
180
|
-
isCheckedId: isCheckedId
|
181
|
-
emptyContent: emptyContent // getSearchInputProps,
|
182
|
-
// isEmpty,
|
183
|
-
// resetSearch,
|
184
|
-
|
96
|
+
isCheckedId: isCheckedId
|
185
97
|
};
|
186
98
|
};
|
187
99
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"use-check-select.js","sources":["../../src/use-check-select.ts"],"sourcesContent":[null],"names":["NOOP_ARRAY","NOOP_VALUE","
|
1
|
+
{"version":3,"file":"use-check-select.js","sources":["../../src/use-check-select.ts"],"sourcesContent":[null],"names":["NOOP_ARRAY","NOOP_VALUE","useCheckSelect","_a","data","dataProp","children","disabled","valueProp","value","defaultValue","onChangeProp","onChange","onSelect","fieldNames","rest","useData","flattedData","useFlattenData","flattedDataRef","useLatestRef","useUncontrolledState","tryChangeValue","onSelectLatest","useLatestCallback","selectedItemsRef","useRef","proxyTryChangeValue","useCallback","item","shouldChecked","changedItems","Array","isArray","current","push","selectedItems","uniqBy","checkedItems","filter","includes","id","map","raw","useCheckDefault","checkedIds","onCheck","allowCheck","onOptionCheck","isCheckedId","rootProps","option"],"mappings":";;;;;;;;;;;;;;;;;;;AASA,IAAMA,UAAU,GAAG,EAAnB;AACA,IAAMC,UAAU,GAAG,EAAnB;;IAEaC,cAAc,GAAG,SAAjBA,cAAiB,CAACC,EAAD;mBAC5BC;MAAMC,gCAAWL;MACjBM,cAAAA;uBACAC;MAAAA,oCAAW;MACJC,eAAPC;2BACAC;MAAAA,4CAAeT;MACLU,kBAAVC;MACAC,cAAAA;MACAC,gBAAAA;MACGC,kBAT0B,OAAA,YAAA,YAAA,SAAA,gBAAA,YAAA,YAAA,cAAA;;MAWvBX,IAAI,GAAGY,OAAO,CAAC;AAAEZ,IAAAA,IAAI,EAAEC,QAAR;AAAkBC,IAAAA,QAAQ,EAARA;AAAlB,GAAD;MACdW,WAAW,GAAGC,cAAc,CAAC;AAAEd,IAAAA,IAAI,EAAJA,IAAF;AAAQU,IAAAA,UAAU,EAAVA;AAAR,GAAD;MAC5BK,cAAc,GAAGC,YAAY,CAACH,WAAD;;8BAEHI,oBAAoB,CAACX,YAAD,EAAeF,SAAf,EAA0BG,YAA1B;MAA7CF,KAAP;MAAca,cAAd;;MAEMC,cAAc,GAAGC,iBAAiB,CAACX,QAAD;MAElCY,gBAAgB,GAAGC,MAAM,CAAQ,EAAR;MAEzBC,mBAAmB,GAAGC,WAAW,CACrC,UACEnB,KADF,EAEEoB,IAFF,EAGEC,aAHF;QAKMC,YAAY,GAAGF;;QAEf,CAACG,KAAK,CAACC,OAAND,CAAcH,IAAdG,GAAqB;AACxBD,MAAAA,YAAY,GAAG,CAACF,IAAD,CAAfE;;UAEID,eAAe;AACjBL,QAAAA,gBAAgB,CAACS,OAAjBT,CAAyBU,IAAzBV,CAA8BI,IAA9BJ;;;AAEFF,MAAAA,cAAc,CAACd,KAAD,EAAQoB,IAAR,EAAcC,aAAd,CAAdP;;;QAGIa,aAAa,GAAGC,MAAM,WACtBN,cAAiBN,gBAAgB,CAACS,SAAYf,cAAc,CAACe,QADvC,EAE1B,IAF0B;;QAMtBI,YAAY,GAAGF,aAAa;AAAA,KAE/BG,MAFkBH,CAEX,UAACP,IAAD;aAAUpB,KAAK,CAAC+B,QAAN/B,CAAeoB,IAAI,CAACY,EAApBhC;AAFC,KAAA2B,EAGlBM,GAHkBN,CAGd,UAACP,IAAD;aAAW,SAASA,IAAT,GAAgBA,IAAI,CAACc,GAArB,GAA2Bd;AAHxB,KAAAO;AAKrBd,IAAAA,cAAc,CACZb,KADY;AAGZsB,IAAAA,YAAY,CAACW,GAAbX,CAAiB,UAACF,IAAD;aAAW,SAASA,IAAT,GAAgBA,IAAI,CAACc,GAArB,GAA2Bd;AAAvD,KAAAE,CAHY,EAIZO,YAJY,CAAdhB;AA5BmC,GAAA,EAmCrC,CAACA,cAAD,EAAiBC,cAAjB,EAAiCJ,cAAjC,EAAiDM,gBAAjD,CAnCqC;;yBAsCFmB,QAAe,CAAC;AACnDrC,IAAAA,QAAQ,EAARA,QADmD;AAEnDsC,IAAAA,UAAU,EAAEpC,KAFuC;AAGnDqC,IAAAA,OAAO,EAAEnB,mBAH0C;AAInDoB,IAAAA,UAAU,EAAVA;AAJmD,GAAD;MAA7CC,aAAP;MAAsBC,WAAtB;;SAOO;AACLC,IAAAA,SAAS,EAAEnC,IADN;AAELX,IAAAA,IAAI,EAAJA,IAFK;AAGLa,IAAAA,WAAW,EAAXA,WAHK;AAILR,IAAAA,KAAK,EAALA,KAJK;AAKLa,IAAAA,cAAc,EAAEK,mBALX;AAMLd,IAAAA,QAAQ,EAAEmC,aANL;AAOLC,IAAAA,WAAW,EAAXA;AAPK;;;AA4DT,IAAMF,UAAU,GAAG,SAAbA,UAAa,CAACI,MAAD;SAAiB,CAACA,MAAM,CAAC5C;AAA5C,CAAA;;"}
|
@@ -93,6 +93,14 @@ export interface CheckSelectProps extends Omit<PickerProps, 'trigger'>, UseCheck
|
|
93
93
|
* 面板关闭时回调
|
94
94
|
*/
|
95
95
|
onClose?: () => void;
|
96
|
+
/**
|
97
|
+
* 是否开启全选功能
|
98
|
+
*/
|
99
|
+
showCheckAll?: boolean;
|
100
|
+
/**
|
101
|
+
* 是否开启查看仅已选功能
|
102
|
+
*/
|
103
|
+
showOnlyShowChecked?: boolean;
|
96
104
|
}
|
97
105
|
/**
|
98
106
|
* TODO: What is CheckSelectOption
|
package/lib/types/context.d.ts
CHANGED
@@ -1,27 +1,19 @@
|
|
1
1
|
/// <reference types="react" />
|
2
2
|
export declare const CheckSelectProvider: import("react").Provider<Omit<{
|
3
|
-
rootProps: {
|
4
|
-
displayRender?: ((option: import("./types").CheckSelectEventData) => import("react").ReactNode) | undefined;
|
5
|
-
placeholder?: string | undefined;
|
6
|
-
};
|
3
|
+
rootProps: {};
|
7
4
|
data: any[];
|
8
5
|
flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
9
6
|
value: import("react").ReactText[];
|
10
7
|
tryChangeValue: (value: import("react").ReactText[], item: import("./types").CheckSelectEventData | import("./types").CheckSelectEventData[], shouldChecked: boolean) => void;
|
11
8
|
onSelect: (targetItem: import("packages/hooks/use-check/lib/types").UseCheckItem, shouldChecked: boolean) => void;
|
12
9
|
isCheckedId: (id: import("react").ReactText) => boolean;
|
13
|
-
emptyContent: boolean | import("react").ReactChild | import("react").ReactFragment | import("react").ReactPortal | null;
|
14
10
|
}, "rootProps"> | null>;
|
15
11
|
export declare const useCheckSelectContext: () => Omit<{
|
16
|
-
rootProps: {
|
17
|
-
displayRender?: ((option: import("./types").CheckSelectEventData) => import("react").ReactNode) | undefined;
|
18
|
-
placeholder?: string | undefined;
|
19
|
-
};
|
12
|
+
rootProps: {};
|
20
13
|
data: any[];
|
21
14
|
flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
22
15
|
value: import("react").ReactText[];
|
23
16
|
tryChangeValue: (value: import("react").ReactText[], item: import("./types").CheckSelectEventData | import("./types").CheckSelectEventData[], shouldChecked: boolean) => void;
|
24
17
|
onSelect: (targetItem: import("packages/hooks/use-check/lib/types").UseCheckItem, shouldChecked: boolean) => void;
|
25
18
|
isCheckedId: (id: import("react").ReactText) => boolean;
|
26
|
-
emptyContent: boolean | import("react").ReactChild | import("react").ReactFragment | import("react").ReactPortal | null;
|
27
19
|
}, "rootProps">;
|
@@ -0,0 +1,2 @@
|
|
1
|
+
export declare const useFlattenData: ({ data, fieldNames }: any) => import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
2
|
+
export declare const flattenData: ({ data, fieldNames }: any) => import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import {
|
2
|
+
import { CheckSelectMergedItem } from '../types';
|
3
3
|
/**
|
4
4
|
* 支持搜索功能的 hook
|
5
5
|
*/
|
6
|
-
export declare const useSearch: (flattedData:
|
6
|
+
export declare const useSearch: (flattedData: CheckSelectMergedItem[], filter?: ((keyword: string, option: CheckSelectMergedItem) => boolean) | undefined) => readonly [boolean, CheckSelectMergedItem[], {
|
7
7
|
value: string;
|
8
8
|
onChange: (evt: React.ChangeEvent<HTMLInputElement>) => void;
|
9
9
|
}, boolean, () => void];
|
package/lib/types/types.d.ts
CHANGED
@@ -3,7 +3,7 @@ export interface CheckSelectDataItem {
|
|
3
3
|
/**
|
4
4
|
* 节点唯一 id
|
5
5
|
*/
|
6
|
-
id
|
6
|
+
id?: React.ReactText;
|
7
7
|
/**
|
8
8
|
* 节点标题
|
9
9
|
*/
|
@@ -13,7 +13,7 @@ export interface CheckSelectDataItem {
|
|
13
13
|
*/
|
14
14
|
disabled?: boolean;
|
15
15
|
}
|
16
|
-
export interface
|
16
|
+
export interface CheckSelectGroupDataItem {
|
17
17
|
/**
|
18
18
|
* 节点组标题
|
19
19
|
*/
|
@@ -23,7 +23,7 @@ export interface CheckSelectDataGroupItem {
|
|
23
23
|
*/
|
24
24
|
children?: CheckSelectDataItem[];
|
25
25
|
}
|
26
|
-
export declare type
|
26
|
+
export declare type CheckSelectMergedItem = CheckSelectDataItem & CheckSelectGroupDataItem;
|
27
27
|
export interface CheckSelectRequiredProps {
|
28
28
|
checked: boolean;
|
29
29
|
focused: boolean;
|
@@ -1,23 +1,14 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { CheckSelectDataItem, CheckSelectEventData } from './types';
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
* 自定义选择后触发器所展示的内容,只在 title 为字符串时有效
|
7
|
-
*/
|
8
|
-
displayRender?: ((option: CheckSelectEventData) => React.ReactNode) | undefined;
|
9
|
-
/**
|
10
|
-
* 触发器输入框占位符
|
11
|
-
*/
|
12
|
-
placeholder?: string | undefined;
|
13
|
-
};
|
3
|
+
import { HiBaseFieldNames } from '@hi-ui/core';
|
4
|
+
export declare const useCheckSelect: ({ data: dataProp, children, disabled, value: valueProp, defaultValue, onChange: onChangeProp, onSelect, fieldNames, ...rest }: UseCheckSelectProps) => {
|
5
|
+
rootProps: {};
|
14
6
|
data: any[];
|
15
7
|
flattedData: import("packages/utils/tree-utils/lib/types/types").BaseFlattedTreeNodeData<any, any>[];
|
16
8
|
value: React.ReactText[];
|
17
9
|
tryChangeValue: (value: React.ReactText[], item: CheckSelectEventData | CheckSelectEventData[], shouldChecked: boolean) => void;
|
18
10
|
onSelect: (targetItem: import("@hi-ui/use-check").UseCheckItem, shouldChecked: boolean) => void;
|
19
11
|
isCheckedId: (id: React.ReactText) => boolean;
|
20
|
-
emptyContent: boolean | React.ReactChild | React.ReactFragment | React.ReactPortal | null;
|
21
12
|
};
|
22
13
|
export interface UseCheckSelectProps {
|
23
14
|
/**
|
@@ -37,32 +28,13 @@ export interface UseCheckSelectProps {
|
|
37
28
|
onChange?: (value: React.ReactText[], changedItems?: CheckSelectDataItem[], checkedItems?: CheckSelectDataItem[]) => void;
|
38
29
|
/**
|
39
30
|
* 选中值时回调
|
31
|
+
* @private
|
40
32
|
*/
|
41
33
|
onSelect?: (value: React.ReactText[], targetOption: CheckSelectEventData, shouldChecked: boolean) => void;
|
42
34
|
/**
|
43
35
|
* 是否禁止使用
|
44
36
|
*/
|
45
37
|
disabled?: boolean;
|
46
|
-
/**
|
47
|
-
* 设置选项为空时展示的内容
|
48
|
-
*/
|
49
|
-
emptyContent?: React.ReactNode;
|
50
|
-
/**
|
51
|
-
* 自定义选择后触发器所展示的内容,只在 title 为字符串时有效
|
52
|
-
*/
|
53
|
-
displayRender?: (option: CheckSelectEventData) => React.ReactNode;
|
54
|
-
/**
|
55
|
-
* 触发器输入框占位符
|
56
|
-
*/
|
57
|
-
placeholder?: string;
|
58
|
-
/**
|
59
|
-
* 搜索输入框占位符
|
60
|
-
*/
|
61
|
-
searchPlaceholder?: string;
|
62
|
-
/**
|
63
|
-
* 启用自定义过滤函数实现根据搜索框内容,自定义搜索
|
64
|
-
*/
|
65
|
-
filter?: (keyword: string, option: CheckSelectEventData) => boolean;
|
66
38
|
/**
|
67
39
|
* 选项数据
|
68
40
|
*/
|
@@ -74,6 +46,6 @@ export interface UseCheckSelectProps {
|
|
74
46
|
/**
|
75
47
|
* 设置 data 中 id, title, disabled, children 对应的 key
|
76
48
|
*/
|
77
|
-
fieldNames?:
|
49
|
+
fieldNames?: HiBaseFieldNames;
|
78
50
|
}
|
79
51
|
export declare type UseSelectReturn = ReturnType<typeof useCheckSelect>;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@hi-ui/check-select",
|
3
|
-
"version": "4.0.0-alpha.
|
3
|
+
"version": "4.0.0-alpha.36",
|
4
4
|
"description": "A sub-package for @hi-ui/hiui.",
|
5
5
|
"keywords": [],
|
6
6
|
"author": "HIUI <mi-hiui@xiaomi.com>",
|
@@ -43,28 +43,29 @@
|
|
43
43
|
"url": "https://github.com/XiaoMi/hiui/issues"
|
44
44
|
},
|
45
45
|
"dependencies": {
|
46
|
-
"@hi-ui/checkbox": "^4.0.0-alpha.
|
46
|
+
"@hi-ui/checkbox": "^4.0.0-alpha.32",
|
47
47
|
"@hi-ui/classname": "^4.0.0-alpha.3",
|
48
|
-
"@hi-ui/core": "^4.0.0-alpha.
|
49
|
-
"@hi-ui/core-css": "^4.0.0-alpha.
|
50
|
-
"@hi-ui/env": "^4.0.0-alpha.
|
51
|
-
"@hi-ui/func-utils": "^4.0.0-alpha.
|
52
|
-
"@hi-ui/highlighter": "^4.0.0-alpha.
|
53
|
-
"@hi-ui/icons": "^4.0.0-alpha.
|
54
|
-
"@hi-ui/input": "^4.0.0-alpha.
|
55
|
-
"@hi-ui/
|
56
|
-
"@hi-ui/
|
57
|
-
"@hi-ui/
|
48
|
+
"@hi-ui/core": "^4.0.0-alpha.20",
|
49
|
+
"@hi-ui/core-css": "^4.0.0-alpha.14",
|
50
|
+
"@hi-ui/env": "^4.0.0-alpha.6",
|
51
|
+
"@hi-ui/func-utils": "^4.0.0-alpha.6",
|
52
|
+
"@hi-ui/highlighter": "^4.0.0-alpha.13",
|
53
|
+
"@hi-ui/icons": "^4.0.0-alpha.29",
|
54
|
+
"@hi-ui/input": "^4.0.0-alpha.34",
|
55
|
+
"@hi-ui/locale-context": "^4.0.0-alpha.19",
|
56
|
+
"@hi-ui/picker": "^4.0.0-alpha.19",
|
57
|
+
"@hi-ui/popper": "^4.0.0-alpha.25",
|
58
|
+
"@hi-ui/tag-input": "^4.0.0-alpha.25",
|
58
59
|
"@hi-ui/times": "^4.0.0-alpha.4",
|
59
|
-
"@hi-ui/tree-utils": "^4.0.0-alpha.
|
60
|
-
"@hi-ui/type-assertion": "^4.0.0-alpha.
|
61
|
-
"@hi-ui/use-check": "^4.0.0-alpha.
|
60
|
+
"@hi-ui/tree-utils": "^4.0.0-alpha.13",
|
61
|
+
"@hi-ui/type-assertion": "^4.0.0-alpha.14",
|
62
|
+
"@hi-ui/use-check": "^4.0.0-alpha.21",
|
62
63
|
"@hi-ui/use-children": "^4.0.0-alpha.4",
|
63
|
-
"@hi-ui/use-data-source": "^4.0.0-alpha.
|
64
|
+
"@hi-ui/use-data-source": "^4.0.0-alpha.8",
|
64
65
|
"@hi-ui/use-latest": "^4.0.0-alpha.5",
|
65
|
-
"@hi-ui/use-search-mode": "^4.0.0-alpha.
|
66
|
-
"@hi-ui/use-toggle": "^4.0.0-alpha.
|
67
|
-
"@hi-ui/use-uncontrolled-state": "^4.0.0-alpha.
|
66
|
+
"@hi-ui/use-search-mode": "^4.0.0-alpha.16",
|
67
|
+
"@hi-ui/use-toggle": "^4.0.0-alpha.12",
|
68
|
+
"@hi-ui/use-uncontrolled-state": "^4.0.0-alpha.14",
|
68
69
|
"lodash": "^4.17.21",
|
69
70
|
"rc-virtual-list": "^3.4.1"
|
70
71
|
},
|
@@ -77,5 +78,5 @@
|
|
77
78
|
"react": "^17.0.1",
|
78
79
|
"react-dom": "^17.0.1"
|
79
80
|
},
|
80
|
-
"gitHead": "
|
81
|
+
"gitHead": "420774ce836a4ead70f844c6f815b3cda0a0c7d4"
|
81
82
|
}
|