@aloudata/aloudata-design 2.14.5 → 2.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/AldSelect/BaseSelect.d.ts +2 -5
  2. package/dist/AldSelect/BaseSelect.js +15 -4
  3. package/dist/AldSelect/SelectTrigger.d.ts +3 -3
  4. package/dist/AldSelect/Selector/MultipleResponsiveSelectedSection.d.ts +5 -1
  5. package/dist/AldSelect/Selector/MultipleResponsiveSelectedSection.js +22 -4
  6. package/dist/AldSelect/Selector/MultipleSelector.d.ts +3 -1
  7. package/dist/AldSelect/Selector/MultipleSelector.js +27 -17
  8. package/dist/AldSelect/Selector/index.d.ts +3 -1
  9. package/dist/AldSelect/Selector/index.js +3 -1
  10. package/dist/AldSelect/components/PopupContent.d.ts +2 -2
  11. package/dist/AldSelect/hooks/useDisplayMenu.d.ts +2 -3
  12. package/dist/AldSelect/hooks/useOptions.d.ts +6 -5
  13. package/dist/AldSelect/hooks/useOptions.js +8 -7
  14. package/dist/AldSelect/index.js +11 -4
  15. package/dist/AldSelect/interface.d.ts +13 -5
  16. package/dist/AldSelect/style/index.less +43 -10
  17. package/dist/AldSelect/utils/commonUtil.d.ts +2 -3
  18. package/dist/AldSelect/utils/commonUtil.js +14 -3
  19. package/dist/Dropdown/index.d.ts +1 -1
  20. package/dist/Dropdown/index.js +1 -1
  21. package/dist/LogicTree/components/LogicItem/index.js +58 -18
  22. package/dist/LogicTree/style/index.less +1 -1
  23. package/dist/MemberPicker/index.js +61 -16
  24. package/dist/MemberPicker/interface.d.ts +3 -3
  25. package/dist/MemberPicker/style/index.less +3 -3
  26. package/dist/Table/helper.d.ts +1 -1
  27. package/dist/ald.min.css +1 -1
  28. package/dist/index.d.ts +1 -0
  29. package/dist/locale/default.d.ts +1 -1
  30. package/dist/locale/zh_CN.js +1 -1
  31. package/package.json +1 -1
@@ -1,8 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import type { AlignType } from 'rc-trigger/lib/interface';
3
3
  import { PlacementType } from '../Dropdown';
4
- import { BaseSelectRef, ISelectProps, LabelInValueType } from './interface';
5
- import { MenuProps } from '../Menu';
4
+ import { BaseSelectRef, ISelectProps, LabelInValueType, SelectMenuProps } from './interface';
6
5
  export type RenderNode = React.ReactNode | ((props: any) => React.ReactNode);
7
6
  export type RenderDOMFunc = (props: any) => HTMLElement;
8
7
  export type Mode = 'multiple' | {
@@ -36,11 +35,10 @@ export interface BaseSelectProps extends BaseSelectPrivateProps, ISelectProps, R
36
35
  className?: string;
37
36
  style?: React.CSSProperties;
38
37
  notFoundContent?: React.ReactNode;
39
- placeholder?: string;
40
38
  onClear?: () => void;
41
39
  innerSearchValue?: string;
42
40
  setInnerSearchValue?: (value: string) => void;
43
- displayMenu?: MenuProps;
41
+ displayMenu?: SelectMenuProps;
44
42
  open?: boolean;
45
43
  defaultOpen?: boolean;
46
44
  onOpenChange?: (open: boolean) => void;
@@ -48,7 +46,6 @@ export interface BaseSelectProps extends BaseSelectPrivateProps, ISelectProps, R
48
46
  allowClear?: boolean;
49
47
  showArrow?: boolean;
50
48
  suffixIcon?: React.ReactNode;
51
- dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
52
49
  dropdownAlign?: AlignType;
53
50
  placement?: PlacementType;
54
51
  getPopupContainer?: RenderDOMFunc;
@@ -1,3 +1,4 @@
1
+ var _excluded = ["id", "className", "displayValues", "onDisplayValuesChange", "displayMenu", "notFoundContent", "onClear", "width", "mode", "status", "onOptionSelect", "onClick", "size", "borderLess", "disabled", "placeholder", "open", "defaultOpen", "onOpenChange", "showSearch", "innerSearchValue", "setInnerSearchValue", "allowClear", "showArrow", "prefix", "suffixIcon", "dropdownRender", "overlayStyle", "dropdownStyle", "popupMatchSelectWidth", "placement", "popupClassName", "style", "listHeight"];
1
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
3
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
4
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -10,6 +11,8 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
10
11
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
12
  function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
12
13
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
15
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
13
16
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
14
17
  import * as React from 'react';
15
18
  import useMergedState from 'rc-util/lib/hooks/useMergedState';
@@ -29,7 +32,7 @@ export function isMultiple(mode) {
29
32
  return !!mode;
30
33
  }
31
34
  export function isResponsive(mode) {
32
- return _typeof(mode) === 'object' && (mode === null || mode === void 0 ? void 0 : mode.responsive);
35
+ return mode === 'multiple' || _typeof(mode) === 'object' && (mode === null || mode === void 0 ? void 0 : mode.responsive);
33
36
  }
34
37
  var BaseSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {
35
38
  var _setClassNames;
@@ -69,10 +72,12 @@ var BaseSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {
69
72
  placement = props.placement,
70
73
  popupClassName = props.popupClassName,
71
74
  style = props.style,
72
- listHeight = props.listHeight;
75
+ listHeight = props.listHeight,
76
+ restProps = _objectWithoutProperties(props, _excluded);
73
77
  var setClassNames = prefixCls('select');
74
78
  var selectRef = useRef(null);
75
79
  var widthStyle = getWidthStyle(width);
80
+ var dropdownRef = useRef(null);
76
81
  var isResponsiveMode = isResponsive(mode);
77
82
  var isMultipleMode = isMultiple(mode);
78
83
  /** Used for component focused management */
@@ -189,11 +194,14 @@ var BaseSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {
189
194
  open: !!mergedOpen,
190
195
  notFoundContent: notFoundContent,
191
196
  menu: showMenu,
197
+ ref: dropdownRef,
192
198
  showSearch: showSearch,
193
199
  searchValue: innerSearchValue,
194
200
  setInnerSearchValue: setInnerSearchValue,
195
201
  popupMatchSelectWidth: popupMatchSelectWidth,
196
- overlayClassName: popupClassName,
202
+ overlayClassName: popupClassName
203
+ // @ts-ignore
204
+ ,
197
205
  dropdownRender: dropdownRender,
198
206
  overlayStyle: overlayStyle || dropdownStyle,
199
207
  listHeight: listHeight,
@@ -215,8 +223,11 @@ var BaseSelect = /*#__PURE__*/React.forwardRef(function (props, ref) {
215
223
  className: setClassNames('prefix')
216
224
  }, prefix), _.isEmpty(displayValues) && /*#__PURE__*/React.createElement("div", {
217
225
  className: setClassNames('placeholder')
218
- }, placeholder), !_.isEmpty(displayValues) && /*#__PURE__*/React.createElement(Selector, _extends({}, props, {
226
+ }, placeholder), !_.isEmpty(displayValues) && /*#__PURE__*/React.createElement(Selector, _extends({}, restProps, {
227
+ suffixIcon: suffixIcon,
219
228
  size: size,
229
+ mode: mode,
230
+ dropdownRef: dropdownRef,
220
231
  displayValues: displayValues,
221
232
  onToggleOpen: onToggleOpen,
222
233
  onRemove: onSelectorRemove,
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { ScrollTo } from 'rc-virtual-list/lib/List';
3
- import { DropdownProps } from '..';
3
+ import { IDropdownProps } from '../Dropdown';
4
4
  import { SelectOptionType } from '../Select';
5
5
  export interface RefTriggerProps {
6
6
  getPopupElement: () => HTMLDivElement | null;
@@ -10,10 +10,10 @@ export interface RefSelectorProps {
10
10
  blur: () => void;
11
11
  scrollTo?: ScrollTo;
12
12
  }
13
- export interface SelectTriggerProps extends DropdownProps {
13
+ export interface SelectTriggerProps extends IDropdownProps {
14
14
  open: boolean;
15
15
  notFoundContent?: React.ReactNode;
16
- popupMatchSelectWidth?: boolean;
16
+ popupMatchSelectWidth?: boolean | number;
17
17
  showSearch?: boolean;
18
18
  searchValue?: string;
19
19
  setInnerSearchValue?: (value: string) => void;
@@ -1,7 +1,11 @@
1
- import React from 'react';
1
+ import React, { RefObject } from 'react';
2
2
  import { DisplayValueType } from '../interface';
3
+ import { RefTriggerProps } from '../SelectTrigger';
3
4
  export default function MultipleResponsiveSelectedSection(params: {
4
5
  displayValues: DisplayValueType[];
5
6
  renderItem: (valueItem: DisplayValueType) => React.JSX.Element | null;
6
7
  onToggleOpen: (open: boolean) => void;
8
+ dropdownRef: RefObject<RefTriggerProps>;
9
+ maxHeight?: number;
10
+ suffixIcon?: React.ReactNode;
7
11
  }): React.JSX.Element;
@@ -1,8 +1,13 @@
1
1
  import React, { useEffect, useRef } from 'react';
2
+ import ScrollArea from "../../ScrollArea";
3
+ import Suffix from "../components/Suffix";
2
4
  export default function MultipleResponsiveSelectedSection(params) {
3
5
  var displayValues = params.displayValues,
4
6
  renderItem = params.renderItem,
5
- onToggleOpen = params.onToggleOpen;
7
+ onToggleOpen = params.onToggleOpen,
8
+ dropdownRef = params.dropdownRef,
9
+ maxHeight = params.maxHeight,
10
+ suffixIcon = params.suffixIcon;
6
11
  var multipleSelectedSectionRef = useRef(null);
7
12
  useEffect(function () {
8
13
  function getSelect() {
@@ -14,9 +19,10 @@ export default function MultipleResponsiveSelectedSection(params) {
14
19
  return null;
15
20
  }
16
21
  function close(e) {
22
+ var _dropdownRef$current, _dropdownRef$current$;
17
23
  var target = e.target;
18
24
  var select = getSelect();
19
- if (select && target.contains(select)) {
25
+ if (select && !select.contains(target) && !((_dropdownRef$current = dropdownRef.current) !== null && _dropdownRef$current !== void 0 && (_dropdownRef$current$ = _dropdownRef$current.getPopupElement()) !== null && _dropdownRef$current$ !== void 0 && _dropdownRef$current$.contains(target))) {
20
26
  onToggleOpen(false);
21
27
  }
22
28
  }
@@ -24,9 +30,21 @@ export default function MultipleResponsiveSelectedSection(params) {
24
30
  return function () {
25
31
  document.removeEventListener('click', close);
26
32
  };
27
- }, [onToggleOpen]);
33
+ }, [onToggleOpen, dropdownRef]);
28
34
  return /*#__PURE__*/React.createElement("div", {
29
35
  ref: multipleSelectedSectionRef,
30
36
  className: "beta-ald-select-selector-multiple-responsive-selected-section"
31
- }, displayValues.map(renderItem));
37
+ }, /*#__PURE__*/React.createElement(ScrollArea, {
38
+ innerClassName: "beta-ald-select-selector-multiple-responsive-selected-section-inner",
39
+ innerStyle: {
40
+ maxHeight: maxHeight
41
+ }
42
+ }, /*#__PURE__*/React.createElement("div", {
43
+ className: "beta-ald-select-selector-multiple-responsive-selected-section-tags"
44
+ }, displayValues.map(renderItem))), /*#__PURE__*/React.createElement(Suffix, {
45
+ showArrow: true,
46
+ allowClear: false,
47
+ icon: suffixIcon,
48
+ displayValues: displayValues
49
+ }));
32
50
  }
@@ -1,12 +1,14 @@
1
- import React from 'react';
1
+ import React, { RefObject } from 'react';
2
2
  import { SelectorProps } from './index';
3
3
  import { DisplayValueType } from '../interface';
4
4
  import { CustomTagProps } from '../BaseSelect';
5
+ import { RefTriggerProps } from '../SelectTrigger';
5
6
  interface MultipleSelectorProps extends SelectorProps {
6
7
  onRemove: (value: DisplayValueType) => void;
7
8
  onToggleOpen: (open?: boolean) => void;
8
9
  tagRender?: (props: CustomTagProps, isPreview?: boolean) => React.ReactNode;
9
10
  maxTagPlaceholder?: React.ReactNode | ((omittedValues: DisplayValueType[]) => React.ReactNode);
11
+ dropdownRef: RefObject<RefTriggerProps>;
10
12
  }
11
13
  export default function MultipleSelector(props: MultipleSelectorProps): React.JSX.Element;
12
14
  export {};
@@ -9,6 +9,7 @@ import React, { useMemo, useState } from 'react';
9
9
  import Tag from "../../Tag";
10
10
  import { isMultiple, isResponsive } from "../BaseSelect";
11
11
  import ScrollArea from "../../ScrollArea";
12
+ import classNames from 'classnames';
12
13
  import _ from 'lodash';
13
14
  import Overflow from 'rc-overflow';
14
15
  import MultipleResponsiveSelectedSection from "./MultipleResponsiveSelectedSection";
@@ -30,11 +31,13 @@ export default function MultipleSelector(props) {
30
31
  onToggleOpen = props.onToggleOpen,
31
32
  mode = props.mode,
32
33
  disabled = props.disabled,
33
- _props$maxTagPlacehol = props.maxTagPlaceholder,
34
- maxTagPlaceholder = _props$maxTagPlacehol === void 0 ? function (omittedValues) {
35
- return "+ ".concat(omittedValues.length === displayValues.length ? omittedValues.length - 1 : omittedValues.length, " ...");
36
- } : _props$maxTagPlacehol,
37
- showResponsiveSelectedSection = props.showResponsiveSelectedSection;
34
+ maxTagPlaceholder = props.maxTagPlaceholder,
35
+ showResponsiveSelectedSection = props.showResponsiveSelectedSection,
36
+ dropdownRef = props.dropdownRef,
37
+ suffixIcon = props.suffixIcon;
38
+ var innerMaxTagPlaceholder = function innerMaxTagPlaceholder(omittedValues) {
39
+ return "+ ".concat(omittedValues.length === displayValues.length ? omittedValues.length - 1 : omittedValues.length);
40
+ };
38
41
  var _useState = useState(0),
39
42
  _useState2 = _slicedToArray(_useState, 2),
40
43
  showItemIndex = _useState2[0],
@@ -42,9 +45,9 @@ export default function MultipleSelector(props) {
42
45
  var customizeRenderSelector = function customizeRenderSelector(value, content, itemDisabled, closable, onClose, isPreview) {
43
46
  var onMouseDown = function onMouseDown(e) {
44
47
  onPreventMouseDown(e);
45
- onToggleOpen(!open);
46
48
  };
47
49
  return /*#__PURE__*/React.createElement("span", {
50
+ className: "beta-ald-select-custom-tag-render-wrapper",
48
51
  onMouseDown: onMouseDown,
49
52
  key: value
50
53
  }, tagRender === null || tagRender === void 0 ? void 0 : tagRender({
@@ -93,8 +96,8 @@ export default function MultipleSelector(props) {
93
96
  if (displayValues.length === 1) {
94
97
  return null;
95
98
  }
96
- var content = typeof maxTagPlaceholder === 'function' ? maxTagPlaceholder(omittedValues.length === displayValues.length ? omittedValues.slice(1, omittedValues.length) : omittedValues) : maxTagPlaceholder;
97
- return typeof tagRender === 'function' ? customizeRenderSelector(undefined, content, false, false, undefined) : defaultRenderSelector({
99
+ var content = typeof maxTagPlaceholder === 'function' ? maxTagPlaceholder(omittedValues.length === displayValues.length ? omittedValues.slice(1, omittedValues.length) : omittedValues) : innerMaxTagPlaceholder(omittedValues.length === displayValues.length ? omittedValues.slice(1, omittedValues.length) : omittedValues);
100
+ return typeof maxTagPlaceholder === 'function' ? content : defaultRenderSelector({
98
101
  title: content
99
102
  }, content, false);
100
103
  };
@@ -103,15 +106,16 @@ export default function MultipleSelector(props) {
103
106
  };
104
107
  var maxHeight = useMemo(function () {
105
108
  if (isMultiple(mode)) {
109
+ var maxRows;
106
110
  if (_typeof(mode) === 'object') {
107
- var maxRows = mode.maxRows;
108
- if (!maxRows) {
109
- // 2.5行高+2行间距
110
- return 2.5 * tagHeight + 2 * gap;
111
- } else {
112
- // 总行高+总行间距
113
- return maxRows * tagHeight + (maxRows - 1) * gap;
114
- }
111
+ maxRows = mode.maxRows;
112
+ }
113
+ if (!maxRows) {
114
+ // 2.5行高+2行间距
115
+ return 2.5 * tagHeight + 2 * gap;
116
+ } else {
117
+ // 总行高+总行间距
118
+ return maxRows * tagHeight + (maxRows - 1) * gap;
115
119
  }
116
120
  }
117
121
  return undefined;
@@ -125,6 +129,9 @@ export default function MultipleSelector(props) {
125
129
  prefixCls: overflowPrefixCls,
126
130
  data: displayValues,
127
131
  renderItem: renderItem,
132
+ className: classNames({
133
+ 'beta-ald-select-selector-overflow-hidden': showItemIndex === -1 && displayValues.length === 1
134
+ }),
128
135
  renderRest: renderRest,
129
136
  suffix: null,
130
137
  itemKey: itemKey,
@@ -133,7 +140,10 @@ export default function MultipleSelector(props) {
133
140
  }), showResponsiveSelectedSection && /*#__PURE__*/React.createElement(MultipleResponsiveSelectedSection, {
134
141
  displayValues: displayValues,
135
142
  renderItem: renderItem,
136
- onToggleOpen: onToggleOpen
143
+ maxHeight: maxHeight,
144
+ suffixIcon: suffixIcon,
145
+ onToggleOpen: onToggleOpen,
146
+ dropdownRef: dropdownRef
137
147
  }));
138
148
  }
139
149
  return /*#__PURE__*/React.createElement(ScrollArea, {
@@ -1,9 +1,11 @@
1
1
  import { DisplayValueType, ISelectProps, LabelInValueType } from '../interface';
2
- import React from 'react';
2
+ import React, { RefObject } from 'react';
3
+ import { RefTriggerProps } from '../SelectTrigger';
3
4
  export interface SelectorProps extends ISelectProps {
4
5
  displayValues: LabelInValueType[];
5
6
  onRemove: (value: DisplayValueType) => void;
6
7
  onToggleOpen: (open?: boolean) => void;
7
8
  showResponsiveSelectedSection: boolean;
9
+ dropdownRef: RefObject<RefTriggerProps>;
8
10
  }
9
11
  export default function Selector(props: SelectorProps): React.JSX.Element;
@@ -9,10 +9,12 @@ export default function Selector(props) {
9
9
  displayValues = props.displayValues,
10
10
  onRemove = props.onRemove,
11
11
  onToggleOpen = props.onToggleOpen,
12
- showResponsiveSelectedSection = props.showResponsiveSelectedSection;
12
+ showResponsiveSelectedSection = props.showResponsiveSelectedSection,
13
+ dropdownRef = props.dropdownRef;
13
14
  if (isMultiple(mode)) {
14
15
  return /*#__PURE__*/React.createElement(MultipleSelector, _extends({}, props, {
15
16
  onRemove: onRemove,
17
+ dropdownRef: dropdownRef,
16
18
  onToggleOpen: onToggleOpen,
17
19
  showResponsiveSelectedSection: showResponsiveSelectedSection
18
20
  }));
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { MenuProps } from '../../Menu';
2
+ import { SelectMenuProps } from '../interface';
3
3
  export default function PopupContent(props: {
4
4
  content: React.ReactNode;
5
5
  notFoundContent: React.ReactNode;
6
6
  dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
7
- menuProps?: MenuProps;
7
+ menuProps?: SelectMenuProps;
8
8
  }): React.JSX.Element;
@@ -1,3 +1,2 @@
1
- import { MenuProps } from '../../Menu';
2
- import { DefaultOptionType } from '../interface';
3
- export default function useDisplayMenu(menu: MenuProps, filterOptions?: (inputValue: string, option: DefaultOptionType) => boolean, innerSearchValue?: string): MenuProps;
1
+ import { DefaultOptionType, SelectMenuProps } from '../interface';
2
+ export default function useDisplayMenu(menu: SelectMenuProps, filterOptions?: (inputValue: string, option: DefaultOptionType) => boolean, innerSearchValue?: string): SelectMenuProps;
@@ -1,11 +1,12 @@
1
- import type { DefaultOptionType, DraftValueType, RawValueType } from '../interface';
2
- import { ItemType, MenuProps, SubMenuType } from '../../Menu';
1
+ import * as React from 'react';
2
+ import type { DefaultOptionType, DraftValueType, RawValueType, SelectItemType, SelectMenuItemType, SelectMenuProps } from '../interface';
3
3
  export declare function isRawValue(value: DraftValueType): value is RawValueType;
4
4
  /**
5
5
  * Parse `children` to `options` if `options` is not provided.
6
6
  * Then flatten the `options`.
7
7
  */
8
- export default function useOptions<OptionType extends DefaultOptionType>(menu?: MenuProps, options?: OptionType[], value?: DraftValueType): {
9
- menu: MenuProps;
10
- keyMenuItems: Map<string, ItemType | SubMenuType>;
8
+ export default function useOptions<OptionType extends DefaultOptionType>(menu?: SelectMenuProps, options?: OptionType[], value?: DraftValueType, optionLabelProp?: string): {
9
+ menu: SelectMenuProps;
10
+ keyMenuItems: Map<string, SelectItemType>;
11
+ labelMenuItems: Map<React.ReactNode, SelectMenuItemType>;
11
12
  };
@@ -14,7 +14,7 @@ export function isRawValue(value) {
14
14
  * Parse `children` to `options` if `options` is not provided.
15
15
  * Then flatten the `options`.
16
16
  */
17
- export default function useOptions(menu, options, value) {
17
+ export default function useOptions(menu, options, value, optionLabelProp) {
18
18
  return React.useMemo(function () {
19
19
  var selectedKeys = [];
20
20
  if (value) {
@@ -35,8 +35,7 @@ export default function useOptions(menu, options, value) {
35
35
  selectedKeys: selectedKeys
36
36
  }) : convertOptionsToMenu(options || [], selectedKeys);
37
37
  var keyMenuItems = new Map();
38
- // const labelMenuItems = new Map<React.ReactNode, MenuItemType>();
39
-
38
+ var labelMenuItems = new Map();
40
39
  function dig(menuItems) {
41
40
  // for loop to speed up collection speed
42
41
  for (var i = 0; i < menuItems.length; i += 1) {
@@ -49,15 +48,17 @@ export default function useOptions(menu, options, value) {
49
48
  continue;
50
49
  } else {
51
50
  keyMenuItems.set(menuItem.key, menuItem);
52
- // labelMenuItems.set(menuItem.label, menuItem);
51
+ if (optionLabelProp) {
52
+ labelMenuItems.set(menuItem[optionLabelProp], menuItem);
53
+ }
53
54
  }
54
55
  }
55
56
  }
56
-
57
57
  dig(mergedMenu.items || []);
58
58
  return {
59
59
  menu: mergedMenu,
60
- keyMenuItems: keyMenuItems
60
+ keyMenuItems: keyMenuItems,
61
+ labelMenuItems: labelMenuItems
61
62
  };
62
- }, [options, menu, value]);
63
+ }, [value, menu, options, optionLabelProp]);
63
64
  }
@@ -34,7 +34,8 @@ export default /*#__PURE__*/forwardRef(function AldSelect(props, ref) {
34
34
  onDeselect = props.onDeselect,
35
35
  labelInValue = props.labelInValue,
36
36
  filterOption = props.filterOption,
37
- searchValue = props.searchValue;
37
+ searchValue = props.searchValue,
38
+ optionLabelProp = props.optionLabelProp;
38
39
 
39
40
  // =========================== Values ===========================
40
41
  var _useMergedState = useMergedState(defaultValue, {
@@ -67,14 +68,20 @@ export default /*#__PURE__*/forwardRef(function AldSelect(props, ref) {
67
68
  if (isRawValue(val)) {
68
69
  rawValue = val;
69
70
  } else {
71
+ var _ref;
70
72
  rawLabel = val.label;
71
- rawValue = val.value;
73
+ // @ts-ignore val.key是为了兼容存在key的情况
74
+ rawValue = (_ref = val.value) !== null && _ref !== void 0 ? _ref : val.key;
72
75
  }
73
76
  var menuItem = keyMenuItems.get(rawValue.toString());
74
77
  if (menuItem) {
75
78
  // Fill missing props
76
79
  if (rawLabel === undefined) {
77
- rawLabel = menuItem.label;
80
+ if (optionLabelProp) {
81
+ rawLabel = menuItem[optionLabelProp] || menuItem.label;
82
+ } else {
83
+ rawLabel = menuItem.label;
84
+ }
78
85
  }
79
86
  rawDisabled = menuItem.disabled;
80
87
  }
@@ -84,7 +91,7 @@ export default /*#__PURE__*/forwardRef(function AldSelect(props, ref) {
84
91
  disabled: rawDisabled
85
92
  };
86
93
  });
87
- }, [keyMenuItems]);
94
+ }, [keyMenuItems, optionLabelProp]);
88
95
 
89
96
  // Merged value with LabelValueType
90
97
  var rawLabeledValues = React.useMemo(function () {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { PlacementType } from '../Dropdown';
3
- import { MenuProps } from '../Menu';
3
+ import { ItemType, MenuDividerType, MenuHeaderType, MenuProps, SubMenuType } from '../Menu';
4
4
  import { CustomTagProps, Mode } from './BaseSelect';
5
5
  type ArrayElementType<T> = T extends (infer E)[] ? E : T;
6
6
  export interface ISelectProps<ValueType = any, OptionType extends BaseOptionType = DefaultOptionType> {
@@ -24,13 +24,13 @@ export interface ISelectProps<ValueType = any, OptionType extends BaseOptionType
24
24
  placement?: PlacementType;
25
25
  labelInValue?: boolean;
26
26
  options?: OptionType[];
27
- menu?: MenuProps;
27
+ menu?: SelectMenuProps;
28
28
  value?: ValueType | null;
29
29
  defaultValue?: ValueType | null;
30
30
  onChange?: (value: ValueType, option: OptionType | OptionType[]) => void;
31
- placeholder?: string;
31
+ placeholder?: React.ReactNode;
32
32
  onClear?: () => void;
33
- dropdownRender?: (menu: React.ReactNode) => React.ReactNode;
33
+ dropdownRender?: (menu: React.ReactElement) => React.ReactElement;
34
34
  dropdownStyle?: React.CSSProperties;
35
35
  overlayStyle?: React.CSSProperties;
36
36
  style?: React.CSSProperties;
@@ -38,7 +38,7 @@ export interface ISelectProps<ValueType = any, OptionType extends BaseOptionType
38
38
  onOpenChange?: (open: boolean) => void;
39
39
  getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
40
40
  onInputKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
41
- popupMatchSelectWidth?: boolean;
41
+ popupMatchSelectWidth?: boolean | number;
42
42
  onSelect?: SelectHandler<ArrayElementType<ValueType>, OptionType>;
43
43
  onDeselect?: SelectHandler<ArrayElementType<ValueType>, OptionType>;
44
44
  notFoundContent?: React.ReactNode;
@@ -46,6 +46,7 @@ export interface ISelectProps<ValueType = any, OptionType extends BaseOptionType
46
46
  tagRender?: (props: CustomTagProps, isPreview?: boolean) => React.ReactNode;
47
47
  maxTagPlaceholder?: React.ReactNode | ((omittedValues: DisplayValueType[]) => React.ReactNode);
48
48
  onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
49
+ optionLabelProp?: string;
49
50
  }
50
51
  export interface BaseOptionType {
51
52
  disabled?: boolean;
@@ -89,4 +90,11 @@ export interface DefaultOptionType extends BaseOptionType {
89
90
  value?: string | number | null;
90
91
  children?: Omit<DefaultOptionType, 'children'>[];
91
92
  }
93
+ export interface SelectItemType extends ItemType {
94
+ [key: string]: any;
95
+ }
96
+ export type SelectMenuItemType = SelectItemType | MenuDividerType | SubMenuType | MenuHeaderType;
97
+ export interface SelectMenuProps extends Omit<MenuProps, 'items'> {
98
+ items: SelectMenuItemType[];
99
+ }
92
100
  export {};
@@ -46,7 +46,7 @@
46
46
  }
47
47
 
48
48
  .beta-ald-select-selector:not(.beta-ald-select-selector-multiple-default) {
49
- min-width: 0;
49
+ min-width: 10px;
50
50
  overflow: hidden;
51
51
  white-space: nowrap;
52
52
  text-overflow: ellipsis;
@@ -55,17 +55,19 @@
55
55
  .beta-ald-select-selector-multiple-responsive {
56
56
  display: flex;
57
57
  align-items: center;
58
- line-height: 0;
58
+ // line-height: 0;
59
59
  gap: 4px;
60
60
 
61
61
  .beta-ald-select-selector-overflow {
62
- width: 100%;
63
- flex-grow: 1;
64
- flex-shrink: 1;
62
+ max-width: 100%;
65
63
  display: flex;
66
64
  gap: 4px;
65
+ flex: auto;
67
66
 
68
67
  .beta-ald-select-selector-overflow-item {
68
+ display: flex;
69
+ align-items: center;
70
+
69
71
  .ald-tag-content {
70
72
  display: flex;
71
73
  align-items: center;
@@ -74,9 +76,18 @@
74
76
  text-overflow: ellipsis;
75
77
  white-space: nowrap;
76
78
  }
79
+
80
+ .beta-ald-select-custom-tag-render-wrapper {
81
+ display: flex;
82
+ align-items: center;
83
+ }
77
84
  }
78
85
  }
79
86
 
87
+ .beta-ald-select-selector-overflow-hidden {
88
+ display: none;
89
+ }
90
+
80
91
  .beta-ald-select-selector-overflow-item-first {
81
92
  display: flex;
82
93
  min-width: 32px;
@@ -84,6 +95,23 @@
84
95
  overflow: hidden;
85
96
  text-overflow: ellipsis;
86
97
  white-space: nowrap;
98
+
99
+ > div,
100
+ > span {
101
+ min-width: 0;
102
+ flex: 1;
103
+ }
104
+
105
+ .beta-ald-select-custom-tag-render-wrapper {
106
+ display: flex;
107
+ align-items: center;
108
+
109
+ > div,
110
+ > span {
111
+ min-width: 0;
112
+ flex: 1;
113
+ }
114
+ }
87
115
  }
88
116
 
89
117
  .beta-ald-select-selector-multiple-responsive-selected-section {
@@ -91,13 +119,17 @@
91
119
  position: absolute;
92
120
  top: -1px;
93
121
  left: -1px;
94
- display: flex;
95
- gap: 4px;
96
- flex-wrap: wrap;
97
- align-items: flex-start;
98
122
  border-width: 1px;
99
123
  border-style: solid;
100
124
  background-color: #fff;
125
+ z-index: 1;
126
+
127
+ .beta-ald-select-selector-multiple-responsive-selected-section-tags {
128
+ align-items: flex-start;
129
+ display: flex !important;
130
+ flex-wrap: wrap;
131
+ gap: 4px;
132
+ }
101
133
  }
102
134
  }
103
135
 
@@ -124,7 +156,7 @@
124
156
  }
125
157
 
126
158
  .beta-ald-select-popup-container.ald-dropdown-overlay {
127
- min-width: 194px;
159
+ min-width: 0;
128
160
 
129
161
  .beta-ald-select-popup {
130
162
  width: 100%;
@@ -137,6 +169,7 @@
137
169
  .ald-menu {
138
170
  .szh-menu {
139
171
  border-radius: 0;
172
+ min-width: 0;
140
173
  }
141
174
  }
142
175
  }
@@ -1,8 +1,7 @@
1
1
  /// <reference types="react" />
2
- import { MenuProps } from '../../Menu';
3
- import { DefaultOptionType } from '../interface';
2
+ import { DefaultOptionType, SelectMenuProps } from '../interface';
4
3
  export declare function toArray<T>(value: T | T[]): T[];
5
4
  export declare const isClient: false | HTMLElement;
6
5
  /** Is client side and not jsdom */
7
6
  export declare const isBrowserClient: false | HTMLElement;
8
- export declare function convertOptionsToMenu(options: DefaultOptionType[], selectedKeys: React.Key[]): MenuProps;
7
+ export declare function convertOptionsToMenu(options: DefaultOptionType[], selectedKeys: React.Key[]): SelectMenuProps;