@snack-uikit/chips 0.12.9 → 0.13.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.
- package/CHANGELOG.md +18 -0
- package/README.md +22 -104
- package/dist/components/ChipAssist/styles.module.css +1 -1
- package/dist/components/ChipChoice/components/ChipChoiceBase/ChipChoiceBase.d.ts +20 -0
- package/dist/components/ChipChoice/components/ChipChoiceBase/ChipChoiceBase.js +65 -0
- package/dist/components/ChipChoice/components/ChipChoiceBase/index.d.ts +1 -0
- package/dist/components/ChipChoice/components/ChipChoiceBase/index.js +1 -0
- package/dist/components/ChipChoice/components/{ChipChoiceCustom → ChipChoiceBase}/styles.module.css +18 -10
- package/dist/components/ChipChoice/components/ChipChoiceCustom.d.ts +25 -0
- package/dist/components/ChipChoice/components/ChipChoiceCustom.js +38 -0
- package/dist/components/ChipChoice/components/ChipChoiceDate.d.ts +3 -2
- package/dist/components/ChipChoice/components/ChipChoiceDate.js +19 -9
- package/dist/components/ChipChoice/components/ChipChoiceDateRange.d.ts +3 -2
- package/dist/components/ChipChoice/components/ChipChoiceDateRange.js +18 -8
- package/dist/components/ChipChoice/components/ChipChoiceMultiple.d.ts +8 -0
- package/dist/components/ChipChoice/components/ChipChoiceMultiple.js +87 -0
- package/dist/components/ChipChoice/components/ChipChoiceSingle.d.ts +7 -13
- package/dist/components/ChipChoice/components/ChipChoiceSingle.js +64 -22
- package/dist/components/ChipChoice/components/index.d.ts +1 -1
- package/dist/components/ChipChoice/components/index.js +1 -1
- package/dist/components/ChipChoice/constants.d.ts +3 -2
- package/dist/components/ChipChoice/constants.js +2 -1
- package/dist/components/ChipChoice/hooks.d.ts +11 -0
- package/dist/components/ChipChoice/hooks.js +35 -0
- package/dist/components/ChipChoice/index.d.ts +5 -4
- package/dist/components/ChipChoice/index.js +3 -2
- package/dist/components/ChipChoice/styles.module.css +9 -5
- package/dist/components/ChipChoice/types.d.ts +55 -7
- package/dist/components/ChipChoice/utils/index.d.ts +2 -0
- package/dist/components/ChipChoice/utils/index.js +2 -0
- package/dist/components/ChipChoice/utils/options.d.ts +9 -0
- package/dist/components/ChipChoice/utils/options.js +32 -0
- package/dist/components/ChipChoice/utils/typeGuards.d.ts +6 -0
- package/dist/components/ChipChoice/utils/typeGuards.js +15 -0
- package/dist/components/ChipChoice/utils/utils.d.ts +18 -0
- package/dist/components/ChipChoice/utils/utils.js +29 -0
- package/dist/components/ChipChoiceRow/components/constants.d.ts +2 -1
- package/dist/components/ChipChoiceRow/components/constants.js +2 -1
- package/dist/components/ChipChoiceRow/types.d.ts +11 -5
- package/dist/components/ChipToggle/styles.module.css +1 -1
- package/package.json +13 -7
- package/src/components/ChipChoice/components/ChipChoiceBase/ChipChoiceBase.tsx +149 -0
- package/src/components/ChipChoice/components/ChipChoiceBase/index.ts +1 -0
- package/src/components/ChipChoice/components/{ChipChoiceCustom → ChipChoiceBase}/styles.module.scss +11 -5
- package/src/components/ChipChoice/components/ChipChoiceCustom.tsx +89 -0
- package/src/components/ChipChoice/components/ChipChoiceDate.tsx +42 -18
- package/src/components/ChipChoice/components/ChipChoiceDateRange.tsx +43 -18
- package/src/components/ChipChoice/components/ChipChoiceMultiple.tsx +157 -0
- package/src/components/ChipChoice/components/ChipChoiceSingle.tsx +123 -62
- package/src/components/ChipChoice/components/index.ts +1 -1
- package/src/components/ChipChoice/constants.ts +3 -2
- package/src/components/ChipChoice/hooks.ts +61 -0
- package/src/components/ChipChoice/index.ts +7 -13
- package/src/components/ChipChoice/styles.module.scss +11 -5
- package/src/components/ChipChoice/types.ts +105 -7
- package/src/components/ChipChoice/utils/index.ts +3 -0
- package/src/components/ChipChoice/utils/options.tsx +58 -0
- package/src/components/ChipChoice/utils/typeGuards.ts +35 -0
- package/src/components/ChipChoice/utils/utils.ts +60 -0
- package/src/components/ChipChoiceRow/components/constants.ts +2 -1
- package/src/components/ChipChoiceRow/types.ts +18 -10
- package/dist/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.d.ts +0 -23
- package/dist/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.js +0 -75
- package/dist/components/ChipChoice/components/ChipChoiceCustom/index.d.ts +0 -1
- package/dist/components/ChipChoice/components/ChipChoiceCustom/index.js +0 -1
- package/dist/components/ChipChoice/components/ChipChoiceMulti.d.ts +0 -14
- package/dist/components/ChipChoice/components/ChipChoiceMulti.js +0 -44
- package/dist/components/ChipChoice/utils.d.ts +0 -14
- package/dist/components/ChipChoice/utils.js +0 -26
- package/src/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.tsx +0 -188
- package/src/components/ChipChoice/components/ChipChoiceCustom/index.ts +0 -1
- package/src/components/ChipChoice/components/ChipChoiceMulti.tsx +0 -90
- package/src/components/ChipChoice/utils.ts +0 -48
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
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.13.0 (2024-04-23)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **FF-01:** fix pseudo background ([ee468df](https://github.com/cloud-ru-tech/snack-uikit/commit/ee468df9494a81c7948fb20a647a87bdd0b1e980))
|
|
12
|
+
* **PDS-59:** multi-value formatter ([f606ef2](https://github.com/cloud-ru-tech/snack-uikit/commit/f606ef2d3866dfc0f2630302732825cb9e5fb83c))
|
|
13
|
+
* **PDS-59:** upd tests ([df72712](https://github.com/cloud-ru-tech/snack-uikit/commit/df7271268ac1621316dbb98b274e3d6602515b23))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### BREAKING CHANGES
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
* **PDS-59:** change droplist -> list package ([f63f48a](https://github.com/cloud-ru-tech/snack-uikit/commit/f63f48a394470243a7410933d5e97aaa50317154))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
6
24
|
## 0.12.9 (2024-04-22)
|
|
7
25
|
|
|
8
26
|
### Only dependencies have been changed
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Chips
|
|
2
2
|
|
|
3
3
|
## Installation
|
|
4
|
+
|
|
4
5
|
`npm i @snack-uikit/chips`
|
|
5
6
|
|
|
6
7
|
[Changelog](./CHANGELOG.md)
|
|
@@ -89,138 +90,55 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
|
|
|
89
90
|
### Props
|
|
90
91
|
| name | type | default value | description |
|
|
91
92
|
|------|------|---------------|-------------|
|
|
92
|
-
| onClick* | `MouseEventHandler<HTMLButtonElement>` | - | Колбек обработки клика |
|
|
93
|
-
| label* | `string` | - | Лейбл |
|
|
94
|
-
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
95
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
96
|
-
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
97
|
-
| className | `string` | - | CSS-класс |
|
|
98
|
-
| tabIndex | `number` | - | HTML tab index |
|
|
99
|
-
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | s | Размер |
|
|
100
93
|
## ChipToggle
|
|
101
94
|
Чип с состоянием выбран/не выбран
|
|
102
95
|
### Props
|
|
103
96
|
| name | type | default value | description |
|
|
104
97
|
|------|------|---------------|-------------|
|
|
105
|
-
| onChange* | `(checked: boolean, e: ChangeEvent<HTMLInputElement>) => void` | - | Колбек смены значения |
|
|
106
|
-
| checked* | `boolean` | - | Отмечен ли компонент |
|
|
107
|
-
| label* | `string` | - | Лейбл |
|
|
108
|
-
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
109
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
110
|
-
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
111
|
-
| className | `string` | - | CSS-класс |
|
|
112
|
-
| tabIndex | `number` | - | HTML tab index |
|
|
113
|
-
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | s | Размер |
|
|
114
98
|
## ChipChoice.Custom
|
|
115
99
|
### Props
|
|
116
100
|
| name | type | default value | description |
|
|
117
101
|
|------|------|---------------|-------------|
|
|
118
|
-
| label | `string` | - | Лейбл |
|
|
119
|
-
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
120
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
121
|
-
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
122
|
-
| className | `string` | - | CSS-класс |
|
|
123
|
-
| tabIndex | `number` | - | HTML tab index |
|
|
124
|
-
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
125
|
-
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
126
|
-
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
127
|
-
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
128
|
-
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
129
|
-
| valueToRender | `ReactNode` | - | Отображаемое значение |
|
|
130
|
-
| value | `string \| Date \| string[] \| [Date, Date]` | - | Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> |
|
|
131
|
-
| onClearButtonClick | `MouseEventHandler<HTMLButtonElement>` | - | Колбек для клика по кнопке очистки |
|
|
132
|
-
| children | `ReactNode \| ((props: { handleDroplistItemKeyDown: (e: KeyboardEvent<Element>, cb?: KeyboardEventHandler) => void; closeDroplist(): void; }) => ReactNode)` | - | Контент выпадающего меню <br> <br> Принимает <strong>ReactNode</strong> <br> Или функцию с аргументами: <br> <strong>handleDroplistItemKeyDown</strong>: Обработчик нажатия клавиши на элемент выпадающего меню <br> <strong>closeDroplist</strong>: Метод для закрытия выпадающего меню |
|
|
133
102
|
## ChipChoice.Single
|
|
134
103
|
### Props
|
|
135
104
|
| name | type | default value | description |
|
|
136
105
|
|------|------|---------------|-------------|
|
|
137
|
-
|
|
138
|
-
| label | `string` | - | Лейбл |
|
|
139
|
-
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
140
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
141
|
-
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
142
|
-
| className | `string` | - | CSS-класс |
|
|
143
|
-
| tabIndex | `number` | - | HTML tab index |
|
|
144
|
-
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
145
|
-
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
146
|
-
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
147
|
-
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
148
|
-
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
149
|
-
| value | `string` | - | Значение компонента |
|
|
150
|
-
| defaultValue | `string` | - | Значение компонента по умолчанию |
|
|
151
|
-
| onChange | `(value: string) => void` | - | Колбек смены значения |
|
|
152
|
-
| valueFormatter | `(option?: FilterOption) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label |
|
|
153
|
-
## ChipChoice.Multi
|
|
106
|
+
## ChipChoice.Multiple
|
|
154
107
|
### Props
|
|
155
108
|
| name | type | default value | description |
|
|
156
109
|
|------|------|---------------|-------------|
|
|
157
|
-
| options* | `FilterOption[]` | - | Массив опций |
|
|
158
|
-
| label | `string` | - | Лейбл |
|
|
159
|
-
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
160
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
161
|
-
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
162
|
-
| className | `string` | - | CSS-класс |
|
|
163
|
-
| tabIndex | `number` | - | HTML tab index |
|
|
164
|
-
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
165
|
-
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
166
|
-
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
167
|
-
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
168
|
-
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
169
|
-
| value | `string[]` | - | Значение компонента |
|
|
170
|
-
| defaultValue | `string[]` | - | Значение компонента по умолчанию |
|
|
171
|
-
| onChange | `(value: string[]) => void` | - | Колбек смены значения |
|
|
172
|
-
| valueFormatter | `(options: FilterOption[]) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений. По умолчанию для отображения используется кол-во выбранных значений. |
|
|
173
110
|
## ChipChoice.Date
|
|
174
111
|
### Props
|
|
175
112
|
| name | type | default value | description |
|
|
176
113
|
|------|------|---------------|-------------|
|
|
177
|
-
| label | `string` | - | Лейбл |
|
|
178
|
-
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
179
|
-
| loading | `boolean` | - | Состояние загрузки |
|
|
180
|
-
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
181
|
-
| className | `string` | - | CSS-класс |
|
|
182
|
-
| tabIndex | `number` | - | HTML tab index |
|
|
183
|
-
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
184
|
-
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
185
|
-
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
186
|
-
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
187
|
-
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
188
|
-
| value | `Date` | - | Значение компонента |
|
|
189
|
-
| defaultValue | `Date` | - | Значение компонента по-умолчанию |
|
|
190
|
-
| onChange | `(value: Date) => void` | - | Колбек смены значения |
|
|
191
|
-
| valueFormatter | `(value?: Date) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение |
|
|
192
114
|
## ChipChoice.DateRange
|
|
193
115
|
### Props
|
|
194
116
|
| name | type | default value | description |
|
|
195
117
|
|------|------|---------------|-------------|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
|
118
|
+
## isAccordionOption
|
|
119
|
+
### Props
|
|
120
|
+
| name | type | default value | description |
|
|
121
|
+
|------|------|---------------|-------------|
|
|
122
|
+
## isBaseOption
|
|
123
|
+
### Props
|
|
124
|
+
| name | type | default value | description |
|
|
125
|
+
|------|------|---------------|-------------|
|
|
126
|
+
## isGroupOption
|
|
127
|
+
### Props
|
|
128
|
+
| name | type | default value | description |
|
|
129
|
+
|------|------|---------------|-------------|
|
|
130
|
+
## isGroupSelectOption
|
|
131
|
+
### Props
|
|
132
|
+
| name | type | default value | description |
|
|
133
|
+
|------|------|---------------|-------------|
|
|
134
|
+
## isNextListOption
|
|
135
|
+
### Props
|
|
136
|
+
| name | type | default value | description |
|
|
137
|
+
|------|------|---------------|-------------|
|
|
211
138
|
## ChipChoiceRow
|
|
212
139
|
### Props
|
|
213
140
|
| name | type | default value | description |
|
|
214
141
|
|------|------|---------------|-------------|
|
|
215
|
-
| filters* | `OmitBetter<ChipChoiceProps, "size" \| "onChange" \| "value" \| "defaultValue">[]` | - | Массив чипов |
|
|
216
|
-
| value | `FiltersState` | - | Состояние фильтров |
|
|
217
|
-
| defaultValue | `Partial<TState>` | - | Начальное состояние фильтров |
|
|
218
|
-
| onChange | `(filters: TState) => void` | - | Колбек изменения состояния фильтров |
|
|
219
|
-
| size | enum ChipChoiceRowSize: `"xs"`, `"s"`, `"m"` | s | Размер |
|
|
220
|
-
| className | `string` | - | CSS-класс |
|
|
221
|
-
| showClearAllButton | `boolean` | true | Скрыть/показать кнопку очиски |
|
|
222
|
-
| clearAllButtonLabel | `string` | 'Clear all' | Текст кнопки очистки |
|
|
223
142
|
|
|
224
143
|
|
|
225
144
|
[//]: DOCUMENTATION_SECTION_END
|
|
226
|
-
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
outline:0;
|
|
17
17
|
outline-offset:0;
|
|
18
18
|
color:var(--sys-neutral-text-support, #656771);
|
|
19
|
-
background-color:var(--sys-neutral-background1-level, #
|
|
19
|
+
background-color:var(--sys-neutral-background1-level, #fdfdff);
|
|
20
20
|
border-color:var(--sys-neutral-decor-default, #dfe2ec);
|
|
21
21
|
}
|
|
22
22
|
.assistChip .spinner{
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { KeyboardEvent, MouseEventHandler, ReactNode } from 'react';
|
|
2
|
+
import { ChipChoiceCommonProps } from '../../types';
|
|
3
|
+
export type ChipChoiceBaseProps = Pick<ChipChoiceCommonProps, 'loading' | 'tabIndex' | 'showClearButton' | 'disabled' | 'icon' | 'label' | 'size' | 'onClick' | 'className'> & {
|
|
4
|
+
/** Отображаемое значение */
|
|
5
|
+
valueToRender?: ReactNode;
|
|
6
|
+
/** Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> */
|
|
7
|
+
value?: any;
|
|
8
|
+
/** Колбек для клика по кнопке очистки */
|
|
9
|
+
onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;
|
|
10
|
+
onKeyDown?(e: KeyboardEvent<HTMLDivElement>): void;
|
|
11
|
+
};
|
|
12
|
+
export declare const ChipChoiceBase: import("react").ForwardRefExoticComponent<Pick<ChipChoiceCommonProps, "icon" | "size" | "label" | "disabled" | "loading" | "onClick" | "className" | "tabIndex" | "showClearButton"> & {
|
|
13
|
+
/** Отображаемое значение */
|
|
14
|
+
valueToRender?: ReactNode;
|
|
15
|
+
/** Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> */
|
|
16
|
+
value?: any;
|
|
17
|
+
/** Колбек для клика по кнопке очистки */
|
|
18
|
+
onClearButtonClick?: MouseEventHandler<HTMLButtonElement> | undefined;
|
|
19
|
+
onKeyDown?(e: KeyboardEvent<HTMLDivElement>): void;
|
|
20
|
+
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import cn from 'classnames';
|
|
14
|
+
import mergeRefs from 'merge-refs';
|
|
15
|
+
import { forwardRef, useRef, useState } from 'react';
|
|
16
|
+
import { Sun } from '@snack-uikit/loaders';
|
|
17
|
+
import { extractSupportProps } from '@snack-uikit/utils';
|
|
18
|
+
import { CHIP_CHOICE_TEST_IDS, SIZE, VARIANT } from '../../../../constants';
|
|
19
|
+
import { ButtonClearValue } from '../../../../helperComponents';
|
|
20
|
+
import { BUTTON_CLEAR_VALUE_SIZE_MAP } from '../../constants';
|
|
21
|
+
import styles from './styles.module.css';
|
|
22
|
+
export const ChipChoiceBase = forwardRef((_a, ref) => {
|
|
23
|
+
var { size = SIZE.S, disabled, loading, icon, label, valueToRender, value, onClick, className, tabIndex = 0, onClearButtonClick, onKeyDown, showClearButton: showClearButtonProp = true } = _a, rest = __rest(_a, ["size", "disabled", "loading", "icon", "label", "valueToRender", "value", "onClick", "className", "tabIndex", "onClearButtonClick", "onKeyDown", "showClearButton"]);
|
|
24
|
+
const variant = icon && size !== SIZE.Xs ? VARIANT.IconBefore : VARIANT.LabelOnly;
|
|
25
|
+
const spinnerSize = size === SIZE.Xs ? 'xs' : 's';
|
|
26
|
+
const localRef = useRef(null);
|
|
27
|
+
const clearButtonRef = useRef(null);
|
|
28
|
+
const [isDroplistOpened, setIsDroplistOpened] = useState(false);
|
|
29
|
+
const handleChipClick = e => {
|
|
30
|
+
if (loading || disabled)
|
|
31
|
+
return;
|
|
32
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
33
|
+
!isDroplistOpened && setIsDroplistOpened(true);
|
|
34
|
+
};
|
|
35
|
+
const handleChipKeyDown = e => {
|
|
36
|
+
var _a;
|
|
37
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
38
|
+
if (e.key === 'ArrowRight') {
|
|
39
|
+
(_a = clearButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
40
|
+
e.stopPropagation();
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const handleClearButtonClick = e => {
|
|
45
|
+
onClearButtonClick === null || onClearButtonClick === void 0 ? void 0 : onClearButtonClick(e);
|
|
46
|
+
};
|
|
47
|
+
const handleClearButtonKeyDown = e => {
|
|
48
|
+
var _a;
|
|
49
|
+
switch (e.key) {
|
|
50
|
+
case 'ArrowLeft': {
|
|
51
|
+
(_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
case 'Enter':
|
|
55
|
+
case ' ': {
|
|
56
|
+
e.stopPropagation();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
default:
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const showClearButton = showClearButtonProp && (value instanceof Date || Boolean(value));
|
|
64
|
+
return (_jsxs("div", Object.assign({}, extractSupportProps(rest), { role: 'button', ref: mergeRefs(localRef, ref), className: cn(styles.choiceChip, className), "data-size": size, "data-variant": variant, "data-loading": loading || undefined, "data-disabled": (!loading && disabled) || undefined, onClick: handleChipClick, onKeyDown: handleChipKeyDown, tabIndex: tabIndex, children: [variant === VARIANT.IconBefore && (_jsx("span", { className: styles.icon, "data-test-id": CHIP_CHOICE_TEST_IDS.icon, children: icon })), _jsxs("span", { className: styles.labelLayout, children: [label && (_jsx("span", { className: styles.label, "data-test-id": CHIP_CHOICE_TEST_IDS.label, children: label + ': ' })), loading ? (_jsx("span", { className: styles.spinner, "data-test-id": CHIP_CHOICE_TEST_IDS.spinner, children: _jsx(Sun, { size: spinnerSize }) })) : (_jsx("span", { className: styles.value, "data-test-id": CHIP_CHOICE_TEST_IDS.value, children: valueToRender !== null && valueToRender !== void 0 ? valueToRender : value }))] }), !disabled && !loading && showClearButton && (_jsx(ButtonClearValue, { size: BUTTON_CLEAR_VALUE_SIZE_MAP[size], onClick: handleClearButtonClick, "data-test-id": CHIP_CHOICE_TEST_IDS.clearButton, onKeyDown: handleClearButtonKeyDown, ref: clearButtonRef }))] })));
|
|
65
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChipChoiceBase';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChipChoiceBase';
|
package/dist/components/ChipChoice/components/{ChipChoiceCustom → ChipChoiceBase}/styles.module.css
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
.label,
|
|
1
|
+
.label,
|
|
2
|
+
.value{
|
|
2
3
|
display:inline-flex;
|
|
3
4
|
align-items:center;
|
|
4
5
|
}
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
border-style:solid;
|
|
21
22
|
outline:0;
|
|
22
23
|
outline-offset:0;
|
|
23
|
-
background-color:var(--sys-neutral-background1-level, #
|
|
24
|
+
background-color:var(--sys-neutral-background1-level, #fdfdff);
|
|
24
25
|
border-color:var(--sys-neutral-decor-default, #dfe2ec);
|
|
25
26
|
}
|
|
26
27
|
.choiceChip .spinner{
|
|
@@ -117,7 +118,8 @@
|
|
|
117
118
|
padding-right:var(--space-chips-label-layout-padding-l, 12px);
|
|
118
119
|
gap:var(--space-chips-label-layout-gap, 2px);
|
|
119
120
|
}
|
|
120
|
-
.choiceChip .label,
|
|
121
|
+
.choiceChip .label,
|
|
122
|
+
.choiceChip .value{
|
|
121
123
|
color:var(--sys-neutral-text-support, #656771);
|
|
122
124
|
}
|
|
123
125
|
.choiceChip .icon{
|
|
@@ -177,7 +179,8 @@
|
|
|
177
179
|
background-color:var(--sys-neutral-background, #f1f2f6);
|
|
178
180
|
border-color:var(--sys-neutral-decor-disabled, #e8eaf1);
|
|
179
181
|
}
|
|
180
|
-
.choiceChip[data-disabled] .label,
|
|
182
|
+
.choiceChip[data-disabled] .label,
|
|
183
|
+
.choiceChip[data-disabled] .value{
|
|
181
184
|
color:var(--sys-neutral-text-light, #868892);
|
|
182
185
|
}
|
|
183
186
|
.choiceChip[data-loading]{
|
|
@@ -190,7 +193,8 @@
|
|
|
190
193
|
align-items:center;
|
|
191
194
|
justify-content:center;
|
|
192
195
|
}
|
|
193
|
-
.choiceChip[data-loading] .label,
|
|
196
|
+
.choiceChip[data-loading] .label,
|
|
197
|
+
.choiceChip[data-loading] .value{
|
|
194
198
|
color:var(--sys-neutral-text-support, #656771);
|
|
195
199
|
}
|
|
196
200
|
|
|
@@ -198,7 +202,8 @@
|
|
|
198
202
|
--offset:var(--space-drop-list-drop-offset, 4px);
|
|
199
203
|
}
|
|
200
204
|
|
|
201
|
-
.label,
|
|
205
|
+
.label,
|
|
206
|
+
.value{
|
|
202
207
|
display:inline-flex;
|
|
203
208
|
align-items:center;
|
|
204
209
|
}
|
|
@@ -220,7 +225,7 @@
|
|
|
220
225
|
border-style:solid;
|
|
221
226
|
outline:0;
|
|
222
227
|
outline-offset:0;
|
|
223
|
-
background-color:var(--sys-neutral-background1-level, #
|
|
228
|
+
background-color:var(--sys-neutral-background1-level, #fdfdff);
|
|
224
229
|
border-color:var(--sys-neutral-decor-default, #dfe2ec);
|
|
225
230
|
}
|
|
226
231
|
.choiceChip .spinner{
|
|
@@ -317,7 +322,8 @@
|
|
|
317
322
|
padding-right:var(--space-chips-label-layout-padding-l, 12px);
|
|
318
323
|
gap:var(--space-chips-label-layout-gap, 2px);
|
|
319
324
|
}
|
|
320
|
-
.choiceChip .label,
|
|
325
|
+
.choiceChip .label,
|
|
326
|
+
.choiceChip .value{
|
|
321
327
|
color:var(--sys-neutral-text-support, #656771);
|
|
322
328
|
}
|
|
323
329
|
.choiceChip .icon{
|
|
@@ -377,7 +383,8 @@
|
|
|
377
383
|
background-color:var(--sys-neutral-background, #f1f2f6);
|
|
378
384
|
border-color:var(--sys-neutral-decor-disabled, #e8eaf1);
|
|
379
385
|
}
|
|
380
|
-
.choiceChip[data-disabled] .label,
|
|
386
|
+
.choiceChip[data-disabled] .label,
|
|
387
|
+
.choiceChip[data-disabled] .value{
|
|
381
388
|
color:var(--sys-neutral-text-light, #868892);
|
|
382
389
|
}
|
|
383
390
|
.choiceChip[data-loading]{
|
|
@@ -393,7 +400,8 @@
|
|
|
393
400
|
align-items:center;
|
|
394
401
|
justify-content:center;
|
|
395
402
|
}
|
|
396
|
-
.choiceChip[data-loading] .label,
|
|
403
|
+
.choiceChip[data-loading] .label,
|
|
404
|
+
.choiceChip[data-loading] .value{
|
|
397
405
|
color:var(--sys-neutral-text-support, #656771);
|
|
398
406
|
}
|
|
399
407
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ChipChoiceCommonProps } from '../types';
|
|
3
|
+
type AnyType = any;
|
|
4
|
+
export type CustomContentRenderProps<T = AnyType> = {
|
|
5
|
+
closeDroplist(): void;
|
|
6
|
+
value: T;
|
|
7
|
+
onChange?(value: T): void;
|
|
8
|
+
};
|
|
9
|
+
export type ChipChoiceCustomProps = ChipChoiceCommonProps & {
|
|
10
|
+
/** Отображаемое значение */
|
|
11
|
+
valueRender?(value: AnyType): ReactNode;
|
|
12
|
+
/** Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> */
|
|
13
|
+
value?: AnyType;
|
|
14
|
+
onChange?(value: AnyType): void;
|
|
15
|
+
/** Контент выпадающего меню
|
|
16
|
+
<br>
|
|
17
|
+
<br> Принимает <strong>ReactNode</strong>
|
|
18
|
+
<br> Или функцию с аргументами:
|
|
19
|
+
<br> <strong>handleDroplistItemKeyDown</strong>: Обработчик нажатия клавиши на элемент выпадающего меню
|
|
20
|
+
<br> <strong>closeDroplist</strong>: Метод для закрытия выпадающего меню
|
|
21
|
+
*/
|
|
22
|
+
content?: (props: CustomContentRenderProps) => ReactNode;
|
|
23
|
+
};
|
|
24
|
+
export declare function ChipChoiceCustom({ size, value: valueProp, onChange: onChangeProp, placement, widthStrategy, content, valueRender, ...rest }: ChipChoiceCustomProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { useCallback, useRef, useState } from 'react';
|
|
14
|
+
import { Dropdown } from '@snack-uikit/dropdown';
|
|
15
|
+
import { useValueControl } from '@snack-uikit/utils';
|
|
16
|
+
import { CHIP_CHOICE_TEST_IDS, SIZE } from '../../../constants';
|
|
17
|
+
import { useHandleOnKeyDown } from '../hooks';
|
|
18
|
+
import { ChipChoiceBase } from './ChipChoiceBase';
|
|
19
|
+
export function ChipChoiceCustom(_a) {
|
|
20
|
+
var _b;
|
|
21
|
+
var { size = SIZE.S, value: valueProp, onChange: onChangeProp, placement = 'bottom-start', widthStrategy = 'gte', content, valueRender } = _a, rest = __rest(_a, ["size", "value", "onChange", "placement", "widthStrategy", "content", "valueRender"]);
|
|
22
|
+
const localRef = useRef(null);
|
|
23
|
+
const [value, setValue] = useValueControl({
|
|
24
|
+
value: valueProp,
|
|
25
|
+
onChange: onChangeProp,
|
|
26
|
+
});
|
|
27
|
+
const [open, setOpen] = useState(false);
|
|
28
|
+
const handleOnKeyDown = useHandleOnKeyDown({ setOpen });
|
|
29
|
+
const closeDroplist = useCallback(() => {
|
|
30
|
+
setOpen(false);
|
|
31
|
+
setTimeout(() => { var _a; return (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
|
|
32
|
+
}, []);
|
|
33
|
+
const clearValue = () => {
|
|
34
|
+
setValue === null || setValue === void 0 ? void 0 : setValue(undefined);
|
|
35
|
+
closeDroplist();
|
|
36
|
+
};
|
|
37
|
+
return (_jsx(Dropdown, { trigger: 'click', widthStrategy: widthStrategy, placement: placement, outsideClick: true, triggerRef: localRef, open: open, onOpenChange: setOpen, "data-test-id": CHIP_CHOICE_TEST_IDS.droplist, content: typeof content === 'function' ? content({ closeDroplist, value, onChange: setValue }) : content, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { valueToRender: (_b = valueRender === null || valueRender === void 0 ? void 0 : valueRender(value)) !== null && _b !== void 0 ? _b : value, onClearButtonClick: clearValue, ref: localRef, value: value, size: size, onKeyDown: handleOnKeyDown() })) }));
|
|
38
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { ChipChoiceCommonProps } from '../types';
|
|
2
3
|
export type ChipChoiceDateProps = ChipChoiceCommonProps & {
|
|
3
4
|
/** Значение компонента */
|
|
@@ -7,6 +8,6 @@ export type ChipChoiceDateProps = ChipChoiceCommonProps & {
|
|
|
7
8
|
/** Колбек смены значения */
|
|
8
9
|
onChange?(value: Date): void;
|
|
9
10
|
/** Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение */
|
|
10
|
-
|
|
11
|
+
valueRender?(value?: Date): ReactNode;
|
|
11
12
|
};
|
|
12
|
-
export declare function ChipChoiceDate({ size, value, defaultValue, onChange,
|
|
13
|
+
export declare function ChipChoiceDate({ size, value, defaultValue, onChange, valueRender, dropDownClassName, ...rest }: ChipChoiceDateProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -10,22 +10,32 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
-
import {
|
|
13
|
+
import { useCallback, useRef, useState } from 'react';
|
|
14
14
|
import { Calendar } from '@snack-uikit/calendar';
|
|
15
|
+
import { Dropdown } from '@snack-uikit/dropdown';
|
|
15
16
|
import { useLocale } from '@snack-uikit/locale';
|
|
16
|
-
import {
|
|
17
|
+
import { useValueControl } from '@snack-uikit/utils';
|
|
18
|
+
import { CHIP_CHOICE_TEST_IDS, SIZE } from '../../../constants';
|
|
17
19
|
import { CALENDAR_SIZE_MAP } from '../constants';
|
|
18
|
-
import {
|
|
20
|
+
import { useHandleOnKeyDown } from '../hooks';
|
|
21
|
+
import { ChipChoiceBase } from './ChipChoiceBase';
|
|
19
22
|
export function ChipChoiceDate(_a) {
|
|
20
|
-
var { size = SIZE.S, value, defaultValue, onChange,
|
|
21
|
-
const [selectedValue, setSelectedValue] =
|
|
23
|
+
var { size = SIZE.S, value, defaultValue, onChange, valueRender, dropDownClassName } = _a, rest = __rest(_a, ["size", "value", "defaultValue", "onChange", "valueRender", "dropDownClassName"]);
|
|
24
|
+
const [selectedValue, setSelectedValue] = useValueControl({ value, defaultValue, onChange });
|
|
25
|
+
const localRef = useRef(null);
|
|
26
|
+
const [open, setOpen] = useState(false);
|
|
27
|
+
const handleOnKeyDown = useHandleOnKeyDown({ setOpen });
|
|
28
|
+
const closeDroplist = useCallback(() => {
|
|
29
|
+
setOpen(false);
|
|
30
|
+
setTimeout(() => { var _a; return (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
|
|
31
|
+
}, []);
|
|
22
32
|
const { t } = useLocale('Chips');
|
|
23
|
-
const valueToRender =
|
|
24
|
-
?
|
|
33
|
+
const valueToRender = valueRender
|
|
34
|
+
? valueRender(selectedValue)
|
|
25
35
|
: (selectedValue && new Date(selectedValue).toLocaleDateString()) || t('allLabel');
|
|
26
36
|
const clearValue = () => setSelectedValue(undefined);
|
|
27
|
-
return (_jsx(
|
|
37
|
+
return (_jsx(Dropdown, { content: _jsx(Calendar, { mode: 'date', size: CALENDAR_SIZE_MAP[size], value: selectedValue, onChangeValue: value => {
|
|
28
38
|
setSelectedValue(value);
|
|
29
39
|
closeDroplist();
|
|
30
|
-
}, navigationStartRef: element => element === null || element === void 0 ? void 0 : element.focus(), onFocusLeave: closeDroplist })) })));
|
|
40
|
+
}, navigationStartRef: element => element === null || element === void 0 ? void 0 : element.focus(), onFocusLeave: closeDroplist }), outsideClick: true, triggerRef: localRef, open: open, onOpenChange: setOpen, className: dropDownClassName, "data-test-id": CHIP_CHOICE_TEST_IDS.droplist, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { ref: localRef, onClearButtonClick: clearValue, value: selectedValue, valueToRender: valueToRender, size: size, onKeyDown: handleOnKeyDown() })) }));
|
|
31
41
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { ChipChoiceCommonProps } from '../types';
|
|
2
3
|
type Range = [Date, Date];
|
|
3
4
|
export type ChipChoiceDateRangeProps = ChipChoiceCommonProps & {
|
|
@@ -8,7 +9,7 @@ export type ChipChoiceDateRangeProps = ChipChoiceCommonProps & {
|
|
|
8
9
|
/** Колбек смены значения */
|
|
9
10
|
onChange?(value: Range): void;
|
|
10
11
|
/** Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений */
|
|
11
|
-
|
|
12
|
+
valueRender?(value?: Range): ReactNode;
|
|
12
13
|
};
|
|
13
|
-
export declare function ChipChoiceDateRange({ size, value, defaultValue, onChange,
|
|
14
|
+
export declare function ChipChoiceDateRange({ size, value, defaultValue, onChange, valueRender, dropDownClassName, ...rest }: ChipChoiceDateRangeProps): import("react/jsx-runtime").JSX.Element;
|
|
14
15
|
export {};
|
|
@@ -10,12 +10,15 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { useCallback, useRef, useState } from 'react';
|
|
13
14
|
import { useUncontrolledProp } from 'uncontrollable';
|
|
14
15
|
import { Calendar } from '@snack-uikit/calendar';
|
|
16
|
+
import { Dropdown } from '@snack-uikit/dropdown';
|
|
15
17
|
import { useLocale } from '@snack-uikit/locale';
|
|
16
|
-
import { DEFAULT_EMPTY_VALUE, SIZE } from '../../../constants';
|
|
18
|
+
import { CHIP_CHOICE_TEST_IDS, DEFAULT_EMPTY_VALUE, SIZE } from '../../../constants';
|
|
17
19
|
import { CALENDAR_SIZE_MAP } from '../constants';
|
|
18
|
-
import {
|
|
20
|
+
import { useHandleOnKeyDown } from '../hooks';
|
|
21
|
+
import { ChipChoiceBase } from './ChipChoiceBase';
|
|
19
22
|
function defaultRangeFormatter({ value, allLabel }) {
|
|
20
23
|
if (!value || !value.length)
|
|
21
24
|
return allLabel;
|
|
@@ -23,18 +26,25 @@ function defaultRangeFormatter({ value, allLabel }) {
|
|
|
23
26
|
return `${from.toLocaleDateString()} ${DEFAULT_EMPTY_VALUE} ${to.toLocaleDateString()}`;
|
|
24
27
|
}
|
|
25
28
|
export function ChipChoiceDateRange(_a) {
|
|
26
|
-
var { size = SIZE.S, value, defaultValue, onChange,
|
|
29
|
+
var { size = SIZE.S, value, defaultValue, onChange, valueRender, dropDownClassName } = _a, rest = __rest(_a, ["size", "value", "defaultValue", "onChange", "valueRender", "dropDownClassName"]);
|
|
27
30
|
const [selectedValue, setSelectedValue] = useUncontrolledProp(value, defaultValue, onChange);
|
|
28
31
|
const { t } = useLocale('Chips');
|
|
29
|
-
const valueToRender =
|
|
30
|
-
?
|
|
32
|
+
const valueToRender = valueRender
|
|
33
|
+
? valueRender(selectedValue)
|
|
31
34
|
: defaultRangeFormatter({ value: selectedValue, allLabel: t('allLabel') });
|
|
32
35
|
const clearValue = () => setSelectedValue(undefined);
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
const localRef = useRef(null);
|
|
37
|
+
const [open, setOpen] = useState(false);
|
|
38
|
+
const closeDroplist = useCallback(() => {
|
|
39
|
+
setOpen(false);
|
|
40
|
+
setTimeout(() => { var _a; return (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
|
|
41
|
+
}, []);
|
|
42
|
+
const handleOnKeyDown = useHandleOnKeyDown({ setOpen });
|
|
43
|
+
return (_jsx(Dropdown, { content: _jsx(Calendar, { mode: 'range', size: CALENDAR_SIZE_MAP[size], value: selectedValue, onChangeValue: value => {
|
|
44
|
+
setSelectedValue(value);
|
|
35
45
|
closeDroplist();
|
|
36
46
|
},
|
|
37
47
|
// bug with focus
|
|
38
48
|
// navigationStartRef={element => element?.focus()}
|
|
39
|
-
onFocusLeave: closeDroplist })) })));
|
|
49
|
+
onFocusLeave: closeDroplist }), outsideClick: true, triggerRef: localRef, open: open, "data-test-id": CHIP_CHOICE_TEST_IDS.droplist, onOpenChange: setOpen, className: dropDownClassName, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { ref: localRef, onClearButtonClick: clearValue, value: selectedValue, valueToRender: valueToRender, size: size, onKeyDown: handleOnKeyDown() })) }));
|
|
40
50
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChipChoiceMultipleProps, ContentRenderProps } from '../types';
|
|
2
|
+
import { FlattenOption } from '../utils';
|
|
3
|
+
export type ChipChoiceMultipleValueFormatterProps<T extends ContentRenderProps = ContentRenderProps> = {
|
|
4
|
+
value: FlattenOption<T>[];
|
|
5
|
+
total: number;
|
|
6
|
+
allLabel: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function ChipChoiceMultiple<T extends ContentRenderProps = ContentRenderProps>({ value: valueProp, defaultValue, options, onChange: onChangeProp, valueRender, size, label, searchable, contentRender, dropDownClassName, showClearButton, ...rest }: ChipChoiceMultipleProps<T>): import("react/jsx-runtime").JSX.Element;
|