@apdesign/web-react 1.3.4 → 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.
@@ -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.4";
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.4';
150
+ exports.version = '1.4.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apdesign/web-react",
3
- "version": "1.3.4",
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",