@apdesign/web-react 1.3.4 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/arco-icon.min.js +1 -1
- package/dist/arco.development.js +7 -7
- package/dist/arco.min.js +2 -2
- package/es/DatePicker/util.d.ts +1 -1
- package/es/Menu/context.d.ts +1 -1
- package/es/Select/select.js +17 -1
- package/es/Tree/index.js +15 -0
- package/es/TreeSelect/hook/useStateValue.d.ts +1 -1
- package/es/TreeSelect/hook/useStateValue.js +46 -3
- package/es/TreeSelect/interface.d.ts +6 -0
- package/es/TreeSelect/tree-list.d.ts +1 -0
- package/es/TreeSelect/tree-list.js +70 -3
- package/es/TreeSelect/tree-select.js +59 -11
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/lib/Select/select.js +16 -0
- package/lib/Tree/index.js +15 -0
- package/lib/TreeSelect/hook/useStateValue.d.ts +1 -1
- package/lib/TreeSelect/hook/useStateValue.js +46 -3
- package/lib/TreeSelect/interface.d.ts +6 -0
- package/lib/TreeSelect/tree-list.d.ts +1 -0
- package/lib/TreeSelect/tree-list.js +69 -2
- package/lib/TreeSelect/tree-select.js +59 -11
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
|
@@ -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,69 @@ 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
|
+
// 为了兼容严格勾选模式,这边改成先清空勾选,再由树组件内部触发勾选,才能准确获取子节点父节点勾选数据
|
|
172
|
+
// onCheck 方法需要在 TreeContext 进行增加renderExtra的参数
|
|
173
|
+
// props.onChange([], {
|
|
174
|
+
// checked: false,
|
|
175
|
+
// trigger: nodeProps,
|
|
176
|
+
// });
|
|
177
|
+
// requestAnimationFrame(() => {
|
|
178
|
+
// onCheck(true, nodeProps._key, e);
|
|
179
|
+
// confirmCheck();
|
|
180
|
+
// });
|
|
181
|
+
// 上面有点UI卡顿体验不好 方案二 手动获取所有勾选的key,自己构造handleCheck参数
|
|
182
|
+
var treeCheckStrictly = props.treeCheckStrictly;
|
|
183
|
+
var checkedKeys;
|
|
184
|
+
var getAllCheckedKeys = function (node, keys) {
|
|
185
|
+
if (keys === void 0) { keys = []; }
|
|
186
|
+
if (Array.isArray(node.childrenData) && node.childrenData.length) {
|
|
187
|
+
node.childrenData.forEach(function (child) {
|
|
188
|
+
getAllCheckedKeys(child, keys);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
keys.push(node._key);
|
|
193
|
+
}
|
|
194
|
+
return keys;
|
|
195
|
+
};
|
|
196
|
+
if (treeCheckStrictly) {
|
|
197
|
+
checkedKeys = [nodeProps._key];
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
// 找到所有允许勾选的子节点
|
|
201
|
+
checkedKeys = getAllCheckedKeys(nodeProps);
|
|
202
|
+
}
|
|
203
|
+
handleCheck(checkedKeys, {
|
|
204
|
+
checkedNodes: [],
|
|
205
|
+
checked: true,
|
|
206
|
+
node: { props: nodeProps }, // 不完整
|
|
207
|
+
});
|
|
208
|
+
confirmCheck();
|
|
209
|
+
} }, (_a = locale.Select) === null || _a === void 0 ? void 0 : _a.filterThisItemOnly), propsRenderExtra === null || propsRenderExtra === void 0 ? void 0 :
|
|
210
|
+
propsRenderExtra(nodeProps)));
|
|
211
|
+
}
|
|
212
|
+
return propsRenderExtra === null || propsRenderExtra === void 0 ? void 0 : propsRenderExtra(nodeProps);
|
|
213
|
+
}, [propsRenderExtra, isMultipleQuickSelectMode]);
|
|
147
214
|
var extraProps = (0, react_1.useMemo)(function () {
|
|
148
215
|
return props.treeCheckable
|
|
149
216
|
? {
|
|
@@ -163,6 +230,6 @@ function TreeList(props, ref) {
|
|
|
163
230
|
}, []);
|
|
164
231
|
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
232
|
e.preventDefault();
|
|
166
|
-
} }, extraProps, { treeData: treeData, fieldNames: props.fieldNames, renderTitle: renderTitle, onSelect: onSelect, selectedKeys: selectedKeys })));
|
|
233
|
+
} }, extraProps, { treeData: treeData, fieldNames: props.fieldNames, renderTitle: renderTitle, renderExtra: renderExtra, onSelect: onSelect, selectedKeys: selectedKeys })));
|
|
167
234
|
}
|
|
168
235
|
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,15 @@ 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
|
+
var _a;
|
|
244
|
+
confirmSetValue();
|
|
245
|
+
setPopupVisible(false);
|
|
246
|
+
(_a = props.onVisibleChange) === null || _a === void 0 ? void 0 : _a.call(props, false);
|
|
247
|
+
};
|
|
233
248
|
var handleRemoveCheckedItem = function (item, index, e) {
|
|
234
249
|
e.stopPropagation();
|
|
235
250
|
if (item.disabled) {
|
|
@@ -237,21 +252,31 @@ var TreeSelect = function (baseProps, ref) {
|
|
|
237
252
|
}
|
|
238
253
|
var itemValue = (0, is_1.isObject)(item.value) ? item.value.value : item.value;
|
|
239
254
|
if (!props.treeCheckable || props.treeCheckStrictly || !key2nodeProps[itemValue]) {
|
|
240
|
-
var newValue =
|
|
255
|
+
var newValue = realValue.filter(function (_, i) { return i !== index; });
|
|
241
256
|
triggerChange(newValue, {
|
|
242
257
|
trigger: key2nodeProps[itemValue] || item,
|
|
243
258
|
checked: false,
|
|
244
259
|
selected: false,
|
|
245
260
|
});
|
|
261
|
+
if (isMultipleQuickSelectMode) {
|
|
262
|
+
setTimeout(function () {
|
|
263
|
+
confirmCheck();
|
|
264
|
+
}, 0);
|
|
265
|
+
}
|
|
246
266
|
return;
|
|
247
267
|
}
|
|
248
|
-
var result = (0, util_1.getAllCheckedKeysByCheck)(itemValue, false, (0, utils_1.normalizeValueToArray)(
|
|
268
|
+
var result = (0, util_1.getAllCheckedKeysByCheck)(itemValue, false, (0, utils_1.normalizeValueToArray)(realValue), key2nodeProps, indeterminateKeys.current);
|
|
249
269
|
indeterminateKeys.current = result.indeterminateKeys;
|
|
250
|
-
triggerChange((0, useStateValue_1.parseValue)(result.checkedKeys, key2nodeProps,
|
|
270
|
+
triggerChange((0, useStateValue_1.parseValue)(result.checkedKeys, key2nodeProps, realValue), {
|
|
251
271
|
trigger: key2nodeProps[itemValue],
|
|
252
272
|
checked: false,
|
|
253
273
|
selected: false,
|
|
254
274
|
});
|
|
275
|
+
if (isMultipleQuickSelectMode) {
|
|
276
|
+
setTimeout(function () {
|
|
277
|
+
confirmCheck();
|
|
278
|
+
}, 0);
|
|
279
|
+
}
|
|
255
280
|
};
|
|
256
281
|
(0, react_1.useEffect)(function () {
|
|
257
282
|
inputValue !== undefined && handleSearch(inputValue);
|
|
@@ -314,12 +339,35 @@ var TreeSelect = function (baseProps, ref) {
|
|
|
314
339
|
var renderView = function (eleView) {
|
|
315
340
|
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
341
|
var _a;
|
|
317
|
-
var _b, _c, _d;
|
|
342
|
+
var _b, _c, _d, _e, _f;
|
|
318
343
|
var dropdownRender = props.dropdownRender;
|
|
319
|
-
var
|
|
320
|
-
|
|
344
|
+
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 })));
|
|
345
|
+
var dom = (isFilterNode && isEmptyValue(searchKeys)) || isEmptyValue(treeData) ? (props.notFoundContent || renderEmpty('TreeSelect')) : isMultipleQuickSelectMode ? (react_1.default.createElement("div", { style: {
|
|
346
|
+
maxHeight: 188,
|
|
347
|
+
display: 'flex',
|
|
348
|
+
flexDirection: 'column',
|
|
349
|
+
} },
|
|
350
|
+
react_1.default.createElement("div", { style: { flex: 1, overflowY: 'auto' } }, treeListDom),
|
|
351
|
+
react_1.default.createElement("div", { style: {
|
|
352
|
+
flex: 'none',
|
|
353
|
+
display: 'flex',
|
|
354
|
+
justifyContent: 'flex-end',
|
|
355
|
+
gap: 12,
|
|
356
|
+
padding: '8px 16px 4px',
|
|
357
|
+
borderTop: '1px solid var(--color-fill-3)',
|
|
358
|
+
} },
|
|
359
|
+
react_1.default.createElement(Button_1.default, { size: "mini", onClick: cancelCheck }, (_b = locale.Select) === null || _b === void 0 ? void 0 : _b.cancelText),
|
|
360
|
+
react_1.default.createElement(Button_1.default, { type: "primary", size: "mini", onClick: function () {
|
|
361
|
+
confirmCheck();
|
|
362
|
+
} }, (_c = locale.Select) === null || _c === void 0 ? void 0 : _c.okText)))) : (treeListDom);
|
|
363
|
+
var wrapStyle = isMultipleQuickSelectMode
|
|
364
|
+
? {
|
|
365
|
+
overflow: 'hidden',
|
|
366
|
+
}
|
|
367
|
+
: {};
|
|
368
|
+
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
369
|
? 'unset'
|
|
322
|
-
: '' }, props.dropdownMenuStyle) }, (0, is_1.isFunction)(dropdownRender) ? dropdownRender(dom) : dom));
|
|
370
|
+
: '' }, wrapStyle), props.dropdownMenuStyle) }, (0, is_1.isFunction)(dropdownRender) ? dropdownRender(dom) : dom));
|
|
323
371
|
}, disabled: props.disabled, onVisibleChange: function (visible) {
|
|
324
372
|
tryUpdatePopupVisible(visible);
|
|
325
373
|
// props.onVisibleChange && props.onVisibleChange(visible);
|
|
@@ -340,9 +388,9 @@ var TreeSelect = function (baseProps, ref) {
|
|
|
340
388
|
return props.triggerElement({ value: valueForCallback });
|
|
341
389
|
})()
|
|
342
390
|
: 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)(
|
|
391
|
+
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
392
|
// other
|
|
345
|
-
isEmptyValue: isEmptyValue(
|
|
393
|
+
isEmptyValue: isEmptyValue(realValue), prefixCls: prefixCls, isMultiple: multiple, renderText: renderText, onSort: tryUpdateSelectValue, onRemoveCheckedItem: handleRemoveCheckedItem, onClear: function (e) {
|
|
346
394
|
var _a;
|
|
347
395
|
e.stopPropagation();
|
|
348
396
|
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.1";
|
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.1';
|