@skbkontur/react-ui 1.6.9 → 1.6.10-radio-group-controlled

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 (338) hide show
  1. package/README.md +135 -135
  2. package/components/Autocomplete/Autocomplete.adapter.js.flow +4 -4
  3. package/components/Autocomplete/Autocomplete.js.flow +37 -37
  4. package/components/Autocomplete/README.md +7 -7
  5. package/components/Autocomplete/index.js.flow +2 -2
  6. package/components/Button/Button.adapter.js.flow +4 -4
  7. package/components/Button/Button.js.flow +58 -58
  8. package/components/Button/Corners.js.flow +12 -12
  9. package/components/Button/README.md +85 -85
  10. package/components/Button/index.js.flow +2 -2
  11. package/components/Calendar/Animation.js.flow +7 -7
  12. package/components/Calendar/Calendar.js.flow +33 -33
  13. package/components/Calendar/CalendarDateShape.js.flow +26 -26
  14. package/components/Calendar/CalendarScrollEvents.js.flow +15 -15
  15. package/components/Calendar/CalendarUtils.js.flow +35 -35
  16. package/components/Calendar/DayCellView.js.flow +16 -16
  17. package/components/Calendar/DayCellViewModel.js.flow +9 -9
  18. package/components/Calendar/Month.js.flow +23 -23
  19. package/components/Calendar/MonthView.js.flow +24 -24
  20. package/components/Calendar/MonthViewModel.js.flow +16 -16
  21. package/components/Calendar/config.js.flow +11 -11
  22. package/components/Calendar/index.js.flow +2 -2
  23. package/components/Calendar/presets.js.flow +21 -21
  24. package/components/Calendar/stepper.js.flow +2 -2
  25. package/components/Calendar/utils.js.flow +2 -2
  26. package/components/Center/Center.js.flow +15 -15
  27. package/components/Center/README.md +5 -5
  28. package/components/Center/index.js.flow +2 -2
  29. package/components/Checkbox/Checkbox.adapter.js.flow +4 -4
  30. package/components/Checkbox/Checkbox.js.flow +27 -27
  31. package/components/Checkbox/README.md +61 -61
  32. package/components/Checkbox/index.js.flow +2 -2
  33. package/components/ComboBox/ComboBox.js.flow +58 -58
  34. package/components/ComboBox/README.md +423 -423
  35. package/components/ComboBox/__mocks__/getCities.js.map +1 -1
  36. package/components/ComboBox/__mocks__/kladr.json +20002 -20002
  37. package/components/ComboBox/index.js.flow +2 -2
  38. package/components/ComboBoxOld/ComboBoxOld.adapter.js.map +1 -1
  39. package/components/ComboBoxOld/ComboBoxOld.d.ts +120 -120
  40. package/components/ComboBoxOld/ComboBoxOld.js +45 -45
  41. package/components/ComboBoxOld/ComboBoxOld.js.map +1 -1
  42. package/components/ComboBoxOld/ComboBoxRenderer.js.map +1 -1
  43. package/components/ComboBoxOld/README.md +83 -83
  44. package/components/ComboBoxOld/index.d.ts +1 -1
  45. package/components/ComboBoxOld/index.js.map +1 -1
  46. package/components/CurrencyInput/CurrencyHelper.js.flow +44 -44
  47. package/components/CurrencyInput/CurrencyInput.js.flow +30 -30
  48. package/components/CurrencyInput/CurrencyInputHelper.js.flow +38 -38
  49. package/components/CurrencyInput/CurrencyInputKeyboardActions.js.flow +19 -19
  50. package/components/CurrencyInput/CursorHelper.js.flow +15 -15
  51. package/components/CurrencyInput/README.md +19 -19
  52. package/components/CurrencyInput/SelectionHelper.js.flow +16 -16
  53. package/components/CurrencyInput/index.js.flow +2 -2
  54. package/components/CurrencyLabel/CurrencyLabel.js.flow +10 -10
  55. package/components/CurrencyLabel/README.md +23 -23
  56. package/components/CurrencyLabel/index.js.flow +2 -2
  57. package/components/CustomComboBox/ComboBoxMenu.js.flow +22 -22
  58. package/components/CustomComboBox/ComboBoxView.js.flow +52 -52
  59. package/components/CustomComboBox/CustomComboBox.js.flow +130 -130
  60. package/components/CustomComboBox/index.js.flow +2 -2
  61. package/components/DateInput/DateInput.js.flow +60 -60
  62. package/components/DateInput/README.md +104 -104
  63. package/components/DateInput/helpers/DateInputKeyboardActions.js.flow +17 -17
  64. package/components/DateInput/helpers/SelectionHelpers.js.flow +3 -3
  65. package/components/DateInput/helpers/inputNumber.js.flow +4 -4
  66. package/components/DateInput/index.js.flow +2 -2
  67. package/components/DatePicker/DatePicker.js.flow +45 -45
  68. package/components/DatePicker/DatePickerHelpers.js.flow +7 -7
  69. package/components/DatePicker/DateShape.js.flow +11 -11
  70. package/components/DatePicker/Picker.js.flow +23 -23
  71. package/components/DatePicker/README.md +307 -307
  72. package/components/DatePicker/index.js.flow +2 -2
  73. package/components/DatePickerOld/Calendar.js.map +1 -1
  74. package/components/DatePickerOld/CalendarCell.js.map +1 -1
  75. package/components/DatePickerOld/DateInput.js +2 -2
  76. package/components/DatePickerOld/DateInput.js.map +1 -1
  77. package/components/DatePickerOld/DatePicker.adapter.js.map +1 -1
  78. package/components/DatePickerOld/DatePickerOld.d.ts +35 -35
  79. package/components/DatePickerOld/DatePickerOld.js +16 -16
  80. package/components/DatePickerOld/DatePickerOld.js.map +1 -1
  81. package/components/DatePickerOld/Picker.js.map +1 -1
  82. package/components/DatePickerOld/README.md +7 -7
  83. package/components/DatePickerOld/dateParser.js.map +1 -1
  84. package/components/DatePickerOld/index.d.ts +1 -1
  85. package/components/DatePickerOld/index.js.map +1 -1
  86. package/components/DateSelect/DateSelect.js.flow +30 -30
  87. package/components/DateSelect/index.js.flow +2 -2
  88. package/components/Dropdown/Dropdown.js.flow +41 -41
  89. package/components/Dropdown/README.md +14 -14
  90. package/components/Dropdown/index.js.flow +2 -2
  91. package/components/DropdownContainer/DropdownContainer.js.flow +29 -29
  92. package/components/DropdownMenu/DropdownMenu.js.flow +20 -20
  93. package/components/DropdownMenu/README.md +66 -66
  94. package/components/DropdownMenu/index.js.flow +2 -2
  95. package/components/Fias/Fias.js.flow +37 -37
  96. package/components/Fias/FiasModal.js.flow +12 -12
  97. package/components/Fias/FiasSearch/FiasSearch.js.flow +32 -32
  98. package/components/Fias/FiasSearch/README.md +78 -78
  99. package/components/Fias/Form/FiasComboBox.js.flow +25 -25
  100. package/components/Fias/Form/FiasForm.js.flow +21 -21
  101. package/components/Fias/README.md +436 -436
  102. package/components/Fias/api/APIResultFactory.js.flow +7 -7
  103. package/components/Fias/api/FiasAPI.js.flow +13 -13
  104. package/components/Fias/api/MockAPI.js.flow +13 -13
  105. package/components/Fias/api/data.json +285 -285
  106. package/components/Fias/constants/abbreviations.js.flow +7 -7
  107. package/components/Fias/index.js.flow +5 -5
  108. package/components/Fias/locale/types.js.flow +71 -71
  109. package/components/Fias/logger/Logger.js.flow +13 -13
  110. package/components/Fias/models/Address.js.flow +57 -57
  111. package/components/Fias/models/AddressElement.js.flow +15 -15
  112. package/components/Fias/models/FiasData.js.flow +10 -10
  113. package/components/Fias/types.js.flow +133 -133
  114. package/components/FxInput/FxInput.adapter.js.flow +4 -4
  115. package/components/FxInput/FxInput.js.flow +24 -24
  116. package/components/FxInput/README.md +13 -13
  117. package/components/FxInput/index.js.flow +2 -2
  118. package/components/Gapped/Gapped.js.flow +13 -13
  119. package/components/Gapped/README.md +6 -6
  120. package/components/Gapped/index.js.flow +2 -2
  121. package/components/Group/Group.js.flow +14 -14
  122. package/components/Group/README.md +27 -27
  123. package/components/Group/index.js.flow +2 -2
  124. package/components/HideBodyVerticalScroll/HideBodyVerticalScroll.js.flow +7 -7
  125. package/components/HideBodyVerticalScroll/index.js.flow +2 -2
  126. package/components/Hint/Hint.js.flow +37 -37
  127. package/components/Hint/README.md +3 -3
  128. package/components/Hint/index.js.flow +2 -2
  129. package/components/Icon/20px/Icon.js.flow +27 -27
  130. package/components/Icon/20px/index.js.flow +2 -2
  131. package/components/Icon/README.md +64 -64
  132. package/components/IgnoreLayerClick/IgnoreLayerClick.js.flow +12 -12
  133. package/components/IgnoreLayerClick/index.js.flow +2 -2
  134. package/components/Input/Input.adapter.js.flow +9 -9
  135. package/components/Input/Input.js.flow +55 -55
  136. package/components/Input/README.md +13 -13
  137. package/components/Input/index.js.flow +2 -2
  138. package/components/Kebab/Kebab.js.flow +23 -23
  139. package/components/Kebab/README.md +44 -44
  140. package/components/Kebab/index.js.flow +2 -2
  141. package/components/Kladr/AddressModal.d.ts +39 -39
  142. package/components/Kladr/AddressModal.js.flow +20 -20
  143. package/components/Kladr/AddressModal.js.map +1 -1
  144. package/components/Kladr/Kladr.d.ts +39 -39
  145. package/components/Kladr/Kladr.js +2 -2
  146. package/components/Kladr/Kladr.js.flow +27 -27
  147. package/components/Kladr/Kladr.js.map +1 -1
  148. package/components/Kladr/KladrAPI.d.ts +8 -8
  149. package/components/Kladr/KladrAPI.js +7 -2
  150. package/components/Kladr/KladrAPI.js.flow +8 -8
  151. package/components/Kladr/KladrAPI.js.map +1 -1
  152. package/components/Kladr/README.md +3 -3
  153. package/components/Kladr/Types.d.ts +40 -40
  154. package/components/Kladr/Types.js.flow +39 -39
  155. package/components/Kladr/index.d.ts +1 -1
  156. package/components/Kladr/index.js.flow +2 -2
  157. package/components/Kladr/index.js.map +1 -1
  158. package/components/Kladr/util.js.map +1 -1
  159. package/components/Kladr/utils.d.ts +4 -4
  160. package/components/Kladr/utils.js.flow +4 -4
  161. package/components/Link/Link.adapter.js.flow +4 -4
  162. package/components/Link/Link.js.flow +25 -25
  163. package/components/Link/README.md +11 -11
  164. package/components/Link/index.js.flow +2 -2
  165. package/components/Loader/Loader.js.flow +20 -20
  166. package/components/Loader/README.md +25 -25
  167. package/components/Loader/index.js.flow +2 -2
  168. package/components/Logotype/Logotype.js.flow +21 -21
  169. package/components/Logotype/ProductWidget.js.flow +7 -7
  170. package/components/Logotype/README.md +32 -32
  171. package/components/Logotype/index.js.flow +2 -2
  172. package/components/Menu/Menu.js.flow +24 -24
  173. package/components/Menu/isActiveElement.js.flow +7 -7
  174. package/components/MenuHeader/MenuHeader.js.flow +11 -11
  175. package/components/MenuHeader/index.js.flow +2 -2
  176. package/components/MenuItem/MenuItem.js.flow +33 -33
  177. package/components/MenuItem/README.md +5 -5
  178. package/components/MenuItem/index.js.flow +2 -2
  179. package/components/MenuSeparator/MenuSeparator.js.flow +7 -7
  180. package/components/MenuSeparator/index.js.flow +2 -2
  181. package/components/Modal/Modal.adapter.js.flow +4 -4
  182. package/components/Modal/Modal.js.flow +30 -30
  183. package/components/Modal/ModalBody.js.flow +7 -7
  184. package/components/Modal/ModalClose.js.flow +6 -6
  185. package/components/Modal/ModalContext.js.flow +15 -15
  186. package/components/Modal/ModalFooter.js.flow +11 -11
  187. package/components/Modal/ModalHeader.js.flow +11 -11
  188. package/components/Modal/README.md +38 -38
  189. package/components/Modal/index.js.flow +2 -2
  190. package/components/ModalStack/ModalStack.js.flow +10 -10
  191. package/components/ModalStack/index.js.flow +2 -2
  192. package/components/Paging/NavigationHelper.js.flow +13 -13
  193. package/components/Paging/Paging.js.flow +38 -38
  194. package/components/Paging/PagingHelper.js.flow +10 -10
  195. package/components/Paging/README.md +43 -43
  196. package/components/Paging/index.js.flow +2 -2
  197. package/components/PasswordInput/PasswordInput.js.flow +26 -26
  198. package/components/PasswordInput/PasswordInputFallback.js.flow +13 -13
  199. package/components/PasswordInput/getCharHelper.js.flow +4 -4
  200. package/components/PasswordInput/index.js.flow +2 -2
  201. package/components/PhoneInput/PhoneInput.js +2 -2
  202. package/components/PhoneInput/PhoneInput.js.map +1 -1
  203. package/components/PhoneInput/index.js.map +1 -1
  204. package/components/Popup/Popup.js.flow +60 -60
  205. package/components/Popup/PopupHelper.js.flow +29 -29
  206. package/components/Popup/PopupPin.js.flow +15 -15
  207. package/components/Popup/index.js.flow +2 -2
  208. package/components/Radio/README.md +14 -14
  209. package/components/Radio/Radio.js.flow +33 -33
  210. package/components/Radio/index.js.flow +2 -2
  211. package/components/RadioGroup/Prevent.js.flow +9 -9
  212. package/components/RadioGroup/README.md +44 -44
  213. package/components/RadioGroup/RadioGroup.adapter.js.flow +4 -4
  214. package/components/RadioGroup/RadioGroup.js +1 -1
  215. package/components/RadioGroup/RadioGroup.js.flow +42 -42
  216. package/components/RadioGroup/RadioGroup.js.map +1 -1
  217. package/components/RadioGroup/index.js.flow +2 -2
  218. package/components/RenderContainer/RenderContainer.js.flow +11 -11
  219. package/components/RenderContainer/index.js.flow +2 -2
  220. package/components/RenderLayer/RenderLayer.js.flow +12 -12
  221. package/components/RenderLayer/index.js.flow +2 -2
  222. package/components/ScrollContainer/README.md +60 -60
  223. package/components/ScrollContainer/ScrollContainer.js.flow +24 -24
  224. package/components/ScrollContainer/index.js.flow +2 -2
  225. package/components/Select/Item.js.flow +7 -7
  226. package/components/Select/README.md +23 -23
  227. package/components/Select/Select.adapter.js.flow +4 -4
  228. package/components/Select/Select.js.flow +81 -81
  229. package/components/Select/index.js.flow +2 -2
  230. package/components/SidePage/README.md +46 -46
  231. package/components/SidePage/SidePage.js.flow +34 -34
  232. package/components/SidePage/SidePageBody.js.flow +13 -13
  233. package/components/SidePage/SidePageContainer.js.flow +9 -9
  234. package/components/SidePage/SidePageContext.js.flow +15 -15
  235. package/components/SidePage/SidePageFooter.js.flow +16 -16
  236. package/components/SidePage/SidePageHeader.js.flow +11 -11
  237. package/components/SidePage/index.js.flow +2 -2
  238. package/components/Spinner/README.md +33 -33
  239. package/components/Spinner/Spinner.js.flow +20 -20
  240. package/components/Spinner/SpinnerFallback.js.flow +15 -15
  241. package/components/Spinner/index.js.flow +2 -2
  242. package/components/Spinner/settings.js.flow +48 -48
  243. package/components/Sticky/README.md +27 -27
  244. package/components/Sticky/Sticky.js.flow +22 -22
  245. package/components/Sticky/index.js.flow +2 -2
  246. package/components/Switcher/README.md +10 -10
  247. package/components/Switcher/Switcher.js.flow +26 -26
  248. package/components/Switcher/index.js.flow +2 -2
  249. package/components/Tabs/Indicator.js.flow +21 -21
  250. package/components/Tabs/README.md +28 -28
  251. package/components/Tabs/Tab.js.flow +48 -48
  252. package/components/Tabs/Tabs.js.flow +28 -28
  253. package/components/Tabs/index.js.flow +2 -2
  254. package/components/Textarea/README.md +9 -9
  255. package/components/Textarea/Textarea.adapter.js.flow +11 -11
  256. package/components/Textarea/Textarea.js.flow +33 -33
  257. package/components/Textarea/TextareaHelpers.js.flow +6 -6
  258. package/components/Textarea/index.js.flow +2 -2
  259. package/components/ThemeProvider/Playground/README.md +7 -7
  260. package/components/ThemeProvider/README.md +172 -172
  261. package/components/ThemeShowcase/README.md +13 -13
  262. package/components/Toast/README.md +39 -39
  263. package/components/Toast/Toast.js.flow +29 -29
  264. package/components/Toast/ToastStatic.js.flow +10 -10
  265. package/components/Toast/ToastView.js.flow +16 -16
  266. package/components/Toast/index.js.flow +2 -2
  267. package/components/Toggle/README.md +9 -9
  268. package/components/Toggle/Toggle.js.flow +28 -28
  269. package/components/Toggle/index.js.flow +2 -2
  270. package/components/Token/README.md +109 -109
  271. package/components/Token/Token.js.flow +25 -25
  272. package/components/Token/TokenRemoveIcon.js.flow +11 -11
  273. package/components/Token/index.js.flow +2 -2
  274. package/components/TokenInput/README.md +82 -82
  275. package/components/TokenInput/TextWidthHelper.js.flow +10 -10
  276. package/components/TokenInput/TokenInput.js.flow +39 -39
  277. package/components/TokenInput/TokenInputMenu.js.flow +17 -17
  278. package/components/TokenInput/TokenInputReducer.js.flow +63 -63
  279. package/components/TokenInput/index.js.flow +2 -2
  280. package/components/Tooltip/README.md +207 -207
  281. package/components/Tooltip/Tooltip.js.flow +33 -33
  282. package/components/Tooltip/index.js.flow +2 -2
  283. package/components/TooltipMenu/README.md +106 -106
  284. package/components/TooltipMenu/TooltipMenu.js.flow +19 -19
  285. package/components/TooltipMenu/index.js.flow +2 -2
  286. package/components/TopBar/ButtonItem.js.flow +22 -22
  287. package/components/TopBar/Divider.js.flow +5 -5
  288. package/components/TopBar/Item.js.flow +19 -19
  289. package/components/TopBar/Organizations.js.flow +16 -16
  290. package/components/TopBar/README.md +112 -112
  291. package/components/TopBar/TopBar.js.flow +53 -53
  292. package/components/TopBar/TopBarDropdown.js.flow +23 -23
  293. package/components/TopBar/TopBarEnd.js.flow +4 -4
  294. package/components/TopBar/TopBarLogout.js.flow +6 -6
  295. package/components/TopBar/TopBarStart.js.flow +4 -4
  296. package/components/TopBar/User.js.flow +9 -9
  297. package/components/TopBar/index.js.flow +2 -2
  298. package/components/ZIndex/ZIndex.js.flow +11 -11
  299. package/components/ZIndex/index.js.flow +2 -2
  300. package/components/__mocks__/react-addons-css-transition-group.js.map +1 -1
  301. package/components/all.js.flow +36 -36
  302. package/components/ensureOldIEClassName.js.flow +6 -6
  303. package/components/eventHandlers.js.flow +9 -9
  304. package/components/index.js.flow +2 -2
  305. package/components/internal/InputLikeText/InputLikeText.js.flow +24 -24
  306. package/components/internal/InputLikeText/index.js.flow +2 -2
  307. package/components/internal/InternalMenu/InternalMenu.js.flow +23 -23
  308. package/components/internal/InternalMenu/isActiveElement.js.flow +7 -7
  309. package/components/internal/MaskedInput/MaskedInput.js.flow +24 -24
  310. package/components/internal/MaskedInput/index.js.flow +2 -2
  311. package/components/internal/MockDate.js.flow +9 -9
  312. package/components/internal/PopupMenu/PopupMenu.js.flow +40 -40
  313. package/components/internal/PopupMenu/PopupMenuPositions.js.flow +4 -4
  314. package/components/internal/PopupMenu/index.js.flow +2 -2
  315. package/components/internal/PopupMenu/validatePositions.js.flow +4 -4
  316. package/components/internal/ResizeDetector/ResizeDetector.js.flow +8 -8
  317. package/components/internal/ResizeDetector/index.js.flow +2 -2
  318. package/components/internal/createPropsGetter.js.flow +8 -8
  319. package/components/internal/cross.js.flow +4 -4
  320. package/components/internal/currentEnvironment.js.flow +4 -4
  321. package/components/internal/extractKeyboardAction.js.flow +12 -12
  322. package/components/polyfillPlaceholder.js.flow +4 -4
  323. package/package.json +2 -5
  324. package/typings/console.d.ts +3 -3
  325. package/typings/event-types.d.ts +4 -4
  326. package/typings/fbjs.d.ts +4 -4
  327. package/typings/global.d.ts +6 -6
  328. package/typings/images.d.ts +1 -1
  329. package/typings/less.d.ts +4 -4
  330. package/typings/mocha/index.d.ts +2 -2
  331. package/typings/mockdate.d.ts +1 -1
  332. package/typings/normalize-wheel.d.ts +1 -1
  333. package/typings/raf.d.ts +1 -1
  334. package/typings/react-addons-css-transition-group.d.ts +1 -1
  335. package/typings/react-testing/index.d.ts +4 -4
  336. package/typings/react-testing/window.d.ts +5 -5
  337. package/typings/react.d.ts +8 -8
  338. package/typings/utility-types.d.ts +17 -17
@@ -1,423 +1,423 @@
1
- Combobox with error handling
2
-
3
- ```jsx
4
- let delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
5
-
6
- let maybeReject = x => (Math.random() * 3 < 1 ? Promise.reject() : Promise.resolve(x));
7
-
8
- let getItems = q =>
9
- Promise.resolve(
10
- [
11
- { value: 1, label: 'First' },
12
- { value: 2, label: 'Second' },
13
- { value: 3, label: 'Third' },
14
- { value: 4, label: 'Fourth' },
15
- { value: 5, label: 'Fifth' },
16
- { value: 6, label: 'Sixth' },
17
- ].filter(x => x.label.toLowerCase().includes(q.toLowerCase()) || x.value.toString(10) === q),
18
- )
19
- .then(delay(500))
20
- .then(maybeReject);
21
-
22
- let initialState = {
23
- selected: { value: 3, label: 'Third' },
24
- error: false,
25
- };
26
-
27
- let handleChange = (_, item) => setState({ selected: item, error: false });
28
-
29
- let handleUnexpectedInput = () => setState({ error: true, selected: null });
30
-
31
- let handleFocus = () => setState({ error: false });
32
-
33
- <Tooltip closeButton={false} render={() => 'Item must be selected!'} trigger={state.error ? 'opened' : 'closed'}>
34
- <ComboBox
35
- error={state.error}
36
- getItems={getItems}
37
- onChange={handleChange}
38
- onFocus={handleFocus}
39
- onUnexpectedInput={handleUnexpectedInput}
40
- placeholder="Enter number"
41
- value={state.selected}
42
- />
43
- </Tooltip>;
44
- ```
45
-
46
- ComboBox with popular values, complex menu items and total count message
47
-
48
- ```jsx
49
- const getCities = require('./__mocks__/getCities.js').default;
50
-
51
- let popularItems = [
52
- { Id: 956, City: 'Махачкала' },
53
- { Id: 4974, City: 'Верхняя-Пышма' },
54
- { Id: 4980, City: 'Екатеринбург' },
55
- ];
56
-
57
- let handleChange = (_, value) => setState({ value });
58
-
59
- let initialState = {
60
- value: null,
61
- };
62
-
63
- let mapCity = ({ Id, City }) => ({
64
- value: Id,
65
- label: City,
66
- });
67
-
68
- let hasSelectedItem = itemsSets => itemsSets.some(items => items.find(item => state.value.value === item.Id));
69
-
70
- let shouldInsertSelectedItem = (query, items) => state.value && !query && !hasSelectedItem([items, popularItems]);
71
-
72
- let getPopularItems = query => (query ? [] : popularItems.map(mapCity));
73
- let renderSeparator = query => (query ? [] : <MenuSeparator />);
74
- let getSelectedItem = (query, items) => (!shouldInsertSelectedItem(query, items) ? [] : state.value);
75
-
76
- let prepareItems = (query, items) =>
77
- (!shouldInsertSelectedItem(query, items) ? items : items.slice(0, -1)).map(mapCity);
78
-
79
- let renderTotalCount = (foundCount, totalCount) =>
80
- foundCount < totalCount ? (
81
- <MenuHeader>
82
- Показано {foundCount} из {totalCount} найденных городов.
83
- </MenuHeader>
84
- ) : (
85
- []
86
- );
87
-
88
- let getItems = query =>
89
- getCities(query).then(({ foundItems, totalCount }) =>
90
- [].concat(
91
- getPopularItems(query),
92
- renderSeparator(query),
93
- getSelectedItem(query, foundItems),
94
- prepareItems(query, foundItems),
95
- renderTotalCount(foundItems.length, totalCount),
96
- ),
97
- );
98
-
99
- let renderItem = item => (
100
- <Gapped>
101
- <div style={{ width: 40 }}>{item.value}</div>
102
- <div style={{ width: 210, whiteSpace: 'normal' }}>{item.label}</div>
103
- </Gapped>
104
- );
105
-
106
- <ComboBox
107
- onChange={handleChange}
108
- getItems={getItems}
109
- placeholder="Начните вводить название"
110
- value={state.value}
111
- renderItem={renderItem}
112
- />;
113
- ```
114
-
115
- Переопределение renderValue и renderItem:
116
-
117
- ```js
118
- const OkIcon = require('@skbkontur/react-icons/Ok').default;
119
- const delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
120
-
121
- const getItems = q =>
122
- Promise.resolve(
123
- [
124
- { approved: true, value: 1, label: 'Леонид Долецкий', email: 'first@skbkontur.ru' },
125
- { approved: true, value: 2, label: 'Владислав Нашкодивший', email: 'second@skbkontur.ru' },
126
- { approved: false, value: 3, label: 'Розенкранц Харитонов', email: 'third@skbkontur.ru' },
127
- { approved: false, value: 4, label: 'Надежда Дубова', email: 'fourth@skbkontur.ru' },
128
- { approved: true, value: 5, label: 'Владислав Сташкеевич', email: 'fifth@skbkontur.ru' },
129
- { approved: true, value: 6, label: 'Василиса Поволоцкая', email: 'sixth@skbkontur.ru' },
130
- ].filter(x => x.label.toLowerCase().includes(q.toLowerCase()) || x.value.toString(10) === q),
131
- ).then(delay(500));
132
-
133
- const initialState = {
134
- selected: { approved: false, value: 3, label: 'Розенкранц Харитонов', email: 'third@skbkontur.ru' },
135
- error: false,
136
- };
137
-
138
- const handleChange = (_, item) => setState({ selected: item, error: false });
139
-
140
- const handleUnexpectedInput = () => setState({ error: true, selected: null });
141
-
142
- const handleFocus = () => setState({ error: false });
143
-
144
- const customRenderItem = item => (
145
- <div
146
- style={{
147
- display: 'flex',
148
- }}
149
- >
150
- <div
151
- style={{
152
- minWidth: '55%',
153
- display: 'flex',
154
- }}
155
- >
156
- <span
157
- style={{
158
- minWidth: '20px',
159
- }}
160
- >
161
- {item.approved ? <OkIcon size={14} /> : null}
162
- </span>
163
- <span
164
- style={{
165
- flexGrow: '1',
166
- }}
167
- >
168
- {item.label}
169
- </span>
170
- </div>
171
- <div
172
- style={{
173
- opacity: '0.6',
174
- paddingLeft: '10px',
175
- boxSizing: 'border-box',
176
- }}
177
- >
178
- {item.email}
179
- </div>
180
- </div>
181
- );
182
-
183
- const customRenderValue = item => (
184
- <div
185
- style={{
186
- display: 'flex',
187
- }}
188
- >
189
- <div
190
- style={{
191
- minWidth: '55%',
192
- }}
193
- >
194
- {item.label}
195
- </div>
196
- <div
197
- style={{
198
- opacity: '0.6',
199
- paddingLeft: '10px',
200
- boxSizing: 'border-box',
201
- }}
202
- >
203
- {item.email}
204
- </div>
205
- </div>
206
- );
207
-
208
- <Tooltip closeButton={false} render={() => 'Item must be selected!'} trigger={state.error ? 'opened' : 'closed'}>
209
- <ComboBox
210
- error={state.error}
211
- getItems={getItems}
212
- onChange={handleChange}
213
- onFocus={handleFocus}
214
- onUnexpectedInput={handleUnexpectedInput}
215
- placeholder="Enter number"
216
- value={state.selected}
217
- renderItem={customRenderItem}
218
- renderValue={customRenderValue}
219
- width="400px"
220
- />
221
- </Tooltip>;
222
- ```
223
-
224
- С подсветкой результата поиска:
225
-
226
- ```jsx
227
- const delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
228
-
229
- const getItems = query =>
230
- Promise.resolve(
231
- [
232
- { value: 1, label: 'First' },
233
- { value: 2, label: 'Second' },
234
- { value: 3, label: 'Third' },
235
- { value: 4, label: 'Fourth' },
236
- { value: 5, label: 'Fifth' },
237
- { value: 6, label: 'Sixth' },
238
- ]
239
- .filter(x => x.label.toLowerCase().includes(query.toLowerCase()) || x.value.toString(10) === query)
240
- .map(({ label, ...rest }) => {
241
- const start = label.toLowerCase().indexOf(query.toLowerCase());
242
- const end = start + query.length;
243
-
244
- return {
245
- ...rest,
246
- label,
247
- highlightedLabel:
248
- start >= 0 ? (
249
- <span>
250
- {label.substring(0, start)}
251
- <strong
252
- style={{
253
- fontSize: '1.1em',
254
- }}
255
- >
256
- {label.substring(start, end)}
257
- </strong>
258
- {label.substring(end)}
259
- </span>
260
- ) : null,
261
- };
262
- }),
263
- ).then(delay(500));
264
-
265
- const initialState = {
266
- selected: { value: 3, label: 'Third' },
267
- error: false,
268
- };
269
-
270
- const handleChange = (_, item) => setState({ selected: item, error: false });
271
-
272
- const handleUnexpectedInput = () => setState({ error: true, selected: null });
273
-
274
- const handleFocus = () => setState({ error: false });
275
-
276
- const renderItem = item => {
277
- if (item.highlightedLabel) {
278
- return item.highlightedLabel;
279
- }
280
-
281
- return item.label;
282
- };
283
-
284
- <Tooltip closeButton={false} render={() => 'Item must be selected!'} trigger={state.error ? 'opened' : 'closed'}>
285
- <ComboBox
286
- error={state.error}
287
- getItems={getItems}
288
- onChange={handleChange}
289
- onFocus={handleFocus}
290
- onUnexpectedInput={handleUnexpectedInput}
291
- placeholder="Enter number"
292
- value={state.selected}
293
- renderItem={renderItem}
294
- />
295
- </Tooltip>;
296
- ```
297
-
298
- Добавление элементов в меню
299
-
300
- ```jsx
301
- const delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
302
-
303
- class ComboboxExample extends React.Component {
304
- constructor(props) {
305
- super(props);
306
-
307
- this.state = {
308
- items: [
309
- { value: 1, label: 'First' },
310
- { value: 2, label: 'Second' },
311
- { value: 3, label: 'Third' },
312
- { value: 4, label: 'Fourth' },
313
- { value: 5, label: 'Fifth' },
314
- { value: 6, label: 'Sixth' },
315
- ],
316
- query: '',
317
- selected: { value: 3, label: 'Third' },
318
- error: false,
319
- shouldRenderAddButton: false,
320
- };
321
-
322
- this.comboBoxElement = null;
323
-
324
- this.getItems = this.getItems.bind(this);
325
- this.handleChange = this.handleChange.bind(this);
326
- this.handleFocus = this.handleFocus.bind(this);
327
- this.handleInputChange = this.handleInputChange.bind(this);
328
- this.renderAddButton = this.renderAddButton.bind(this);
329
- this.refComboBox = this.refComboBox.bind(this);
330
- this.addItem = this.addItem.bind(this);
331
- }
332
-
333
- render() {
334
- return (
335
- <ComboBox
336
- error={this.state.error}
337
- getItems={this.getItems}
338
- onChange={this.handleChange}
339
- onFocus={this.handleFocus}
340
- placeholder="Enter number"
341
- value={this.state.selected}
342
- onInputChange={this.handleInputChange}
343
- renderAddButton={this.renderAddButton}
344
- ref={this.refComboBox}
345
- />
346
- );
347
- }
348
-
349
- getItems(q) {
350
- return Promise.resolve(
351
- this.state.items.filter(x => x.label.toLowerCase().includes(q.toLowerCase()) || x.value.toString(10) === q),
352
- ).then(delay(500));
353
- }
354
-
355
- handleInputChange(query) {
356
- const isItemExists = this.state.items.find(x => x.label.toLowerCase() == query.toLowerCase());
357
- this.setState({ query, shouldRenderAddButton: !isItemExists });
358
- }
359
-
360
- handleChange(_, item) {
361
- this.setState({ selected: item, error: false, shouldRenderAddButton: false });
362
- }
363
-
364
- handleFocus() {
365
- this.setState({ error: false });
366
- }
367
-
368
- renderAddButton() {
369
- if (!this.state.shouldRenderAddButton) {
370
- return null;
371
- }
372
- return (
373
- <MenuItem link onClick={this.addItem}>
374
- + Добавить "{this.state.query}"
375
- </MenuItem>
376
- );
377
- }
378
-
379
- refComboBox(element) {
380
- this.comboBoxElement = element;
381
- }
382
-
383
- addItem() {
384
- this.setState(currentState => {
385
- const newItem = {
386
- value: Math.max(...currentState.items.map(({ value }) => value)) + 1,
387
- label: currentState.query,
388
- };
389
-
390
- return {
391
- items: [...currentState.items, newItem],
392
- selected: newItem,
393
- error: false,
394
- shouldRenderAddButton: false,
395
- };
396
- });
397
- }
398
- }
399
-
400
- <ComboboxExample />;
401
- ```
402
-
403
- #### Локали по умолчанию (см. `LocaleProvider`)
404
-
405
- ```typescript
406
- interface ComboBoxLocale {
407
- notFound?: string;
408
- errorNetworkButton?: string;
409
- errorNetworkMessage?: string;
410
- }
411
-
412
- const ru_RU = {
413
- notFound: 'Не найдено',
414
- errorNetworkButton: 'Обновить',
415
- errorNetworkMessage: 'Что-то пошло не так. Проверьте соединение с интернетом и попробуйте еще раз',
416
- };
417
-
418
- const en_GB = {
419
- notFound: 'Not found',
420
- errorNetworkButton: 'Refresh',
421
- errorNetworkMessage: 'Something went wrong. Check your internet connection and try again',
422
- };
423
- ```
1
+ Combobox with error handling
2
+
3
+ ```jsx
4
+ let delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
5
+
6
+ let maybeReject = x => (Math.random() * 3 < 1 ? Promise.reject() : Promise.resolve(x));
7
+
8
+ let getItems = q =>
9
+ Promise.resolve(
10
+ [
11
+ { value: 1, label: 'First' },
12
+ { value: 2, label: 'Second' },
13
+ { value: 3, label: 'Third' },
14
+ { value: 4, label: 'Fourth' },
15
+ { value: 5, label: 'Fifth' },
16
+ { value: 6, label: 'Sixth' },
17
+ ].filter(x => x.label.toLowerCase().includes(q.toLowerCase()) || x.value.toString(10) === q),
18
+ )
19
+ .then(delay(500))
20
+ .then(maybeReject);
21
+
22
+ let initialState = {
23
+ selected: { value: 3, label: 'Third' },
24
+ error: false,
25
+ };
26
+
27
+ let handleChange = (_, item) => setState({ selected: item, error: false });
28
+
29
+ let handleUnexpectedInput = () => setState({ error: true, selected: null });
30
+
31
+ let handleFocus = () => setState({ error: false });
32
+
33
+ <Tooltip closeButton={false} render={() => 'Item must be selected!'} trigger={state.error ? 'opened' : 'closed'}>
34
+ <ComboBox
35
+ error={state.error}
36
+ getItems={getItems}
37
+ onChange={handleChange}
38
+ onFocus={handleFocus}
39
+ onUnexpectedInput={handleUnexpectedInput}
40
+ placeholder="Enter number"
41
+ value={state.selected}
42
+ />
43
+ </Tooltip>;
44
+ ```
45
+
46
+ ComboBox with popular values, complex menu items and total count message
47
+
48
+ ```jsx
49
+ const getCities = require('./__mocks__/getCities.js').default;
50
+
51
+ let popularItems = [
52
+ { Id: 956, City: 'Махачкала' },
53
+ { Id: 4974, City: 'Верхняя-Пышма' },
54
+ { Id: 4980, City: 'Екатеринбург' },
55
+ ];
56
+
57
+ let handleChange = (_, value) => setState({ value });
58
+
59
+ let initialState = {
60
+ value: null,
61
+ };
62
+
63
+ let mapCity = ({ Id, City }) => ({
64
+ value: Id,
65
+ label: City,
66
+ });
67
+
68
+ let hasSelectedItem = itemsSets => itemsSets.some(items => items.find(item => state.value.value === item.Id));
69
+
70
+ let shouldInsertSelectedItem = (query, items) => state.value && !query && !hasSelectedItem([items, popularItems]);
71
+
72
+ let getPopularItems = query => (query ? [] : popularItems.map(mapCity));
73
+ let renderSeparator = query => (query ? [] : <MenuSeparator />);
74
+ let getSelectedItem = (query, items) => (!shouldInsertSelectedItem(query, items) ? [] : state.value);
75
+
76
+ let prepareItems = (query, items) =>
77
+ (!shouldInsertSelectedItem(query, items) ? items : items.slice(0, -1)).map(mapCity);
78
+
79
+ let renderTotalCount = (foundCount, totalCount) =>
80
+ foundCount < totalCount ? (
81
+ <MenuHeader>
82
+ Показано {foundCount} из {totalCount} найденных городов.
83
+ </MenuHeader>
84
+ ) : (
85
+ []
86
+ );
87
+
88
+ let getItems = query =>
89
+ getCities(query).then(({ foundItems, totalCount }) =>
90
+ [].concat(
91
+ getPopularItems(query),
92
+ renderSeparator(query),
93
+ getSelectedItem(query, foundItems),
94
+ prepareItems(query, foundItems),
95
+ renderTotalCount(foundItems.length, totalCount),
96
+ ),
97
+ );
98
+
99
+ let renderItem = item => (
100
+ <Gapped>
101
+ <div style={{ width: 40 }}>{item.value}</div>
102
+ <div style={{ width: 210, whiteSpace: 'normal' }}>{item.label}</div>
103
+ </Gapped>
104
+ );
105
+
106
+ <ComboBox
107
+ onChange={handleChange}
108
+ getItems={getItems}
109
+ placeholder="Начните вводить название"
110
+ value={state.value}
111
+ renderItem={renderItem}
112
+ />;
113
+ ```
114
+
115
+ Переопределение renderValue и renderItem:
116
+
117
+ ```js
118
+ const OkIcon = require('@skbkontur/react-icons/Ok').default;
119
+ const delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
120
+
121
+ const getItems = q =>
122
+ Promise.resolve(
123
+ [
124
+ { approved: true, value: 1, label: 'Леонид Долецкий', email: 'first@skbkontur.ru' },
125
+ { approved: true, value: 2, label: 'Владислав Нашкодивший', email: 'second@skbkontur.ru' },
126
+ { approved: false, value: 3, label: 'Розенкранц Харитонов', email: 'third@skbkontur.ru' },
127
+ { approved: false, value: 4, label: 'Надежда Дубова', email: 'fourth@skbkontur.ru' },
128
+ { approved: true, value: 5, label: 'Владислав Сташкеевич', email: 'fifth@skbkontur.ru' },
129
+ { approved: true, value: 6, label: 'Василиса Поволоцкая', email: 'sixth@skbkontur.ru' },
130
+ ].filter(x => x.label.toLowerCase().includes(q.toLowerCase()) || x.value.toString(10) === q),
131
+ ).then(delay(500));
132
+
133
+ const initialState = {
134
+ selected: { approved: false, value: 3, label: 'Розенкранц Харитонов', email: 'third@skbkontur.ru' },
135
+ error: false,
136
+ };
137
+
138
+ const handleChange = (_, item) => setState({ selected: item, error: false });
139
+
140
+ const handleUnexpectedInput = () => setState({ error: true, selected: null });
141
+
142
+ const handleFocus = () => setState({ error: false });
143
+
144
+ const customRenderItem = item => (
145
+ <div
146
+ style={{
147
+ display: 'flex',
148
+ }}
149
+ >
150
+ <div
151
+ style={{
152
+ minWidth: '55%',
153
+ display: 'flex',
154
+ }}
155
+ >
156
+ <span
157
+ style={{
158
+ minWidth: '20px',
159
+ }}
160
+ >
161
+ {item.approved ? <OkIcon size={14} /> : null}
162
+ </span>
163
+ <span
164
+ style={{
165
+ flexGrow: '1',
166
+ }}
167
+ >
168
+ {item.label}
169
+ </span>
170
+ </div>
171
+ <div
172
+ style={{
173
+ opacity: '0.6',
174
+ paddingLeft: '10px',
175
+ boxSizing: 'border-box',
176
+ }}
177
+ >
178
+ {item.email}
179
+ </div>
180
+ </div>
181
+ );
182
+
183
+ const customRenderValue = item => (
184
+ <div
185
+ style={{
186
+ display: 'flex',
187
+ }}
188
+ >
189
+ <div
190
+ style={{
191
+ minWidth: '55%',
192
+ }}
193
+ >
194
+ {item.label}
195
+ </div>
196
+ <div
197
+ style={{
198
+ opacity: '0.6',
199
+ paddingLeft: '10px',
200
+ boxSizing: 'border-box',
201
+ }}
202
+ >
203
+ {item.email}
204
+ </div>
205
+ </div>
206
+ );
207
+
208
+ <Tooltip closeButton={false} render={() => 'Item must be selected!'} trigger={state.error ? 'opened' : 'closed'}>
209
+ <ComboBox
210
+ error={state.error}
211
+ getItems={getItems}
212
+ onChange={handleChange}
213
+ onFocus={handleFocus}
214
+ onUnexpectedInput={handleUnexpectedInput}
215
+ placeholder="Enter number"
216
+ value={state.selected}
217
+ renderItem={customRenderItem}
218
+ renderValue={customRenderValue}
219
+ width="400px"
220
+ />
221
+ </Tooltip>;
222
+ ```
223
+
224
+ С подсветкой результата поиска:
225
+
226
+ ```jsx
227
+ const delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
228
+
229
+ const getItems = query =>
230
+ Promise.resolve(
231
+ [
232
+ { value: 1, label: 'First' },
233
+ { value: 2, label: 'Second' },
234
+ { value: 3, label: 'Third' },
235
+ { value: 4, label: 'Fourth' },
236
+ { value: 5, label: 'Fifth' },
237
+ { value: 6, label: 'Sixth' },
238
+ ]
239
+ .filter(x => x.label.toLowerCase().includes(query.toLowerCase()) || x.value.toString(10) === query)
240
+ .map(({ label, ...rest }) => {
241
+ const start = label.toLowerCase().indexOf(query.toLowerCase());
242
+ const end = start + query.length;
243
+
244
+ return {
245
+ ...rest,
246
+ label,
247
+ highlightedLabel:
248
+ start >= 0 ? (
249
+ <span>
250
+ {label.substring(0, start)}
251
+ <strong
252
+ style={{
253
+ fontSize: '1.1em',
254
+ }}
255
+ >
256
+ {label.substring(start, end)}
257
+ </strong>
258
+ {label.substring(end)}
259
+ </span>
260
+ ) : null,
261
+ };
262
+ }),
263
+ ).then(delay(500));
264
+
265
+ const initialState = {
266
+ selected: { value: 3, label: 'Third' },
267
+ error: false,
268
+ };
269
+
270
+ const handleChange = (_, item) => setState({ selected: item, error: false });
271
+
272
+ const handleUnexpectedInput = () => setState({ error: true, selected: null });
273
+
274
+ const handleFocus = () => setState({ error: false });
275
+
276
+ const renderItem = item => {
277
+ if (item.highlightedLabel) {
278
+ return item.highlightedLabel;
279
+ }
280
+
281
+ return item.label;
282
+ };
283
+
284
+ <Tooltip closeButton={false} render={() => 'Item must be selected!'} trigger={state.error ? 'opened' : 'closed'}>
285
+ <ComboBox
286
+ error={state.error}
287
+ getItems={getItems}
288
+ onChange={handleChange}
289
+ onFocus={handleFocus}
290
+ onUnexpectedInput={handleUnexpectedInput}
291
+ placeholder="Enter number"
292
+ value={state.selected}
293
+ renderItem={renderItem}
294
+ />
295
+ </Tooltip>;
296
+ ```
297
+
298
+ Добавление элементов в меню
299
+
300
+ ```jsx
301
+ const delay = ms => v => new Promise(resolve => setTimeout(resolve, ms, v));
302
+
303
+ class ComboboxExample extends React.Component {
304
+ constructor(props) {
305
+ super(props);
306
+
307
+ this.state = {
308
+ items: [
309
+ { value: 1, label: 'First' },
310
+ { value: 2, label: 'Second' },
311
+ { value: 3, label: 'Third' },
312
+ { value: 4, label: 'Fourth' },
313
+ { value: 5, label: 'Fifth' },
314
+ { value: 6, label: 'Sixth' },
315
+ ],
316
+ query: '',
317
+ selected: { value: 3, label: 'Third' },
318
+ error: false,
319
+ shouldRenderAddButton: false,
320
+ };
321
+
322
+ this.comboBoxElement = null;
323
+
324
+ this.getItems = this.getItems.bind(this);
325
+ this.handleChange = this.handleChange.bind(this);
326
+ this.handleFocus = this.handleFocus.bind(this);
327
+ this.handleInputChange = this.handleInputChange.bind(this);
328
+ this.renderAddButton = this.renderAddButton.bind(this);
329
+ this.refComboBox = this.refComboBox.bind(this);
330
+ this.addItem = this.addItem.bind(this);
331
+ }
332
+
333
+ render() {
334
+ return (
335
+ <ComboBox
336
+ error={this.state.error}
337
+ getItems={this.getItems}
338
+ onChange={this.handleChange}
339
+ onFocus={this.handleFocus}
340
+ placeholder="Enter number"
341
+ value={this.state.selected}
342
+ onInputChange={this.handleInputChange}
343
+ renderAddButton={this.renderAddButton}
344
+ ref={this.refComboBox}
345
+ />
346
+ );
347
+ }
348
+
349
+ getItems(q) {
350
+ return Promise.resolve(
351
+ this.state.items.filter(x => x.label.toLowerCase().includes(q.toLowerCase()) || x.value.toString(10) === q),
352
+ ).then(delay(500));
353
+ }
354
+
355
+ handleInputChange(query) {
356
+ const isItemExists = this.state.items.find(x => x.label.toLowerCase() == query.toLowerCase());
357
+ this.setState({ query, shouldRenderAddButton: !isItemExists });
358
+ }
359
+
360
+ handleChange(_, item) {
361
+ this.setState({ selected: item, error: false, shouldRenderAddButton: false });
362
+ }
363
+
364
+ handleFocus() {
365
+ this.setState({ error: false });
366
+ }
367
+
368
+ renderAddButton() {
369
+ if (!this.state.shouldRenderAddButton) {
370
+ return null;
371
+ }
372
+ return (
373
+ <MenuItem link onClick={this.addItem}>
374
+ + Добавить "{this.state.query}"
375
+ </MenuItem>
376
+ );
377
+ }
378
+
379
+ refComboBox(element) {
380
+ this.comboBoxElement = element;
381
+ }
382
+
383
+ addItem() {
384
+ this.setState(currentState => {
385
+ const newItem = {
386
+ value: Math.max(...currentState.items.map(({ value }) => value)) + 1,
387
+ label: currentState.query,
388
+ };
389
+
390
+ return {
391
+ items: [...currentState.items, newItem],
392
+ selected: newItem,
393
+ error: false,
394
+ shouldRenderAddButton: false,
395
+ };
396
+ });
397
+ }
398
+ }
399
+
400
+ <ComboboxExample />;
401
+ ```
402
+
403
+ #### Локали по умолчанию (см. `LocaleProvider`)
404
+
405
+ ```typescript
406
+ interface ComboBoxLocale {
407
+ notFound?: string;
408
+ errorNetworkButton?: string;
409
+ errorNetworkMessage?: string;
410
+ }
411
+
412
+ const ru_RU = {
413
+ notFound: 'Не найдено',
414
+ errorNetworkButton: 'Обновить',
415
+ errorNetworkMessage: 'Что-то пошло не так. Проверьте соединение с интернетом и попробуйте еще раз',
416
+ };
417
+
418
+ const en_GB = {
419
+ notFound: 'Not found',
420
+ errorNetworkButton: 'Refresh',
421
+ errorNetworkMessage: 'Something went wrong. Check your internet connection and try again',
422
+ };
423
+ ```