@true-engineering/true-react-common-ui-kit 3.18.0 → 3.20.0

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 (89) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +12 -0
  3. package/dist/components/TextArea/TextArea.d.ts +2 -0
  4. package/dist/true-react-common-ui-kit.js +62 -60
  5. package/dist/true-react-common-ui-kit.js.map +1 -1
  6. package/dist/true-react-common-ui-kit.umd.cjs +62 -60
  7. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  8. package/package.json +1 -1
  9. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  10. package/src/components/AccountInfo/AccountInfo.tsx +80 -80
  11. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  12. package/src/components/AddButton/AddButton.tsx +52 -52
  13. package/src/components/Button/Button.tsx +129 -129
  14. package/src/components/Colors/Colors.stories.tsx +7 -7
  15. package/src/components/DateInput/DateInput.tsx +90 -90
  16. package/src/components/DateInput/constants.ts +2 -2
  17. package/src/components/DatePicker/DatePicker.tsx +308 -308
  18. package/src/components/Description/Description.stories.tsx +27 -27
  19. package/src/components/Description/Description.tsx +61 -61
  20. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +166 -166
  21. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
  22. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
  23. package/src/components/Flag/Flag.stories.tsx +29 -29
  24. package/src/components/Flag/Flag.tsx +26 -26
  25. package/src/components/Flag/augment.d.ts +1 -1
  26. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +38 -38
  27. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +25 -25
  28. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +196 -196
  29. package/src/components/FlexibleTable/helpers.ts +13 -13
  30. package/src/components/Icon/Icon.stories.tsx +86 -86
  31. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  32. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  33. package/src/components/Icon/complexIcons/index.ts +1 -1
  34. package/src/components/IncrementInput/IncrementInput.tsx +105 -105
  35. package/src/components/Input/Input.tsx +297 -297
  36. package/src/components/Input/types.ts +32 -32
  37. package/src/components/List/List.stories.tsx +70 -70
  38. package/src/components/List/List.tsx +33 -33
  39. package/src/components/List/components/ListItem/ListItem.tsx +57 -57
  40. package/src/components/Modal/Modal.stories.tsx +105 -105
  41. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  42. package/src/components/MultiSelect/MultiSelect.tsx +106 -106
  43. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
  44. package/src/components/Notification/Notification.stories.tsx +46 -46
  45. package/src/components/Notification/Notification.tsx +69 -69
  46. package/src/components/NumberInput/NumberInput.tsx +137 -137
  47. package/src/components/NumberInput/index.ts +1 -1
  48. package/src/components/PhoneInput/PhoneInput.tsx +214 -214
  49. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
  50. package/src/components/PhoneInput/types.ts +16 -16
  51. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  52. package/src/components/RadioButton/RadioButton.tsx +57 -57
  53. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  54. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  55. package/src/components/Select/Select.stories.tsx +235 -235
  56. package/src/components/Select/Select.tsx +1 -1
  57. package/src/components/Select/constants.ts +2 -2
  58. package/src/components/Select/types.ts +1 -1
  59. package/src/components/Selector/Selector.stories.tsx +62 -62
  60. package/src/components/Selector/Selector.tsx +115 -115
  61. package/src/components/Selector/index.ts +2 -2
  62. package/src/components/Selector/types.ts +12 -12
  63. package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
  64. package/src/components/SmartInput/SmartInput.tsx +134 -134
  65. package/src/components/Status/Status.stories.tsx +73 -73
  66. package/src/components/Status/Status.styles.ts +143 -143
  67. package/src/components/Status/Status.tsx +49 -49
  68. package/src/components/Status/constants.ts +11 -11
  69. package/src/components/Status/index.ts +3 -3
  70. package/src/components/Status/types.ts +5 -5
  71. package/src/components/Switch/Switch.stories.tsx +40 -40
  72. package/src/components/Switch/Switch.tsx +75 -75
  73. package/src/components/TextArea/TextArea.stories.tsx +1 -0
  74. package/src/components/TextArea/TextArea.tsx +5 -1
  75. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  76. package/src/components/TextWithInfo/TextWithInfo.tsx +62 -62
  77. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  78. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  79. package/src/components/ThemedPreloader/ThemedPreloader.tsx +54 -54
  80. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  81. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  82. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  83. package/src/components/Tooltip/Tooltip.tsx +35 -35
  84. package/src/components/Tooltip/types.ts +1 -1
  85. package/src/helpers/popper-helpers.ts +17 -17
  86. package/src/hooks/use-dropdown.ts +84 -84
  87. package/src/hooks/use-is-mounted.ts +15 -15
  88. package/src/theme/helpers.ts +76 -76
  89. package/src/vite-env.d.ts +1 -1
@@ -1,235 +1,235 @@
1
- import { ReactNode, useEffect, useState } from 'react';
2
- import { isStringNotEmpty } from '@true-engineering/true-react-platform-helpers';
3
- import { ComponentMeta, ComponentStory } from '@storybook/react';
4
- import { Select, ISelectProps } from './Select';
5
-
6
- interface ObjectValue {
7
- name: string;
8
- age: number;
9
- isDisabled?: boolean;
10
- }
11
-
12
- const inlineStyles = [undefined, 'left', 'right', 'middle'];
13
- const borders: Array<ISelectProps<any>['border']> = [undefined, 'left', 'top', 'right', 'bottom'];
14
- const errorPositions: Array<ISelectProps<any>['errorPosition']> = ['bottom', 'top'];
15
-
16
- const genLetters = (qnt = 1): string =>
17
- Math.random()
18
- .toString(36)
19
- .replace(/[^a-z]+/g, '')
20
- .substr(0, qnt);
21
-
22
- const convertObjectToString = (v: ObjectValue): string => v.name;
23
-
24
- const convertObjectToId = (v: ObjectValue): string => `${v.name}${v.age}`;
25
-
26
- const convertObjectToReactNode = (v: ObjectValue, isDisabled: boolean): ReactNode => (
27
- <span style={{ color: isDisabled ? 'red' : undefined }}>
28
- <i>{v.name}</i>, {v.age}
29
- </span>
30
- );
31
-
32
- const convertStringToReactNode = (v: string): ReactNode => <i>{v}</i>;
33
-
34
- const isOptionDisabled = (option: string) => option.startsWith('Опция');
35
- const isObjectOptionDisabled = (option: ObjectValue) => option.age > 30;
36
-
37
- const stringOptions = [
38
- 'Опция 1',
39
- 'Опция 11',
40
- 'Еще одна опция',
41
- 'Еще выбор',
42
- 'Очень длинная опция вот такой текст',
43
- '1',
44
- '2',
45
- '3',
46
- '4',
47
- ];
48
-
49
- const objectOptions: ObjectValue[] = [
50
- { name: 'Ivan', age: 34 },
51
- { name: 'Ivan', age: 42 },
52
- { name: 'Konstantin', age: 11 },
53
- { name: 'Mikhail', age: 24 },
54
- { name: 'Maria', age: 45, isDisabled: true },
55
- { name: 'Elena', age: 14 },
56
- { name: 'Artem', age: 23 },
57
- ];
58
-
59
- // Максимум не включается, минимум включается
60
- const getRandomInt = (min: number, max: number) =>
61
- Math.floor(Math.random() * (Math.floor(max) - Math.ceil(min))) + Math.ceil(min);
62
-
63
- interface ISelectWithCustomProps<T> extends ISelectProps<T> {
64
- valuesType: 'strings' | 'objects';
65
- shouldUseReactNodes?: boolean;
66
- shouldUsePopper?: boolean;
67
- shouldRenderInBody?: boolean;
68
- shouldHideOnScroll?: boolean;
69
- shouldUseCustomIsDisabledFunction?: boolean;
70
- shouldRenderSearchInputInList?: boolean;
71
- canBeFlipped?: boolean;
72
- scrollParent?: 'document' | 'auto';
73
- }
74
-
75
- function SelectWithCustomProps<T>({
76
- valuesType,
77
- optionsMode,
78
- shouldUseReactNodes,
79
- shouldUsePopper,
80
- shouldRenderInBody,
81
- shouldHideOnScroll,
82
- shouldUseCustomIsDisabledFunction,
83
- shouldRenderSearchInputInList,
84
- canBeFlipped,
85
- scrollParent,
86
- noMatchesLabel,
87
- ...rest
88
- }: ISelectWithCustomProps<T>) {
89
- const [stringValue, setStringValue] = useState<string>();
90
- const stringHandler = (newValue?: string) => {
91
- console.log('change');
92
- setStringValue(newValue);
93
- };
94
-
95
- const [objectValue, setObjectValue] = useState<ObjectValue>();
96
- const objectHandler = (newValue?: ObjectValue) => {
97
- console.log('change');
98
- setObjectValue(newValue);
99
- };
100
-
101
- const selectValuesType = valuesType;
102
- const shouldRenderAsReactNodes = shouldUseReactNodes;
103
-
104
- const getOptions = async (): Promise<Array<string | ObjectValue>> =>
105
- new Promise((resolve) =>
106
- setTimeout(() => {
107
- resolve(
108
- [...Array(10)].map((_) => {
109
- if (selectValuesType === 'strings') {
110
- return genLetters(getRandomInt(3, 10));
111
- }
112
- return {
113
- name: genLetters(getRandomInt(3, 10)),
114
- age: getRandomInt(10, 70),
115
- } as ObjectValue;
116
- }),
117
- );
118
- }, 1000),
119
- );
120
-
121
- const [dynamicOptions, setDynamicOptions] = useState<Array<string | ObjectValue>>([]);
122
-
123
- const handleOpen = () => {
124
- console.log('isOpen');
125
- };
126
-
127
- const handleBlur = () => {
128
- console.log('blur');
129
- };
130
-
131
- useEffect(() => {
132
- const api = async () => {
133
- setDynamicOptions(await getOptions());
134
- };
135
-
136
- api();
137
- }, [selectValuesType]);
138
-
139
- const props =
140
- selectValuesType === 'strings'
141
- ? {
142
- onChange: stringHandler,
143
- value: stringValue,
144
- options: optionsMode === 'dynamic' ? dynamicOptions : stringOptions,
145
- convertValueToReactNode: shouldRenderAsReactNodes ? convertStringToReactNode : undefined,
146
- isOptionDisabled: shouldUseCustomIsDisabledFunction ? isOptionDisabled : undefined,
147
- }
148
- : {
149
- onChange: objectHandler,
150
- value: objectValue,
151
- options: optionsMode === 'dynamic' ? dynamicOptions : objectOptions,
152
- convertValueToString: convertObjectToString,
153
- convertValueToId: convertObjectToId,
154
- convertValueToReactNode: shouldRenderAsReactNodes ? convertObjectToReactNode : undefined,
155
- isOptionDisabled: shouldUseCustomIsDisabledFunction ? isObjectOptionDisabled : undefined,
156
- };
157
-
158
- return (
159
- <Select
160
- {...rest}
161
- {...(props as unknown as ISelectProps<any>)}
162
- {...(shouldRenderSearchInputInList && {
163
- searchInput: { shouldRenderInList: true },
164
- })}
165
- noMatchesLabel={isStringNotEmpty(noMatchesLabel) ? noMatchesLabel : undefined}
166
- optionsMode={optionsMode}
167
- onType={async () => setDynamicOptions(await getOptions())}
168
- onOpen={handleOpen}
169
- onBlur={handleBlur}
170
- dropdownOptions={{
171
- shouldUsePopper,
172
- shouldRenderInBody,
173
- shouldHideOnScroll,
174
- canBeFlipped,
175
- scrollParent,
176
- }}
177
- />
178
- );
179
- }
180
-
181
- export default {
182
- title: 'Controls/Select',
183
- component: SelectWithCustomProps,
184
- argTypes: {
185
- debounceTime: {
186
- control: { type: 'range', min: 0, max: 1000, step: 100 },
187
- },
188
- errorPosition: { control: 'inline-radio', options: errorPositions },
189
- border: { control: 'inline-radio', options: borders },
190
- inlineStyle: { control: 'select', options: inlineStyles },
191
- optionsMode: {
192
- control: 'inline-radio',
193
- options: ['normal', 'search', 'dynamic'],
194
- },
195
- valuesType: {
196
- control: 'inline-radio',
197
- options: ['strings', 'objects'],
198
- },
199
- },
200
- } as ComponentMeta<typeof SelectWithCustomProps>;
201
-
202
- const Template: ComponentStory<typeof SelectWithCustomProps> = (args) => (
203
- <SelectWithCustomProps {...args} />
204
- );
205
-
206
- export const Default = Template.bind({});
207
-
208
- Default.args = {
209
- label: 'Dropdown',
210
- defaultOptionLabel: 'Default Option',
211
- noMatchesLabel: 'No matches',
212
- border: undefined,
213
- isInvalid: false,
214
- errorMessage: 'Error Text',
215
- errorPosition: 'bottom',
216
- hasFloatingLabel: true,
217
- hasRequiredLabel: true,
218
- isDisabled: false,
219
- isRequired: false,
220
- isClearable: false,
221
- isLoading: false,
222
- debounceTime: 400,
223
- // custom options
224
- shouldUseReactNodes: false,
225
- valuesType: 'strings',
226
- optionsMode: 'normal',
227
- shouldUsePopper: false,
228
- shouldRenderInBody: false,
229
- shouldHideOnScroll: false,
230
- shouldUseCustomIsDisabledFunction: false,
231
- shouldRenderSearchInputInList: false,
232
- shouldScrollToList: true,
233
- canBeFlipped: false,
234
- scrollParent: 'document',
235
- };
1
+ import { ReactNode, useEffect, useState } from 'react';
2
+ import { isStringNotEmpty } from '@true-engineering/true-react-platform-helpers';
3
+ import { ComponentMeta, ComponentStory } from '@storybook/react';
4
+ import { Select, ISelectProps } from './Select';
5
+
6
+ interface ObjectValue {
7
+ name: string;
8
+ age: number;
9
+ isDisabled?: boolean;
10
+ }
11
+
12
+ const inlineStyles = [undefined, 'left', 'right', 'middle'];
13
+ const borders: Array<ISelectProps<any>['border']> = [undefined, 'left', 'top', 'right', 'bottom'];
14
+ const errorPositions: Array<ISelectProps<any>['errorPosition']> = ['bottom', 'top'];
15
+
16
+ const genLetters = (qnt = 1): string =>
17
+ Math.random()
18
+ .toString(36)
19
+ .replace(/[^a-z]+/g, '')
20
+ .substr(0, qnt);
21
+
22
+ const convertObjectToString = (v: ObjectValue): string => v.name;
23
+
24
+ const convertObjectToId = (v: ObjectValue): string => `${v.name}${v.age}`;
25
+
26
+ const convertObjectToReactNode = (v: ObjectValue, isDisabled: boolean): ReactNode => (
27
+ <span style={{ color: isDisabled ? 'red' : undefined }}>
28
+ <i>{v.name}</i>, {v.age}
29
+ </span>
30
+ );
31
+
32
+ const convertStringToReactNode = (v: string): ReactNode => <i>{v}</i>;
33
+
34
+ const isOptionDisabled = (option: string) => option.startsWith('Опция');
35
+ const isObjectOptionDisabled = (option: ObjectValue) => option.age > 30;
36
+
37
+ const stringOptions = [
38
+ 'Опция 1',
39
+ 'Опция 11',
40
+ 'Еще одна опция',
41
+ 'Еще выбор',
42
+ 'Очень длинная опция вот такой текст',
43
+ '1',
44
+ '2',
45
+ '3',
46
+ '4',
47
+ ];
48
+
49
+ const objectOptions: ObjectValue[] = [
50
+ { name: 'Ivan', age: 34 },
51
+ { name: 'Ivan', age: 42 },
52
+ { name: 'Konstantin', age: 11 },
53
+ { name: 'Mikhail', age: 24 },
54
+ { name: 'Maria', age: 45, isDisabled: true },
55
+ { name: 'Elena', age: 14 },
56
+ { name: 'Artem', age: 23 },
57
+ ];
58
+
59
+ // Максимум не включается, минимум включается
60
+ const getRandomInt = (min: number, max: number) =>
61
+ Math.floor(Math.random() * (Math.floor(max) - Math.ceil(min))) + Math.ceil(min);
62
+
63
+ interface ISelectWithCustomProps<T> extends ISelectProps<T> {
64
+ valuesType: 'strings' | 'objects';
65
+ shouldUseReactNodes?: boolean;
66
+ shouldUsePopper?: boolean;
67
+ shouldRenderInBody?: boolean;
68
+ shouldHideOnScroll?: boolean;
69
+ shouldUseCustomIsDisabledFunction?: boolean;
70
+ shouldRenderSearchInputInList?: boolean;
71
+ canBeFlipped?: boolean;
72
+ scrollParent?: 'document' | 'auto';
73
+ }
74
+
75
+ function SelectWithCustomProps<T>({
76
+ valuesType,
77
+ optionsMode,
78
+ shouldUseReactNodes,
79
+ shouldUsePopper,
80
+ shouldRenderInBody,
81
+ shouldHideOnScroll,
82
+ shouldUseCustomIsDisabledFunction,
83
+ shouldRenderSearchInputInList,
84
+ canBeFlipped,
85
+ scrollParent,
86
+ noMatchesLabel,
87
+ ...rest
88
+ }: ISelectWithCustomProps<T>) {
89
+ const [stringValue, setStringValue] = useState<string>();
90
+ const stringHandler = (newValue?: string) => {
91
+ console.log('change');
92
+ setStringValue(newValue);
93
+ };
94
+
95
+ const [objectValue, setObjectValue] = useState<ObjectValue>();
96
+ const objectHandler = (newValue?: ObjectValue) => {
97
+ console.log('change');
98
+ setObjectValue(newValue);
99
+ };
100
+
101
+ const selectValuesType = valuesType;
102
+ const shouldRenderAsReactNodes = shouldUseReactNodes;
103
+
104
+ const getOptions = async (): Promise<Array<string | ObjectValue>> =>
105
+ new Promise((resolve) =>
106
+ setTimeout(() => {
107
+ resolve(
108
+ [...Array(10)].map((_) => {
109
+ if (selectValuesType === 'strings') {
110
+ return genLetters(getRandomInt(3, 10));
111
+ }
112
+ return {
113
+ name: genLetters(getRandomInt(3, 10)),
114
+ age: getRandomInt(10, 70),
115
+ } as ObjectValue;
116
+ }),
117
+ );
118
+ }, 1000),
119
+ );
120
+
121
+ const [dynamicOptions, setDynamicOptions] = useState<Array<string | ObjectValue>>([]);
122
+
123
+ const handleOpen = () => {
124
+ console.log('isOpen');
125
+ };
126
+
127
+ const handleBlur = () => {
128
+ console.log('blur');
129
+ };
130
+
131
+ useEffect(() => {
132
+ const api = async () => {
133
+ setDynamicOptions(await getOptions());
134
+ };
135
+
136
+ api();
137
+ }, [selectValuesType]);
138
+
139
+ const props =
140
+ selectValuesType === 'strings'
141
+ ? {
142
+ onChange: stringHandler,
143
+ value: stringValue,
144
+ options: optionsMode === 'dynamic' ? dynamicOptions : stringOptions,
145
+ convertValueToReactNode: shouldRenderAsReactNodes ? convertStringToReactNode : undefined,
146
+ isOptionDisabled: shouldUseCustomIsDisabledFunction ? isOptionDisabled : undefined,
147
+ }
148
+ : {
149
+ onChange: objectHandler,
150
+ value: objectValue,
151
+ options: optionsMode === 'dynamic' ? dynamicOptions : objectOptions,
152
+ convertValueToString: convertObjectToString,
153
+ convertValueToId: convertObjectToId,
154
+ convertValueToReactNode: shouldRenderAsReactNodes ? convertObjectToReactNode : undefined,
155
+ isOptionDisabled: shouldUseCustomIsDisabledFunction ? isObjectOptionDisabled : undefined,
156
+ };
157
+
158
+ return (
159
+ <Select
160
+ {...rest}
161
+ {...(props as unknown as ISelectProps<any>)}
162
+ {...(shouldRenderSearchInputInList && {
163
+ searchInput: { shouldRenderInList: true },
164
+ })}
165
+ noMatchesLabel={isStringNotEmpty(noMatchesLabel) ? noMatchesLabel : undefined}
166
+ optionsMode={optionsMode}
167
+ onType={async () => setDynamicOptions(await getOptions())}
168
+ onOpen={handleOpen}
169
+ onBlur={handleBlur}
170
+ dropdownOptions={{
171
+ shouldUsePopper,
172
+ shouldRenderInBody,
173
+ shouldHideOnScroll,
174
+ canBeFlipped,
175
+ scrollParent,
176
+ }}
177
+ />
178
+ );
179
+ }
180
+
181
+ export default {
182
+ title: 'Controls/Select',
183
+ component: SelectWithCustomProps,
184
+ argTypes: {
185
+ debounceTime: {
186
+ control: { type: 'range', min: 0, max: 1000, step: 100 },
187
+ },
188
+ errorPosition: { control: 'inline-radio', options: errorPositions },
189
+ border: { control: 'inline-radio', options: borders },
190
+ inlineStyle: { control: 'select', options: inlineStyles },
191
+ optionsMode: {
192
+ control: 'inline-radio',
193
+ options: ['normal', 'search', 'dynamic'],
194
+ },
195
+ valuesType: {
196
+ control: 'inline-radio',
197
+ options: ['strings', 'objects'],
198
+ },
199
+ },
200
+ } as ComponentMeta<typeof SelectWithCustomProps>;
201
+
202
+ const Template: ComponentStory<typeof SelectWithCustomProps> = (args) => (
203
+ <SelectWithCustomProps {...args} />
204
+ );
205
+
206
+ export const Default = Template.bind({});
207
+
208
+ Default.args = {
209
+ label: 'Dropdown',
210
+ defaultOptionLabel: 'Default Option',
211
+ noMatchesLabel: 'No matches',
212
+ border: undefined,
213
+ isInvalid: false,
214
+ errorMessage: 'Error Text',
215
+ errorPosition: 'bottom',
216
+ hasFloatingLabel: true,
217
+ hasRequiredLabel: true,
218
+ isDisabled: false,
219
+ isRequired: false,
220
+ isClearable: false,
221
+ isLoading: false,
222
+ debounceTime: 400,
223
+ // custom options
224
+ shouldUseReactNodes: false,
225
+ valuesType: 'strings',
226
+ optionsMode: 'normal',
227
+ shouldUsePopper: false,
228
+ shouldRenderInBody: false,
229
+ shouldHideOnScroll: false,
230
+ shouldUseCustomIsDisabledFunction: false,
231
+ shouldRenderSearchInputInList: false,
232
+ shouldScrollToList: true,
233
+ canBeFlipped: false,
234
+ scrollParent: 'document',
235
+ };
@@ -364,7 +364,7 @@ export function Select<Value>(
364
364
  );
365
365
 
366
366
  const debounceHandleOnType = useMemo(
367
- () => debounce(handleOnType, debounceTime),
367
+ () => debounce(handleOnType, debounceTime, { isImmediate: debounceTime === 0 }),
368
368
  [handleOnType, debounceTime],
369
369
  );
370
370
 
@@ -1,2 +1,2 @@
1
- export const DEFAULT_OPTION_INDEX = -2;
2
- export const ALL_OPTION_INDEX = -1;
1
+ export const DEFAULT_OPTION_INDEX = -2;
2
+ export const ALL_OPTION_INDEX = -1;
@@ -1 +1 @@
1
- export type IMultipleSelectValue<Value> = Array<NonNullable<Value>>;
1
+ export type IMultipleSelectValue<Value> = Array<NonNullable<Value>>;
@@ -1,62 +1,62 @@
1
- import { useState } from 'react';
2
- import { ComponentStory } from '@storybook/react';
3
- import { Status } from '../Status';
4
- import { Selector } from './Selector';
5
- import { ISelectorOption } from './types';
6
-
7
- const options: Array<ISelectorOption<string>> = [
8
- {
9
- label: 'Label 1',
10
- value: '1',
11
- icon: 'eye',
12
- },
13
- {
14
- label: 'My label 2',
15
- value: '2',
16
- },
17
- {
18
- label: (
19
- <>
20
- This is Label 3{' '}
21
- <Status size="xs" color="teal">
22
- P
23
- </Status>
24
- </>
25
- ),
26
- value: '3',
27
- },
28
- {
29
- label: 'This is disabled',
30
- value: '4',
31
- isDisabled: true,
32
- },
33
- ];
34
-
35
- export default {
36
- title: 'Controls/Selector',
37
- component: Selector,
38
- };
39
-
40
- const Template: ComponentStory<typeof Selector> = (args) => {
41
- const [value, setValue] = useState(options[0].value);
42
- return <Selector {...args} value={value} options={options} onChange={setValue} />;
43
- };
44
-
45
- export const Default = Template.bind({});
46
-
47
- Default.args = {
48
- size: 'l',
49
- iconPosition: 'left',
50
- hasSameOptionsWidth: true,
51
- isDisabled: false,
52
- isInvalid: false,
53
- isRequired: false,
54
- };
55
-
56
- Default.argTypes = {};
57
-
58
- Default.parameters = {
59
- controls: {
60
- exclude: ['options', 'value', 'testId', 'onChange'],
61
- },
62
- };
1
+ import { useState } from 'react';
2
+ import { ComponentStory } from '@storybook/react';
3
+ import { Status } from '../Status';
4
+ import { Selector } from './Selector';
5
+ import { ISelectorOption } from './types';
6
+
7
+ const options: Array<ISelectorOption<string>> = [
8
+ {
9
+ label: 'Label 1',
10
+ value: '1',
11
+ icon: 'eye',
12
+ },
13
+ {
14
+ label: 'My label 2',
15
+ value: '2',
16
+ },
17
+ {
18
+ label: (
19
+ <>
20
+ This is Label 3{' '}
21
+ <Status size="xs" color="teal">
22
+ P
23
+ </Status>
24
+ </>
25
+ ),
26
+ value: '3',
27
+ },
28
+ {
29
+ label: 'This is disabled',
30
+ value: '4',
31
+ isDisabled: true,
32
+ },
33
+ ];
34
+
35
+ export default {
36
+ title: 'Controls/Selector',
37
+ component: Selector,
38
+ };
39
+
40
+ const Template: ComponentStory<typeof Selector> = (args) => {
41
+ const [value, setValue] = useState(options[0].value);
42
+ return <Selector {...args} value={value} options={options} onChange={setValue} />;
43
+ };
44
+
45
+ export const Default = Template.bind({});
46
+
47
+ Default.args = {
48
+ size: 'l',
49
+ iconPosition: 'left',
50
+ hasSameOptionsWidth: true,
51
+ isDisabled: false,
52
+ isInvalid: false,
53
+ isRequired: false,
54
+ };
55
+
56
+ Default.argTypes = {};
57
+
58
+ Default.parameters = {
59
+ controls: {
60
+ exclude: ['options', 'value', 'testId', 'onChange'],
61
+ },
62
+ };