@snack-uikit/chips 0.13.0 → 0.13.1
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 +13 -0
- package/README.md +133 -0
- package/dist/components/ChipAssist/ChipAssist.js +1 -1
- package/dist/components/ChipChoice/components/ChipChoiceMultiple.js +6 -5
- package/dist/components/ChipChoice/index.d.ts +1 -1
- package/package.json +4 -4
- package/src/components/ChipAssist/ChipAssist.tsx +1 -0
- package/src/components/ChipChoice/components/ChipChoiceMultiple.tsx +7 -7
- package/src/components/ChipChoice/index.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
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.1 (2024-04-25)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **PDS-0000:** add export type ContentRenderProps ([6ccd417](https://github.com/cloud-ru-tech/snack-uikit/commit/6ccd4179458703ebb03bc58c25300555799c1a8d))
|
|
12
|
+
* **PDS-0000:** fix clear button & label view in ChipMultiple ([064939f](https://github.com/cloud-ru-tech/snack-uikit/commit/064939f2ae0836ea381db8c38fac477d53b9a4ef))
|
|
13
|
+
* **PDS-0000:** set default button type as button ([4ec64de](https://github.com/cloud-ru-tech/snack-uikit/commit/4ec64de508826df4a1e82fd8c75448d9919e563f))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
6
19
|
# 0.13.0 (2024-04-23)
|
|
7
20
|
|
|
8
21
|
|
package/README.md
CHANGED
|
@@ -90,31 +90,156 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
|
|
|
90
90
|
### Props
|
|
91
91
|
| name | type | default value | description |
|
|
92
92
|
|------|------|---------------|-------------|
|
|
93
|
+
| onClick* | `MouseEventHandler<HTMLButtonElement>` | - | Колбек обработки клика |
|
|
94
|
+
| label* | `string` | - | Лейбл |
|
|
95
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
96
|
+
| loading | `boolean` | - | Состояние загрузки |
|
|
97
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
98
|
+
| className | `string` | - | CSS-класс |
|
|
99
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
100
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | s | Размер |
|
|
93
101
|
## ChipToggle
|
|
94
102
|
Чип с состоянием выбран/не выбран
|
|
95
103
|
### Props
|
|
96
104
|
| name | type | default value | description |
|
|
97
105
|
|------|------|---------------|-------------|
|
|
106
|
+
| onChange* | `(checked: boolean, e: ChangeEvent<HTMLInputElement>) => void` | - | Колбек смены значения |
|
|
107
|
+
| checked* | `boolean` | - | Отмечен ли компонент |
|
|
108
|
+
| label* | `string` | - | Лейбл |
|
|
109
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
110
|
+
| loading | `boolean` | - | Состояние загрузки |
|
|
111
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
112
|
+
| className | `string` | - | CSS-класс |
|
|
113
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
114
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | s | Размер |
|
|
98
115
|
## ChipChoice.Custom
|
|
99
116
|
### Props
|
|
100
117
|
| name | type | default value | description |
|
|
101
118
|
|------|------|---------------|-------------|
|
|
119
|
+
| label | `string` | - | Лейбл |
|
|
120
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
121
|
+
| loading | `boolean` | - | Состояние загрузки |
|
|
122
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
123
|
+
| className | `string` | - | CSS-класс |
|
|
124
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
125
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
126
|
+
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
127
|
+
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
128
|
+
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
129
|
+
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
130
|
+
| dropDownClassName | `string` | - | |
|
|
131
|
+
| valueRender | `(value: any) => ReactNode` | - | Отображаемое значение |
|
|
132
|
+
| value | `any` | - | Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> |
|
|
133
|
+
| onChange | `(value: any) => void` | - | |
|
|
134
|
+
| content | `(props: CustomContentRenderProps<any>) => ReactNode` | - | Контент выпадающего меню <br> <br> Принимает <strong>ReactNode</strong> <br> Или функцию с аргументами: <br> <strong>handleDroplistItemKeyDown</strong>: Обработчик нажатия клавиши на элемент выпадающего меню <br> <strong>closeDroplist</strong>: Метод для закрытия выпадающего меню |
|
|
102
135
|
## ChipChoice.Single
|
|
103
136
|
### Props
|
|
104
137
|
| name | type | default value | description |
|
|
105
138
|
|------|------|---------------|-------------|
|
|
139
|
+
| options* | `FilterOption<T>[]` | - | Массив опций |
|
|
140
|
+
| label | `string` | - | Лейбл |
|
|
141
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
142
|
+
| loading | `boolean` | - | Состояние загрузки Флаг, отвещающий за состояние загрузки списка |
|
|
143
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
144
|
+
| className | `string` | - | CSS-класс |
|
|
145
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
146
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
147
|
+
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
148
|
+
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
149
|
+
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
150
|
+
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
151
|
+
| dropDownClassName | `string` | - | |
|
|
152
|
+
| contentRender | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => ReactNode` | - | |
|
|
153
|
+
| filterFn | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => boolean` | - | |
|
|
154
|
+
| searchable | `boolean` | - | |
|
|
155
|
+
| footer | `ReactNode ;` | - | Кастомизируемый элемент в конце списка |
|
|
156
|
+
| footerActiveElementsRefs | `RefObject<HTMLElement>[]` | - | Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка |
|
|
157
|
+
| selection | `SelectionSingleState \| SelectionMultipleState` | - | |
|
|
158
|
+
| scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
|
|
159
|
+
| scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
|
|
160
|
+
| dataFiltered | `boolean` | - | |
|
|
161
|
+
| dataError | `boolean` | - | |
|
|
162
|
+
| noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
|
|
163
|
+
| noResultsState | `EmptyStateProps` | - | Экран при отстутствии результатов поиска или фильтров |
|
|
164
|
+
| errorDataState | `EmptyStateProps` | - | Экран при ошибке запроса |
|
|
165
|
+
| onChange | `OnChangeHandler<any>` | - | Controlled обработчик измения состояния |
|
|
166
|
+
| value | `ItemId` | - | Controlled состояние |
|
|
167
|
+
| defaultValue | `ItemId` | - | Начальное состояние |
|
|
168
|
+
| valueRender | `(option?: BaseOption<T>) => ReactNode` | - | Колбек формирующий отображение выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label |
|
|
106
169
|
## ChipChoice.Multiple
|
|
107
170
|
### Props
|
|
108
171
|
| name | type | default value | description |
|
|
109
172
|
|------|------|---------------|-------------|
|
|
173
|
+
| options* | `FilterOption<T>[]` | - | Массив опций |
|
|
174
|
+
| label | `string` | - | Лейбл |
|
|
175
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
176
|
+
| loading | `boolean` | - | Состояние загрузки Флаг, отвещающий за состояние загрузки списка |
|
|
177
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
178
|
+
| className | `string` | - | CSS-класс |
|
|
179
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
180
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
181
|
+
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
182
|
+
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
183
|
+
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
184
|
+
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
185
|
+
| dropDownClassName | `string` | - | |
|
|
186
|
+
| contentRender | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => ReactNode` | - | |
|
|
187
|
+
| filterFn | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => boolean` | - | |
|
|
188
|
+
| searchable | `boolean` | - | |
|
|
189
|
+
| footer | `ReactNode ;` | - | Кастомизируемый элемент в конце списка |
|
|
190
|
+
| footerActiveElementsRefs | `RefObject<HTMLElement>[]` | - | Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка |
|
|
191
|
+
| selection | `SelectionSingleState \| SelectionMultipleState` | - | |
|
|
192
|
+
| scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
|
|
193
|
+
| scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
|
|
194
|
+
| dataFiltered | `boolean` | - | |
|
|
195
|
+
| dataError | `boolean` | - | |
|
|
196
|
+
| noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
|
|
197
|
+
| noResultsState | `EmptyStateProps` | - | Экран при отстутствии результатов поиска или фильтров |
|
|
198
|
+
| errorDataState | `EmptyStateProps` | - | Экран при ошибке запроса |
|
|
199
|
+
| onChange | `OnChangeHandler<any>` | - | Controlled обработчик измения состояния |
|
|
200
|
+
| value | `ItemId[]` | - | Controlled состояние |
|
|
201
|
+
| defaultValue | `ItemId[]` | - | Начальное состояние |
|
|
202
|
+
| valueRender | `(option?: BaseOption<T>[]) => ReactNode` | - | Колбек формирующий отображение выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label |
|
|
110
203
|
## ChipChoice.Date
|
|
111
204
|
### Props
|
|
112
205
|
| name | type | default value | description |
|
|
113
206
|
|------|------|---------------|-------------|
|
|
207
|
+
| label | `string` | - | Лейбл |
|
|
208
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
209
|
+
| loading | `boolean` | - | Состояние загрузки |
|
|
210
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
211
|
+
| className | `string` | - | CSS-класс |
|
|
212
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
213
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
214
|
+
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
215
|
+
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
216
|
+
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
217
|
+
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
218
|
+
| dropDownClassName | `string` | - | |
|
|
219
|
+
| value | `Date` | - | Значение компонента |
|
|
220
|
+
| defaultValue | `Date` | - | Значение компонента по-умолчанию |
|
|
221
|
+
| onChange | `(value: Date) => void` | - | Колбек смены значения |
|
|
222
|
+
| valueRender | `(value?: Date) => ReactNode` | - | Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение |
|
|
114
223
|
## ChipChoice.DateRange
|
|
115
224
|
### Props
|
|
116
225
|
| name | type | default value | description |
|
|
117
226
|
|------|------|---------------|-------------|
|
|
227
|
+
| label | `string` | - | Лейбл |
|
|
228
|
+
| disabled | `boolean` | - | Деактивирован ли компонент |
|
|
229
|
+
| loading | `boolean` | - | Состояние загрузки |
|
|
230
|
+
| icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
|
|
231
|
+
| className | `string` | - | CSS-класс |
|
|
232
|
+
| tabIndex | `number` | - | HTML tab index |
|
|
233
|
+
| size | enum Size: `"xs"`, `"s"`, `"m"`, `"l"` | - | Размер |
|
|
234
|
+
| onClick | `MouseEventHandler<HTMLButtonElement \| HTMLDivElement>` | - | Колбек обработки клика |
|
|
235
|
+
| showClearButton | `boolean` | true | Отображение кнопки очистки значения |
|
|
236
|
+
| placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
|
|
237
|
+
| widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
|
|
238
|
+
| dropDownClassName | `string` | - | |
|
|
239
|
+
| value | `Range` | - | Значение компонента |
|
|
240
|
+
| defaultValue | `Range` | - | Значение компонента по умолчанию |
|
|
241
|
+
| onChange | `(value: Range) => void` | - | Колбек смены значения |
|
|
242
|
+
| valueRender | `(value?: Range) => ReactNode` | - | Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений |
|
|
118
243
|
## isAccordionOption
|
|
119
244
|
### Props
|
|
120
245
|
| name | type | default value | description |
|
|
@@ -139,6 +264,14 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
|
|
|
139
264
|
### Props
|
|
140
265
|
| name | type | default value | description |
|
|
141
266
|
|------|------|---------------|-------------|
|
|
267
|
+
| filters* | `OmitBetter<ChipChoiceProps, "size" \| "onChange" \| "value" \| "defaultValue">[]` | - | Массив чипов |
|
|
268
|
+
| value | `FiltersState` | - | Состояние фильтров |
|
|
269
|
+
| defaultValue | `Partial<TState>` | - | Начальное состояние фильтров |
|
|
270
|
+
| onChange | `(filters: TState) => void` | - | Колбек изменения состояния фильтров |
|
|
271
|
+
| size | enum ChipChoiceRowSize: `"xs"`, `"s"`, `"m"` | s | Размер |
|
|
272
|
+
| className | `string` | - | CSS-класс |
|
|
273
|
+
| showClearAllButton | `boolean` | true | Скрыть/показать кнопку очиски |
|
|
274
|
+
| clearAllButtonLabel | `string` | 'Clear all' | Текст кнопки очистки |
|
|
142
275
|
|
|
143
276
|
|
|
144
277
|
[//]: DOCUMENTATION_SECTION_END
|
|
@@ -26,5 +26,5 @@ export function ChipAssist(_a) {
|
|
|
26
26
|
}
|
|
27
27
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
28
28
|
};
|
|
29
|
-
return (_jsxs("button", Object.assign({}, extractSupportProps(rest), { tabIndex: tabIndex, "data-size": size, "data-loading": loading || undefined, "data-variant": variant, disabled: !loading && disabled, onClick: handleClick, className: cn(styles.assistChip, className), children: [variant === VARIANT.IconBefore && !loading && (_jsx("span", { className: styles.icon, "data-test-id": CHIP_ASSIST_TEST_IDS.icon, children: icon })), loading && (_jsx("span", { className: styles.spinner, "data-test-id": CHIP_ASSIST_TEST_IDS.spinner, children: _jsx(Sun, { size: spinnerSize }) })), _jsx("span", { className: cn(styles.labelLayout, styles.label), "data-test-id": CHIP_ASSIST_TEST_IDS.label, children: label })] })));
|
|
29
|
+
return (_jsxs("button", Object.assign({ type: 'button' }, extractSupportProps(rest), { tabIndex: tabIndex, "data-size": size, "data-loading": loading || undefined, "data-variant": variant, disabled: !loading && disabled, onClick: handleClick, className: cn(styles.assistChip, className), children: [variant === VARIANT.IconBefore && !loading && (_jsx("span", { className: styles.icon, "data-test-id": CHIP_ASSIST_TEST_IDS.icon, children: icon })), loading && (_jsx("span", { className: styles.spinner, "data-test-id": CHIP_ASSIST_TEST_IDS.spinner, children: _jsx(Sun, { size: spinnerSize }) })), _jsx("span", { className: cn(styles.labelLayout, styles.label), "data-test-id": CHIP_ASSIST_TEST_IDS.label, children: label })] })));
|
|
30
30
|
}
|
|
@@ -21,16 +21,17 @@ import { kindFlattenOptions } from '../utils';
|
|
|
21
21
|
import { transformOptionsToItems } from '../utils/options';
|
|
22
22
|
import { ChipChoiceBase } from './ChipChoiceBase';
|
|
23
23
|
const defaultMultiValueLabelFormatter = ({ value, total, allLabel }) => {
|
|
24
|
-
|
|
24
|
+
const len = value.length;
|
|
25
|
+
if ([0, total].includes(len) && total !== len) {
|
|
25
26
|
return allLabel;
|
|
26
27
|
}
|
|
27
|
-
if (
|
|
28
|
+
if (len === 1) {
|
|
28
29
|
return value[0].label;
|
|
29
30
|
}
|
|
30
|
-
return `${
|
|
31
|
+
return `${len.toString()}/${total}`;
|
|
31
32
|
};
|
|
32
33
|
export function ChipChoiceMultiple(_a) {
|
|
33
|
-
var { value: valueProp, defaultValue, options, onChange: onChangeProp, valueRender, size = SIZE.S, label, searchable, contentRender, dropDownClassName, showClearButton } = _a, rest = __rest(_a, ["value", "defaultValue", "options", "onChange", "valueRender", "size", "label", "searchable", "contentRender", "dropDownClassName", "showClearButton"]);
|
|
34
|
+
var { value: valueProp, defaultValue, options, onChange: onChangeProp, valueRender, size = SIZE.S, label, searchable, contentRender, dropDownClassName, showClearButton = true } = _a, rest = __rest(_a, ["value", "defaultValue", "options", "onChange", "valueRender", "size", "label", "searchable", "contentRender", "dropDownClassName", "showClearButton"]);
|
|
34
35
|
const [value, setValue] = useValueControl({
|
|
35
36
|
value: valueProp,
|
|
36
37
|
defaultValue,
|
|
@@ -83,5 +84,5 @@ export function ChipChoiceMultiple(_a) {
|
|
|
83
84
|
value: searchValue,
|
|
84
85
|
onChange: setSearchValue,
|
|
85
86
|
}
|
|
86
|
-
: undefined, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { ref: chipRef, onClearButtonClick: clearValue, value: value, showClearButton: showClearButton && !(Array.isArray(value) && [0
|
|
87
|
+
: undefined, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { ref: chipRef, onClearButtonClick: clearValue, value: value, showClearButton: showClearButton && !(Array.isArray(value) && [0].includes(value.length)), valueToRender: valueToRender, label: label, loading: rest.loading, size: size, onKeyDown: handleOnKeyDown() })) })));
|
|
87
88
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChipChoiceCustom, ChipChoiceCustomProps, ChipChoiceDate, ChipChoiceDateProps, ChipChoiceDateRange, ChipChoiceDateRangeProps, ChipChoiceMultiple, ChipChoiceSingle, CustomContentRenderProps } from './components';
|
|
2
|
-
export type { FilterOption, ChipChoiceMultipleProps, ChipChoiceSingleProps } from './types';
|
|
2
|
+
export type { FilterOption, ChipChoiceMultipleProps, ChipChoiceSingleProps, ContentRenderProps } from './types';
|
|
3
3
|
export type { ChipChoiceCustomProps, ChipChoiceDateProps, ChipChoiceDateRangeProps, CustomContentRenderProps };
|
|
4
4
|
export declare namespace ChipChoice {
|
|
5
5
|
const Custom: typeof ChipChoiceCustom;
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"title": "Chips",
|
|
7
|
-
"version": "0.13.
|
|
7
|
+
"version": "0.13.1",
|
|
8
8
|
"sideEffects": [
|
|
9
9
|
"*.css",
|
|
10
10
|
"*.woff",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"scripts": {},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@snack-uikit/button": "0.17.1",
|
|
36
|
-
"@snack-uikit/calendar": "0.7.
|
|
36
|
+
"@snack-uikit/calendar": "0.7.8",
|
|
37
37
|
"@snack-uikit/dropdown": "0.2.2",
|
|
38
38
|
"@snack-uikit/icons": "0.20.1",
|
|
39
|
-
"@snack-uikit/list": "0.11.
|
|
39
|
+
"@snack-uikit/list": "0.11.2",
|
|
40
40
|
"@snack-uikit/loaders": "0.5.2",
|
|
41
41
|
"@snack-uikit/utils": "3.3.0",
|
|
42
42
|
"classnames": "2.3.2",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"@snack-uikit/locale": "*"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "17bfcf1150776cd35c77d9cca8f45dde97472bf1"
|
|
54
54
|
}
|
|
@@ -19,15 +19,17 @@ export type ChipChoiceMultipleValueFormatterProps<T extends ContentRenderProps =
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
const defaultMultiValueLabelFormatter = ({ value, total, allLabel }: ChipChoiceMultipleValueFormatterProps): ItemId => {
|
|
22
|
-
|
|
22
|
+
const len = value.length;
|
|
23
|
+
|
|
24
|
+
if ([0, total].includes(len) && total !== len) {
|
|
23
25
|
return allLabel;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
if (
|
|
28
|
+
if (len === 1) {
|
|
27
29
|
return value[0].label;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
return `${
|
|
32
|
+
return `${len.toString()}/${total}`;
|
|
31
33
|
};
|
|
32
34
|
|
|
33
35
|
export function ChipChoiceMultiple<T extends ContentRenderProps = ContentRenderProps>({
|
|
@@ -41,7 +43,7 @@ export function ChipChoiceMultiple<T extends ContentRenderProps = ContentRenderP
|
|
|
41
43
|
searchable,
|
|
42
44
|
contentRender,
|
|
43
45
|
dropDownClassName,
|
|
44
|
-
showClearButton,
|
|
46
|
+
showClearButton = true,
|
|
45
47
|
...rest
|
|
46
48
|
}: ChipChoiceMultipleProps<T>) {
|
|
47
49
|
const [value, setValue] = useValueControl<SelectionSingleValueType[]>({
|
|
@@ -143,9 +145,7 @@ export function ChipChoiceMultiple<T extends ContentRenderProps = ContentRenderP
|
|
|
143
145
|
ref={chipRef}
|
|
144
146
|
onClearButtonClick={clearValue}
|
|
145
147
|
value={value}
|
|
146
|
-
showClearButton={
|
|
147
|
-
showClearButton && !(Array.isArray(value) && [0, Object.keys(flattenOptions).length].includes(value.length))
|
|
148
|
-
}
|
|
148
|
+
showClearButton={showClearButton && !(Array.isArray(value) && [0].includes(value.length))}
|
|
149
149
|
valueToRender={valueToRender}
|
|
150
150
|
label={label}
|
|
151
151
|
loading={rest.loading}
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
CustomContentRenderProps,
|
|
11
11
|
} from './components';
|
|
12
12
|
|
|
13
|
-
export type { FilterOption, ChipChoiceMultipleProps, ChipChoiceSingleProps } from './types';
|
|
13
|
+
export type { FilterOption, ChipChoiceMultipleProps, ChipChoiceSingleProps, ContentRenderProps } from './types';
|
|
14
14
|
export type { ChipChoiceCustomProps, ChipChoiceDateProps, ChipChoiceDateRangeProps, CustomContentRenderProps };
|
|
15
15
|
|
|
16
16
|
export namespace ChipChoice {
|