@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.
- package/dist/arco-icon.min.js +1 -1
- package/dist/arco.development.js +9 -9
- package/dist/arco.min.js +2 -2
- package/es/Button/index.d.ts +3 -3
- package/es/DatePicker/picker-range.d.ts +1 -1
- package/es/DatePicker/util.d.ts +1 -1
- package/es/Menu/context.d.ts +1 -1
- package/es/Select/option.js +6 -3
- package/es/Select/select.js +21 -5
- package/es/Tree/index.js +15 -0
- package/es/TreeSelect/hook/useStateValue.d.ts +1 -1
- package/es/TreeSelect/hook/useStateValue.js +44 -3
- package/es/TreeSelect/interface.d.ts +6 -0
- package/es/TreeSelect/tree-list.d.ts +1 -0
- package/es/TreeSelect/tree-list.js +38 -3
- package/es/TreeSelect/tree-select.js +57 -11
- package/es/_util/constant.d.ts +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/locale/en-US.d.ts +5 -0
- package/es/locale/en-US.js +5 -0
- package/es/locale/interface.d.ts +1 -0
- package/es/locale/zh-CN.d.ts +5 -0
- package/es/locale/zh-CN.js +5 -0
- package/lib/Select/option.js +5 -2
- package/lib/Select/select.js +20 -4
- package/lib/Tree/index.js +15 -0
- package/lib/TreeSelect/hook/useStateValue.d.ts +1 -1
- package/lib/TreeSelect/hook/useStateValue.js +44 -3
- package/lib/TreeSelect/interface.d.ts +6 -0
- package/lib/TreeSelect/tree-list.d.ts +1 -0
- package/lib/TreeSelect/tree-list.js +37 -2
- package/lib/TreeSelect/tree-select.js +57 -11
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/locale/en-US.d.ts +5 -0
- package/lib/locale/en-US.js +5 -0
- package/lib/locale/interface.d.ts +1 -0
- package/lib/locale/zh-CN.d.ts +5 -0
- package/lib/locale/zh-CN.js +5 -0
- package/package.json +1 -1
package/lib/Select/select.js
CHANGED
|
@@ -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 },
|
|
582
|
-
react_1.default.createElement(index_1.Button, { type: "primary", size: "mini", onClick: confirmCheck },
|
|
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',
|
|
@@ -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 (
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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)(
|
|
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,
|
|
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
|
|
320
|
-
|
|
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)(
|
|
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(
|
|
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.
|
|
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.
|
|
150
|
+
exports.version = '1.4.0';
|
package/lib/locale/en-US.d.ts
CHANGED
package/lib/locale/en-US.js
CHANGED
package/lib/locale/zh-CN.d.ts
CHANGED
package/lib/locale/zh-CN.js
CHANGED