@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.
- package/es/components/icons/ArticleIcon.d.ts +3 -0
- package/es/components/icons/ArticleIcon.js +10 -0
- package/es/components/icons/CustomerInformationIcon.d.ts +3 -0
- package/es/components/icons/CustomerInformationIcon.js +13 -0
- package/es/components/icons/EditFilledIcon.d.ts +3 -0
- package/es/components/icons/EditFilledIcon.js +8 -0
- package/es/components/icons/ItemRecommendationIcon.d.ts +3 -0
- package/es/components/icons/ItemRecommendationIcon.js +10 -0
- package/es/components/icons/LazyIcon/LazyIcon.d.ts +5 -0
- package/es/components/icons/LazyIcon/LazyIcon.js +5 -0
- package/es/components/icons/UserActivityIcon.d.ts +3 -0
- package/es/components/icons/UserActivityIcon.js +16 -0
- package/es/components/icons/index.d.ts +5 -0
- package/es/components/icons/index.js +5 -0
- package/es/components/molecules/DatePicker/components/AdvancedPicker/AdvancedPicker.d.ts +23 -0
- package/es/components/molecules/DatePicker/components/AdvancedPicker/AdvancedPicker.js +38 -24
- package/es/components/molecules/EditableName/EditableName.d.ts +1 -0
- package/es/components/molecules/EditableName/EditableName.js +5 -6
- package/es/components/molecules/EditorTab/EditorTab.js +48 -51
- package/es/components/molecules/EditorTab/styled.js +19 -12
- package/es/components/molecules/MatchAnySelect/MatchesAnySelect.d.ts +2 -2
- package/es/components/molecules/MatchAnySelect/MatchesAnySelect.js +92 -96
- package/es/components/molecules/MatchAnySelect/constants.js +0 -20
- package/es/components/molecules/MatchAnySelect/mock.d.ts +21 -0
- package/es/components/molecules/MatchAnySelect/mock.js +3309 -0
- package/es/components/molecules/MatchAnySelect/styled.d.ts +17 -1
- package/es/components/molecules/MatchAnySelect/styled.js +8 -1
- package/es/components/molecules/MatchAnySelect/types.d.ts +8 -6
- package/es/components/molecules/MatchAnySelect/utils.d.ts +2 -0
- package/es/components/molecules/MatchAnySelect/utils.js +42 -0
- package/es/components/molecules/SearchPopover/components/PopoverSelect/PopoverSelect.js +6 -2
- package/es/components/molecules/Tree/Tree.d.ts +4 -12
- package/es/components/molecules/Tree/Tree.js +6 -3
- package/es/components/molecules/Tree/styled.js +24 -5
- package/es/components/organism/DataTable/hooks/useAddFilterButton.d.ts +1 -1
- package/es/constants/theme.js +16 -15
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/providers/ConfigProvider/GlobalStyle.js +8 -0
- package/es/utils/common.d.ts +11 -0
- package/es/utils/common.js +28 -0
- package/package.json +2 -1
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
var _a, _b, _c;
|
|
2
1
|
import styled from 'styled-components';
|
|
3
|
-
import {
|
|
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: ${
|
|
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: ${
|
|
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: ${
|
|
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
|
-
|
|
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 =
|
|
4
|
-
export declare function MatchesAnySelect<TItem =
|
|
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
|
|
17
|
-
import
|
|
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 {
|
|
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:
|
|
71
|
-
}, [
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
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), {
|
|
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(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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 =
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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:
|
|
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
|
+
}[];
|