@hi-ui/check-select 5.0.0-experimental.2 → 5.0.0-experimental.4
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/lib/cjs/CheckSelect.js +45 -3
- package/lib/esm/CheckSelect.js +46 -4
- package/lib/types/CheckSelect.d.ts +7 -3
- package/lib/types/types.d.ts +15 -0
- package/package.json +1 -1
package/lib/cjs/CheckSelect.js
CHANGED
|
@@ -107,7 +107,8 @@ var CheckSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
107
107
|
renderExtraHeader = _a.renderExtraHeader,
|
|
108
108
|
classNamesProp = _a.classNames,
|
|
109
109
|
stylesProp = _a.styles,
|
|
110
|
-
|
|
110
|
+
innerRef = _a.innerRef,
|
|
111
|
+
rest = tslib.__rest(_a, ["prefixCls", "role", "className", "children", "disabled", "clearable", "showCheckAll", "showOnlyShowChecked", "placeholder", "displayRender", "onSelect", "height", "itemHeight", "virtual", "visible", "onOpen", "onClose", "onClear", "appearance", "invalid", "dataSource", "searchOnInit", "filterOption", "searchable", "render", "renderExtraFooter", "onSearch", "onItemCreate", "creatableInSearch", "fieldNames", "checkedOnEntered", "customRender", "tagInputProps", "size", "prefix", "suffix", "onKeyDown", "keyword", "clearSearchOnClosed", "label", "showIndicator", "renderExtraHeader", "classNames", "styles", "innerRef"]);
|
|
111
112
|
var _useGlobalContext = core.useGlobalContext(),
|
|
112
113
|
globalSize = _useGlobalContext.size,
|
|
113
114
|
checkSelectConfig = _useGlobalContext.checkSelect;
|
|
@@ -332,12 +333,19 @@ var CheckSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
332
333
|
setFocusedIndex(defaultIndex);
|
|
333
334
|
}, [defaultIndex, menuVisible]);
|
|
334
335
|
var renderDefaultFooter = function renderDefaultFooter() {
|
|
335
|
-
var
|
|
336
|
+
var CheckAllNode = /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
|
|
337
|
+
indeterminate: showIndeterminate,
|
|
338
|
+
checked: showAllChecked,
|
|
339
|
+
onChange: toggleCheckAll,
|
|
340
|
+
disabled: !(dropdownItems === null || dropdownItems === void 0 ? void 0 : dropdownItems.length)
|
|
341
|
+
}, i18n.get('checkSelect.checkAll'));
|
|
342
|
+
var extra = renderExtraFooter ? renderExtraFooter(CheckAllNode) : null;
|
|
336
343
|
if (showCheckAll) {
|
|
337
344
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Checkbox__default["default"], {
|
|
338
345
|
indeterminate: showIndeterminate,
|
|
339
346
|
checked: showAllChecked,
|
|
340
|
-
onChange: toggleCheckAll
|
|
347
|
+
onChange: toggleCheckAll,
|
|
348
|
+
disabled: !(dropdownItems === null || dropdownItems === void 0 ? void 0 : dropdownItems.length)
|
|
341
349
|
}, i18n.get('checkSelect.checkAll')), extra);
|
|
342
350
|
}
|
|
343
351
|
return extra;
|
|
@@ -380,6 +388,40 @@ var CheckSelect = /*#__PURE__*/React.forwardRef(function (_a, ref) {
|
|
|
380
388
|
}
|
|
381
389
|
return acc;
|
|
382
390
|
}, {});
|
|
391
|
+
React.useImperativeHandle(innerRef, function () {
|
|
392
|
+
return {
|
|
393
|
+
checkAll: function checkAll(checked) {
|
|
394
|
+
if (checked === void 0) {
|
|
395
|
+
checked = true;
|
|
396
|
+
}
|
|
397
|
+
if (checked) {
|
|
398
|
+
if (!showAllChecked) toggleCheckAll();
|
|
399
|
+
} else {
|
|
400
|
+
if (showAllChecked) toggleCheckAll();
|
|
401
|
+
}
|
|
402
|
+
},
|
|
403
|
+
showOnlyChecked: function showOnlyChecked(onlyChecked) {
|
|
404
|
+
if (onlyChecked === void 0) {
|
|
405
|
+
onlyChecked = true;
|
|
406
|
+
}
|
|
407
|
+
if (!showOnlyShowChecked) return;
|
|
408
|
+
if (disabled) return;
|
|
409
|
+
if (onlyChecked) {
|
|
410
|
+
setFilterItems(function () {
|
|
411
|
+
return mergedData.filter(function (item) {
|
|
412
|
+
return value.includes(item.id);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
menuVisibleAction.on();
|
|
416
|
+
expandedViewRef.current = 'onlyChecked';
|
|
417
|
+
} else {
|
|
418
|
+
if (filterItems) setFilterItems(null);
|
|
419
|
+
menuVisibleAction.on();
|
|
420
|
+
expandedViewRef.current = 'normal';
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
});
|
|
383
425
|
return /*#__PURE__*/React__default["default"].createElement(context.CheckSelectProvider, {
|
|
384
426
|
value: Object.assign(Object.assign({}, context$1), {
|
|
385
427
|
classNames: classNames,
|
package/lib/esm/CheckSelect.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
9
|
*/
|
|
10
10
|
import { __rest } from 'tslib';
|
|
11
|
-
import React, { forwardRef, useRef, useCallback, useMemo, useState, useEffect } from 'react';
|
|
11
|
+
import React, { forwardRef, useRef, useCallback, useMemo, useState, useEffect, useImperativeHandle } from 'react';
|
|
12
12
|
import { getPrefixCls, cx } from '@hi-ui/classname';
|
|
13
13
|
import { __DEV__ } from '@hi-ui/env';
|
|
14
14
|
import { useCheckSelect } from './use-check-select.js';
|
|
@@ -93,7 +93,8 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
93
93
|
renderExtraHeader = _a.renderExtraHeader,
|
|
94
94
|
classNamesProp = _a.classNames,
|
|
95
95
|
stylesProp = _a.styles,
|
|
96
|
-
|
|
96
|
+
innerRef = _a.innerRef,
|
|
97
|
+
rest = __rest(_a, ["prefixCls", "role", "className", "children", "disabled", "clearable", "showCheckAll", "showOnlyShowChecked", "placeholder", "displayRender", "onSelect", "height", "itemHeight", "virtual", "visible", "onOpen", "onClose", "onClear", "appearance", "invalid", "dataSource", "searchOnInit", "filterOption", "searchable", "render", "renderExtraFooter", "onSearch", "onItemCreate", "creatableInSearch", "fieldNames", "checkedOnEntered", "customRender", "tagInputProps", "size", "prefix", "suffix", "onKeyDown", "keyword", "clearSearchOnClosed", "label", "showIndicator", "renderExtraHeader", "classNames", "styles", "innerRef"]);
|
|
97
98
|
var _useGlobalContext = useGlobalContext(),
|
|
98
99
|
globalSize = _useGlobalContext.size,
|
|
99
100
|
checkSelectConfig = _useGlobalContext.checkSelect;
|
|
@@ -318,12 +319,19 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
318
319
|
setFocusedIndex(defaultIndex);
|
|
319
320
|
}, [defaultIndex, menuVisible]);
|
|
320
321
|
var renderDefaultFooter = function renderDefaultFooter() {
|
|
321
|
-
var
|
|
322
|
+
var CheckAllNode = /*#__PURE__*/React.createElement(Checkbox, {
|
|
323
|
+
indeterminate: showIndeterminate,
|
|
324
|
+
checked: showAllChecked,
|
|
325
|
+
onChange: toggleCheckAll,
|
|
326
|
+
disabled: !(dropdownItems === null || dropdownItems === void 0 ? void 0 : dropdownItems.length)
|
|
327
|
+
}, i18n.get('checkSelect.checkAll'));
|
|
328
|
+
var extra = renderExtraFooter ? renderExtraFooter(CheckAllNode) : null;
|
|
322
329
|
if (showCheckAll) {
|
|
323
330
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Checkbox, {
|
|
324
331
|
indeterminate: showIndeterminate,
|
|
325
332
|
checked: showAllChecked,
|
|
326
|
-
onChange: toggleCheckAll
|
|
333
|
+
onChange: toggleCheckAll,
|
|
334
|
+
disabled: !(dropdownItems === null || dropdownItems === void 0 ? void 0 : dropdownItems.length)
|
|
327
335
|
}, i18n.get('checkSelect.checkAll')), extra);
|
|
328
336
|
}
|
|
329
337
|
return extra;
|
|
@@ -366,6 +374,40 @@ var CheckSelect = /*#__PURE__*/forwardRef(function (_a, ref) {
|
|
|
366
374
|
}
|
|
367
375
|
return acc;
|
|
368
376
|
}, {});
|
|
377
|
+
useImperativeHandle(innerRef, function () {
|
|
378
|
+
return {
|
|
379
|
+
checkAll: function checkAll(checked) {
|
|
380
|
+
if (checked === void 0) {
|
|
381
|
+
checked = true;
|
|
382
|
+
}
|
|
383
|
+
if (checked) {
|
|
384
|
+
if (!showAllChecked) toggleCheckAll();
|
|
385
|
+
} else {
|
|
386
|
+
if (showAllChecked) toggleCheckAll();
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
showOnlyChecked: function showOnlyChecked(onlyChecked) {
|
|
390
|
+
if (onlyChecked === void 0) {
|
|
391
|
+
onlyChecked = true;
|
|
392
|
+
}
|
|
393
|
+
if (!showOnlyShowChecked) return;
|
|
394
|
+
if (disabled) return;
|
|
395
|
+
if (onlyChecked) {
|
|
396
|
+
setFilterItems(function () {
|
|
397
|
+
return mergedData.filter(function (item) {
|
|
398
|
+
return value.includes(item.id);
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
menuVisibleAction.on();
|
|
402
|
+
expandedViewRef.current = 'onlyChecked';
|
|
403
|
+
} else {
|
|
404
|
+
if (filterItems) setFilterItems(null);
|
|
405
|
+
menuVisibleAction.on();
|
|
406
|
+
expandedViewRef.current = 'normal';
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
});
|
|
369
411
|
return /*#__PURE__*/React.createElement(CheckSelectProvider, {
|
|
370
412
|
value: Object.assign(Object.assign({}, context), {
|
|
371
413
|
classNames: classNames,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { UseCheckSelectProps } from './use-check-select';
|
|
3
3
|
import type { HiBaseHTMLProps, HiBaseSizeEnum } from '@hi-ui/core';
|
|
4
|
-
import { CheckSelectAppearanceEnum, CheckSelectDataItem, CheckSelectItemEventData, CheckSelectMergedItem } from './types';
|
|
4
|
+
import { CheckSelectAppearanceEnum, CheckSelectDataItem, CheckSelectItemEventData, CheckSelectMergedItem, CheckSelectHelper } from './types';
|
|
5
5
|
import { TagInputMockProps } from '@hi-ui/tag-input';
|
|
6
6
|
import { PickerProps, PickerSemanticName } from '@hi-ui/picker';
|
|
7
7
|
import type { ComponentSemantic, SemanticClassNamesType, SemanticStylesType } from '@hi-ui/use-merge-semantic';
|
|
@@ -14,7 +14,7 @@ export type CheckSelectSemanticName = PickerSemanticName | 'option' | 'optionGro
|
|
|
14
14
|
export type CheckSelectSemanticClassNames = SemanticClassNamesType<CheckSelectProps, CheckSelectSemanticName>;
|
|
15
15
|
export type CheckSelectSemanticStyles = SemanticStylesType<CheckSelectProps, CheckSelectSemanticName>;
|
|
16
16
|
export type CheckSelectSemantic = ComponentSemantic<CheckSelectSemanticClassNames, CheckSelectSemanticStyles>;
|
|
17
|
-
export interface CheckSelectProps extends Omit<PickerProps, 'trigger' | 'scrollable' | 'header' | 'footer' | 'classNames' | 'styles'>, UseCheckSelectProps, CheckSelectSemantic {
|
|
17
|
+
export interface CheckSelectProps extends Omit<PickerProps, 'trigger' | 'scrollable' | 'header' | 'footer' | 'classNames' | 'styles' | 'innerRef'>, UseCheckSelectProps, CheckSelectSemantic {
|
|
18
18
|
/**
|
|
19
19
|
* 设置虚拟滚动容器的可视高度。暂不对外暴露
|
|
20
20
|
* @private
|
|
@@ -86,7 +86,7 @@ export interface CheckSelectProps extends Omit<PickerProps, 'trigger' | 'scrolla
|
|
|
86
86
|
/**
|
|
87
87
|
* 自定义下拉菜单底部渲染
|
|
88
88
|
*/
|
|
89
|
-
renderExtraFooter?: () => React.ReactNode;
|
|
89
|
+
renderExtraFooter?: (CheckAllNode?: React.ReactNode) => React.ReactNode;
|
|
90
90
|
/**
|
|
91
91
|
* 自定义下拉菜单顶部渲染
|
|
92
92
|
*/
|
|
@@ -143,6 +143,10 @@ export interface CheckSelectProps extends Omit<PickerProps, 'trigger' | 'scrolla
|
|
|
143
143
|
* 是否展示箭头
|
|
144
144
|
*/
|
|
145
145
|
showIndicator?: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* 提供辅助方法的内部引用
|
|
148
|
+
*/
|
|
149
|
+
innerRef?: React.Ref<CheckSelectHelper>;
|
|
146
150
|
}
|
|
147
151
|
export declare const CheckSelectOption: React.ForwardRefExoticComponent<Pick<CheckSelectOptionProps, keyof CheckSelectOptionProps> & React.RefAttributes<HTMLDivElement | null>>;
|
|
148
152
|
export interface CheckSelectOptionProps extends HiBaseHTMLProps {
|
package/lib/types/types.d.ts
CHANGED
|
@@ -50,3 +50,18 @@ export interface FlattedCheckSelectDataItem extends CheckSelectDataItem {
|
|
|
50
50
|
export interface CheckSelectItemEventData extends FlattedCheckSelectDataItem, CheckSelectRequiredProps {
|
|
51
51
|
}
|
|
52
52
|
export type CheckSelectAppearanceEnum = HiBaseAppearanceEnum | 'contained' | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* CheckSelect 通过 innerRef 暴露的辅助方法
|
|
55
|
+
*/
|
|
56
|
+
export interface CheckSelectHelper {
|
|
57
|
+
/**
|
|
58
|
+
* 全选/取消全选当前列表中的可选项
|
|
59
|
+
* @param checked 默认 true:全选 (非全选状态下);传 false 时取消全选 (全选状态下)
|
|
60
|
+
*/
|
|
61
|
+
checkAll: (checked?: boolean) => void;
|
|
62
|
+
/**
|
|
63
|
+
* 仅显示已选 / 显示全部
|
|
64
|
+
* @param onlyChecked 默认 true:仅显示已选项并打开下拉;传 false 时显示全部并打开下拉
|
|
65
|
+
*/
|
|
66
|
+
showOnlyChecked: (onlyChecked?: boolean) => void;
|
|
67
|
+
}
|