@apdesign/web-react 1.3.3 → 1.4.0

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.
Files changed (41) hide show
  1. package/dist/arco-icon.min.js +1 -1
  2. package/dist/arco.development.js +9 -9
  3. package/dist/arco.min.js +2 -2
  4. package/es/Button/index.d.ts +3 -3
  5. package/es/DatePicker/picker-range.d.ts +1 -1
  6. package/es/DatePicker/util.d.ts +1 -1
  7. package/es/Menu/context.d.ts +1 -1
  8. package/es/Select/option.js +6 -3
  9. package/es/Select/select.js +21 -5
  10. package/es/Tree/index.js +15 -0
  11. package/es/TreeSelect/hook/useStateValue.d.ts +1 -1
  12. package/es/TreeSelect/hook/useStateValue.js +44 -3
  13. package/es/TreeSelect/interface.d.ts +6 -0
  14. package/es/TreeSelect/tree-list.d.ts +1 -0
  15. package/es/TreeSelect/tree-list.js +38 -3
  16. package/es/TreeSelect/tree-select.js +57 -11
  17. package/es/_util/constant.d.ts +1 -1
  18. package/es/index.d.ts +1 -1
  19. package/es/index.js +1 -1
  20. package/es/locale/en-US.d.ts +5 -0
  21. package/es/locale/en-US.js +5 -0
  22. package/es/locale/interface.d.ts +1 -0
  23. package/es/locale/zh-CN.d.ts +5 -0
  24. package/es/locale/zh-CN.js +5 -0
  25. package/lib/Select/option.js +5 -2
  26. package/lib/Select/select.js +20 -4
  27. package/lib/Tree/index.js +15 -0
  28. package/lib/TreeSelect/hook/useStateValue.d.ts +1 -1
  29. package/lib/TreeSelect/hook/useStateValue.js +44 -3
  30. package/lib/TreeSelect/interface.d.ts +6 -0
  31. package/lib/TreeSelect/tree-list.d.ts +1 -0
  32. package/lib/TreeSelect/tree-list.js +37 -2
  33. package/lib/TreeSelect/tree-select.js +57 -11
  34. package/lib/index.d.ts +1 -1
  35. package/lib/index.js +1 -1
  36. package/lib/locale/en-US.d.ts +5 -0
  37. package/lib/locale/en-US.js +5 -0
  38. package/lib/locale/interface.d.ts +1 -0
  39. package/lib/locale/zh-CN.d.ts +5 -0
  40. package/lib/locale/zh-CN.js +5 -0
  41. package/package.json +1 -1
@@ -100,7 +100,7 @@ var defaultProps = {
100
100
  };
101
101
  var triggerPopupAlign = { bottom: 4 };
102
102
  function Select(baseProps, ref) {
103
- var _a = (0, react_1.useContext)(ConfigProvider_1.ConfigContext), getPrefixCls = _a.getPrefixCls, renderEmpty = _a.renderEmpty, componentConfig = _a.componentConfig, rtl = _a.rtl;
103
+ var _a = (0, react_1.useContext)(ConfigProvider_1.ConfigContext), getPrefixCls = _a.getPrefixCls, renderEmpty = _a.renderEmpty, componentConfig = _a.componentConfig, rtl = _a.rtl, locale = _a.locale;
104
104
  var props = (0, useMergeProps_1.default)(baseProps, defaultProps, componentConfig === null || componentConfig === void 0 ? void 0 : componentConfig.Select);
105
105
  var children = props.children, renderFormat = props.renderFormat, defaultActiveFirstOption = props.defaultActiveFirstOption, disabled = props.disabled, unmountOnExit = props.unmountOnExit, notFoundContent = props.notFoundContent, showSearch = props.showSearch, tokenSeparators = props.tokenSeparators, options = props.options, filterOption = props.filterOption, labelInValue = props.labelInValue, getPopupContainer = props.getPopupContainer, isQuickSingleSelectMode = props.isQuickSingleSelectMode, trigger = props.trigger, triggerElement = props.triggerElement, triggerProps = props.triggerProps, dropdownRender = props.dropdownRender, dropdownMenuStyle = props.dropdownMenuStyle, dropdownMenuClassName = props.dropdownMenuClassName, virtualListProps = props.virtualListProps,
106
106
  // events
@@ -170,6 +170,8 @@ function Select(baseProps, ref) {
170
170
  var refPopupExiting = (0, react_1.useRef)(false);
171
171
  // Unique ID of this select instance
172
172
  var instancePopupID = (0, useId_1.default)(prefixCls + "-popup-");
173
+ // 添加一个 ref 来跟踪 props.value 的前一个值
174
+ var prevValueRef = (0, react_1.useRef)(props.value);
173
175
  var isNoOptionSelected = (0, utils_1.isEmptyValue)(value, isMultipleMode);
174
176
  var valueActiveDefault = (0, react_1.useMemo)(function () {
175
177
  var _a, _b;
@@ -237,6 +239,20 @@ function Select(baseProps, ref) {
237
239
  setProxyValue(value.length === 0 ? undefined : value[0]);
238
240
  }
239
241
  }, [isMultipleMode, value]);
242
+ (0, react_1.useEffect)(function () {
243
+ if (isMultipleQuickSelectMode) {
244
+ // 判断 props.value 之前有值现在被手动设置为 undefined 或者 []
245
+ var hadValueBefore = !(0, is_1.isNullOrUndefined)(prevValueRef.current) &&
246
+ !(Array.isArray(prevValueRef.current) && prevValueRef.current.length === 0);
247
+ var isEmptyNow = (0, is_1.isNullOrUndefined)(props.value) || (Array.isArray(props.value) && props.value.length === 0);
248
+ if (hadValueBefore && isEmptyNow) {
249
+ setValue((0, utils_1.getValidValue)(props.value, isMultipleMode, labelInValue));
250
+ setProxyValue((0, utils_1.getValidValue)(props.value, isMultipleMode, labelInValue));
251
+ }
252
+ // 更新 ref 以保存当前值用于下次比较
253
+ prevValueRef.current = props.value;
254
+ }
255
+ }, [props.value, isMultipleQuickSelectMode]);
240
256
  // 选项下拉框显示/隐藏时的一些自动行为
241
257
  (0, react_1.useEffect)(function () {
242
258
  if (popupVisible) {
@@ -525,7 +541,7 @@ function Select(baseProps, ref) {
525
541
  ]));
526
542
  var renderPopup = function () {
527
543
  var _a;
528
- var _b, _c;
544
+ var _b, _c, _d, _e;
529
545
  // 没有设置弹出框的 width 时,需要在虚拟列表渲染的瞬间获得子元素的最大宽度
530
546
  var needMeasureLongestItem = (triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.autoAlignPopupWidth) === false &&
531
547
  (!((_b = triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.style) === null || _b === void 0 ? void 0 : _b.width) || ((_c = triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.style) === null || _c === void 0 ? void 0 : _c.width) === 'auto');
@@ -578,8 +594,8 @@ function Select(baseProps, ref) {
578
594
  padding: '8px 16px 4px',
579
595
  borderTop: '1px solid var(--color-fill-3)',
580
596
  } },
581
- react_1.default.createElement(index_1.Button, { size: "mini", onClick: cancelCheck }, "\u53D6\u6D88"),
582
- react_1.default.createElement(index_1.Button, { type: "primary", size: "mini", onClick: confirmCheck }, "\u786E\u5B9A"))))) : null;
597
+ react_1.default.createElement(index_1.Button, { size: "mini", onClick: cancelCheck }, (_d = locale.Select) === null || _d === void 0 ? void 0 : _d.cancelText),
598
+ react_1.default.createElement(index_1.Button, { type: "primary", size: "mini", onClick: confirmCheck }, (_e = locale.Select) === null || _e === void 0 ? void 0 : _e.okText))))) : null;
583
599
  // Avoid drop-down box jitter when user is creating a selection
584
600
  var isUserCreating = allowCreate && inputValue;
585
601
  // Dropdown-placeholder when there is no options
package/lib/Tree/index.js CHANGED
@@ -130,6 +130,21 @@ var ConfigProvider_1 = require("../ConfigProvider");
130
130
  var util_1 = require("./util");
131
131
  var context_1 = require("./context");
132
132
  var pick_1 = require("../_util/pick");
133
+ var style = document.createElement('style');
134
+ document.head.appendChild(style);
135
+ // 动态写入 hover 样式
136
+ var rules = [
137
+ ".arco-tree-node:hover .arco-tree-select-extra-QuickSingleSelect-button { display: block !important; }",
138
+ ];
139
+ rules.forEach(function (rule) {
140
+ try {
141
+ var styleSheet = style.sheet;
142
+ style.sheet.insertRule(rule, styleSheet.cssRules.length);
143
+ }
144
+ catch (e) {
145
+ console.error('插入 CSS 规则失败:', rule, e);
146
+ }
147
+ });
133
148
  var DefaultFieldNames = {
134
149
  key: 'key',
135
150
  title: 'title',
@@ -15,5 +15,5 @@ declare const useStateValue: (props: TreeSelectProps, key2nodeProps: KeyCacheTyp
15
15
  trigger?: NodeProps;
16
16
  checked?: boolean;
17
17
  selected?: boolean;
18
- }) => void];
18
+ }) => void, LabelValue[], () => void, () => void];
19
19
  export default useStateValue;
@@ -26,6 +26,15 @@ var __read = (this && this.__read) || function (o, n) {
26
26
  }
27
27
  return ar;
28
28
  };
29
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31
+ if (ar || !(i in from)) {
32
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33
+ ar[i] = from[i];
34
+ }
35
+ }
36
+ return to.concat(ar || Array.prototype.slice.call(from));
37
+ };
29
38
  var __importDefault = (this && this.__importDefault) || function (mod) {
30
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
31
40
  };
@@ -88,6 +97,8 @@ var getInitCheckKeys = function (keys, key2nodeProps, indeterminateKeys, props)
88
97
  return keys;
89
98
  };
90
99
  var useStateValue = function (props, key2nodeProps, indeterminateKeys) {
100
+ var multiple = props.multiple || props.treeCheckable;
101
+ var isMultipleQuickSelectMode = multiple && props.isQuickSingleSelectMode;
91
102
  var valueCopy = (0, react_1.useRef)([]);
92
103
  var calcValue = function () {
93
104
  var propsValue = props.value || props.defaultValue || [];
@@ -100,10 +111,18 @@ var useStateValue = function (props, key2nodeProps, indeterminateKeys) {
100
111
  return (0, exports.parseValue)(propsValue, key2nodeProps);
101
112
  };
102
113
  var _a = __read((0, react_1.useState)(calcValue), 2), value = _a[0], _setValue = _a[1];
114
+ // proxyValue 在isMultipleQuickSelectMode时候挡在真实value前面进行展示,真实的value只在确定时候更新。 proxyValue 必须和原有的value行为一致
115
+ var _b = __read((0, react_1.useState)(value), 2), proxyValue = _b[0], _setProxyValue = _b[1];
116
+ var proxyValueCopy = (0, react_1.useRef)(value);
117
+ var stateValue = isMultipleQuickSelectMode ? proxyValue : value;
103
118
  var setValue = function (value) {
104
119
  valueCopy.current = value;
105
120
  _setValue(value);
106
121
  };
122
+ var setProxyValue = function (value) {
123
+ proxyValueCopy.current = value;
124
+ _setProxyValue(value);
125
+ };
107
126
  (0, useUpdate_1.default)(function () {
108
127
  var nextValue = calcValue();
109
128
  if ('value' in props) {
@@ -111,10 +130,12 @@ var useStateValue = function (props, key2nodeProps, indeterminateKeys) {
111
130
  // 以外部传入为准,只比较value
112
131
  if (!(0, isEqualWith_1.default)((0, utils_1.normalizeValueToArray)(value), (0, utils_1.normalizeValueToArray)(nextValue))) {
113
132
  setValue(nextValue);
133
+ setProxyValue(nextValue);
114
134
  }
115
135
  }
116
136
  else if (!(0, isEqualWith_1.default)(value, nextValue)) {
117
137
  setValue(nextValue);
138
+ setProxyValue(nextValue);
118
139
  }
119
140
  }
120
141
  }, [
@@ -124,10 +145,14 @@ var useStateValue = function (props, key2nodeProps, indeterminateKeys) {
124
145
  props.value,
125
146
  key2nodeProps,
126
147
  ]);
148
+ var extra = (0, react_1.useRef)(null);
127
149
  var setStateValue = (0, react_1.useCallback)(function (newValue, extra) {
128
150
  var onChange = props.onChange, labelInValue = props.labelInValue;
129
151
  var multiple = props.multiple || props.treeCheckable;
130
- if (!('value' in props)) {
152
+ if (isMultipleQuickSelectMode) {
153
+ setProxyValue(newValue);
154
+ }
155
+ if (!('value' in props) && !isMultipleQuickSelectMode) {
131
156
  setValue(newValue);
132
157
  }
133
158
  var tmp;
@@ -139,8 +164,24 @@ var useStateValue = function (props, key2nodeProps, indeterminateKeys) {
139
164
  else {
140
165
  tmp = labelInValue ? newValue[0] : newValue[0] && newValue[0].value;
141
166
  }
142
- onChange && onChange(tmp, extra);
167
+ if (isMultipleQuickSelectMode) {
168
+ extra.current = extra;
169
+ }
170
+ else {
171
+ onChange && onChange(tmp, extra);
172
+ }
143
173
  }, [props.onChange, props.labelInValue, props.multiple, props.treeCheckable, props.value]);
144
- return [value, setStateValue];
174
+ var confirmSetValue = function () {
175
+ var onChange = props.onChange, labelInValue = props.labelInValue;
176
+ setValue(__spreadArray([], __read(proxyValueCopy.current), false));
177
+ var tmp = proxyValueCopy.current.map(function (x) {
178
+ return labelInValue ? { label: x.label, value: x.value } : x.value;
179
+ });
180
+ onChange && onChange(tmp, extra.current);
181
+ };
182
+ var cancelSetValue = function () {
183
+ setProxyValue(value);
184
+ };
185
+ return [stateValue, setStateValue, value, confirmSetValue, cancelSetValue];
145
186
  };
146
187
  exports.default = useStateValue;
@@ -19,6 +19,12 @@ export interface TreeSelectProps extends SelectViewCommonProps {
19
19
  * @en Whether to select multiple
20
20
  */
21
21
  multiple?: boolean;
22
+ /**
23
+ * @zh 是否开启快速单选模式。开启后,由于需要最后点击确定或者取消来选择,单个选项变化的事件将无效
24
+ * @en Whether to enable quick single selection mode.
25
+ * @defaultValue true
26
+ */
27
+ isQuickSingleSelectMode?: boolean;
22
28
  /**
23
29
  * @zh 选择框的默认值
24
30
  * @en The key of node selected by default
@@ -7,6 +7,7 @@ interface TreeListProps extends TreeSelectProps {
7
7
  filterNode: TreeProps['filterNode'];
8
8
  inputValue?: string;
9
9
  prefixCls?: string;
10
+ confirmCheck: () => void;
10
11
  }
11
12
  declare const _default: React.ForwardRefExoticComponent<TreeListProps & React.RefAttributes<unknown>>;
12
13
  export default _default;
@@ -61,10 +61,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
61
61
  var react_1 = __importStar(require("react"));
62
62
  var Tree_1 = __importDefault(require("../Tree"));
63
63
  var is_1 = require("../_util/is");
64
+ var ConfigProvider_1 = require("../ConfigProvider");
64
65
  function TreeList(props, ref) {
65
- var value = props.value, multiple = props.multiple, loadMore = props.loadMore, treeCheckedStrategy = props.treeCheckedStrategy, treeCheckStrictly = props.treeCheckStrictly, treeData = props.treeData, treeProps = props.treeProps, prefixCls = props.prefixCls, treeCheckable = props.treeCheckable;
66
+ var value = props.value, multiple = props.multiple, isQuickSingleSelectMode = props.isQuickSingleSelectMode, loadMore = props.loadMore, treeCheckedStrategy = props.treeCheckedStrategy, treeCheckStrictly = props.treeCheckStrictly, treeData = props.treeData, treeProps = props.treeProps, prefixCls = props.prefixCls, treeCheckable = props.treeCheckable, confirmCheck = props.confirmCheck;
67
+ var locale = (0, react_1.useContext)(ConfigProvider_1.ConfigContext).locale;
66
68
  var propsRenderTitle = treeProps && treeProps.renderTitle;
69
+ var propsRenderExtra = treeProps && treeProps.renderExtra;
67
70
  var treeRef = (0, react_1.useRef)();
71
+ var isMultipleQuickSelectMode = multiple && isQuickSingleSelectMode;
68
72
  var handleCheck = (0, react_1.useCallback)(function (keys, _a) {
69
73
  var checkedNodes = _a.checkedNodes, checked = _a.checked, node = _a.node;
70
74
  var newValue = keys.map(function (key) {
@@ -144,6 +148,37 @@ function TreeList(props, ref) {
144
148
  }
145
149
  return title;
146
150
  }, [prefixCls, props.inputValue, propsRenderTitle]);
151
+ var renderExtra = (0, react_1.useCallback)(function (nodeProps) {
152
+ var _a;
153
+ if (isMultipleQuickSelectMode) {
154
+ if (propsRenderExtra) {
155
+ console.warn('renderExtra is not recommended for use in quick single select mode');
156
+ }
157
+ return (react_1.default.createElement(react_1.default.Fragment, null,
158
+ react_1.default.createElement("span", { className: prefixCls + "-extra-QuickSingleSelect-button", style: {
159
+ position: 'absolute',
160
+ right: 0,
161
+ display: 'none',
162
+ backgroundColor: 'rgb(var(--primary-6))',
163
+ cursor: 'pointer',
164
+ color: 'white',
165
+ padding: '6px',
166
+ fontSize: 12,
167
+ paddingLeft: '20px',
168
+ clipPath: 'polygon(12px 50%, 0% 0%, 100% 0%, 100% 100%, 0% 100%)',
169
+ whiteSpace: 'nowrap',
170
+ }, onClick: function () {
171
+ handleCheck([nodeProps._key], {
172
+ checkedNodes: [],
173
+ checked: true,
174
+ node: { props: nodeProps },
175
+ });
176
+ confirmCheck();
177
+ } }, (_a = locale.Select) === null || _a === void 0 ? void 0 : _a.filterThisItemOnly), propsRenderExtra === null || propsRenderExtra === void 0 ? void 0 :
178
+ propsRenderExtra(nodeProps)));
179
+ }
180
+ return propsRenderExtra === null || propsRenderExtra === void 0 ? void 0 : propsRenderExtra(nodeProps);
181
+ }, [propsRenderExtra, isMultipleQuickSelectMode]);
147
182
  var extraProps = (0, react_1.useMemo)(function () {
148
183
  return props.treeCheckable
149
184
  ? {
@@ -163,6 +198,6 @@ function TreeList(props, ref) {
163
198
  }, []);
164
199
  return (react_1.default.createElement(Tree_1.default, __assign({ ref: treeRef, size: props.size, blockNode: true, filterNode: props.filterNode }, treeProps, { checkable: treeCheckable, multiple: multiple, loadMore: props.loadMore ? handleLoadMore : undefined, checkedStrategy: treeCheckedStrategy, checkStrictly: treeCheckStrictly, onMouseDown: function (e) {
165
200
  e.preventDefault();
166
- } }, extraProps, { treeData: treeData, fieldNames: props.fieldNames, renderTitle: renderTitle, onSelect: onSelect, selectedKeys: selectedKeys })));
201
+ } }, extraProps, { treeData: treeData, fieldNames: props.fieldNames, renderTitle: renderTitle, renderExtra: renderExtra, onSelect: onSelect, selectedKeys: selectedKeys })));
167
202
  }
168
203
  exports.default = (0, react_1.forwardRef)(TreeList);
@@ -113,6 +113,7 @@ var classNames_1 = __importDefault(require("../_util/classNames"));
113
113
  var useMergeProps_1 = __importDefault(require("../_util/hooks/useMergeProps"));
114
114
  var useIsFirstRender_1 = __importDefault(require("../_util/hooks/useIsFirstRender"));
115
115
  var useId_1 = __importDefault(require("../_util/hooks/useId"));
116
+ var Button_1 = __importDefault(require("../Button"));
116
117
  function isEmptyValue(value) {
117
118
  return (!value ||
118
119
  ((0, is_1.isArray)(value) && value.length === 0) ||
@@ -122,10 +123,11 @@ var defaultProps = {
122
123
  bordered: true,
123
124
  treeCheckedStrategy: Tree_1.default.SHOW_CHILD,
124
125
  fieldNames: interface_1.DefaultFieldNames,
126
+ isQuickSingleSelectMode: true,
125
127
  };
126
128
  var triggerPopupAlign = { bottom: 4 };
127
129
  var TreeSelect = function (baseProps, ref) {
128
- var _a = (0, react_1.useContext)(ConfigProvider_1.ConfigContext), getPrefixCls = _a.getPrefixCls, renderEmpty = _a.renderEmpty, componentConfig = _a.componentConfig, rtl = _a.rtl;
130
+ var _a = (0, react_1.useContext)(ConfigProvider_1.ConfigContext), getPrefixCls = _a.getPrefixCls, renderEmpty = _a.renderEmpty, componentConfig = _a.componentConfig, rtl = _a.rtl, locale = _a.locale;
129
131
  var props = (0, useMergeProps_1.default)(baseProps, defaultProps, componentConfig === null || componentConfig === void 0 ? void 0 : componentConfig.TreeSelect);
130
132
  var refIsFirstRender = (0, useIsFirstRender_1.default)();
131
133
  var triggerRef = (0, react_1.useRef)();
@@ -147,8 +149,9 @@ var TreeSelect = function (baseProps, ref) {
147
149
  // 触发 onInputValueChange 回调的原因
148
150
  var refOnInputChangeCallbackReason = (0, react_1.useRef)(null);
149
151
  var onInputValueChange = props.onInputValueChange;
150
- var _f = __read((0, useStateValue_1.default)(props, key2nodeProps, indeterminateKeys), 2), value = _f[0], setValue = _f[1];
151
152
  var multiple = props.multiple || props.treeCheckable;
153
+ var isMultipleQuickSelectMode = multiple && props.isQuickSingleSelectMode;
154
+ var _f = __read((0, useStateValue_1.default)(props, key2nodeProps, indeterminateKeys), 5), value = _f[0], setValue = _f[1], realValue = _f[2], confirmSetValue = _f[3], cancelSetValue = _f[4];
152
155
  var prefixCls = getPrefixCls('tree-select');
153
156
  var isFilterNode = inputValue && !(0, is_1.isFunction)(props.onSearch);
154
157
  // Unique ID of this select instance
@@ -158,6 +161,9 @@ var TreeSelect = function (baseProps, ref) {
158
161
  if (visible !== popupVisible) {
159
162
  setPopupVisible(visible);
160
163
  (_a = props.onVisibleChange) === null || _a === void 0 ? void 0 : _a.call(props, visible);
164
+ if (isMultipleQuickSelectMode && !visible) {
165
+ cancelSetValue();
166
+ }
161
167
  }
162
168
  };
163
169
  // 尝试更新 inputValue,并触发 onInputValueChange
@@ -230,6 +236,13 @@ var TreeSelect = function (baseProps, ref) {
230
236
  tryUpdatePopupVisible(false);
231
237
  }
232
238
  }, [setValue, resetInputValue, popupVisible]);
239
+ var cancelCheck = function () {
240
+ tryUpdatePopupVisible(false);
241
+ };
242
+ var confirmCheck = function () {
243
+ confirmSetValue();
244
+ tryUpdatePopupVisible(false);
245
+ };
233
246
  var handleRemoveCheckedItem = function (item, index, e) {
234
247
  e.stopPropagation();
235
248
  if (item.disabled) {
@@ -237,21 +250,31 @@ var TreeSelect = function (baseProps, ref) {
237
250
  }
238
251
  var itemValue = (0, is_1.isObject)(item.value) ? item.value.value : item.value;
239
252
  if (!props.treeCheckable || props.treeCheckStrictly || !key2nodeProps[itemValue]) {
240
- var newValue = value.filter(function (_, i) { return i !== index; });
253
+ var newValue = realValue.filter(function (_, i) { return i !== index; });
241
254
  triggerChange(newValue, {
242
255
  trigger: key2nodeProps[itemValue] || item,
243
256
  checked: false,
244
257
  selected: false,
245
258
  });
259
+ if (isMultipleQuickSelectMode) {
260
+ setTimeout(function () {
261
+ confirmCheck();
262
+ }, 0);
263
+ }
246
264
  return;
247
265
  }
248
- var result = (0, util_1.getAllCheckedKeysByCheck)(itemValue, false, (0, utils_1.normalizeValueToArray)(value), key2nodeProps, indeterminateKeys.current);
266
+ var result = (0, util_1.getAllCheckedKeysByCheck)(itemValue, false, (0, utils_1.normalizeValueToArray)(realValue), key2nodeProps, indeterminateKeys.current);
249
267
  indeterminateKeys.current = result.indeterminateKeys;
250
- triggerChange((0, useStateValue_1.parseValue)(result.checkedKeys, key2nodeProps, value), {
268
+ triggerChange((0, useStateValue_1.parseValue)(result.checkedKeys, key2nodeProps, realValue), {
251
269
  trigger: key2nodeProps[itemValue],
252
270
  checked: false,
253
271
  selected: false,
254
272
  });
273
+ if (isMultipleQuickSelectMode) {
274
+ setTimeout(function () {
275
+ confirmCheck();
276
+ }, 0);
277
+ }
255
278
  };
256
279
  (0, react_1.useEffect)(function () {
257
280
  inputValue !== undefined && handleSearch(inputValue);
@@ -314,12 +337,35 @@ var TreeSelect = function (baseProps, ref) {
314
337
  var renderView = function (eleView) {
315
338
  return (react_1.default.createElement(Trigger_1.default, __assign({ autoAlignPopupWidth: false, autoAlignPopupMinWidth: true, ref: triggerRef, classNames: "slideDynamicOrigin", trigger: "click", position: "bl", getPopupContainer: props.getPopupContainer, popupAlign: triggerPopupAlign, unmountOnExit: props.unmountOnExit }, props.triggerProps, { className: (0, classNames_1.default)(prefixCls + "-trigger", props.triggerProps && props.triggerProps.className), popup: function () {
316
339
  var _a;
317
- var _b, _c, _d;
340
+ var _b, _c, _d, _e, _f;
318
341
  var dropdownRender = props.dropdownRender;
319
- var dom = (isFilterNode && isEmptyValue(searchKeys)) || isEmptyValue(treeData) ? (props.notFoundContent || renderEmpty('TreeSelect')) : (react_1.default.createElement(tree_list_1.default, __assign({ prefixCls: prefixCls, ref: treeRef }, props, { inputValue: inputValue, filterNode: filterNode, value: value, onChange: triggerChange, multiple: multiple, treeData: treeData })));
320
- return (react_1.default.createElement("div", { id: instancePopupID, className: (0, classNames_1.default)(prefixCls + "-popup", (_a = {}, _a[prefixCls + "-rtl-popup"] = rtl, _a)), style: __assign({ maxHeight: ((_b = props.treeProps) === null || _b === void 0 ? void 0 : _b.height) || ((_d = (_c = props.treeProps) === null || _c === void 0 ? void 0 : _c.virtualListProps) === null || _d === void 0 ? void 0 : _d.height)
342
+ var treeListDom = (react_1.default.createElement(tree_list_1.default, __assign({ prefixCls: prefixCls, ref: treeRef }, props, { inputValue: inputValue, filterNode: filterNode, value: value, onChange: triggerChange, multiple: multiple, treeData: treeData, confirmCheck: confirmCheck })));
343
+ var dom = (isFilterNode && isEmptyValue(searchKeys)) || isEmptyValue(treeData) ? (props.notFoundContent || renderEmpty('TreeSelect')) : isMultipleQuickSelectMode ? (react_1.default.createElement("div", { style: {
344
+ maxHeight: 188,
345
+ display: 'flex',
346
+ flexDirection: 'column',
347
+ } },
348
+ react_1.default.createElement("div", { style: { flex: 1, overflowY: 'auto' } }, treeListDom),
349
+ react_1.default.createElement("div", { style: {
350
+ flex: 'none',
351
+ display: 'flex',
352
+ justifyContent: 'flex-end',
353
+ gap: 12,
354
+ padding: '8px 16px 4px',
355
+ borderTop: '1px solid var(--color-fill-3)',
356
+ } },
357
+ react_1.default.createElement(Button_1.default, { size: "mini", onClick: cancelCheck }, (_b = locale.Select) === null || _b === void 0 ? void 0 : _b.cancelText),
358
+ react_1.default.createElement(Button_1.default, { type: "primary", size: "mini", onClick: function () {
359
+ confirmCheck();
360
+ } }, (_c = locale.Select) === null || _c === void 0 ? void 0 : _c.okText)))) : (treeListDom);
361
+ var wrapStyle = isMultipleQuickSelectMode
362
+ ? {
363
+ overflow: 'hidden',
364
+ }
365
+ : {};
366
+ return (react_1.default.createElement("div", { id: instancePopupID, className: (0, classNames_1.default)(prefixCls + "-popup", (_a = {}, _a[prefixCls + "-rtl-popup"] = rtl, _a)), style: __assign(__assign({ maxHeight: ((_d = props.treeProps) === null || _d === void 0 ? void 0 : _d.height) || ((_f = (_e = props.treeProps) === null || _e === void 0 ? void 0 : _e.virtualListProps) === null || _f === void 0 ? void 0 : _f.height)
321
367
  ? 'unset'
322
- : '' }, props.dropdownMenuStyle) }, (0, is_1.isFunction)(dropdownRender) ? dropdownRender(dom) : dom));
368
+ : '' }, wrapStyle), props.dropdownMenuStyle) }, (0, is_1.isFunction)(dropdownRender) ? dropdownRender(dom) : dom));
323
369
  }, disabled: props.disabled, onVisibleChange: function (visible) {
324
370
  tryUpdatePopupVisible(visible);
325
371
  // props.onVisibleChange && props.onVisibleChange(visible);
@@ -340,9 +386,9 @@ var TreeSelect = function (baseProps, ref) {
340
386
  return props.triggerElement({ value: valueForCallback });
341
387
  })()
342
388
  : props.triggerElement;
343
- return !(0, is_1.isNullOrUndefined)(customTriggerElement) ? (renderView(customTriggerElement)) : (react_1.default.createElement(select_view_1.default, __assign({ ref: refSelectView, rtl: rtl, ariaControls: instancePopupID }, props, { popupVisible: popupVisible, value: !multiple && (0, is_1.isArray)(value) ? value[0] : value, inputValue: inputValue,
389
+ return !(0, is_1.isNullOrUndefined)(customTriggerElement) ? (renderView(customTriggerElement)) : (react_1.default.createElement(select_view_1.default, __assign({ ref: refSelectView, rtl: rtl, ariaControls: instancePopupID }, props, { popupVisible: popupVisible, value: !multiple && (0, is_1.isArray)(realValue) ? realValue[0] : realValue, inputValue: inputValue,
344
390
  // other
345
- isEmptyValue: isEmptyValue(value), prefixCls: prefixCls, isMultiple: multiple, renderText: renderText, onSort: tryUpdateSelectValue, onRemoveCheckedItem: handleRemoveCheckedItem, onClear: function (e) {
391
+ isEmptyValue: isEmptyValue(realValue), prefixCls: prefixCls, isMultiple: multiple, renderText: renderText, onSort: tryUpdateSelectValue, onRemoveCheckedItem: handleRemoveCheckedItem, onClear: function (e) {
346
392
  var _a;
347
393
  e.stopPropagation();
348
394
  triggerChange([], {});
package/lib/index.d.ts CHANGED
@@ -139,4 +139,4 @@ export type { WatermarkProps } from './Watermark/interface';
139
139
  export { default as Watermark } from './Watermark';
140
140
  export type { ImageProps, ImagePreviewProps, ImagePreviewActionProps, ImagePreviewGroupProps } from './Image/interface';
141
141
  export { default as Image } from './Image';
142
- export declare const version = "1.3.3";
142
+ export declare const version = "1.4.0";
package/lib/index.js CHANGED
@@ -147,4 +147,4 @@ var Watermark_1 = require("./Watermark");
147
147
  Object.defineProperty(exports, "Watermark", { enumerable: true, get: function () { return __importDefault(Watermark_1).default; } });
148
148
  var Image_1 = require("./Image");
149
149
  Object.defineProperty(exports, "Image", { enumerable: true, get: function () { return __importDefault(Image_1).default; } });
150
- exports.version = '1.3.3';
150
+ exports.version = '1.4.0';
@@ -230,5 +230,10 @@ declare const _default: {
230
230
  preset: string;
231
231
  empty: string;
232
232
  };
233
+ Select: {
234
+ cancelText: string;
235
+ okText: string;
236
+ filterThisItemOnly: string;
237
+ };
233
238
  };
234
239
  export default _default;
@@ -171,4 +171,9 @@ exports.default = {
171
171
  preset: 'Preset Colors',
172
172
  empty: 'Empty',
173
173
  },
174
+ Select: {
175
+ cancelText: 'Cancel',
176
+ okText: 'OK',
177
+ filterThisItemOnly: 'Filter this item only',
178
+ },
174
179
  };
@@ -34,6 +34,7 @@ export interface Locale {
34
34
  Transfer: Record<string, any>;
35
35
  ImagePreview: Record<string, any>;
36
36
  Form?: Record<string, any>;
37
+ Select?: Record<string, any>;
37
38
  ColorPicker: Record<string, any>;
38
39
  }
39
40
  export {};
@@ -277,5 +277,10 @@ declare const _default: {
277
277
  preset: string;
278
278
  empty: string;
279
279
  };
280
+ Select: {
281
+ cancelText: string;
282
+ okText: string;
283
+ filterThisItemOnly: string;
284
+ };
280
285
  };
281
286
  export default _default;
@@ -218,4 +218,9 @@ exports.default = {
218
218
  preset: '系统预设颜色',
219
219
  empty: '暂无',
220
220
  },
221
+ Select: {
222
+ cancelText: '取消',
223
+ okText: '确定',
224
+ filterThisItemOnly: '仅筛选此项',
225
+ },
221
226
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apdesign/web-react",
3
- "version": "1.3.3",
3
+ "version": "1.4.0",
4
4
  "description": "AP Design React UI Library.",
5
5
  "module": "./es/index.js",
6
6
  "main": "./lib/index.js",