@antscorp/antsomi-ui 1.3.5-beta.717 → 1.3.5-beta.718
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/molecules/MatchAnySelect/MatchesAnySelect.js +31 -22
- package/es/components/molecules/MatchAnySelect/utils.js +4 -1
- package/es/locales/en/translation.json +3 -0
- package/es/locales/i18n.d.ts +6 -0
- package/es/locales/translations.d.ts +3 -0
- package/es/locales/vi/translation.json +3 -0
- package/package.json +1 -1
|
@@ -9,13 +9,14 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
+
/* eslint-disable react/no-danger */
|
|
12
13
|
/* eslint-disable react/function-component-definition */
|
|
13
14
|
/* eslint-disable react/destructuring-assignment */
|
|
14
15
|
// Libraries
|
|
15
16
|
import { ConfigProvider } from 'antd';
|
|
16
17
|
import clsx from 'clsx';
|
|
17
18
|
import { isEmpty, uniqBy } from 'lodash';
|
|
18
|
-
import React, { useCallback,
|
|
19
|
+
import React, { useCallback, useRef, useState } from 'react';
|
|
19
20
|
// Components
|
|
20
21
|
import { Button, Flex, Icon, Input, Popover, Spin, Tooltip, Typography, } from '@antscorp/antsomi-ui/es/components/atoms';
|
|
21
22
|
import { EmptyData, PopoverSelect, Select } from '@antscorp/antsomi-ui/es/components/molecules';
|
|
@@ -34,7 +35,7 @@ import { useDeepCompareEffect, useDeepCompareMemo, useIntersectionObserver, } fr
|
|
|
34
35
|
import { flatTree, recursiveSearchItems } from '@antscorp/antsomi-ui/es/utils';
|
|
35
36
|
import { getSelectedTreeData } from './utils';
|
|
36
37
|
// Icons
|
|
37
|
-
import { DataIcon, WarningIcon } from '../../icons';
|
|
38
|
+
import { DataIcon, LongerIcon, WarningIcon } from '../../icons';
|
|
38
39
|
const initialState = {
|
|
39
40
|
isOpenPopover: false,
|
|
40
41
|
searchValue: '',
|
|
@@ -54,7 +55,7 @@ export function MatchesAny(props) {
|
|
|
54
55
|
const [state, setState] = useState(matchesAnyInitialState);
|
|
55
56
|
// Variables
|
|
56
57
|
const { selectedItems, selectedTreeData, isShowLoadMoreEl } = state;
|
|
57
|
-
const _a = listEmptyProps || {}, { icon: listEmptyIcon, description: listEmptyDescription = t(translations.
|
|
58
|
+
const _a = listEmptyProps || {}, { icon: listEmptyIcon = React.createElement(LongerIcon, null), description: listEmptyDescription = (React.createElement("div", { dangerouslySetInnerHTML: { __html: t(translations.matchesAnySelect.noData) } })) } = _a, restListEmptyProps = __rest(_a, ["icon", "description"]);
|
|
58
59
|
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"]);
|
|
59
60
|
// Refs
|
|
60
61
|
const { ref: loadMoreRef } = useIntersectionObserver({
|
|
@@ -74,19 +75,29 @@ export function MatchesAny(props) {
|
|
|
74
75
|
useDeepCompareEffect(() => {
|
|
75
76
|
setState(prev => (Object.assign(Object.assign({}, prev), { selectedItems: selectedItemsProp })));
|
|
76
77
|
}, [selectedItemsProp]);
|
|
77
|
-
|
|
78
|
+
useDeepCompareEffect(() => {
|
|
79
|
+
var _a;
|
|
80
|
+
(_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
78
81
|
// Delay for show load more el
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
}, []);
|
|
82
|
+
if (!isEmpty(items)) {
|
|
83
|
+
setTimeout(() => {
|
|
84
|
+
setState(prev => (Object.assign(Object.assign({}, prev), { isShowLoadMoreEl: true })));
|
|
85
|
+
}, 500);
|
|
86
|
+
}
|
|
87
|
+
}, [items]);
|
|
85
88
|
useDeepCompareEffect(() => {
|
|
89
|
+
// If `selectedTreeData` prop is not empty, update the `selectedTreeData` state directly.
|
|
86
90
|
if (!isEmpty(selectedTreeDataProp)) {
|
|
87
91
|
setState(prev => (Object.assign(Object.assign({}, prev), { selectedTreeData: selectedTreeDataProp })));
|
|
88
92
|
}
|
|
89
|
-
|
|
93
|
+
// If `selectedTreeData` prop is empty and `selectedItems` prop is not empty,
|
|
94
|
+
// calculate the `selectedTreeData` from the `selectedItems` prop and update the state.
|
|
95
|
+
else if (!isEmpty(selectedItemsProp)) {
|
|
96
|
+
const newSelectedTreeData = getSelectedTreeData(items || [], selectedItemsProp || []);
|
|
97
|
+
setState(prev => (Object.assign(Object.assign({}, prev), { selectedTreeData: newSelectedTreeData })));
|
|
98
|
+
}
|
|
99
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
100
|
+
}, [selectedTreeDataProp, selectedItemsProp]);
|
|
90
101
|
// Handlers
|
|
91
102
|
const onSelectItem = (item) => {
|
|
92
103
|
let newSelectedItems = [...(selectedItems || [])];
|
|
@@ -249,17 +260,15 @@ export function MatchesAny(props) {
|
|
|
249
260
|
React.createElement(Flex, { align: "center", gap: 10 },
|
|
250
261
|
renderExtraValueLabels(),
|
|
251
262
|
React.createElement(TextButton, { disabled: isDisableSelectAll, onClick: onSelectAll }, t(translations.global.selectAll).toString()))),
|
|
252
|
-
React.createElement(Spin, { spinning: loading }, (treeData === null || treeData === void 0 ? void 0 : treeData.length) > 1 ? (React.createElement(
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
:
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
})), height: 396 }),
|
|
262
|
-
isShowLoadMoreEl && React.createElement("div", { ref: loadMoreRef }))) : (React.createElement(EmptyData, Object.assign({ icon: listEmptyIcon, showIcon: !!listEmptyIcon, description: listEmptyDescription }, restListEmptyProps)))))));
|
|
263
|
+
React.createElement(Spin, { spinning: loading }, (treeData === null || treeData === void 0 ? void 0 : treeData.length) > 1 ? (React.createElement(StyledTree, { key: searchValue, defaultExpandedKeys: (matchedParents === null || matchedParents === void 0 ? void 0 : matchedParents.length)
|
|
264
|
+
? matchedParents.map(item => item.key)
|
|
265
|
+
: 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: {
|
|
266
|
+
transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
|
|
267
|
+
transition: 'transform 0.3s ease',
|
|
268
|
+
}, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })), titleRender: (item) => isShowLoadMoreEl && item.isLoadMore ? (React.createElement("div", { ref: loadMoreRef })) : (renderItemNodeTitle({
|
|
269
|
+
item,
|
|
270
|
+
onSelectItem,
|
|
271
|
+
})), height: 396 })) : (React.createElement(EmptyData, Object.assign({ icon: listEmptyIcon, showIcon: !!listEmptyIcon, description: listEmptyDescription }, restListEmptyProps)))))));
|
|
263
272
|
};
|
|
264
273
|
const renderSelectedList = () => (React.createElement("div", { className: "matches-any__section" },
|
|
265
274
|
React.createElement(Flex, { className: "matches-any__header", justify: "space-between" },
|
|
@@ -16,6 +16,9 @@ const customMergeTreeData = (key) => (target, source) => {
|
|
|
16
16
|
export const getSelectedTreeData = (items, selectedItems, selectedTreeData = []) => {
|
|
17
17
|
const notExtendValueSelectedItems = (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.filter(item => !item.isExtendValue)) || [];
|
|
18
18
|
const extendValueSelectedItems = (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.filter(item => item.isExtendValue)) || [];
|
|
19
|
+
const notFoundItems = !(selectedTreeData === null || selectedTreeData === void 0 ? void 0 : selectedTreeData.length)
|
|
20
|
+
? notExtendValueSelectedItems === null || notExtendValueSelectedItems === void 0 ? void 0 : notExtendValueSelectedItems.filter(item => !(items === null || items === void 0 ? void 0 : items.some(i => i.key === item.key)))
|
|
21
|
+
: [];
|
|
19
22
|
const serializeTreeData = (list) => {
|
|
20
23
|
var _a;
|
|
21
24
|
return ((_a = list
|
|
@@ -38,5 +41,5 @@ export const getSelectedTreeData = (items, selectedItems, selectedTreeData = [])
|
|
|
38
41
|
const mergeItems = deepmerge(selectedTreeData || [], items || [], {
|
|
39
42
|
arrayMerge: customMergeTreeData('key'),
|
|
40
43
|
});
|
|
41
|
-
return serializeTreeData(mergeItems).concat(extendValueSelectedItems);
|
|
44
|
+
return serializeTreeData(mergeItems).concat([...notFoundItems, ...extendValueSelectedItems]);
|
|
42
45
|
};
|
|
@@ -209,6 +209,9 @@
|
|
|
209
209
|
"addDynamicContent": "Add dynamic content"
|
|
210
210
|
}
|
|
211
211
|
},
|
|
212
|
+
"matchesAnySelect": {
|
|
213
|
+
"noData": "You don't have any value <br /> Click Extend Value to add value"
|
|
214
|
+
},
|
|
212
215
|
"linear": "Linear",
|
|
213
216
|
"radial": "Radial",
|
|
214
217
|
"gradientStyle": "Gradient Style",
|
package/es/locales/i18n.d.ts
CHANGED
|
@@ -211,6 +211,9 @@ export declare const translationsJson: {
|
|
|
211
211
|
addDynamicContent: string;
|
|
212
212
|
};
|
|
213
213
|
};
|
|
214
|
+
matchesAnySelect: {
|
|
215
|
+
noData: string;
|
|
216
|
+
};
|
|
214
217
|
linear: string;
|
|
215
218
|
radial: string;
|
|
216
219
|
gradientStyle: string;
|
|
@@ -832,6 +835,9 @@ export declare const translationsJson: {
|
|
|
832
835
|
title: string;
|
|
833
836
|
placeholder: string;
|
|
834
837
|
};
|
|
838
|
+
matchesAnySelect: {
|
|
839
|
+
noData: string;
|
|
840
|
+
};
|
|
835
841
|
leftMenu: {
|
|
836
842
|
pageTitle: {
|
|
837
843
|
recommendation: string;
|
|
@@ -146,6 +146,9 @@
|
|
|
146
146
|
"title": "Mở rộng giá trị",
|
|
147
147
|
"placeholder": "Nhập hoặc dán nhiều giá trị cách nhau bằng Enter"
|
|
148
148
|
},
|
|
149
|
+
"matchesAnySelect": {
|
|
150
|
+
"noData": "Bạn không có giá trị nào <br /> Bấm vào Extend Value để thêm giá trị"
|
|
151
|
+
},
|
|
149
152
|
"leftMenu": {
|
|
150
153
|
"pageTitle": {
|
|
151
154
|
"recommendation": "Gợi ý",
|