@antscorp/antsomi-ui 2.0.3 → 2.0.5

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 (42) hide show
  1. package/es/components/icons/ArticleIcon.d.ts +3 -0
  2. package/es/components/icons/ArticleIcon.js +10 -0
  3. package/es/components/icons/CustomerInformationIcon.d.ts +3 -0
  4. package/es/components/icons/CustomerInformationIcon.js +13 -0
  5. package/es/components/icons/EditFilledIcon.d.ts +3 -0
  6. package/es/components/icons/EditFilledIcon.js +8 -0
  7. package/es/components/icons/ItemRecommendationIcon.d.ts +3 -0
  8. package/es/components/icons/ItemRecommendationIcon.js +10 -0
  9. package/es/components/icons/LazyIcon/LazyIcon.d.ts +5 -0
  10. package/es/components/icons/LazyIcon/LazyIcon.js +5 -0
  11. package/es/components/icons/UserActivityIcon.d.ts +3 -0
  12. package/es/components/icons/UserActivityIcon.js +16 -0
  13. package/es/components/icons/index.d.ts +5 -0
  14. package/es/components/icons/index.js +5 -0
  15. package/es/components/molecules/DatePicker/components/AdvancedPicker/AdvancedPicker.d.ts +23 -0
  16. package/es/components/molecules/DatePicker/components/AdvancedPicker/AdvancedPicker.js +38 -24
  17. package/es/components/molecules/EditableName/EditableName.d.ts +1 -0
  18. package/es/components/molecules/EditableName/EditableName.js +5 -6
  19. package/es/components/molecules/EditorTab/EditorTab.js +48 -51
  20. package/es/components/molecules/EditorTab/styled.js +19 -12
  21. package/es/components/molecules/MatchAnySelect/MatchesAnySelect.d.ts +2 -2
  22. package/es/components/molecules/MatchAnySelect/MatchesAnySelect.js +92 -96
  23. package/es/components/molecules/MatchAnySelect/constants.js +0 -20
  24. package/es/components/molecules/MatchAnySelect/mock.d.ts +21 -0
  25. package/es/components/molecules/MatchAnySelect/mock.js +3309 -0
  26. package/es/components/molecules/MatchAnySelect/styled.d.ts +17 -1
  27. package/es/components/molecules/MatchAnySelect/styled.js +8 -1
  28. package/es/components/molecules/MatchAnySelect/types.d.ts +8 -6
  29. package/es/components/molecules/MatchAnySelect/utils.d.ts +2 -0
  30. package/es/components/molecules/MatchAnySelect/utils.js +42 -0
  31. package/es/components/molecules/SearchPopover/components/PopoverSelect/PopoverSelect.js +6 -2
  32. package/es/components/molecules/Tree/Tree.d.ts +4 -12
  33. package/es/components/molecules/Tree/Tree.js +6 -3
  34. package/es/components/molecules/Tree/styled.js +24 -5
  35. package/es/components/organism/DataTable/hooks/useAddFilterButton.d.ts +1 -1
  36. package/es/constants/theme.js +16 -15
  37. package/es/index.d.ts +1 -1
  38. package/es/index.js +1 -1
  39. package/es/providers/ConfigProvider/GlobalStyle.js +8 -0
  40. package/es/utils/common.d.ts +11 -0
  41. package/es/utils/common.js +28 -0
  42. package/package.json +2 -1
@@ -1,7 +1,5 @@
1
- var _a, _b, _c;
2
1
  import styled from 'styled-components';
3
- import { THEME } from '@antscorp/antsomi-ui/es/constants';
4
- // const token = theme.getDesignToken(THEME);
2
+ import { globalToken } from '@antscorp/antsomi-ui/es/constants';
5
3
  export const EditorTabStyled = styled.div `
6
4
  position: relative;
7
5
  height: 40px;
@@ -17,15 +15,15 @@ export const EditorTabStyled = styled.div `
17
15
  width: 20px !important;
18
16
  height: 20px !important;
19
17
  &:hover {
20
- background-color: ${(_a = THEME.token) === null || _a === void 0 ? void 0 : _a.blue} !important;
18
+ background-color: ${globalToken === null || globalToken === void 0 ? void 0 : globalToken.blue} !important;
21
19
  }
22
20
  }
23
21
 
24
22
  .left-block {
25
23
  position: relative;
26
24
  height: 100%;
27
- width: 100%;
28
- flex-grow: 1;
25
+ /* width: 100%;
26
+ flex-grow: 1; */
29
27
  flex-flow: nowrap;
30
28
  display: flex;
31
29
  align-items: center;
@@ -54,17 +52,19 @@ export const EditorTabStyled = styled.div `
54
52
  height: 40px;
55
53
  padding: 0 10px;
56
54
  overflow: hidden;
57
- background-color: ${(_b = THEME.token) === null || _b === void 0 ? void 0 : _b.bw2};
55
+ background-color: ${globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw2};
58
56
 
59
57
  /* &.active button, */
60
58
  & button {
61
- display: none !important;
59
+ /* display: none !important; */
60
+ visibility: hidden;
62
61
  }
63
62
 
64
63
  &:hover {
65
- background-color: ${(_c = THEME.token) === null || _c === void 0 ? void 0 : _c.blue};
64
+ background-color: ${globalToken === null || globalToken === void 0 ? void 0 : globalToken.blue};
66
65
  & button {
67
- display: flex !important;
66
+ /* display: flex !important; */
67
+ visibility: visible;
68
68
  }
69
69
  }
70
70
 
@@ -132,15 +132,22 @@ export const EditorTabStyled = styled.div `
132
132
  display: flex;
133
133
  align-items: center;
134
134
  justify-content: center;
135
- /* border-right: 1px solid #e0e0e0; */
135
+ color: ${globalToken === null || globalToken === void 0 ? void 0 : globalToken.blue7};
136
+ border-radius: ${globalToken === null || globalToken === void 0 ? void 0 : globalToken.borderRadius}px;
137
+ border: 5px solid transparent;
136
138
 
137
139
  /* Typography Block */
138
140
  font-size: 12px;
139
141
 
140
142
  cursor: pointer;
141
143
 
142
- &:last-child {
144
+ /* &:last-child {
143
145
  border-right: 1px solid #e0e0e0;
146
+ } */
147
+
148
+ &:hover {
149
+ border: 5px solid transparent;
150
+ background-color: ${globalToken === null || globalToken === void 0 ? void 0 : globalToken.blue};
144
151
  }
145
152
 
146
153
  /* &.--disabled {
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { MatchesAnyProps, MatchesAnySelectProps } from './types';
3
- export declare function MatchesAny<TItem = Record<string, any>>(props: MatchesAnyProps<TItem>): React.JSX.Element;
4
- export declare function MatchesAnySelect<TItem = Record<string, any>>(props: MatchesAnySelectProps<TItem>): React.JSX.Element;
3
+ export declare function MatchesAny<TItem = any>(props: MatchesAnyProps<TItem>): React.JSX.Element;
4
+ export declare function MatchesAnySelect<TItem = any>(props: MatchesAnySelectProps<TItem>): React.JSX.Element;
@@ -13,43 +13,46 @@ var __rest = (this && this.__rest) || function (s, e) {
13
13
  /* eslint-disable react/destructuring-assignment */
14
14
  // Libraries
15
15
  import { ConfigProvider } from 'antd';
16
- import { uniqBy } from 'lodash';
17
- import React, { useEffect, useState } from 'react';
16
+ import clsx from 'clsx';
17
+ import { isEmpty, uniqBy } from 'lodash';
18
+ import React, { useCallback, useEffect, useState } from 'react';
18
19
  // Components
20
+ import { Button, Flex, Icon, Input, Popover, Spin, Tooltip, Typography, } from '@antscorp/antsomi-ui/es/components/atoms';
19
21
  import { EmptyData, PopoverSelect, Select } from '@antscorp/antsomi-ui/es/components/molecules';
20
- import { Button, Flex, Icon, Input, Popover, Scrollbars, Spin, Typography, Tooltip, } from '@antscorp/antsomi-ui/es/components/atoms';
21
22
  import { ExtendValuePopup } from './components/ExtendValuePopup';
22
23
  // Styled
23
- import { MatchesAnyWrapper, ActionButton, StyledTree, TextButton, GroupSelectButton, ExtraValueLabel, } from './styled';
24
+ import { ActionButton, ExtraValueLabel, GroupSelectButton, MatchesAnyWrapper, StyledTree, TextButton, } from './styled';
24
25
  // Locales
25
26
  import i18nInstance from '@antscorp/antsomi-ui/es/locales/i18n';
26
27
  import { translations } from '@antscorp/antsomi-ui/es/locales/translations';
27
28
  // Constants
28
- import { MATCHES_ANY_THEME } from './constants';
29
29
  import { globalToken } from '@antscorp/antsomi-ui/es/constants';
30
+ import { MATCHES_ANY_THEME } from './constants';
30
31
  // Hooks
31
32
  import { useDeepCompareEffect, useDeepCompareMemo, useIntersectionObserver, } from '@antscorp/antsomi-ui/es/hooks';
32
33
  // Utils
33
34
  import { flatTree, recursiveSearchItems } from '@antscorp/antsomi-ui/es/utils';
35
+ import { getSelectedTreeData } from './utils';
36
+ // Icons
34
37
  import { DataIcon, WarningIcon } from '../../icons';
35
- import clsx from 'clsx';
36
38
  const initialState = {
37
39
  isOpenPopover: false,
38
40
  };
39
41
  const matchesAnyInitialState = {
40
42
  searchValue: '',
41
43
  selectedItems: [],
44
+ selectedTreeData: [],
42
45
  isShowLoadMoreEl: false,
43
46
  };
44
47
  const { t } = i18nInstance;
45
48
  const { Text } = Typography;
46
49
  export function MatchesAny(props) {
47
50
  // Props
48
- const { objectName, loading = false, showExtendValue = true, items, groupSelectProps, renderExtraValues, customItemRenders, listEmptyProps, selectedListEmptyProps, onApply = () => { }, onCancel = () => { }, onLoadMore = () => { }, onChangeSearch } = props, restOfProps = __rest(props, ["objectName", "loading", "showExtendValue", "items", "groupSelectProps", "renderExtraValues", "customItemRenders", "listEmptyProps", "selectedListEmptyProps", "onApply", "onCancel", "onLoadMore", "onChangeSearch"]);
51
+ const { objectName, loading = false, showExtendValue = true, selectedItems: selectedItemsProp, items, groupSelectProps, renderExtraValues, customItemRenders, listEmptyProps, selectedListEmptyProps, selectedTreeData: selectedTreeDataProp, onApply = () => { }, onCancel = () => { }, onLoadMore = () => { }, onChangeSearch } = props, restOfProps = __rest(props, ["objectName", "loading", "showExtendValue", "selectedItems", "items", "groupSelectProps", "renderExtraValues", "customItemRenders", "listEmptyProps", "selectedListEmptyProps", "selectedTreeData", "onApply", "onCancel", "onLoadMore", "onChangeSearch"]);
49
52
  // State
50
53
  const [state, setState] = useState(matchesAnyInitialState);
51
54
  // Variables
52
- const { searchValue, selectedItems, isShowLoadMoreEl } = state;
55
+ const { searchValue, selectedItems, selectedTreeData, isShowLoadMoreEl } = state;
53
56
  const _a = listEmptyProps || {}, { icon: listEmptyIcon, description: listEmptyDescription = t(translations.global.noResultsMatchesKeyWord).toString() } = _a, restListEmptyProps = __rest(_a, ["icon", "description"]);
54
57
  const _b = selectedListEmptyProps || {}, { description: selectedListEmptyDescription = t(translations.global.selectItemsFromList).toString(), icon: selectedListEmptyIcon = React.createElement(DataIcon, { color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw5, size: 48 }) } = _b, restSelectedListEmptyProps = __rest(_b, ["description", "icon"]);
55
58
  // Refs
@@ -67,35 +70,31 @@ export function MatchesAny(props) {
67
70
  * Updates the `selectedItems` state when the `selectedItems` prop changes.
68
71
  */
69
72
  useDeepCompareEffect(() => {
70
- setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: props.selectedItems })));
71
- }, [props.selectedItems]);
73
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: selectedItemsProp })));
74
+ }, [selectedItemsProp]);
72
75
  useEffect(() => {
73
76
  // Delay for show load more el
74
77
  setTimeout(() => {
75
78
  setState(prev => (Object.assign(Object.assign({}, prev), { isShowLoadMoreEl: true })));
76
79
  }, 500);
77
80
  }, []);
81
+ useDeepCompareEffect(() => {
82
+ if (!isEmpty(selectedTreeDataProp)) {
83
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedTreeData: selectedTreeDataProp })));
84
+ }
85
+ }, [selectedTreeDataProp]);
78
86
  // Handlers
79
- /**
80
- * Adds an item and, if applicable, its leaf descendants to the list of selected items.
81
- *
82
- * If the item has children, the function flattens the tree structure and adds only the leaf nodes
83
- * (nodes without children) to the selected items list. If the item does not have children, it adds
84
- * the item directly to the selected items list.
85
- *
86
- * @param {MatchesAnyItem} item - The item to be added to the selected items list.
87
- * This item can have children.
88
- */
89
87
  const onSelectItem = (item) => {
88
+ let newSelectedItems = [...(selectedItems || [])];
90
89
  if (item.children) {
91
90
  const flattenChild = flatTree(item.children, 'children');
92
- setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: [
93
- ...(prev.selectedItems || []),
94
- ...flattenChild === null || flattenChild === void 0 ? void 0 : flattenChild.filter(item => !item.children),
95
- ] })));
96
- return;
91
+ newSelectedItems = newSelectedItems.concat(flattenChild.filter(item => !item.children));
97
92
  }
98
- setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: [...(prev.selectedItems || []), item] })));
93
+ else {
94
+ newSelectedItems = newSelectedItems.concat(item);
95
+ }
96
+ const newSelectedTreeData = getSelectedTreeData(items || [], newSelectedItems || [], selectedTreeData || []);
97
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: newSelectedItems, selectedTreeData: newSelectedTreeData })));
99
98
  };
100
99
  /**
101
100
  * Removes an item and its descendants from the list of selected items.
@@ -105,34 +104,38 @@ export function MatchesAny(props) {
105
104
  *
106
105
  */
107
106
  const onRemoveItem = (item) => {
108
- setState(prev => {
109
- var _a;
110
- return (Object.assign(Object.assign({}, prev), { selectedItems: (_a = prev.selectedItems) === null || _a === void 0 ? void 0 : _a.filter(selectedItem => {
111
- if (item.children) {
112
- const flattenChild = flatTree(item.children, 'children');
113
- return (selectedItem.key !== item.key &&
114
- !(flattenChild === null || flattenChild === void 0 ? void 0 : flattenChild.some(item => item.key === selectedItem.key)));
115
- }
116
- return selectedItem.key !== item.key;
117
- }) }));
107
+ const newSelectedItems = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.filter(selectedItem => {
108
+ if (item.children) {
109
+ const flattenChild = flatTree(item.children, 'children');
110
+ return (selectedItem.key !== item.key &&
111
+ !(flattenChild === null || flattenChild === void 0 ? void 0 : flattenChild.some(item => item.key === selectedItem.key)));
112
+ }
113
+ return selectedItem.key !== item.key;
118
114
  });
115
+ const newSelectedTreeData = getSelectedTreeData(items || [], newSelectedItems || [], selectedTreeData || []);
116
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: newSelectedItems, selectedTreeData: newSelectedTreeData })));
119
117
  };
120
118
  const onSelectAll = () => {
121
119
  const flattenTreeData = flatTree(items, 'children').filter(item => !item.children &&
122
120
  !(selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.some(selectedItem => selectedItem.key === item.key || selectedItem.title === item.title)));
123
- setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: uniqBy([...(prev.selectedItems || []), ...flattenTreeData], 'key') })));
121
+ const newSelectedItems = uniqBy([...(state.selectedItems || []), ...flattenTreeData], 'key');
122
+ const newSelectedTreeData = getSelectedTreeData(items || [], newSelectedItems || [], selectedTreeData);
123
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: newSelectedItems, selectedTreeData: newSelectedTreeData })));
124
124
  };
125
125
  const onRemoveAll = () => {
126
- setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: [] })));
126
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: [], selectedTreeData: [] })));
127
+ };
128
+ const onClickApply = () => {
129
+ onApply(selectedItems || [], selectedTreeData || []);
127
130
  };
128
- const renderItemError = (item) => {
131
+ const renderItemError = useCallback((item) => {
129
132
  if (customItemRenders === null || customItemRenders === void 0 ? void 0 : customItemRenders.error) {
130
133
  return customItemRenders === null || customItemRenders === void 0 ? void 0 : customItemRenders.error(item);
131
134
  }
132
135
  return item.error ? (React.createElement(Tooltip, { title: item.error },
133
136
  React.createElement(WarningIcon, { size: 16 }))) : null;
134
- };
135
- const renderItemNodeTitle = ({ item, mode = 'unselect', onSelectItem, onRemoveItem, }) => {
137
+ }, [customItemRenders]);
138
+ const renderItemNodeTitle = useCallback(({ item, mode = 'unselect', onSelectItem, onRemoveItem, }) => {
136
139
  var _a, _b;
137
140
  const { isExtendValue, title, subTitle } = item; // Destructure properties from item
138
141
  return (React.createElement(React.Fragment, null,
@@ -162,7 +165,7 @@ export function MatchesAny(props) {
162
165
  }
163
166
  } },
164
167
  React.createElement(Icon, { type: `icon-ants-${onSelectItem ? 'double-arrow-up' : 'remove-slim'}`, size: 11 })))));
165
- };
168
+ }, [customItemRenders, renderExtraValues, renderItemError]);
166
169
  // Memos
167
170
  const { treeData, matchedParents } = useDeepCompareMemo(() => {
168
171
  var _a;
@@ -187,46 +190,25 @@ export function MatchesAny(props) {
187
190
  (selectedItem.isExtendValue && selectedItem.title === item.title)))
188
191
  : selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.some(selectedItem => selectedItem.key === item.key ||
189
192
  (selectedItem.isExtendValue && selectedItem.title === item.title));
190
- return Object.assign(Object.assign(Object.assign({}, item), { title: renderItemNodeTitle({
191
- item,
192
- onSelectItem,
193
- }), disabled: isSelected }), (item.children && {
193
+ return Object.assign(Object.assign(Object.assign({}, item), { disabled: isSelected }), (item.children && {
194
194
  children: serializeTreeData(item.children),
195
195
  }));
196
196
  });
197
+ // Handle add load more item for serve load more
197
198
  let treeData = serializeTreeData(results);
198
199
  // Filter the tree data based on the group selected items
199
200
  if (groupSelectProps && ((_a = groupSelectProps.selected) === null || _a === void 0 ? void 0 : _a.length)) {
200
201
  treeData = treeData.filter(item => { var _a; return (_a = groupSelectProps.selected) === null || _a === void 0 ? void 0 : _a.includes(item.key); });
201
202
  }
203
+ treeData = treeData.concat({
204
+ key: 'load-more',
205
+ title: '',
206
+ isLoadMore: true,
207
+ className: 'load-more-node',
208
+ });
202
209
  return { treeData, matchedParents };
210
+ // eslint-disable-next-line react-hooks/exhaustive-deps
203
211
  }, [items, searchValue, selectedItems, groupSelectProps, onChangeSearch]);
204
- const selectedTreeData = useDeepCompareMemo(() => {
205
- var _a;
206
- const notExtendValueSelectedItems = (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.filter(item => !item.isExtendValue)) || [];
207
- const extendValueSelectedItems = (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.filter(item => item.isExtendValue)) || [];
208
- const lazyLoadSelectedItems = (notExtendValueSelectedItems === null || notExtendValueSelectedItems === void 0 ? void 0 : notExtendValueSelectedItems.filter(selectedItem => !flatTree(items || [], 'children').some(item => item.key === selectedItem.key))) || [];
209
- const serializeTreeData = (list) => {
210
- var _a;
211
- return ((_a = list
212
- .filter(item => {
213
- /**
214
- * Checks if the given item or any of its descendants are selected.
215
- *
216
- * If the item has children, it flattens the children tree structure and checks if any node is selected.
217
- * If the item does not have children, it directly checks if the item is in the selected items list.
218
- *
219
- */
220
- const isSelected = item.children
221
- ? flatTree(item.children, 'children').some(item => notExtendValueSelectedItems === null || notExtendValueSelectedItems === void 0 ? void 0 : notExtendValueSelectedItems.some(selectedItem => selectedItem.key === item.key))
222
- : notExtendValueSelectedItems === null || notExtendValueSelectedItems === void 0 ? void 0 : notExtendValueSelectedItems.some(selectedItem => selectedItem.key === item.key);
223
- return isSelected;
224
- })) === null || _a === void 0 ? void 0 : _a.map(item => (Object.assign(Object.assign(Object.assign(Object.assign({}, item), { title: renderItemNodeTitle({ item, mode: 'select', onRemoveItem }) }), (item.children && {
225
- children: serializeTreeData(item.children),
226
- })), (!!item.error && { className: 'error-node' }))))) || [];
227
- };
228
- return serializeTreeData(items || []).concat(((_a = [...lazyLoadSelectedItems, ...extendValueSelectedItems]) === null || _a === void 0 ? void 0 : _a.map(item => (Object.assign(Object.assign({}, item), { title: renderItemNodeTitle({ item, mode: 'select', onRemoveItem }) })))) || []);
229
- }, [items, selectedItems]);
230
212
  const isDisableRemoveAll = useDeepCompareMemo(() => !(selectedTreeData === null || selectedTreeData === void 0 ? void 0 : selectedTreeData.length), [selectedTreeData]);
231
213
  const isDisableSelectAll = useDeepCompareMemo(() => {
232
214
  const flattenTreeData = flatTree(treeData, 'children');
@@ -263,23 +245,30 @@ export function MatchesAny(props) {
263
245
  React.createElement(Flex, { align: "center", gap: 10 },
264
246
  renderExtraValueLabels(),
265
247
  React.createElement(TextButton, { disabled: isDisableSelectAll, onClick: onSelectAll }, t(translations.global.selectAll).toString()))),
266
- React.createElement(Spin, { spinning: loading },
267
- React.createElement(Scrollbars, { style: { height: '100%' } }, (treeData === null || treeData === void 0 ? void 0 : treeData.length) ? (React.createElement(React.Fragment, null,
268
- React.createElement(StyledTree, { key: searchValue, defaultExpandedKeys: matchedParents.map(item => item.key), selectable: false, treeData: treeData, switcherIcon: props => (React.createElement(Icon, { type: "icon-ants-caret-down", style: {
269
- transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
270
- transition: 'transform 0.3s ease',
271
- }, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })) }),
272
- isShowLoadMoreEl && React.createElement("div", { ref: loadMoreRef }))) : (React.createElement(EmptyData, Object.assign({ icon: listEmptyIcon, showIcon: !!listEmptyIcon, description: listEmptyDescription }, restListEmptyProps))))))));
248
+ React.createElement(Spin, { spinning: loading }, (treeData === null || treeData === void 0 ? void 0 : treeData.length) ? (React.createElement(React.Fragment, null,
249
+ React.createElement(StyledTree, { key: searchValue, defaultExpandedKeys: (matchedParents === null || matchedParents === void 0 ? void 0 : matchedParents.length)
250
+ ? matchedParents.map(item => item.key)
251
+ : items === null || items === void 0 ? void 0 : items.map(item => item.key), selectable: false, treeData: treeData, switcherIcon: props => (React.createElement(Icon, { type: "icon-ants-caret-down", style: {
252
+ transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
253
+ transition: 'transform 0.3s ease',
254
+ }, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })), titleRender: (item) => isShowLoadMoreEl && item.isLoadMore ? (React.createElement("div", { ref: loadMoreRef })) : (renderItemNodeTitle({
255
+ item,
256
+ onSelectItem,
257
+ })), height: 396 }),
258
+ isShowLoadMoreEl && React.createElement("div", { ref: loadMoreRef }))) : (React.createElement(EmptyData, Object.assign({ icon: listEmptyIcon, showIcon: !!listEmptyIcon, description: listEmptyDescription }, restListEmptyProps)))))));
273
259
  };
274
260
  const renderSelectedList = () => (React.createElement("div", { className: "matches-any__section" },
275
261
  React.createElement(Flex, { className: "matches-any__header", justify: "space-between" },
276
262
  React.createElement(Text, { strong: true }, `${t(translations.global.selected)} (${(selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) || 0})`),
277
263
  React.createElement(TextButton, { disabled: isDisableRemoveAll, onClick: onRemoveAll }, t(translations.global.removeAll).toString())),
278
- React.createElement("div", { className: "matches-any__body" },
279
- React.createElement(Scrollbars, { style: { height: '100%' } }, !(selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) ? (React.createElement(EmptyData, Object.assign({ icon: selectedListEmptyIcon, description: selectedListEmptyDescription }, restSelectedListEmptyProps))) : (React.createElement(StyledTree, { selectable: false, treeData: selectedTreeData, switcherIcon: props => (React.createElement(Icon, { type: "icon-ants-caret-down", style: {
280
- transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
281
- transition: 'transform 0.3s ease',
282
- }, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })) }))))));
264
+ React.createElement("div", { className: "matches-any__body" }, !(selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) ? (React.createElement(EmptyData, Object.assign({ icon: selectedListEmptyIcon, description: selectedListEmptyDescription }, restSelectedListEmptyProps))) : (React.createElement(StyledTree, { defaultExpandedKeys: selectedTreeData === null || selectedTreeData === void 0 ? void 0 : selectedTreeData.map(item => item.key), selectable: false, treeData: selectedTreeData, titleRender: item => renderItemNodeTitle({
265
+ item: item,
266
+ mode: 'select',
267
+ onRemoveItem,
268
+ }), height: 420, switcherIcon: props => (React.createElement(Icon, { type: "icon-ants-caret-down", style: {
269
+ transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
270
+ transition: 'transform 0.3s ease',
271
+ }, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })) })))));
283
272
  // Handlers
284
273
  const onApplyExtendValue = (extendValues) => {
285
274
  // Filter out values that are already present in selectedItems
@@ -287,12 +276,16 @@ export function MatchesAny(props) {
287
276
  // If there are available values to add
288
277
  if (availableExtendValues) {
289
278
  // Create new items in the format required (MatchesAnyItem)
290
- const newSelectedItems = availableExtendValues.map(value => ({
291
- key: value,
292
- title: value,
293
- isExtendValue: true, // Flag to indicate that this item is an extend value
294
- }));
295
- setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: [...(selectedItems || []), ...newSelectedItems] })));
279
+ const newSelectedItems = [
280
+ ...(selectedItems || []),
281
+ ...availableExtendValues.map(value => ({
282
+ key: value,
283
+ title: value,
284
+ isExtendValue: true, // Flag to indicate that this item is an extend value
285
+ })),
286
+ ];
287
+ const newSelectedTreeData = getSelectedTreeData(items || [], newSelectedItems || [], selectedTreeData || []);
288
+ setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: newSelectedItems, selectedTreeData: newSelectedTreeData })));
296
289
  }
297
290
  };
298
291
  return (React.createElement(ConfigProvider, { theme: MATCHES_ANY_THEME },
@@ -302,14 +295,14 @@ export function MatchesAny(props) {
302
295
  renderSelectedList()),
303
296
  React.createElement(Flex, { className: "matches-any__footer", align: "center", justify: "space-between" },
304
297
  React.createElement(Flex, { align: "center", gap: 10 },
305
- React.createElement(Button, { type: "primary", onClick: () => onApply(selectedItems || []) }, t(translations.apply.title).toString()),
298
+ React.createElement(Button, { type: "primary", onClick: onClickApply }, t(translations.apply.title).toString()),
306
299
  React.createElement(Button, { onClick: () => onCancel() }, t(translations.cancel.title).toString())),
307
300
  showExtendValue && (React.createElement(ExtendValuePopup, { getPopupContainer: trigger => trigger.parentElement || document.body, onApply: onApplyExtendValue },
308
301
  React.createElement(Button, { icon: React.createElement(Icon, { type: "icon-ants-empty-flag" }) }, t(translations.extendValue.title).toString())))))));
309
302
  }
310
303
  export function MatchesAnySelect(props) {
311
304
  var _a, _b, _c;
312
- const { placeholder = 'Select an item', dropdownStyle, objectName, selectedItems, items, loading, popupClassName, groupSelectProps, renderExtraValues, customItemRenders, popoverProps, listEmptyProps, selectedListEmptyProps, onChangeSearch, onChange = () => { }, onLoadMore } = props, restProps = __rest(props, ["placeholder", "dropdownStyle", "objectName", "selectedItems", "items", "loading", "popupClassName", "groupSelectProps", "renderExtraValues", "customItemRenders", "popoverProps", "listEmptyProps", "selectedListEmptyProps", "onChangeSearch", "onChange", "onLoadMore"]);
305
+ const { placeholder = 'Select an item', dropdownStyle, objectName, selectedItems, items, loading, popupClassName, groupSelectProps, renderExtraValues, customItemRenders, popoverProps, listEmptyProps, selectedListEmptyProps, selectedTreeData, onChangeSearch, onChange = () => { }, onLoadMore } = props, restProps = __rest(props, ["placeholder", "dropdownStyle", "objectName", "selectedItems", "items", "loading", "popupClassName", "groupSelectProps", "renderExtraValues", "customItemRenders", "popoverProps", "listEmptyProps", "selectedListEmptyProps", "selectedTreeData", "onChangeSearch", "onChange", "onLoadMore"]);
313
306
  // State
314
307
  const [state, setState] = useState(initialState);
315
308
  // Variables
@@ -318,11 +311,11 @@ export function MatchesAnySelect(props) {
318
311
  ? `${(_a = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.map(item => item.title)) === null || _a === void 0 ? void 0 : _a[0]}${((_b = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.slice(1)) === null || _b === void 0 ? void 0 : _b.length) ? `, and +${(_c = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.slice(1)) === null || _c === void 0 ? void 0 : _c.length} more` : ''}` || []
319
312
  : undefined;
320
313
  // Handlers
321
- const onApplyMatchesAny = (selectedItems) => {
322
- onChange(selectedItems);
314
+ const onApplyMatchesAny = (selectedItems, selectedTreeData) => {
315
+ onChange(selectedItems, selectedTreeData);
323
316
  setState(prev => (Object.assign(Object.assign({}, prev), { isOpenPopover: false })));
324
317
  };
325
- return (React.createElement(Popover, Object.assign({ open: isOpenPopover, arrow: false, placement: "bottomLeft", content: React.createElement(MatchesAny, { className: popupClassName, items: items, selectedItems: selectedItems, loading: loading, objectName: objectName, groupSelectProps: groupSelectProps, renderExtraValues: renderExtraValues, customItemRenders: customItemRenders, listEmptyProps: listEmptyProps, selectedListEmptyProps: selectedListEmptyProps, onChangeSearch: onChangeSearch, onApply: onApplyMatchesAny, onCancel: () => setState(prev => (Object.assign(Object.assign({}, prev), { isOpenPopover: false }))), onLoadMore: onLoadMore }), align: {
318
+ return (React.createElement(Popover, Object.assign({ open: isOpenPopover, arrow: false, placement: "bottomLeft", content: React.createElement(MatchesAny, { className: popupClassName, items: items, selectedItems: selectedItems, loading: loading, objectName: objectName, groupSelectProps: groupSelectProps, renderExtraValues: renderExtraValues, customItemRenders: customItemRenders, listEmptyProps: listEmptyProps, selectedListEmptyProps: selectedListEmptyProps, selectedTreeData: selectedTreeData, onChangeSearch: onChangeSearch, onApply: onApplyMatchesAny, onCancel: () => setState(prev => (Object.assign(Object.assign({}, prev), { isOpenPopover: false }))), onLoadMore: onLoadMore }), align: {
326
319
  overflow: {
327
320
  shiftY: 0,
328
321
  shiftX: 0,
@@ -330,6 +323,9 @@ export function MatchesAnySelect(props) {
330
323
  }, overlayStyle: { width: 700 }, overlayInnerStyle: {
331
324
  padding: 0,
332
325
  }, trigger: ['click'], destroyTooltipOnHide: true, onOpenChange: () => setState(prev => (Object.assign(Object.assign({}, prev), { isOpenPopover: !isOpenPopover }))), zIndex: 1400 }, popoverProps),
333
- React.createElement(Tooltip, { mouseEnterDelay: 0.5, title: `${selectedItems ? selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.map(item => item.title).join(', ') : ''}` },
326
+ React.createElement(Tooltip, { mouseEnterDelay: 0.5, title: `${selectedItems ? selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.map(item => item.title).join(', ') : ''}`, overlayInnerStyle: {
327
+ maxHeight: 300,
328
+ overflow: 'auto',
329
+ } },
334
330
  React.createElement(Select, Object.assign({ title: "", value: value, placeholder: placeholder, popupMatchSelectWidth: 700, dropdownStyle: Object.assign(Object.assign({}, dropdownStyle), { display: 'none', padding: 0 }), loading: loading }, restProps)))));
335
331
  }
@@ -6,26 +6,6 @@ export const SAMPLE_DATA = [
6
6
  {
7
7
  key: '12179',
8
8
  title: 'Untitled Project#2024-06-27 09:40:18',
9
- children: [
10
- {
11
- key: '3j2i',
12
- title: 'dsjfioasdjf',
13
- children: [
14
- {
15
- key: '3j2323i323',
16
- title: 'fewfwe',
17
- },
18
- {
19
- key: '3j2323i',
20
- title: 'me owi',
21
- },
22
- ],
23
- },
24
- {
25
- key: '3j2i-1',
26
- title: 'dsjfioasdjf',
27
- },
28
- ],
29
9
  },
30
10
  {
31
11
  key: '11923',
@@ -0,0 +1,21 @@
1
+ export declare const countryItems: {
2
+ name: string;
3
+ countryId: number;
4
+ countryName: string;
5
+ provinces: {
6
+ provinceId: number;
7
+ provinceName: string;
8
+ }[];
9
+ value: string;
10
+ label: string;
11
+ title: string;
12
+ key: string;
13
+ id: number;
14
+ children: {
15
+ provinceId: number;
16
+ provinceName: string;
17
+ key: string;
18
+ title: string;
19
+ value: string;
20
+ }[];
21
+ }[];