@snack-uikit/fields 0.41.7-preview-85131e65.0 → 0.41.7
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 +11 -0
- package/README.md +84 -3
- package/dist/cjs/components/FieldSelect/FieldSelectMultiple.js +5 -0
- package/dist/cjs/components/FieldSelect/FieldSelectSingle.js +5 -0
- package/dist/esm/components/FieldSelect/FieldSelectMultiple.js +6 -1
- package/dist/esm/components/FieldSelect/FieldSelectSingle.js +5 -0
- package/package.json +2 -2
- package/src/components/FieldSelect/FieldSelectMultiple.tsx +7 -1
- package/src/components/FieldSelect/FieldSelectSingle.tsx +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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.41.7 (2025-03-25)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **PDS-1778:** field select empty option fix ([7d21fd4](https://github.com/cloud-ru-tech/snack-uikit/commit/7d21fd4534f135ff48f7ef596364b3b5b39f2fd3))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## 0.41.6 (2025-03-19)
|
|
7
18
|
|
|
8
19
|
### Only dependencies have been changed
|
package/README.md
CHANGED
|
@@ -195,13 +195,40 @@ FieldStepper в основном предназначен для работы с
|
|
|
195
195
|
### Props
|
|
196
196
|
| name | type | default value | description |
|
|
197
197
|
|------|------|---------------|-------------|
|
|
198
|
+
| open | `boolean` | - | Открыт color-picker |
|
|
199
|
+
| onOpenChange | `(value: boolean) => void` | - | Колбек открытия пикера |
|
|
200
|
+
| showCopyButton | `boolean` | - | Отображение кнопки копирования |
|
|
201
|
+
| onCopyButtonClick | `() => void` | - | Колбек клика по кнопке Копировать для поля |
|
|
202
|
+
| showClearButton | `boolean` | true | Отображение кнопки Очистки поля |
|
|
203
|
+
| value | `string` | - | Значение input |
|
|
204
|
+
| onChange | `(value: string) => void` | - | |
|
|
205
|
+
| withAlpha | `boolean` | - | Значение с альфаканалом |
|
|
206
|
+
| autoApply | `boolean` | - | Применять изменения автоматически, если значение false - то изменения происходят по кнопке |
|
|
207
|
+
| className | `string` | - | Класснейм |
|
|
208
|
+
| colorMode | `{ hex?: boolean; rgb?: boolean; hsv?: boolean; }` | - | |
|
|
209
|
+
| id | `string` | - | Значение html-атрибута id |
|
|
210
|
+
| name | `string` | - | Значение html-атрибута name |
|
|
211
|
+
| disabled | `boolean` | - | Является ли поле деактивированным |
|
|
212
|
+
| readonly | `boolean` | - | Является ли поле доступным только для чтения |
|
|
213
|
+
| onFocus | `FocusEventHandler<HTMLInputElement>` | - | Колбек обработки получения фокуса |
|
|
214
|
+
| onBlur | `FocusEventHandler<HTMLInputElement>` | - | Колбек обработки потери фокуса |
|
|
215
|
+
| placeholder | `string` | - | Значение плейсхолдера |
|
|
216
|
+
| label | `string` | - | Лейбл |
|
|
217
|
+
| labelTooltip | `ReactNode` | - | Всплывающая подсказка лейбла |
|
|
218
|
+
| required | `boolean` | - | Является ли поле обязательным |
|
|
219
|
+
| caption | `string` | - | Подпись справа от лейбла |
|
|
220
|
+
| hint | `string` | - | Подсказка внизу |
|
|
221
|
+
| showHintIcon | `boolean` | - | Отображать иконку подсказки |
|
|
222
|
+
| size | enum Size: `"s"`, `"m"`, `"l"` | SIZE.S | Размер |
|
|
223
|
+
| validationState | enum ValidationState: `"error"`, `"default"`, `"warning"`, `"success"` | default | Состояние валидации |
|
|
224
|
+
| labelTooltipPlacement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | top | Расположение подсказки лейбла |
|
|
225
|
+
| error | `string` | - | |
|
|
198
226
|
| ref | `LegacyRef<HTMLInputElement>` | - | Allows getting a ref to the component instance. Once the component unmounts, React will set `ref.current` to `null` (or call the ref with `null` if you passed a callback ref). @see {@link https://react.dev/learn/referencing-values-with-refs#refs-and-the-dom React Docs} |
|
|
199
227
|
| key | `Key` | - | |
|
|
200
228
|
## FieldDate
|
|
201
229
|
### Props
|
|
202
230
|
| name | type | default value | description |
|
|
203
231
|
|------|------|---------------|-------------|
|
|
204
|
-
| buildCellProps* | `CalendarProps` | - | |
|
|
205
232
|
| mode* | "date" \| "date-time" | - | |
|
|
206
233
|
| open | `boolean` | - | Открыт date-picker |
|
|
207
234
|
| onOpenChange | `(value: boolean) => void` | - | Колбек открытия пикера |
|
|
@@ -210,6 +237,7 @@ FieldStepper в основном предназначен для работы с
|
|
|
210
237
|
| showCopyButton | `boolean` | - | Отображение кнопки копирования |
|
|
211
238
|
| onCopyButtonClick | `() => void` | - | Колбек клика по кнопке Копировать для поля |
|
|
212
239
|
| showClearButton | `boolean` | true | Отображение кнопки Очистки поля |
|
|
240
|
+
| buildCellProps | `(date: Date, viewMode: ViewMode) => { isDisabled?: boolean; isHoliday?: boolean } ;` | - | Колбек установки свойств ячеек календаря. Вызывается на построение каждой ячейки. Принимает два параметра: <br> `Date` - дата ячейки <br> `ViewMode`: <br> - `month` отображение месяца, каждая ячейка - 1 день <br> - `year` отображение года, каждая ячейка - 1 месяц <br> - `decade` отображение декады, каждая ячейка - 1 год <br><br> Колбек должен возвращать объект с полями, отвечающими за отключение и подкраску ячейки. |
|
|
213
241
|
| id | `string` | - | Значение html-атрибута id |
|
|
214
242
|
| name | `string` | - | Значение html-атрибута name |
|
|
215
243
|
| disabled | `boolean` | - | Является ли поле деактивированным |
|
|
@@ -289,8 +317,61 @@ FieldStepper в основном предназначен для работы с
|
|
|
289
317
|
### Props
|
|
290
318
|
| name | type | default value | description |
|
|
291
319
|
|------|------|---------------|-------------|
|
|
320
|
+
| options* | `OptionProps[]` | - | |
|
|
321
|
+
| id | `string` | - | Значение html-атрибута id |
|
|
322
|
+
| name | `string` | - | Значение html-атрибута name |
|
|
323
|
+
| disabled | `boolean` | false | Является ли поле деактивированным |
|
|
324
|
+
| readonly | `boolean` | false false | Является ли поле доступным только для чтения |
|
|
325
|
+
| onFocus | `FocusEventHandler<HTMLInputElement>` | - | Колбек обработки получения фокуса |
|
|
326
|
+
| onBlur | `FocusEventHandler<HTMLInputElement>` | - | Колбек обработки потери фокуса |
|
|
327
|
+
| placeholder | `string` | - | Значение плейсхолдера |
|
|
328
|
+
| onKeyDown | `KeyboardEventHandler<HTMLInputElement>` | - | Колбек обработки начала нажатия клавиши клавиатуры |
|
|
329
|
+
| className | `string` | - | CSS-класс |
|
|
330
|
+
| label | `string` | - | Лейбл |
|
|
331
|
+
| labelTooltip | `ReactNode` | - | Всплывающая подсказка лейбла |
|
|
332
|
+
| required | `boolean` | - | Является ли поле обязательным |
|
|
333
|
+
| caption | `string` | - | Подпись справа от лейбла |
|
|
334
|
+
| hint | `string` | - | Подсказка внизу |
|
|
335
|
+
| showHintIcon | `boolean` | - | Отображать иконку подсказки |
|
|
336
|
+
| size | enum Size: `"s"`, `"m"`, `"l"` | - | Размер |
|
|
337
|
+
| validationState | enum ValidationState: `"error"`, `"default"`, `"warning"`, `"success"` | - | Состояние валидации |
|
|
338
|
+
| labelTooltipPlacement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | top | Расположение подсказки лейбла |
|
|
339
|
+
| error | `string` | - | |
|
|
340
|
+
| loading | `boolean` | - | |
|
|
341
|
+
| prefix | `ReactNode` | - | Произвольный префикс для поля |
|
|
342
|
+
| postfix | `ReactNode` | - | Произвольный постфикс для поля |
|
|
343
|
+
| onChange | `OnChangeHandler<any>` | - | Controlled обработчик измения состояния |
|
|
344
|
+
| value | `ItemId \| ItemId[]` | - | Controlled состояние |
|
|
345
|
+
| defaultValue | `ItemId \| ItemId[]` | - | Начальное состояние |
|
|
346
|
+
| showCopyButton | `boolean` | - | Отображение кнопки Копировать для поля (актуально только для `readonly = true`) |
|
|
347
|
+
| showClearButton | `boolean` | true | Отображение кнопки очистки поля |
|
|
348
|
+
| open | `boolean` | - | |
|
|
349
|
+
| onOpenChange | `(open: boolean) => void` | - | |
|
|
350
|
+
| onCopyButtonClick | `() => void` | - | Колбек клика по кнопке Копировать для поля |
|
|
351
|
+
| prefixIcon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка-префикс для поля |
|
|
352
|
+
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | - | |
|
|
353
|
+
| pinTop | `OptionProps[]` | - | |
|
|
354
|
+
| pinBottom | `OptionProps[]` | - | |
|
|
355
|
+
| footer | `ReactNode` | - | |
|
|
356
|
+
| search | `SearchState` | - | |
|
|
357
|
+
| scrollToSelectedItem | `boolean` | - | Флаг, отвещающий за прокручивание до выбранного элемента |
|
|
358
|
+
| virtualized | `boolean` | - | Включить виртуализацию на компоненты списка. Рекомендуется если у вас от 1к элементов списка |
|
|
359
|
+
| untouchableScrollbars | `boolean` | - | Отключает возможность взаимодействовать со скролбарами мышью. |
|
|
360
|
+
| dataFiltered | `boolean` | - | |
|
|
361
|
+
| dataError | `boolean` | - | |
|
|
362
|
+
| noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
|
|
363
|
+
| noResultsState | `EmptyStateProps` | - | Экран при отстутствии результатов поиска или фильтров |
|
|
364
|
+
| errorDataState | `EmptyStateProps` | - | Экран при ошибке запроса |
|
|
365
|
+
| searchable | `boolean` | - | |
|
|
366
|
+
| autocomplete | `boolean` | - | |
|
|
367
|
+
| addOptionByEnter | `boolean` | - | |
|
|
368
|
+
| enableFuzzySearch | `boolean` | - | Включить нечеткий поиск |
|
|
369
|
+
| selectedOptionFormatter | `SelectedOptionFormatter` | - | |
|
|
370
|
+
| selection | "single" \| "multiple" | - | |
|
|
292
371
|
| ref | `LegacyRef<HTMLInputElement>` | - | Allows getting a ref to the component instance. Once the component unmounts, React will set `ref.current` to `null` (or call the ref with `null` if you passed a callback ref). @see {@link https://react.dev/learn/referencing-values-with-refs#refs-and-the-dom React Docs} |
|
|
293
372
|
| key | `Key` | - | |
|
|
373
|
+
| removeByBackspace | `boolean` | - | |
|
|
374
|
+
| resetSearchOnOptionSelection | `boolean` | - | Поведение строки поиска при выборе опции из списка |
|
|
294
375
|
## FieldSlider
|
|
295
376
|
### Props
|
|
296
377
|
| name | type | default value | description |
|
|
@@ -436,8 +517,8 @@ FieldStepper в основном предназначен для работы с
|
|
|
436
517
|
|------|------|---------------|-------------|
|
|
437
518
|
| open | `boolean` | - | Открыт time-picker |
|
|
438
519
|
| onOpenChange | `(value: boolean) => void` | - | Колбек открытия пикера |
|
|
439
|
-
| value | `
|
|
440
|
-
| onChange | `
|
|
520
|
+
| value | `TimeValue` | - | Значение поля |
|
|
521
|
+
| onChange | `(value?: TimeValue) => void` | - | Колбек смены значения |
|
|
441
522
|
| showCopyButton | `boolean` | - | Отображение кнопки копирования |
|
|
442
523
|
| onCopyButtonClick | `() => void` | - | Колбек клика по кнопке Копировать для поля |
|
|
443
524
|
| showSeconds | `boolean` | true | Показывать ли секунды |
|
|
@@ -109,6 +109,11 @@ exports.FieldSelectMultiple = (0, react_1.forwardRef)((props, ref) => {
|
|
|
109
109
|
postfix,
|
|
110
110
|
disabled
|
|
111
111
|
});
|
|
112
|
+
(0, react_1.useEffect)(() => {
|
|
113
|
+
if (options.length < 1 && Boolean(value)) {
|
|
114
|
+
setValue(undefined);
|
|
115
|
+
}
|
|
116
|
+
}, [options.length, setValue, value]);
|
|
112
117
|
(0, utils_1.useLayoutEffect)(() => {
|
|
113
118
|
setItems(_ref => {
|
|
114
119
|
let {
|
|
@@ -105,6 +105,11 @@ exports.FieldSelectSingle = (0, react_1.forwardRef)((props, ref) => {
|
|
|
105
105
|
postfix,
|
|
106
106
|
disabled
|
|
107
107
|
});
|
|
108
|
+
(0, react_1.useEffect)(() => {
|
|
109
|
+
if (options.length < 1 && Boolean(value)) {
|
|
110
|
+
setValue(undefined);
|
|
111
|
+
}
|
|
112
|
+
}, [options.length, setValue, value]);
|
|
108
113
|
(0, utils_1.useLayoutEffect)(() => {
|
|
109
114
|
setItems(_ref => {
|
|
110
115
|
let {
|
|
@@ -12,7 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
13
|
import cn from 'classnames';
|
|
14
14
|
import mergeRefs from 'merge-refs';
|
|
15
|
-
import { forwardRef, useRef, useState } from 'react';
|
|
15
|
+
import { forwardRef, useEffect, useRef, useState } from 'react';
|
|
16
16
|
import { InputPrivate } from '@snack-uikit/input-private';
|
|
17
17
|
import { Droplist } from '@snack-uikit/list';
|
|
18
18
|
import { Tag } from '@snack-uikit/tag';
|
|
@@ -47,6 +47,11 @@ export const FieldSelectMultiple = forwardRef((props, ref) => {
|
|
|
47
47
|
resetSearchOnOptionSelection }));
|
|
48
48
|
const prefixSettings = usePrefix({ prefix, disabled });
|
|
49
49
|
const postfixSettings = usePostfix({ postfix, disabled });
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (options.length < 1 && Boolean(value)) {
|
|
52
|
+
setValue(undefined);
|
|
53
|
+
}
|
|
54
|
+
}, [options.length, setValue, value]);
|
|
50
55
|
useLayoutEffect(() => {
|
|
51
56
|
setItems(({ selectedItems }) => updateMultipleItems({ options, value, selectedItems }));
|
|
52
57
|
}, [options, value]);
|
|
@@ -42,6 +42,11 @@ export const FieldSelectSingle = forwardRef((props, ref) => {
|
|
|
42
42
|
const prevSelectedItem = useRef(selectedItem);
|
|
43
43
|
const prefixSettings = usePrefix({ prefix, disabled });
|
|
44
44
|
const postfixSettings = usePostfix({ postfix, disabled });
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (options.length < 1 && Boolean(value)) {
|
|
47
|
+
setValue(undefined);
|
|
48
|
+
}
|
|
49
|
+
}, [options.length, setValue, value]);
|
|
45
50
|
useLayoutEffect(() => {
|
|
46
51
|
setItems(({ selectedItem }) => updateItems({ options, value, selectedItem }));
|
|
47
52
|
}, [options, value]);
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Fields",
|
|
7
|
-
"version": "0.41.7
|
|
7
|
+
"version": "0.41.7",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"@snack-uikit/locale": "*"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "3f11b6caedc3e873fcd20d1715280d66442538fe"
|
|
69
69
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import cn from 'classnames';
|
|
2
2
|
import mergeRefs from 'merge-refs';
|
|
3
|
-
import { FocusEvent, forwardRef, KeyboardEvent, KeyboardEventHandler, useRef, useState } from 'react';
|
|
3
|
+
import { FocusEvent, forwardRef, KeyboardEvent, KeyboardEventHandler, useEffect, useRef, useState } from 'react';
|
|
4
4
|
|
|
5
5
|
import { InputPrivate } from '@snack-uikit/input-private';
|
|
6
6
|
import { BaseItemProps, Droplist, ItemProps, SelectionSingleValueType } from '@snack-uikit/list';
|
|
@@ -82,6 +82,12 @@ export const FieldSelectMultiple = forwardRef<HTMLInputElement, FieldSelectMulti
|
|
|
82
82
|
const prefixSettings = usePrefix({ prefix, disabled });
|
|
83
83
|
const postfixSettings = usePostfix({ postfix, disabled });
|
|
84
84
|
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
if (options.length < 1 && Boolean(value)) {
|
|
87
|
+
setValue(undefined);
|
|
88
|
+
}
|
|
89
|
+
}, [options.length, setValue, value]);
|
|
90
|
+
|
|
85
91
|
useLayoutEffect(() => {
|
|
86
92
|
setItems(({ selectedItems }) => updateMultipleItems({ options, value, selectedItems }));
|
|
87
93
|
}, [options, value]);
|
|
@@ -86,6 +86,12 @@ export const FieldSelectSingle = forwardRef<HTMLInputElement, FieldSelectSingleP
|
|
|
86
86
|
const prefixSettings = usePrefix({ prefix, disabled });
|
|
87
87
|
const postfixSettings = usePostfix({ postfix, disabled });
|
|
88
88
|
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (options.length < 1 && Boolean(value)) {
|
|
91
|
+
setValue(undefined);
|
|
92
|
+
}
|
|
93
|
+
}, [options.length, setValue, value]);
|
|
94
|
+
|
|
89
95
|
useLayoutEffect(() => {
|
|
90
96
|
setItems(({ selectedItem }) => updateItems({ options, value, selectedItem }));
|
|
91
97
|
}, [options, value]);
|