@laser-ui/components 0.6.2 → 0.6.4

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/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
4
4
 
5
+ ## [0.6.4](https://github.com/laser-ui/laser-ui/compare/v0.6.3...v0.6.4) (2024-05-27)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **components:** use custom title if provide customSelected ([0dbdb2f](https://github.com/laser-ui/laser-ui/commit/0dbdb2f285900c45cccdd5fed47eb3429f238d73))
10
+
11
+ ### Features
12
+
13
+ - **components:** transfer custom item even if no option ([9706ec5](https://github.com/laser-ui/laser-ui/commit/9706ec5e4aea60329b1cf9718b05a214acae3958))
14
+
15
+ ## [0.6.3](https://github.com/laser-ui/laser-ui/compare/v0.6.2...v0.6.3) (2024-05-24)
16
+
17
+ ### Features
18
+
19
+ - **components:** show selected even if no option ([ddcdf74](https://github.com/laser-ui/laser-ui/commit/ddcdf744faaf8c3ccd3359f00d5c56807b21b85f))
20
+
5
21
  ## [0.6.2](https://github.com/laser-ui/laser-ui/compare/v0.6.1...v0.6.2) (2024-04-26)
6
22
 
7
23
  **Note:** Version bump only for package @laser-ui/components
@@ -355,41 +355,39 @@ function CascaderFC(props, ref) {
355
355
  let suffixNode = null;
356
356
  let selectedLabel;
357
357
  if (multiple) {
358
- const selectedNodes = [];
359
- for (const v of _selected) {
360
- const node = nodesMap.get(v);
361
- if (node) {
362
- selectedNodes.push(node);
363
- }
364
- }
365
- suffixNode = (_jsx(Dropdown, { list: selectedNodes.map((node) => {
366
- const { value: itemValue, disabled: itemDisabled } = node.origin;
367
- const title = customSelected ? customSelected(node.origin) : getTreeNodeLabel(node);
368
- return {
369
- id: itemValue,
370
- title,
371
- type: 'item',
372
- disabled: itemDisabled,
373
- node,
374
- };
375
- }), onClick: (id, item) => {
376
- const checkeds = item.node.changeStatus('UNCHECKED', selected);
377
- changeSelected(Array.from(checkeds.keys()));
358
+ const selectedNodes = _selected.map((value) => {
359
+ const node = nodesMap.get(value);
360
+ return {
361
+ value,
362
+ label: customSelected ? customSelected(value, node === null || node === void 0 ? void 0 : node.origin) : node ? node.origin.label : String(value),
363
+ node,
364
+ };
365
+ });
366
+ suffixNode = (_jsx(Dropdown, { list: selectedNodes.map(({ value, label, node }) => ({
367
+ id: value,
368
+ title: label,
369
+ type: 'item',
370
+ disabled: node === null || node === void 0 ? void 0 : node.origin.disabled,
371
+ })), onClick: (id) => {
372
+ changeSelected((draft) => {
373
+ draft.splice(draft.findIndex((v) => v === id), 1);
374
+ });
378
375
  return false;
379
376
  }, children: _jsx(Tag, { tabIndex: -1, size: size, children: selected.size }) }));
380
- selectedNode = selectedNodes.map((node) => (_jsxs(Tag, { size: size, children: [customSelected ? customSelected(node.origin) : node.origin.label, !(node.disabled || disabled) && (_jsx("div", Object.assign({}, styled('cascader__close'), { role: "button", "aria-label": t('Close'), onClick: (e) => {
377
+ selectedNode = selectedNodes.map(({ value, label, node }) => (_jsxs(Tag, { size: size, children: [label, !((node === null || node === void 0 ? void 0 : node.disabled) || disabled) && (_jsx("div", Object.assign({}, styled('cascader__close'), { role: "button", "aria-label": t('Close'), onClick: (e) => {
381
378
  e.stopPropagation();
382
379
  const checkeds = node.changeStatus('UNCHECKED', selected);
383
380
  changeSelected(Array.from(checkeds.keys()));
384
- }, children: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }) })))] }, node.id)));
381
+ }, children: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }) })))] }, value)));
385
382
  }
386
383
  else {
387
384
  if (!isNull(selected)) {
388
385
  const node = nodesMap.get(selected);
389
- if (node) {
390
- selectedLabel = getTreeNodeLabel(node);
391
- selectedNode = customSelected ? customSelected(node.origin) : selectedLabel;
392
- }
386
+ selectedNode = selectedLabel = customSelected
387
+ ? customSelected(selected, node === null || node === void 0 ? void 0 : node.origin)
388
+ : node
389
+ ? getTreeNodeLabel(node)
390
+ : String(selected);
393
391
  }
394
392
  }
395
393
  return [selectedNode, suffixNode, selectedLabel];
@@ -33,7 +33,7 @@ export interface CascaderProps<V extends React.Key, T extends CascaderItem<V>> e
33
33
  virtual?: boolean | number;
34
34
  escClosable?: boolean;
35
35
  customItem?: (item: T) => React.ReactNode;
36
- customSelected?: (selected: T) => string;
36
+ customSelected?: (value: V, selected?: T) => string;
37
37
  customSearch?: {
38
38
  filter?: (value: string, item: T) => boolean;
39
39
  sort?: (a: T, b: T) => number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laser-ui/components",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "React components.",
5
5
  "keywords": [
6
6
  "ui",
@@ -26,8 +26,6 @@
26
26
  "module": "./index.js",
27
27
  "types": "./index.d.ts",
28
28
  "dependencies": {
29
- "@laser-ui/hooks": "0.6.2",
30
- "@laser-ui/utils": "0.6.2",
31
29
  "@material-design-icons/svg": "^0.14.12",
32
30
  "jss": "^10.10.0",
33
31
  "jss-preset-default": "^10.10.0",
@@ -42,5 +40,5 @@
42
40
  "access": "public",
43
41
  "directory": "../../dist/libs/components"
44
42
  },
45
- "gitHead": "f601b92f5f145bb94db8dd360b381ba0d55e05cc"
43
+ "gitHead": "ccc2e2ef68f25b2afa0ab67dd52aae4a13363fba"
46
44
  }
@@ -157,7 +157,7 @@ export function Pagination(props) {
157
157
  label: size.toString(),
158
158
  value: size,
159
159
  }));
160
- return (_jsx("div", { children: _jsx("div", { style: { paddingRight: gap }, children: _jsx(Select, { list: list, model: pageSize, size: mini ? 'small' : undefined, customItem: (item) => (customRender && customRender.pageSize ? customRender.pageSize(item.value) : item.label), customSelected: (select) => `${select.label}${t('Pagination', ' / Page')}`, onModelChange: (value) => {
160
+ return (_jsx("div", { children: _jsx("div", { style: { paddingRight: gap }, children: _jsx(Select, { list: list, model: pageSize, size: mini ? 'small' : undefined, customItem: (item) => (customRender && customRender.pageSize ? customRender.pageSize(item.value) : item.label), customSelected: (value, selected) => (selected ? `${selected.label}${t('Pagination', ' / Page')}` : String(value)), onModelChange: (value) => {
161
161
  if (!isNull(value)) {
162
162
  changePageSize(value);
163
163
  }
package/select/Select.js CHANGED
@@ -369,38 +369,32 @@ function SelectFC(props, ref) {
369
369
  let suffixNode = null;
370
370
  let selectedLabel;
371
371
  if (multiple) {
372
- const selectedItems = [];
373
- for (const v of _selected) {
374
- const item = itemsMap.get(v);
375
- if (item) {
376
- selectedItems.push(item);
377
- }
378
- }
379
- suffixNode = (_jsx(Dropdown, { list: selectedItems.map((item) => {
380
- const { label: itemLabel, value: itemValue, disabled: itemDisabled } = item;
381
- const text = customSelected ? customSelected(item) : itemLabel;
382
- return {
383
- id: itemValue,
384
- title: text,
385
- type: 'item',
386
- disabled: itemDisabled,
387
- };
388
- }), onClick: (id) => {
372
+ const selectedItems = _selected.map((value) => {
373
+ const item = itemsMap.get(value);
374
+ return {
375
+ value,
376
+ label: customSelected ? customSelected(value, item) : item ? item.label : String(value),
377
+ item,
378
+ };
379
+ });
380
+ suffixNode = (_jsx(Dropdown, { list: selectedItems.map(({ value, label, item }) => ({
381
+ id: value,
382
+ title: label,
383
+ type: 'item',
384
+ disabled: item === null || item === void 0 ? void 0 : item.disabled,
385
+ })), onClick: (id) => {
389
386
  changeSelectedByClick(id);
390
387
  return false;
391
388
  }, children: _jsx(Tag, { tabIndex: -1, size: size, children: selected.size }) }));
392
- selectedNode = selectedItems.map((item) => (_jsxs(Tag, { size: size, children: [customSelected ? customSelected(item) : item.label, !(item.disabled || disabled) && (_jsx("div", Object.assign({}, styled('select__close'), { role: "button", "aria-label": t('Close'), onClick: (e) => {
389
+ selectedNode = selectedItems.map(({ value, label, item }) => (_jsxs(Tag, { size: size, children: [label, !((item === null || item === void 0 ? void 0 : item.disabled) || disabled) && (_jsx("div", Object.assign({}, styled('select__close'), { role: "button", "aria-label": t('Close'), onClick: (e) => {
393
390
  e.stopPropagation();
394
- changeSelectedByClick(item.value);
395
- }, children: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }) })))] }, item.value)));
391
+ changeSelectedByClick(value);
392
+ }, children: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }) })))] }, value)));
396
393
  }
397
394
  else {
398
395
  if (!isNull(selected)) {
399
396
  const item = itemsMap.get(selected);
400
- if (item) {
401
- selectedLabel = item.label;
402
- selectedNode = customSelected ? customSelected(item) : selectedLabel;
403
- }
397
+ selectedNode = selectedLabel = customSelected ? customSelected(selected, item) : item ? item.label : String(selected);
404
398
  }
405
399
  }
406
400
  return [selectedNode, suffixNode, selectedLabel];
package/select/types.d.ts CHANGED
@@ -32,7 +32,7 @@ export interface SelectProps<V extends React.Key, T extends SelectItem<V>> exten
32
32
  virtual?: boolean | number;
33
33
  escClosable?: boolean;
34
34
  customItem?: (item: T) => React.ReactNode;
35
- customSelected?: (selected: T) => string;
35
+ customSelected?: (value: V, selected?: T) => string;
36
36
  customSearch?: {
37
37
  filter?: (value: string, item: T) => boolean;
38
38
  sort?: (a: T, b: T) => number;
@@ -5,7 +5,7 @@ import KeyboardArrowRightOutlined from '@material-design-icons/svg/outlined/keyb
5
5
  import { isUndefined } from 'lodash';
6
6
  import { useMemo } from 'react';
7
7
  import { TransferPanel } from './internal/TransferPanel';
8
- import { CLASSES, IS_SELECTED } from './vars';
8
+ import { CLASSES, IS_SELECTED, NO_MATCH } from './vars';
9
9
  import { Button } from '../button';
10
10
  import { useComponentProps, useControlled, useDesign, useNamespace, useScopedProps, useStyled } from '../hooks';
11
11
  import { Icon } from '../icon';
@@ -41,29 +41,41 @@ export function Transfer(props) {
41
41
  : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
42
42
  (item, searchValue) => customSearch.filter(searchValue, item);
43
43
  const sortFn = customSearch === null || customSearch === void 0 ? void 0 : customSearch.sort;
44
- listProp.forEach((item) => {
45
- const index = valueRight.has(item.value) ? 1 : 0;
46
- const newItem = Object.assign({ [IS_SELECTED]: false }, item);
47
- const search = searchValue[index];
48
- if (!search || filterFn(item, search)) {
49
- if (selected.has(item.value)) {
50
- newItem[IS_SELECTED] = true;
51
- selectedCount[index] += 1;
52
- if (!item.disabled) {
53
- hasSelected[index] = true;
54
- }
55
- }
56
- else {
57
- if (!item.disabled) {
58
- allSelected[index] = false;
59
- }
44
+ const handleItem = (item, index, noMatch) => {
45
+ const newItem = Object.assign({ [IS_SELECTED]: false, [NO_MATCH]: noMatch }, item);
46
+ if (selected.has(item.value)) {
47
+ newItem[IS_SELECTED] = true;
48
+ selectedCount[index] += 1;
49
+ if (!item.disabled) {
50
+ hasSelected[index] = true;
60
51
  }
61
- list[index].push(newItem);
52
+ }
53
+ else {
62
54
  if (!item.disabled) {
63
- empty[index] = false;
55
+ allSelected[index] = false;
56
+ }
57
+ }
58
+ list[index].push(newItem);
59
+ if (!item.disabled) {
60
+ empty[index] = false;
61
+ }
62
+ };
63
+ listProp.forEach((item) => {
64
+ if (!valueRight.has(item.value)) {
65
+ if (!searchValue[0] || filterFn(item, searchValue[0])) {
66
+ handleItem(item, 0, false);
64
67
  }
65
68
  }
66
69
  });
70
+ _valueRight.forEach((value) => {
71
+ const item = itemsMap.get(value);
72
+ if (!searchValue[1]) {
73
+ handleItem(item !== null && item !== void 0 ? item : { label: value, value }, 1, !item);
74
+ }
75
+ else if (item && filterFn(item, searchValue[0])) {
76
+ handleItem(item, 1, false);
77
+ }
78
+ });
67
79
  if (searchValue[0] && sortFn) {
68
80
  list[0].sort(sortFn);
69
81
  }
@@ -103,18 +115,24 @@ export function Transfer(props) {
103
115
  };
104
116
  const handleButtonClick = (isLeft) => {
105
117
  changeValueRight((draft) => {
106
- const newValueRight = new Set(draft);
107
- (isLeft ? list[0] : list[1]).forEach((item) => {
108
- if (item[IS_SELECTED]) {
109
- if (isLeft) {
118
+ if (isLeft) {
119
+ const newValueRight = new Set();
120
+ list[0].forEach((item) => {
121
+ if (item[IS_SELECTED]) {
110
122
  newValueRight.add(item.value);
111
123
  }
112
- else {
124
+ });
125
+ return Array.from(newValueRight).concat(draft);
126
+ }
127
+ else {
128
+ const newValueRight = new Set(draft);
129
+ list[1].forEach((item) => {
130
+ if (item[IS_SELECTED]) {
113
131
  newValueRight.delete(item.value);
114
132
  }
115
- }
116
- });
117
- return Array.from(newValueRight);
133
+ });
134
+ return Array.from(newValueRight);
135
+ }
118
136
  });
119
137
  changeSelected((draft) => {
120
138
  const newSelected = new Set(draft);
@@ -12,7 +12,7 @@ export interface TransferPanelProps<V extends React.Key, T extends TransferItem<
12
12
  loading: boolean;
13
13
  searchable: boolean;
14
14
  virtual: boolean | number;
15
- customItem: ((item: T) => React.ReactNode) | undefined;
15
+ customItem?: (value: V, item?: T) => React.ReactNode;
16
16
  onSelectedChange: (value: V) => void;
17
17
  onAllSelectedChange: (selected: boolean) => void;
18
18
  onSearch: (value: string) => void;
@@ -11,7 +11,7 @@ import { Icon } from '../../icon';
11
11
  import { Input } from '../../input';
12
12
  import { CircularProgress } from '../../internal/circular-progress';
13
13
  import { VirtualScroll } from '../../virtual-scroll';
14
- import { IS_SELECTED } from '../vars';
14
+ import { IS_SELECTED, NO_MATCH } from '../vars';
15
15
  export function TransferPanel(props) {
16
16
  const { namespace, styled, list, selectedCount, state, title, loading, searchable, virtual, customItem, onSelectedChange, onAllSelectedChange, onSearch, onScrollBottom, } = props;
17
17
  const { t } = useTranslation();
@@ -27,16 +27,13 @@ export function TransferPanel(props) {
27
27
  }), [canSelectedItem, list, virtual]);
28
28
  return (_jsxs("div", Object.assign({}, styled('transfer__panel'), { children: [_jsxs("div", Object.assign({}, styled('transfer__header'), { children: [_jsxs(Checkbox, { model: state === true, indeterminate: state === 'mixed', disabled: list.length === 0, onModelChange: (checked) => {
29
29
  onAllSelectedChange(checked);
30
- }, children: [selectedCount, "/", list.length] }), checkNodeExist(title) && _jsx("div", Object.assign({}, styled('transfer__header-title'), { children: title }))] })), searchable && (_jsx("div", Object.assign({}, styled('transfer__search'), { children: _jsx(Input, { style: { display: 'flex' }, placeholder: t('Search'), prefix: _jsx(Icon, { children: _jsx(SearchOutlined, {}) }), clearable: true, onModelChange: onSearch }) }))), _jsxs("div", Object.assign({}, styled('transfer__list-container'), { children: [loading && (_jsx("div", Object.assign({}, styled('transfer__loading'), { children: _jsx(Icon, { children: _jsx(CircularProgress, {}) }) }))), _jsx(VirtualScroll, Object.assign({}, vsProps, { ref: vsRef, enable: virtual !== false, listSize: 192, listPadding: 0, itemRender: (item, index, props) => {
31
- const { label: itemLabel, value: itemValue, disabled: itemDisabled } = item;
32
- return (_createElement("li", Object.assign({}, styled('transfer__option', {
33
- 'transfer__option.is-disabled': itemDisabled,
34
- }), props, { key: itemValue, id: getItemId(itemValue), title: itemLabel, onClick: () => {
35
- if (!itemDisabled) {
36
- onSelectedChange === null || onSelectedChange === void 0 ? void 0 : onSelectedChange(itemValue);
37
- }
38
- } }),
39
- _jsx("div", Object.assign({}, styled('transfer__option-prefix'), { children: _jsx(Checkbox, { model: item[IS_SELECTED], disabled: itemDisabled }) })),
40
- _jsx("div", Object.assign({}, styled('transfer__option-content'), { children: customItem ? customItem(item) : itemLabel }))));
41
- }, placeholder: "li", onScrollEnd: onScrollBottom, children: (vsList, onScroll) => (_jsx("ul", Object.assign({}, styled('transfer__list'), { onScroll: onScroll, children: list.length === 0 ? _jsx(Empty, { style: { marginTop: 32 }, image: Empty.SIMPLE_IMG }) : vsList }))) }))] }))] })));
30
+ }, children: [selectedCount, "/", list.length] }), checkNodeExist(title) && _jsx("div", Object.assign({}, styled('transfer__header-title'), { children: title }))] })), searchable && (_jsx("div", Object.assign({}, styled('transfer__search'), { children: _jsx(Input, { style: { display: 'flex' }, placeholder: t('Search'), prefix: _jsx(Icon, { children: _jsx(SearchOutlined, {}) }), clearable: true, onModelChange: onSearch }) }))), _jsxs("div", Object.assign({}, styled('transfer__list-container'), { children: [loading && (_jsx("div", Object.assign({}, styled('transfer__loading'), { children: _jsx(Icon, { children: _jsx(CircularProgress, {}) }) }))), _jsx(VirtualScroll, Object.assign({}, vsProps, { ref: vsRef, enable: virtual !== false, listSize: 192, listPadding: 0, itemRender: (item, index, props) => (_createElement("li", Object.assign({}, styled('transfer__option', {
31
+ 'transfer__option.is-disabled': item.disabled,
32
+ }), props, { key: item.value, id: getItemId(item.value), title: item.label, onClick: () => {
33
+ if (!item.disabled) {
34
+ onSelectedChange === null || onSelectedChange === void 0 ? void 0 : onSelectedChange(item.value);
35
+ }
36
+ } }),
37
+ _jsx("div", Object.assign({}, styled('transfer__option-prefix'), { children: _jsx(Checkbox, { model: item[IS_SELECTED], disabled: item.disabled }) })),
38
+ _jsx("div", Object.assign({}, styled('transfer__option-content'), { children: customItem ? customItem(item.value, item[NO_MATCH] ? undefined : item) : item.label })))), placeholder: "li", onScrollEnd: onScrollBottom, children: (vsList, onScroll) => (_jsx("ul", Object.assign({}, styled('transfer__list'), { onScroll: onScroll, children: list.length === 0 ? _jsx(Empty, { style: { marginTop: 32 }, image: Empty.SIMPLE_IMG }) : vsList }))) }))] }))] })));
42
39
  }
@@ -22,7 +22,7 @@ export interface TransferProps<V extends React.Key, T extends TransferItem<V>> e
22
22
  loading?: [boolean?, boolean?];
23
23
  disabled?: boolean;
24
24
  virtual?: boolean | number;
25
- customItem?: (item: T) => React.ReactNode;
25
+ customItem?: (value: V, item?: T) => React.ReactNode;
26
26
  customSearch?: {
27
27
  filter?: (value: string, item: T) => boolean;
28
28
  sort?: (a: T, b: T) => number;
@@ -15,3 +15,4 @@ export declare const CLASSES: {
15
15
  'transfer__option-content': string;
16
16
  };
17
17
  export declare const IS_SELECTED: unique symbol;
18
+ export declare const NO_MATCH: unique symbol;
package/transfer/vars.js CHANGED
@@ -15,3 +15,4 @@ export const CLASSES = {
15
15
  'transfer__option-content': '^transfer__option-content',
16
16
  };
17
17
  export const IS_SELECTED = Symbol();
18
+ export const NO_MATCH = Symbol();
@@ -377,41 +377,39 @@ function TreeSelectFC(props, ref) {
377
377
  let suffixNode = null;
378
378
  let selectedLabel;
379
379
  if (multiple) {
380
- const selectedNodes = [];
381
- for (const v of _selected) {
382
- const node = nodesMap.get(v);
383
- if (node) {
384
- selectedNodes.push(node);
385
- }
386
- }
387
- suffixNode = (_jsx(Dropdown, { list: selectedNodes.map((node) => {
388
- const { value: itemValue, disabled: itemDisabled } = node.origin;
389
- const title = customSelected ? customSelected(node.origin) : getTreeNodeLabel(node);
390
- return {
391
- id: itemValue,
392
- title,
393
- type: 'item',
394
- disabled: itemDisabled,
395
- node,
396
- };
397
- }), onClick: (id, item) => {
398
- const checkeds = item.node.changeStatus('UNCHECKED', selected);
399
- changeSelected(Array.from(checkeds.keys()));
380
+ const selectedNodes = _selected.map((value) => {
381
+ const node = nodesMap.get(value);
382
+ return {
383
+ value,
384
+ label: customSelected ? customSelected(value, node === null || node === void 0 ? void 0 : node.origin) : node ? node.origin.label : String(value),
385
+ node,
386
+ };
387
+ });
388
+ suffixNode = (_jsx(Dropdown, { list: selectedNodes.map(({ value, label, node }) => ({
389
+ id: value,
390
+ title: label,
391
+ type: 'item',
392
+ disabled: node === null || node === void 0 ? void 0 : node.origin.disabled,
393
+ })), onClick: (id) => {
394
+ changeSelected((draft) => {
395
+ draft.splice(draft.findIndex((v) => v === id), 1);
396
+ });
400
397
  return false;
401
398
  }, children: _jsx(Tag, { tabIndex: -1, size: size, children: selected.size }) }));
402
- selectedNode = selectedNodes.map((node) => (_jsxs(Tag, { size: size, children: [customSelected ? customSelected(node.origin) : node.origin.label, !(node.disabled || disabled) && (_jsx("div", Object.assign({}, styled('tree-select__close'), { role: "button", "aria-label": t('Close'), onClick: (e) => {
399
+ selectedNode = selectedNodes.map(({ value, label, node }) => (_jsxs(Tag, { size: size, children: [label, !((node === null || node === void 0 ? void 0 : node.disabled) || disabled) && (_jsx("div", Object.assign({}, styled('tree-select__close'), { role: "button", "aria-label": t('Close'), onClick: (e) => {
403
400
  e.stopPropagation();
404
401
  const checkeds = node.changeStatus('UNCHECKED', selected);
405
402
  changeSelected(Array.from(checkeds.keys()));
406
- }, children: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }) })))] }, node.id)));
403
+ }, children: _jsx(Icon, { children: _jsx(CloseOutlined, {}) }) })))] }, value)));
407
404
  }
408
405
  else {
409
406
  if (!isNull(selected)) {
410
407
  const node = nodesMap.get(selected);
411
- if (node) {
412
- selectedLabel = getTreeNodeLabel(node);
413
- selectedNode = customSelected ? customSelected(node.origin) : selectedLabel;
414
- }
408
+ selectedNode = selectedLabel = customSelected
409
+ ? customSelected(selected, node === null || node === void 0 ? void 0 : node.origin)
410
+ : node
411
+ ? getTreeNodeLabel(node)
412
+ : String(selected);
415
413
  }
416
414
  }
417
415
  return [selectedNode, suffixNode, selectedLabel];
@@ -30,7 +30,7 @@ export interface TreeSelectProps<V extends React.Key, T extends TreeItem<V>> ext
30
30
  virtual?: boolean | number;
31
31
  escClosable?: boolean;
32
32
  customItem?: (item: T) => React.ReactNode;
33
- customSelected?: (selected: T) => string;
33
+ customSelected?: (value: V, selected?: T) => string;
34
34
  customSearch?: {
35
35
  filter?: (value: string, item: T) => boolean;
36
36
  sort?: (a: T, b: T) => number;