@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.
@@ -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, useEffect, useRef, useState } from 'react';
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.global.noResultsMatchesKeyWord).toString() } = _a, restListEmptyProps = __rest(_a, ["icon", "description"]);
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
- useEffect(() => {
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
- setTimeout(() => {
80
- var _a;
81
- (_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
82
- setState(prev => (Object.assign(Object.assign({}, prev), { isShowLoadMoreEl: true })));
83
- }, 500);
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
- }, [selectedTreeDataProp]);
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(React.Fragment, null,
253
- React.createElement(StyledTree, { key: searchValue, defaultExpandedKeys: (matchedParents === null || matchedParents === void 0 ? void 0 : matchedParents.length)
254
- ? matchedParents.map(item => item.key)
255
- : 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: {
256
- transform: props.expanded ? 'rotate(0)' : 'rotate(-90deg)',
257
- transition: 'transform 0.3s ease',
258
- }, color: globalToken === null || globalToken === void 0 ? void 0 : globalToken.bw8 })), titleRender: (item) => isShowLoadMoreEl && item.isLoadMore ? (React.createElement("div", { ref: loadMoreRef })) : (renderItemNodeTitle({
259
- item,
260
- onSelectItem,
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",
@@ -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;
@@ -211,6 +211,9 @@ export declare const convertLanguageJsonToObject: (json: any, objToConvertTo?: C
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;
@@ -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 ý",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antscorp/antsomi-ui",
3
- "version": "1.3.5-beta.717",
3
+ "version": "1.3.5-beta.718",
4
4
  "description": "An enterprise-class UI design language and React UI library.",
5
5
  "sideEffects": [
6
6
  "dist/*",