@synerise/ds-factors 0.26.3 → 0.26.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/CHANGELOG.md CHANGED
@@ -3,6 +3,22 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.26.5](https://github.com/Synerise/synerise-design/compare/@synerise/ds-factors@0.26.4...@synerise/ds-factors@0.26.5) (2024-10-29)
7
+
8
+ **Note:** Version bump only for package @synerise/ds-factors
9
+
10
+
11
+
12
+
13
+
14
+ ## [0.26.4](https://github.com/Synerise/synerise-design/compare/@synerise/ds-factors@0.26.3...@synerise/ds-factors@0.26.4) (2024-10-28)
15
+
16
+ **Note:** Version bump only for package @synerise/ds-factors
17
+
18
+
19
+
20
+
21
+
6
22
  ## [0.26.3](https://github.com/Synerise/synerise-design/compare/@synerise/ds-factors@0.26.2...@synerise/ds-factors@0.26.3) (2024-10-24)
7
23
 
8
24
  **Note:** Version bump only for package @synerise/ds-factors
@@ -1,4 +1,11 @@
1
1
  import React from 'react';
2
2
  import { ParameterDropdownProps } from '../../Factors.types';
3
+ export type TitleItem = {
4
+ type: 'title';
5
+ title: string;
6
+ };
7
+ export type DividerItem = {
8
+ type: 'divider';
9
+ };
3
10
  declare const ParameterDropdown: ({ setSelected, texts, groups, items, recentItems, setDropdownVisible, loading, onFetchData, hasMoreItems, outerHeight, value, renderEmptyGroups, maxSearchResultsInGroup, }: ParameterDropdownProps) => React.JSX.Element;
4
11
  export default ParameterDropdown;
@@ -9,6 +9,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
9
9
  import React, { useRef, useState, useMemo, useCallback, useEffect } from 'react';
10
10
  import { v4 as uuid } from 'uuid';
11
11
  import Dropdown from '@synerise/ds-dropdown';
12
+ import Divider from '@synerise/ds-divider';
12
13
  import Icon, { ArrowRightCircleM, SearchM } from '@synerise/ds-icon';
13
14
  import Tabs from '@synerise/ds-tabs';
14
15
  import { useSearchResults, getGroupName, focusWithArrowKeys, useOnClickOutside, getClosest } from '@synerise/ds-utils';
@@ -18,6 +19,7 @@ import Scrollbar from '@synerise/ds-scrollbar';
18
19
  import { itemSizes } from '@synerise/ds-list-item';
19
20
  import * as S from './Parameter.style';
20
21
  import ParameterDropdownItem from './ParameterDropdownItem';
22
+ import { groupItems } from './utils';
21
23
  import { useGroups } from './useGroups';
22
24
  import { DROPDOWN_HEIGHT, SEARCH_HEGIHT, TABS_HEIGHT, SUBGROUP_HEADER_HEIGHT, ITEM_SIZE, LIST_STYLE, NO_GROUP_NAME } from './Parameter.constants';
23
25
 
@@ -25,6 +27,10 @@ var isListTitle = function isListTitle(element) {
25
27
  return element.title !== undefined;
26
28
  };
27
29
 
30
+ var isDivider = function isDivider(item) {
31
+ return item.type === 'divider';
32
+ };
33
+
28
34
  var ParameterDropdown = function ParameterDropdown(_ref) {
29
35
  var setSelected = _ref.setSelected,
30
36
  texts = _ref.texts,
@@ -80,15 +86,22 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
80
86
  return activeTab === index;
81
87
  });
82
88
  }, [visibleGroups, activeTab]);
89
+ var resetList = React.useCallback(function () {
90
+ if (listRef.current) {
91
+ listRef.current.resetAfterIndex(0, false);
92
+ }
93
+ }, [listRef]);
83
94
  var clearSearch = useCallback(function () {
84
95
  setSearchQuery('');
85
- }, []);
96
+ resetList();
97
+ }, [setSearchQuery, resetList]);
86
98
  var handleOnSetGroup = useCallback(function (item) {
87
99
  setActiveGroup(item);
88
100
  }, []);
89
101
  var hideDropdown = useCallback(function () {
90
102
  setDropdownVisible(false);
91
- }, [setDropdownVisible]);
103
+ resetList();
104
+ }, [setDropdownVisible, resetList]);
92
105
  var groupByGroupName = useCallback(function (dropdownItems, maxItemsInGroup) {
93
106
  var itemsNumber = dropdownItems == null ? void 0 : dropdownItems.length;
94
107
  var groupedItems = {};
@@ -111,8 +124,8 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
111
124
  });
112
125
  }
113
126
 
114
- var groupItems = maxItemsInGroup ? groupedItems[key].slice(0, maxItemsInGroup) : groupedItems[key];
115
- groupItems.forEach(function (item) {
127
+ var maxGroupedItems = maxItemsInGroup ? groupedItems[key].slice(0, maxItemsInGroup) : groupedItems[key];
128
+ maxGroupedItems.forEach(function (item) {
116
129
  var resultItem = !item.groupId ? {
117
130
  className: classNames,
118
131
  item: item,
@@ -131,7 +144,7 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
131
144
  });
132
145
 
133
146
  if (maxItemsInGroup && groupedItems[key].length > maxItemsInGroup) {
134
- var anyItem = groupItems[0];
147
+ var anyItem = maxGroupedItems[0];
135
148
  resultItems.push({
136
149
  className: classNames,
137
150
  select: handleOnSetGroup,
@@ -152,6 +165,15 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
152
165
  var _useSearchResults = useSearchResults(items || [], groups || [], activeTab, groupByGroupName, activeGroup, searchQuery, maxSearchResultsInGroup),
153
166
  searchResults = _useSearchResults.searchResults;
154
167
 
168
+ var mapItemToDropdownItem = React.useCallback(function (item) {
169
+ return {
170
+ className: classNames,
171
+ item: item,
172
+ searchQuery: searchQuery,
173
+ hideDropdown: hideDropdown,
174
+ select: setSelected
175
+ };
176
+ }, [classNames, searchQuery, hideDropdown, setSelected]);
155
177
  var currentItems = useMemo(function () {
156
178
  if (searchQuery) {
157
179
  return searchResults;
@@ -160,30 +182,33 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
160
182
  var hasSubgroups = Boolean(currentTabItems == null ? void 0 : currentTabItems.subGroups);
161
183
 
162
184
  if (hasSubgroups && !activeGroup) {
163
- var _currentTabItems$subG;
164
-
165
- return currentTabItems == null || (_currentTabItems$subG = currentTabItems.subGroups) == null ? void 0 : _currentTabItems$subG.map(function (subGroup) {
185
+ var groupedItems = (items || []).filter(function (item) {
186
+ return item.groupId === (currentTabItems == null ? void 0 : currentTabItems.id);
187
+ }).map(mapItemToDropdownItem);
188
+ var subGroups = ((currentTabItems == null ? void 0 : currentTabItems.subGroups) || []).map(function (subGroup) {
166
189
  return {
167
190
  className: classNames,
168
191
  item: subGroup,
169
192
  searchQuery: searchQuery,
170
- select: setActiveGroup
193
+ select: function select(group) {
194
+ setActiveGroup(group);
195
+ resetList();
196
+ }
171
197
  };
172
198
  });
199
+ return groupItems([].concat(groupedItems, subGroups), activeGroup);
173
200
  }
174
201
 
175
202
  if (activeGroup) {
176
- return items == null ? void 0 : items.filter(function (item) {
203
+ return groupItems((items || []).filter(function (item) {
177
204
  return item.groupId === activeGroup.id;
178
- }).map(function (item) {
179
- return {
180
- className: classNames,
181
- item: item,
182
- searchQuery: searchQuery,
183
- hideDropdown: hideDropdown,
184
- select: setSelected
185
- };
186
- });
205
+ }).map(mapItemToDropdownItem), activeGroup);
206
+ }
207
+
208
+ if (activeTab && groups && groups[activeTab]) {
209
+ return groupItems((items || []).filter(function (item) {
210
+ return item.groupId === groups[activeTab].id;
211
+ }).map(mapItemToDropdownItem), activeGroup);
187
212
  }
188
213
 
189
214
  if (activeTab && visibleGroups && visibleGroups[activeTab]) {
@@ -224,7 +249,7 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
224
249
  select: setSelected
225
250
  };
226
251
  });
227
- }, [searchQuery, currentTabItems, activeGroup, visibleGroups, items, searchResults, classNames, hideDropdown, setSelected, activeTab, groupByGroupName, recentItems, texts.parameter.allItemsGroupName, texts.parameter.recentItemsGroupName]);
252
+ }, [searchQuery, currentTabItems, activeGroup, visibleGroups, items, searchResults, classNames, hideDropdown, setSelected, activeTab, groupByGroupName, recentItems, groups, mapItemToDropdownItem, resetList, texts.parameter.allItemsGroupName, texts.parameter.recentItemsGroupName]);
228
253
  var handleSearch = useCallback(function (newSearchQuery) {
229
254
  setSearchQuery(newSearchQuery);
230
255
  }, [setSearchQuery]);
@@ -299,6 +324,7 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
299
324
  handleTabClick: function handleTabClick(index) {
300
325
  setActiveTab(index);
301
326
  setActiveGroup(undefined);
327
+ resetList();
302
328
  }
303
329
  })), activeGroup && /*#__PURE__*/React.createElement(Dropdown.BackAction, {
304
330
  label: activeGroup.name,
@@ -334,13 +360,18 @@ var ParameterDropdown = function ParameterDropdown(_ref) {
334
360
  style = _ref3.style;
335
361
  var listItem = currentItems[index];
336
362
 
337
- if (isListTitle(listItem)) {
338
- return /*#__PURE__*/React.createElement(S.Title, {
363
+ if (listItem && isDivider(listItem)) {
364
+ return /*#__PURE__*/React.createElement("div", {
339
365
  style: style
340
- }, listItem.title);
366
+ }, /*#__PURE__*/React.createElement(Divider, {
367
+ marginTop: 8,
368
+ marginBottom: 8
369
+ }));
341
370
  }
342
371
 
343
- return /*#__PURE__*/React.createElement(ParameterDropdownItem, _extends({
372
+ return isListTitle(listItem) ? /*#__PURE__*/React.createElement(S.Title, {
373
+ style: style
374
+ }, listItem.title) : /*#__PURE__*/React.createElement(ParameterDropdownItem, _extends({
344
375
  style: style
345
376
  }, listItem));
346
377
  })) : getNoResultContainer));
@@ -0,0 +1,4 @@
1
+ import { ParameterGroup } from 'Factors.types';
2
+ import { DropdownItem } from './Parameter.types';
3
+ import { DividerItem, TitleItem } from './ParameterDropdown';
4
+ export declare const groupItems: (dropdownItems: DropdownItem<ParameterGroup>[], activeGroup: ParameterGroup | undefined) => (DropdownItem<ParameterGroup> | TitleItem | DividerItem)[];
@@ -0,0 +1,32 @@
1
+ var NO_GROUP_NAME = 'NO_GROUP_NAME';
2
+ export var groupItems = function groupItems(dropdownItems, activeGroup) {
3
+ var itemsNumber = dropdownItems.length;
4
+ var groupedItems = {};
5
+ var resultItems = [];
6
+
7
+ for (var i = 0; i < itemsNumber; i += 1) {
8
+ var item = dropdownItems[i];
9
+ var groupName = item.item.groupName || NO_GROUP_NAME;
10
+ var group = groupedItems[groupName] || [];
11
+ group.push(item);
12
+ groupedItems[groupName] = group;
13
+ }
14
+
15
+ Object.keys(groupedItems).forEach(function (key, index) {
16
+ if (key !== NO_GROUP_NAME && !activeGroup) {
17
+ if (index > 0) {
18
+ resultItems.push({
19
+ type: 'divider'
20
+ });
21
+ }
22
+
23
+ resultItems.push({
24
+ type: 'title',
25
+ title: key
26
+ });
27
+ }
28
+
29
+ resultItems = resultItems.concat(groupedItems[key]);
30
+ });
31
+ return resultItems;
32
+ };
package/dist/Factors.d.ts CHANGED
@@ -1,51 +1,5 @@
1
1
  import React from 'react';
2
- import { FactorsProps } from './Factors.types';
3
- export declare const factorTypes: {
4
- text: {
5
- icon: React.JSX.Element;
6
- name: string;
7
- input: ({ value, onChange, texts, textType, autocompleteText, factorType, opened, onDeactivate, error, inputProps, getPopupContainerOverride, readOnly, }: import("./Factors.types").InputProps) => React.JSX.Element;
8
- };
9
- number: {
10
- icon: React.JSX.Element;
11
- name: string;
12
- input: ({ error, value, onChange, texts, opened, onDeactivate, readOnly }: import("./Factors.types").InputProps) => React.JSX.Element;
13
- };
14
- parameter: {
15
- icon: React.JSX.Element;
16
- name: string;
17
- input: ({ value, onChange, onParamsClick, parameters, texts, opened, preventAutoloadData, getPopupContainerOverride, onActivate, onDeactivate, readOnly, error, loading, getMenuEntryProps, }: import("./Factors.types").InputProps) => React.JSX.Element;
18
- };
19
- contextParameter: {
20
- icon: React.JSX.Element;
21
- name: string;
22
- input: ({ value, onChange, onParamsClick, parameters, texts, opened, preventAutoloadData, getPopupContainerOverride, onActivate, onDeactivate, readOnly, error, loading, getMenuEntryProps, }: import("./Factors.types").InputProps) => React.JSX.Element;
23
- };
24
- dynamicKey: {
25
- icon: React.JSX.Element;
26
- name: string;
27
- input: React.FC<import("./Factors.types").InputProps>;
28
- };
29
- formula: {
30
- icon: React.JSX.Element;
31
- name: string;
32
- input: ({ value, error, onChange, withoutTypeSelector, texts, formulaEditor, readOnly, }: import("./Factors.types").InputProps) => React.JSX.Element;
33
- };
34
- array: {
35
- icon: React.JSX.Element;
36
- name: string;
37
- input: ({ value, onChange, texts, textType, autocompleteText, factorType, opened, onDeactivate, error, inputProps, getPopupContainerOverride, readOnly, }: import("./Factors.types").InputProps) => React.JSX.Element;
38
- };
39
- date: {
40
- icon: React.JSX.Element;
41
- name: string;
42
- input: React.FC<import("./Factors.types").InputProps>;
43
- };
44
- dateRange: {
45
- icon: React.JSX.Element;
46
- name: string;
47
- input: ({ getPopupContainerOverride, value, onChange, error, texts, onDeactivate, allowClear, readOnly, }: import("./Factors.types").InputProps) => React.JSX.Element;
48
- };
49
- };
2
+ import { DefinedFactorTypes, FactorsProps, SelectedFactorType } from './Factors.types';
3
+ export declare const factorTypes: Record<DefinedFactorTypes, SelectedFactorType>;
50
4
  declare const Factors: ({ selectedFactorType, setSelectedFactorType, onChangeValue, onParamsClick, value, defaultFactorType, textType, unavailableFactorTypes, availableFactorTypes, parameters, autocompleteText, allowClear, withoutTypeSelector, texts, formulaEditor, opened, loading, factorKey, preventAutoloadData, onActivate, onDeactivate, getPopupContainerOverride, error, inputProps, readOnly, getMenuEntryProps, }: FactorsProps) => React.JSX.Element;
51
5
  export default Factors;
@@ -23,6 +23,7 @@ export type ParameterValueType = Pick<ListItemProps, 'renderHoverTooltip' | 'hov
23
23
  id: ReactText;
24
24
  groupId?: ReactText;
25
25
  description?: string;
26
+ value?: React.ReactText | null;
26
27
  informationCardProps?: Partial<InformationCardProps>;
27
28
  };
28
29
  export type ParameterGroup = {
@@ -32,13 +33,16 @@ export type ParameterGroup = {
32
33
  icon?: ReactNode;
33
34
  allowEmpty?: boolean;
34
35
  subGroups?: ParameterGroup[];
36
+ groupName?: string;
35
37
  };
36
38
  export type ParameterItem = {
37
39
  id: ReactText;
38
40
  name: string;
39
- groupId: ReactText;
40
- icon?: ReactNode;
41
+ groupId?: React.ReactText;
42
+ groupName?: string;
43
+ icon?: React.ReactNode;
41
44
  disabled?: boolean;
45
+ excludeFromSearchResults?: boolean;
42
46
  };
43
47
  export type FactorValueType = string | number | Date | undefined | DynamicKeyValueType | FormulaValueType | ParameterValueType | Partial<DateFilter>;
44
48
  export type SelectedFactorType = {
@@ -2,8 +2,7 @@ import styled from 'styled-components';
2
2
  import { InputGroup } from '@synerise/ds-input';
3
3
  import { OuterWrapper } from '@synerise/ds-input/dist/Input.styles';
4
4
  import { InputGroupWrapper, InputGroupItem } from '@synerise/ds-input/dist/InputGroup.styles';
5
- import { FactorInput } from '../FactorValue/FactorValue.style'; // eslint-disable-next-line import/prefer-default-export
6
-
5
+ import { FactorInput } from '../FactorValue/FactorValue.style';
7
6
  export var Group = styled(InputGroup).withConfig({
8
7
  displayName: "Factorsstyle__Group",
9
8
  componentId: "sc-1kkuis0-0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-factors",
3
- "version": "0.26.3",
3
+ "version": "0.26.5",
4
4
  "description": "Factors UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -34,26 +34,26 @@
34
34
  ],
35
35
  "types": "dist/index.d.ts",
36
36
  "dependencies": {
37
- "@synerise/ds-autocomplete": "^0.8.23",
38
- "@synerise/ds-badge": "^0.8.14",
39
- "@synerise/ds-button": "^0.21.14",
40
- "@synerise/ds-date-picker": "^0.12.1",
41
- "@synerise/ds-date-range-picker": "^0.30.3",
42
- "@synerise/ds-dropdown": "^0.18.19",
43
- "@synerise/ds-icon": "^0.66.0",
44
- "@synerise/ds-information-card": "^0.5.15",
45
- "@synerise/ds-inline-edit": "^0.8.15",
46
- "@synerise/ds-input": "^0.24.9",
47
- "@synerise/ds-input-number": "^0.10.10",
48
- "@synerise/ds-list-item": "^0.4.14",
49
- "@synerise/ds-menu": "^0.20.1",
50
- "@synerise/ds-modal": "^0.17.46",
51
- "@synerise/ds-result": "^0.7.9",
52
- "@synerise/ds-scrollbar": "^0.11.14",
53
- "@synerise/ds-skeleton": "^0.6.13",
54
- "@synerise/ds-tabs": "^0.17.2",
55
- "@synerise/ds-tooltip": "^0.14.44",
56
- "@synerise/ds-utils": "^0.30.0",
37
+ "@synerise/ds-autocomplete": "^0.8.25",
38
+ "@synerise/ds-badge": "^0.8.16",
39
+ "@synerise/ds-button": "^0.21.16",
40
+ "@synerise/ds-date-picker": "^0.12.3",
41
+ "@synerise/ds-date-range-picker": "^0.30.5",
42
+ "@synerise/ds-dropdown": "^0.18.21",
43
+ "@synerise/ds-icon": "^0.66.2",
44
+ "@synerise/ds-information-card": "^0.5.17",
45
+ "@synerise/ds-inline-edit": "^0.8.17",
46
+ "@synerise/ds-input": "^0.24.11",
47
+ "@synerise/ds-input-number": "^0.10.12",
48
+ "@synerise/ds-list-item": "^0.4.16",
49
+ "@synerise/ds-menu": "^0.20.3",
50
+ "@synerise/ds-modal": "^0.17.48",
51
+ "@synerise/ds-result": "^0.7.11",
52
+ "@synerise/ds-scrollbar": "^0.11.16",
53
+ "@synerise/ds-skeleton": "^0.6.15",
54
+ "@synerise/ds-tabs": "^0.17.4",
55
+ "@synerise/ds-tooltip": "^0.14.46",
56
+ "@synerise/ds-utils": "^0.30.2",
57
57
  "lodash": "^4.17.21",
58
58
  "react-intl": "3.12.0",
59
59
  "react-window": "1.8.5",
@@ -65,5 +65,5 @@
65
65
  "react": ">=16.9.0 <= 17.0.2",
66
66
  "styled-components": "5.0.1"
67
67
  },
68
- "gitHead": "b610a511939303ea269e5a89bf943aeec0b15723"
68
+ "gitHead": "c9eddd944cd2f08cb02db807652ba7fb2b536a1c"
69
69
  }