@douyinfe/semi-ui 2.50.0 → 2.51.0-beta.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.
@@ -193,7 +193,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
193
193
  handleInputChange: (value: string) => void;
194
194
  handleTagRemove: (e: any, tagValuePath: Array<string | number>) => void;
195
195
  handleRemoveByKey: (key: any) => void;
196
- renderTagItem: (value: string | Array<string>, idx: number, type: string) => string | number | boolean | React.ReactFragment | JSX.Element;
196
+ renderTagItem: (nodeKey: string, idx: number) => string | number | boolean | React.ReactFragment | JSX.Element;
197
197
  renderTagInput(): JSX.Element;
198
198
  renderInput(): JSX.Element;
199
199
  handleItemClick: (e: MouseEvent | KeyboardEvent, item: Entity | Data) => void;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _flatten2 = _interopRequireDefault(require("lodash/flatten"));
7
+ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
8
8
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
9
9
  var _isNumber2 = _interopRequireDefault(require("lodash/isNumber"));
10
10
  var _isFunction2 = _interopRequireDefault(require("lodash/isFunction"));
@@ -52,7 +52,7 @@ class Cascader extends _baseComponent.default {
52
52
  } = this.state;
53
53
  this.handleTagRemove(null, keyEntities[key].valuePath);
54
54
  };
55
- this.renderTagItem = (value, idx, type) => {
55
+ this.renderTagItem = (nodeKey, idx) => {
56
56
  const {
57
57
  keyEntities,
58
58
  disabledKeys
@@ -64,9 +64,8 @@ class Cascader extends _baseComponent.default {
64
64
  displayRender,
65
65
  disableStrictly
66
66
  } = this.props;
67
- const nodeKey = type === _constants.strings.IS_VALUE ? (0, _util.findKeysForValues)(value, keyEntities)[0] : value;
68
67
  const isDsiabled = disabled || keyEntities[nodeKey].data.disabled || disableStrictly && disabledKeys.has(nodeKey);
69
- if (!(0, _isEmpty2.default)(keyEntities) && !(0, _isEmpty2.default)(keyEntities[nodeKey])) {
68
+ if (keyEntities[nodeKey]) {
70
69
  const tagCls = (0, _classnames.default)(`${prefixcls}-selection-tag`, {
71
70
  [`${prefixcls}-selection-tag-disabled`]: isDsiabled
72
71
  });
@@ -193,7 +192,7 @@ class Cascader extends _baseComponent.default {
193
192
  const hiddenTag = [];
194
193
  [...realKeys].forEach((checkedKey, idx) => {
195
194
  const notExceedMaxTagCount = !(0, _isNumber2.default)(maxTagCount) || maxTagCount >= idx + 1;
196
- const item = this.renderTagItem(checkedKey, idx, _constants.strings.IS_KEY);
195
+ const item = this.renderTagItem(checkedKey, idx);
197
196
  if (notExceedMaxTagCount) {
198
197
  displayTag.push(item);
199
198
  } else {
@@ -236,7 +235,7 @@ class Cascader extends _baseComponent.default {
236
235
  const searchable = Boolean(filterTreeNode);
237
236
  if (!searchable) {
238
237
  if (multiple) {
239
- if ((0, _isEmpty2.default)(checkedKeys)) {
238
+ if (checkedKeys.size === 0) {
240
239
  return /*#__PURE__*/_react.default.createElement("span", {
241
240
  className: `${prefixcls}-selection-placeholder`
242
241
  }, placeholder);
@@ -703,27 +702,23 @@ class Cascader extends _baseComponent.default {
703
702
  return firstInProps || treeDataHasChange;
704
703
  };
705
704
  const getRealKeys = (realValue, keyEntities) => {
706
- // normallizedValue is used to save the value in two-dimensional array format
707
- let normallizedValue = [];
705
+ // normalizedValue is used to save the value in two-dimensional array format
706
+ let normalizedValue = [];
708
707
  if (Array.isArray(realValue)) {
709
- normallizedValue = Array.isArray(realValue[0]) ? realValue : [realValue];
708
+ normalizedValue = Array.isArray(realValue[0]) ? realValue : [realValue];
710
709
  } else {
711
710
  if (realValue !== undefined) {
712
- normallizedValue = [[realValue]];
711
+ normalizedValue = [[realValue]];
713
712
  }
714
713
  }
715
714
  // formatValuePath is used to save value of valuePath
716
715
  const formatValuePath = [];
717
- normallizedValue.forEach(valueItem => {
718
- const formatItem = onChangeWithObject ? valueItem.map(i => i === null || i === void 0 ? void 0 : i.value) : valueItem;
716
+ normalizedValue.forEach(valueItem => {
717
+ const formatItem = onChangeWithObject && (0, _isObject2.default)(valueItem[0]) ? valueItem.map(i => i === null || i === void 0 ? void 0 : i.value) : valueItem;
719
718
  formatValuePath.push(formatItem);
720
719
  });
721
720
  // formatKeys is used to save key of value
722
- const formatKeys = [];
723
- formatValuePath.forEach(v => {
724
- const formatKeyItem = (0, _util.findKeysForValues)(v, keyEntities);
725
- !(0, _isEmpty2.default)(formatKeyItem) && formatKeys.push(formatKeyItem);
726
- });
721
+ const formatKeys = formatValuePath.map(v => (0, _util.getKeyByValuePath)(v));
727
722
  return formatKeys;
728
723
  };
729
724
  const needUpdateTreeData = needUpdate('treeData') || needUpdateData();
@@ -753,7 +748,7 @@ class Cascader extends _baseComponent.default {
753
748
  if ((0, _isSet2.default)(realKeys)) {
754
749
  realKeys = [...realKeys];
755
750
  }
756
- const calRes = (0, _treeUtil.calcCheckedKeys)((0, _flatten2.default)(realKeys), keyEntities);
751
+ const calRes = (0, _treeUtil.calcCheckedKeys)(realKeys, keyEntities);
757
752
  const checkedKeys = new Set(calRes.checkedKeys);
758
753
  const halfCheckedKeys = new Set(calRes.halfCheckedKeys);
759
754
  // disableStrictly
@@ -777,7 +772,7 @@ class Cascader extends _baseComponent.default {
777
772
  }
778
773
  componentDidUpdate(prevProps) {
779
774
  let isOptionsChanged = false;
780
- if (!(0, _isEqual2.default)(prevProps.treeData, this.props.treeData)) {
775
+ if (!(0, _isEqual2.default)(prevProps.treeData, this.props.treeData) && !this.props.multiple) {
781
776
  isOptionsChanged = true;
782
777
  this.foundation.collectOptions();
783
778
  }
@@ -801,24 +796,17 @@ class Cascader extends _baseComponent.default {
801
796
  resolvedCheckedKeys
802
797
  } = this.state;
803
798
  const tagInputcls = (0, _classnames.default)(`${prefixcls}-tagInput-wrapper`);
804
- const tagValue = [];
805
799
  const realKeys = this.mergeType === _constants.strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
806
- [...realKeys].forEach(checkedKey => {
807
- if (!(0, _isEmpty2.default)(keyEntities[checkedKey])) {
808
- tagValue.push(keyEntities[checkedKey].valuePath);
809
- }
810
- });
811
800
  return /*#__PURE__*/_react.default.createElement(_tagInput.default, {
812
801
  className: tagInputcls,
813
802
  ref: this.inputRef,
814
803
  disabled: disabled,
815
804
  size: size,
816
- // TODO Modify logic, not modify type
817
- value: tagValue,
805
+ value: [...realKeys],
818
806
  showRestTagsPopover: showRestTagsPopover,
819
807
  restTagsPopoverProps: restTagsPopoverProps,
820
808
  maxTagCount: maxTagCount,
821
- renderTagItem: (value, index) => this.renderTagItem(value, index, _constants.strings.IS_VALUE),
809
+ renderTagItem: (value, index) => this.renderTagItem(value, index),
822
810
  inputValue: inputValue,
823
811
  onInputChange: this.handleInputChange,
824
812
  // TODO Modify logic, not modify type
@@ -87,7 +87,7 @@ class DropdownItem extends _baseComponent.default {
87
87
  ref: ref => forwardRef(ref),
88
88
  className: itemclass,
89
89
  style: style
90
- }), tick, iconContent, children);
90
+ }, this.getDataAttr(this.props)), tick, iconContent, children);
91
91
  }
92
92
  }
93
93
  DropdownItem.propTypes = {
@@ -20,6 +20,7 @@ export default class Image extends BaseComponent<ImageProps, ImageStates> {
20
20
  preview: PropTypes.Requireable<NonNullable<boolean | object>>;
21
21
  onLoad: PropTypes.Requireable<(...args: any[]) => any>;
22
22
  onError: PropTypes.Requireable<(...args: any[]) => any>;
23
+ onClick: PropTypes.Requireable<(...args: any[]) => any>;
23
24
  crossOrigin: PropTypes.Requireable<string>;
24
25
  imageID: PropTypes.Requireable<number>;
25
26
  };
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
7
8
  var _isUndefined2 = _interopRequireDefault(require("lodash/isUndefined"));
8
9
  var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
9
10
  var _isBoolean2 = _interopRequireDefault(require("lodash/isBoolean"));
@@ -179,7 +180,10 @@ class Image extends _baseComponent.default {
179
180
  const canPreview = loadStatus === "success" && preview && !this.isInGroup();
180
181
  const showPreviewCursor = preview && loadStatus === "success";
181
182
  const previewSrc = (0, _isObject2.default)(preview) ? (_a = preview.src) !== null && _a !== void 0 ? _a : src : src;
182
- const previewProps = (0, _isObject2.default)(preview) ? preview : {};
183
+ const previewProps = (0, _isObject2.default)(preview) && canPreview ? Object.assign(Object.assign({}, (0, _omit2.default)(preview, ['className', 'style', 'previewCls', 'previewStyle'])), {
184
+ className: preview === null || preview === void 0 ? void 0 : preview.previewCls,
185
+ style: preview === null || preview === void 0 ? void 0 : preview.previewStyle
186
+ }) : {};
183
187
  return /*#__PURE__*/_react.default.createElement("div", {
184
188
  style: outerStyle,
185
189
  className: outerCls,
@@ -223,6 +227,7 @@ Image.propTypes = {
223
227
  preview: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.object]),
224
228
  onLoad: _propTypes.default.func,
225
229
  onError: _propTypes.default.func,
230
+ onClick: _propTypes.default.func,
226
231
  crossOrigin: _propTypes.default.string,
227
232
  imageID: _propTypes.default.number
228
233
  };
@@ -18,6 +18,7 @@ export interface ImageProps extends BaseProps {
18
18
  preview?: boolean | PreviewProps;
19
19
  onError?: (event: Event) => void;
20
20
  onLoad?: (event: Event) => void;
21
+ onClick?: (event: any) => void;
21
22
  crossOrigin?: "anonymous" | "use-credentials";
22
23
  children?: ReactNode;
23
24
  imageID?: number;
@@ -55,6 +56,8 @@ export interface PreviewProps extends BaseProps {
55
56
  crossOrigin?: "anonymous" | "use-credentials";
56
57
  maxZoom?: number;
57
58
  minZoom?: number;
59
+ previewCls?: string;
60
+ previewStyle?: React.CSSProperties;
58
61
  renderHeader?: (info: any) => ReactNode;
59
62
  renderPreviewMenu?: (props: MenuProps) => ReactNode;
60
63
  getPopupContainer?: () => HTMLElement;
@@ -70,6 +73,8 @@ export interface PreviewProps extends BaseProps {
70
73
  onDownload?: (src: string, index: number) => void;
71
74
  setDownloadName?: (src: string) => string;
72
75
  }
76
+ export interface PreviewInnerProps extends Omit<PreviewProps, "previewCls" | "previewStyle"> {
77
+ }
73
78
  export interface MenuProps {
74
79
  min?: number;
75
80
  max?: number;
@@ -108,6 +113,7 @@ export interface SliderProps {
108
113
  step?: number;
109
114
  }
110
115
  export interface HeaderProps {
116
+ closable: boolean;
111
117
  renderHeader?: (info: any) => ReactNode;
112
118
  title?: string;
113
119
  titleStyle?: React.CSSProperties;
@@ -31,6 +31,8 @@ export default class Preview extends BaseComponent<PreviewProps, PreviewState> {
31
31
  lazyLoadMargin: PropTypes.Requireable<string>;
32
32
  preLoad: PropTypes.Requireable<boolean>;
33
33
  preLoadGap: PropTypes.Requireable<number>;
34
+ previewCls: PropTypes.Requireable<string>;
35
+ previewStyle: PropTypes.Requireable<object>;
34
36
  disableDownload: PropTypes.Requireable<boolean>;
35
37
  zIndex: PropTypes.Requireable<number>;
36
38
  renderHeader: PropTypes.Requireable<(...args: any[]) => any>;
@@ -51,6 +53,7 @@ export default class Preview extends BaseComponent<PreviewProps, PreviewState> {
51
53
  src: any[];
52
54
  lazyLoad: boolean;
53
55
  lazyLoadMargin: string;
56
+ closable: boolean;
54
57
  };
55
58
  get adapter(): {
56
59
  getContext(key: string): any;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _omit2 = _interopRequireDefault(require("lodash/omit"));
7
8
  var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
8
9
  var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
9
10
  var _react = _interopRequireWildcard(require("react"));
@@ -154,6 +155,10 @@ class Preview extends _baseComponent.default {
154
155
  setDownloadName
155
156
  } = _a,
156
157
  restProps = __rest(_a, ["src", "className", "style", "lazyLoad", "setDownloadName"]);
158
+ const previewInnerProps = Object.assign(Object.assign({}, (0, _omit2.default)(restProps, ['previewCls', 'previewStyle'])), {
159
+ className: restProps === null || restProps === void 0 ? void 0 : restProps.previewCls,
160
+ style: restProps === null || restProps === void 0 ? void 0 : restProps.previewStyle
161
+ });
157
162
  const {
158
163
  currentIndex,
159
164
  visible
@@ -182,7 +187,7 @@ class Preview extends _baseComponent.default {
182
187
  id: this.previewGroupId,
183
188
  style: style,
184
189
  className: (0, _classnames.default)(`${prefixCls}-preview-group`, className)
185
- }, newChildren), /*#__PURE__*/_react.default.createElement(_previewInner.default, Object.assign({}, restProps, {
190
+ }, newChildren), /*#__PURE__*/_react.default.createElement(_previewInner.default, Object.assign({}, previewInnerProps, {
186
191
  ref: this.previewRef,
187
192
  src: finalSrcList,
188
193
  currentIndex: currentIndex,
@@ -217,6 +222,8 @@ Preview.propTypes = {
217
222
  lazyLoadMargin: _propTypes.default.string,
218
223
  preLoad: _propTypes.default.bool,
219
224
  preLoadGap: _propTypes.default.number,
225
+ previewCls: _propTypes.default.string,
226
+ previewStyle: _propTypes.default.object,
220
227
  disableDownload: _propTypes.default.bool,
221
228
  zIndex: _propTypes.default.number,
222
229
  renderHeader: _propTypes.default.func,
@@ -236,5 +243,6 @@ Preview.propTypes = {
236
243
  Preview.defaultProps = {
237
244
  src: [],
238
245
  lazyLoad: true,
239
- lazyLoadMargin: "0px 100px 100px 0px"
246
+ lazyLoadMargin: "0px 100px 100px 0px",
247
+ closable: true
240
248
  };
@@ -18,7 +18,8 @@ const Header = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
18
18
  onClose,
19
19
  titleStyle,
20
20
  className,
21
- renderHeader
21
+ renderHeader,
22
+ closable
22
23
  } = _ref;
23
24
  return /*#__PURE__*/_react.default.createElement(_previewContext.PreviewContext.Consumer, null, _ref2 => {
24
25
  let {
@@ -35,7 +36,7 @@ const Header = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
35
36
  }, /*#__PURE__*/_react.default.createElement("section", {
36
37
  className: `${prefixCls}-title`,
37
38
  style: titleStyle
38
- }, renderHeader ? renderHeader(title) : title), /*#__PURE__*/_react.default.createElement("section", {
39
+ }, renderHeader ? renderHeader(title) : title), closable && /*#__PURE__*/_react.default.createElement("section", {
39
40
  className: `${prefixCls}-close`,
40
41
  onMouseUp: onClose
41
42
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, null)));
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import BaseComponent from "../_base/baseComponent";
3
- import { PreviewProps as PreviewInnerProps, PreviewInnerStates } from "./interface";
3
+ import { PreviewInnerProps, PreviewInnerStates } from "./interface";
4
4
  import PropTypes from "prop-types";
5
5
  import PreviewInnerFoundation, { PreviewInnerAdapter, RatioType } from '@douyinfe/semi-foundation/lib/cjs/image/previewInnerFoundation';
6
6
  import { PreviewContextProps } from "./previewContext";
@@ -270,6 +270,7 @@ class PreviewInner extends _baseComponent.default {
270
270
  render() {
271
271
  const {
272
272
  getPopupContainer,
273
+ closable,
273
274
  zIndex,
274
275
  visible,
275
276
  className,
@@ -316,13 +317,10 @@ class PreviewInner extends _baseComponent.default {
316
317
  const total = imgSrc.length;
317
318
  const showPrev = total !== 1 && (infinite || currentIndex !== 0);
318
319
  const showNext = total !== 1 && (infinite || currentIndex !== total - 1);
319
- return /*#__PURE__*/_react.default.createElement(_portal.default, {
320
+ return visible && /*#__PURE__*/_react.default.createElement(_portal.default, {
320
321
  getPopupContainer: getPopupContainer,
321
322
  style: wrapperStyle
322
- }, visible &&
323
- /*#__PURE__*/
324
- // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events,jsx-a11y/no-static-element-interactions
325
- _react.default.createElement("div", {
323
+ }, /*#__PURE__*/_react.default.createElement("div", {
326
324
  className: previewWrapperCls,
327
325
  style: style,
328
326
  onMouseDown: this.handleMouseDown,
@@ -333,7 +331,8 @@ class PreviewInner extends _baseComponent.default {
333
331
  ref: this.headerRef,
334
332
  className: (0, _classnames.default)(hideViewerCls),
335
333
  onClose: this.handlePreviewClose,
336
- renderHeader: renderHeader
334
+ renderHeader: renderHeader,
335
+ closable: closable
337
336
  }), /*#__PURE__*/_react.default.createElement(_previewImage.default, {
338
337
  src: imgSrc[currentIndex],
339
338
  onZoom: this.handleZoomImage,
@@ -382,6 +382,7 @@ class TreeNode extends _react.PureComponent {
382
382
  const dragOverGapBottom = dragOverNodeKey === eventKey && dropPosition === 1;
383
383
  const nodeCls = (0, _classnames.default)(prefixcls, {
384
384
  [`${prefixcls}-level-${level + 1}`]: true,
385
+ [`${prefixcls}-fullLabel-level-${level + 1}`]: renderFullLabel,
385
386
  [`${prefixcls}-collapsed`]: !expanded,
386
387
  [`${prefixcls}-disabled`]: Boolean(disabled),
387
388
  [`${prefixcls}-selected`]: selected,
@@ -193,7 +193,7 @@ declare class Cascader extends BaseComponent<CascaderProps, CascaderState> {
193
193
  handleInputChange: (value: string) => void;
194
194
  handleTagRemove: (e: any, tagValuePath: Array<string | number>) => void;
195
195
  handleRemoveByKey: (key: any) => void;
196
- renderTagItem: (value: string | Array<string>, idx: number, type: string) => string | number | boolean | React.ReactFragment | JSX.Element;
196
+ renderTagItem: (nodeKey: string, idx: number) => string | number | boolean | React.ReactFragment | JSX.Element;
197
197
  renderTagInput(): JSX.Element;
198
198
  renderInput(): JSX.Element;
199
199
  handleItemClick: (e: MouseEvent | KeyboardEvent, item: Entity | Data) => void;
@@ -1,4 +1,4 @@
1
- import _flatten from "lodash/flatten";
1
+ import _isObject from "lodash/isObject";
2
2
  import _noop from "lodash/noop";
3
3
  import _isNumber from "lodash/isNumber";
4
4
  import _isFunction from "lodash/isFunction";
@@ -15,7 +15,7 @@ import { cssClasses, strings } from '@douyinfe/semi-foundation/lib/es/cascader/c
15
15
  import { numbers as popoverNumbers } from '@douyinfe/semi-foundation/lib/es/popover/constants';
16
16
  import '@douyinfe/semi-foundation/lib/es/cascader/cascader.css';
17
17
  import { IconClear, IconChevronDown } from '@douyinfe/semi-icons';
18
- import { findKeysForValues, convertDataToEntities, calcMergeType } from '@douyinfe/semi-foundation/lib/es/cascader/util';
18
+ import { convertDataToEntities, calcMergeType, getKeyByValuePath } from '@douyinfe/semi-foundation/lib/es/cascader/util';
19
19
  import { calcCheckedKeys, normalizeKeyList, calcDisabledKeys } from '@douyinfe/semi-foundation/lib/es/tree/treeUtil';
20
20
  import ConfigContext from '../configProvider/context';
21
21
  import BaseComponent from '../_base/baseComponent';
@@ -43,7 +43,7 @@ class Cascader extends BaseComponent {
43
43
  } = this.state;
44
44
  this.handleTagRemove(null, keyEntities[key].valuePath);
45
45
  };
46
- this.renderTagItem = (value, idx, type) => {
46
+ this.renderTagItem = (nodeKey, idx) => {
47
47
  const {
48
48
  keyEntities,
49
49
  disabledKeys
@@ -55,9 +55,8 @@ class Cascader extends BaseComponent {
55
55
  displayRender,
56
56
  disableStrictly
57
57
  } = this.props;
58
- const nodeKey = type === strings.IS_VALUE ? findKeysForValues(value, keyEntities)[0] : value;
59
58
  const isDsiabled = disabled || keyEntities[nodeKey].data.disabled || disableStrictly && disabledKeys.has(nodeKey);
60
- if (!_isEmpty(keyEntities) && !_isEmpty(keyEntities[nodeKey])) {
59
+ if (keyEntities[nodeKey]) {
61
60
  const tagCls = cls(`${prefixcls}-selection-tag`, {
62
61
  [`${prefixcls}-selection-tag-disabled`]: isDsiabled
63
62
  });
@@ -184,7 +183,7 @@ class Cascader extends BaseComponent {
184
183
  const hiddenTag = [];
185
184
  [...realKeys].forEach((checkedKey, idx) => {
186
185
  const notExceedMaxTagCount = !_isNumber(maxTagCount) || maxTagCount >= idx + 1;
187
- const item = this.renderTagItem(checkedKey, idx, strings.IS_KEY);
186
+ const item = this.renderTagItem(checkedKey, idx);
188
187
  if (notExceedMaxTagCount) {
189
188
  displayTag.push(item);
190
189
  } else {
@@ -227,7 +226,7 @@ class Cascader extends BaseComponent {
227
226
  const searchable = Boolean(filterTreeNode);
228
227
  if (!searchable) {
229
228
  if (multiple) {
230
- if (_isEmpty(checkedKeys)) {
229
+ if (checkedKeys.size === 0) {
231
230
  return /*#__PURE__*/React.createElement("span", {
232
231
  className: `${prefixcls}-selection-placeholder`
233
232
  }, placeholder);
@@ -694,27 +693,23 @@ class Cascader extends BaseComponent {
694
693
  return firstInProps || treeDataHasChange;
695
694
  };
696
695
  const getRealKeys = (realValue, keyEntities) => {
697
- // normallizedValue is used to save the value in two-dimensional array format
698
- let normallizedValue = [];
696
+ // normalizedValue is used to save the value in two-dimensional array format
697
+ let normalizedValue = [];
699
698
  if (Array.isArray(realValue)) {
700
- normallizedValue = Array.isArray(realValue[0]) ? realValue : [realValue];
699
+ normalizedValue = Array.isArray(realValue[0]) ? realValue : [realValue];
701
700
  } else {
702
701
  if (realValue !== undefined) {
703
- normallizedValue = [[realValue]];
702
+ normalizedValue = [[realValue]];
704
703
  }
705
704
  }
706
705
  // formatValuePath is used to save value of valuePath
707
706
  const formatValuePath = [];
708
- normallizedValue.forEach(valueItem => {
709
- const formatItem = onChangeWithObject ? valueItem.map(i => i === null || i === void 0 ? void 0 : i.value) : valueItem;
707
+ normalizedValue.forEach(valueItem => {
708
+ const formatItem = onChangeWithObject && _isObject(valueItem[0]) ? valueItem.map(i => i === null || i === void 0 ? void 0 : i.value) : valueItem;
710
709
  formatValuePath.push(formatItem);
711
710
  });
712
711
  // formatKeys is used to save key of value
713
- const formatKeys = [];
714
- formatValuePath.forEach(v => {
715
- const formatKeyItem = findKeysForValues(v, keyEntities);
716
- !_isEmpty(formatKeyItem) && formatKeys.push(formatKeyItem);
717
- });
712
+ const formatKeys = formatValuePath.map(v => getKeyByValuePath(v));
718
713
  return formatKeys;
719
714
  };
720
715
  const needUpdateTreeData = needUpdate('treeData') || needUpdateData();
@@ -744,7 +739,7 @@ class Cascader extends BaseComponent {
744
739
  if (_isSet(realKeys)) {
745
740
  realKeys = [...realKeys];
746
741
  }
747
- const calRes = calcCheckedKeys(_flatten(realKeys), keyEntities);
742
+ const calRes = calcCheckedKeys(realKeys, keyEntities);
748
743
  const checkedKeys = new Set(calRes.checkedKeys);
749
744
  const halfCheckedKeys = new Set(calRes.halfCheckedKeys);
750
745
  // disableStrictly
@@ -768,7 +763,7 @@ class Cascader extends BaseComponent {
768
763
  }
769
764
  componentDidUpdate(prevProps) {
770
765
  let isOptionsChanged = false;
771
- if (!_isEqual(prevProps.treeData, this.props.treeData)) {
766
+ if (!_isEqual(prevProps.treeData, this.props.treeData) && !this.props.multiple) {
772
767
  isOptionsChanged = true;
773
768
  this.foundation.collectOptions();
774
769
  }
@@ -792,24 +787,17 @@ class Cascader extends BaseComponent {
792
787
  resolvedCheckedKeys
793
788
  } = this.state;
794
789
  const tagInputcls = cls(`${prefixcls}-tagInput-wrapper`);
795
- const tagValue = [];
796
790
  const realKeys = this.mergeType === strings.NONE_MERGE_TYPE ? checkedKeys : resolvedCheckedKeys;
797
- [...realKeys].forEach(checkedKey => {
798
- if (!_isEmpty(keyEntities[checkedKey])) {
799
- tagValue.push(keyEntities[checkedKey].valuePath);
800
- }
801
- });
802
791
  return /*#__PURE__*/React.createElement(TagInput, {
803
792
  className: tagInputcls,
804
793
  ref: this.inputRef,
805
794
  disabled: disabled,
806
795
  size: size,
807
- // TODO Modify logic, not modify type
808
- value: tagValue,
796
+ value: [...realKeys],
809
797
  showRestTagsPopover: showRestTagsPopover,
810
798
  restTagsPopoverProps: restTagsPopoverProps,
811
799
  maxTagCount: maxTagCount,
812
- renderTagItem: (value, index) => this.renderTagItem(value, index, strings.IS_VALUE),
800
+ renderTagItem: (value, index) => this.renderTagItem(value, index),
813
801
  inputValue: inputValue,
814
802
  onInputChange: this.handleInputChange,
815
803
  // TODO Modify logic, not modify type
@@ -80,7 +80,7 @@ class DropdownItem extends BaseComponent {
80
80
  ref: ref => forwardRef(ref),
81
81
  className: itemclass,
82
82
  style: style
83
- }), tick, iconContent, children);
83
+ }, this.getDataAttr(this.props)), tick, iconContent, children);
84
84
  }
85
85
  }
86
86
  DropdownItem.propTypes = {
@@ -20,6 +20,7 @@ export default class Image extends BaseComponent<ImageProps, ImageStates> {
20
20
  preview: PropTypes.Requireable<NonNullable<boolean | object>>;
21
21
  onLoad: PropTypes.Requireable<(...args: any[]) => any>;
22
22
  onError: PropTypes.Requireable<(...args: any[]) => any>;
23
+ onClick: PropTypes.Requireable<(...args: any[]) => any>;
23
24
  crossOrigin: PropTypes.Requireable<string>;
24
25
  imageID: PropTypes.Requireable<number>;
25
26
  };
@@ -1,3 +1,4 @@
1
+ import _omit from "lodash/omit";
1
2
  import _isUndefined from "lodash/isUndefined";
2
3
  import _isObject from "lodash/isObject";
3
4
  import _isBoolean from "lodash/isBoolean";
@@ -172,7 +173,10 @@ export default class Image extends BaseComponent {
172
173
  const canPreview = loadStatus === "success" && preview && !this.isInGroup();
173
174
  const showPreviewCursor = preview && loadStatus === "success";
174
175
  const previewSrc = _isObject(preview) ? (_a = preview.src) !== null && _a !== void 0 ? _a : src : src;
175
- const previewProps = _isObject(preview) ? preview : {};
176
+ const previewProps = _isObject(preview) && canPreview ? Object.assign(Object.assign({}, _omit(preview, ['className', 'style', 'previewCls', 'previewStyle'])), {
177
+ className: preview === null || preview === void 0 ? void 0 : preview.previewCls,
178
+ style: preview === null || preview === void 0 ? void 0 : preview.previewStyle
179
+ }) : {};
176
180
  return /*#__PURE__*/React.createElement("div", {
177
181
  style: outerStyle,
178
182
  className: outerCls,
@@ -215,6 +219,7 @@ Image.propTypes = {
215
219
  preview: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
216
220
  onLoad: PropTypes.func,
217
221
  onError: PropTypes.func,
222
+ onClick: PropTypes.func,
218
223
  crossOrigin: PropTypes.string,
219
224
  imageID: PropTypes.number
220
225
  };
@@ -18,6 +18,7 @@ export interface ImageProps extends BaseProps {
18
18
  preview?: boolean | PreviewProps;
19
19
  onError?: (event: Event) => void;
20
20
  onLoad?: (event: Event) => void;
21
+ onClick?: (event: any) => void;
21
22
  crossOrigin?: "anonymous" | "use-credentials";
22
23
  children?: ReactNode;
23
24
  imageID?: number;
@@ -55,6 +56,8 @@ export interface PreviewProps extends BaseProps {
55
56
  crossOrigin?: "anonymous" | "use-credentials";
56
57
  maxZoom?: number;
57
58
  minZoom?: number;
59
+ previewCls?: string;
60
+ previewStyle?: React.CSSProperties;
58
61
  renderHeader?: (info: any) => ReactNode;
59
62
  renderPreviewMenu?: (props: MenuProps) => ReactNode;
60
63
  getPopupContainer?: () => HTMLElement;
@@ -70,6 +73,8 @@ export interface PreviewProps extends BaseProps {
70
73
  onDownload?: (src: string, index: number) => void;
71
74
  setDownloadName?: (src: string) => string;
72
75
  }
76
+ export interface PreviewInnerProps extends Omit<PreviewProps, "previewCls" | "previewStyle"> {
77
+ }
73
78
  export interface MenuProps {
74
79
  min?: number;
75
80
  max?: number;
@@ -108,6 +113,7 @@ export interface SliderProps {
108
113
  step?: number;
109
114
  }
110
115
  export interface HeaderProps {
116
+ closable: boolean;
111
117
  renderHeader?: (info: any) => ReactNode;
112
118
  title?: string;
113
119
  titleStyle?: React.CSSProperties;
@@ -31,6 +31,8 @@ export default class Preview extends BaseComponent<PreviewProps, PreviewState> {
31
31
  lazyLoadMargin: PropTypes.Requireable<string>;
32
32
  preLoad: PropTypes.Requireable<boolean>;
33
33
  preLoadGap: PropTypes.Requireable<number>;
34
+ previewCls: PropTypes.Requireable<string>;
35
+ previewStyle: PropTypes.Requireable<object>;
34
36
  disableDownload: PropTypes.Requireable<boolean>;
35
37
  zIndex: PropTypes.Requireable<number>;
36
38
  renderHeader: PropTypes.Requireable<(...args: any[]) => any>;
@@ -51,6 +53,7 @@ export default class Preview extends BaseComponent<PreviewProps, PreviewState> {
51
53
  src: any[];
52
54
  lazyLoad: boolean;
53
55
  lazyLoadMargin: string;
56
+ closable: boolean;
54
57
  };
55
58
  get adapter(): {
56
59
  getContext(key: string): any;
@@ -1,3 +1,4 @@
1
+ import _omit from "lodash/omit";
1
2
  import _isEqual from "lodash/isEqual";
2
3
  import _isObject from "lodash/isObject";
3
4
  var __rest = this && this.__rest || function (s, e) {
@@ -145,6 +146,10 @@ export default class Preview extends BaseComponent {
145
146
  setDownloadName
146
147
  } = _a,
147
148
  restProps = __rest(_a, ["src", "className", "style", "lazyLoad", "setDownloadName"]);
149
+ const previewInnerProps = Object.assign(Object.assign({}, _omit(restProps, ['previewCls', 'previewStyle'])), {
150
+ className: restProps === null || restProps === void 0 ? void 0 : restProps.previewCls,
151
+ style: restProps === null || restProps === void 0 ? void 0 : restProps.previewStyle
152
+ });
148
153
  const {
149
154
  currentIndex,
150
155
  visible
@@ -173,7 +178,7 @@ export default class Preview extends BaseComponent {
173
178
  id: this.previewGroupId,
174
179
  style: style,
175
180
  className: cls(`${prefixCls}-preview-group`, className)
176
- }, newChildren), /*#__PURE__*/React.createElement(PreviewInner, Object.assign({}, restProps, {
181
+ }, newChildren), /*#__PURE__*/React.createElement(PreviewInner, Object.assign({}, previewInnerProps, {
177
182
  ref: this.previewRef,
178
183
  src: finalSrcList,
179
184
  currentIndex: currentIndex,
@@ -207,6 +212,8 @@ Preview.propTypes = {
207
212
  lazyLoadMargin: PropTypes.string,
208
213
  preLoad: PropTypes.bool,
209
214
  preLoadGap: PropTypes.number,
215
+ previewCls: PropTypes.string,
216
+ previewStyle: PropTypes.object,
210
217
  disableDownload: PropTypes.bool,
211
218
  zIndex: PropTypes.number,
212
219
  renderHeader: PropTypes.func,
@@ -226,5 +233,6 @@ Preview.propTypes = {
226
233
  Preview.defaultProps = {
227
234
  src: [],
228
235
  lazyLoad: true,
229
- lazyLoadMargin: "0px 100px 100px 0px"
236
+ lazyLoadMargin: "0px 100px 100px 0px",
237
+ closable: true
230
238
  };
@@ -9,7 +9,8 @@ const Header = /*#__PURE__*/forwardRef((_ref, ref) => {
9
9
  onClose,
10
10
  titleStyle,
11
11
  className,
12
- renderHeader
12
+ renderHeader,
13
+ closable
13
14
  } = _ref;
14
15
  return /*#__PURE__*/React.createElement(PreviewContext.Consumer, null, _ref2 => {
15
16
  let {
@@ -26,7 +27,7 @@ const Header = /*#__PURE__*/forwardRef((_ref, ref) => {
26
27
  }, /*#__PURE__*/React.createElement("section", {
27
28
  className: `${prefixCls}-title`,
28
29
  style: titleStyle
29
- }, renderHeader ? renderHeader(title) : title), /*#__PURE__*/React.createElement("section", {
30
+ }, renderHeader ? renderHeader(title) : title), closable && /*#__PURE__*/React.createElement("section", {
30
31
  className: `${prefixCls}-close`,
31
32
  onMouseUp: onClose
32
33
  }, /*#__PURE__*/React.createElement(IconClose, null)));