@jetbrains/ring-ui-built 6.1.1-beta.0 → 7.0.0-beta.10

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 (351) hide show
  1. package/components/_helpers/_rollupPluginBabelHelpers.js +1 -504
  2. package/components/_helpers/anchor.js +7 -10
  3. package/components/_helpers/button__classes.js +23 -20
  4. package/components/_helpers/caption.js +11 -21
  5. package/components/_helpers/card.js +91 -123
  6. package/components/_helpers/dialog__body-scroll-preventer.js +10 -17
  7. package/components/_helpers/header.js +1 -1
  8. package/components/_helpers/icon__svg.js +27 -29
  9. package/components/_helpers/input.js +151 -193
  10. package/components/_helpers/query-assist__suggestions.js +79 -94
  11. package/components/_helpers/select__filter.js +56 -75
  12. package/components/_helpers/services-link.js +23 -39
  13. package/components/_helpers/sidebar.js +91 -102
  14. package/components/_helpers/tab-link.js +8 -12
  15. package/components/_helpers/table.js +1 -1
  16. package/components/_helpers/theme.js +61 -51
  17. package/components/_helpers/title.js +59 -84
  18. package/components/alert/alert.d.ts +7 -24
  19. package/components/alert/alert.js +111 -179
  20. package/components/alert/container.d.ts +0 -5
  21. package/components/alert/container.js +32 -44
  22. package/components/alert-service/alert-service.js +104 -162
  23. package/components/analytics/analytics.js +12 -20
  24. package/components/analytics/analytics__custom-plugin.js +52 -68
  25. package/components/auth/auth.js +2 -31
  26. package/components/auth/auth__core.d.ts +1 -1
  27. package/components/auth/auth__core.js +754 -1440
  28. package/components/auth/background-flow.js +84 -121
  29. package/components/auth/down-notification.js +32 -79
  30. package/components/auth/iframe-flow.js +71 -125
  31. package/components/auth/request-builder.js +46 -77
  32. package/components/auth/response-parser.js +84 -112
  33. package/components/auth/storage.js +162 -324
  34. package/components/auth/token-validator.js +132 -227
  35. package/components/auth/window-flow.js +84 -121
  36. package/components/auth-dialog/auth-dialog.d.ts +0 -18
  37. package/components/auth-dialog/auth-dialog.js +107 -176
  38. package/components/auth-dialog-service/auth-dialog-service.js +12 -33
  39. package/components/avatar/avatar-example-datauri.js +1 -1
  40. package/components/avatar/avatar.d.ts +0 -13
  41. package/components/avatar/avatar.js +94 -136
  42. package/components/avatar/fallback-avatar.d.ts +1 -10
  43. package/components/avatar/fallback-avatar.js +20 -40
  44. package/components/badge/badge.d.ts +0 -10
  45. package/components/badge/badge.js +32 -48
  46. package/components/breadcrumbs/breadcrumbs.js +13 -17
  47. package/components/button/button.d.ts +0 -21
  48. package/components/button/button.js +68 -104
  49. package/components/button/button__classes.d.ts +1 -1
  50. package/components/button-group/button-group.d.ts +0 -5
  51. package/components/button-group/button-group.js +27 -41
  52. package/components/button-group/caption.d.ts +0 -4
  53. package/components/button-group/caption.js +0 -1
  54. package/components/button-set/button-set.d.ts +0 -6
  55. package/components/button-set/button-set.js +19 -33
  56. package/components/button-toolbar/button-toolbar.d.ts +0 -6
  57. package/components/button-toolbar/button-toolbar.js +17 -31
  58. package/components/caret/caret.js +184 -211
  59. package/components/checkbox/checkbox.d.ts +0 -19
  60. package/components/checkbox/checkbox.js +69 -104
  61. package/components/clipboard/clipboard-fallback.js +7 -7
  62. package/components/clipboard/clipboard.js +36 -129
  63. package/components/code/code.d.ts +0 -12
  64. package/components/code/code.js +83 -163
  65. package/components/collapse/collapse-content.js +42 -60
  66. package/components/collapse/collapse-context.js +2 -2
  67. package/components/collapse/collapse-control.js +12 -12
  68. package/components/collapse/collapse.js +12 -17
  69. package/components/collapse/consts.js +4 -4
  70. package/components/collapse/utils.js +1 -3
  71. package/components/confirm/confirm.d.ts +0 -14
  72. package/components/confirm/confirm.js +68 -112
  73. package/components/confirm-service/confirm-service.js +25 -47
  74. package/components/content-layout/content-layout.d.ts +0 -7
  75. package/components/content-layout/content-layout.js +41 -63
  76. package/components/content-layout/sidebar.d.ts +0 -9
  77. package/components/content-layout/sidebar.js +1 -2
  78. package/components/contenteditable/contenteditable.d.ts +1 -22
  79. package/components/contenteditable/contenteditable.js +37 -60
  80. package/components/control-help/control-help.js +5 -3
  81. package/components/control-label/control-label.js +9 -14
  82. package/components/data-list/data-list.d.ts +4 -6
  83. package/components/data-list/data-list.js +115 -179
  84. package/components/data-list/data-list.mock.js +3 -6
  85. package/components/data-list/item.js +119 -165
  86. package/components/data-list/selection.js +77 -135
  87. package/components/data-list/title.d.ts +2 -2
  88. package/components/data-list/title.js +2 -12
  89. package/components/date-picker/consts.d.ts +0 -2
  90. package/components/date-picker/consts.js +16 -24
  91. package/components/date-picker/date-input.d.ts +0 -20
  92. package/components/date-picker/date-input.js +100 -148
  93. package/components/date-picker/date-picker.d.ts +0 -29
  94. package/components/date-picker/date-picker.js +143 -224
  95. package/components/date-picker/date-popup.d.ts +0 -22
  96. package/components/date-picker/date-popup.js +282 -352
  97. package/components/date-picker/day.d.ts +0 -14
  98. package/components/date-picker/day.js +72 -109
  99. package/components/date-picker/month-names.d.ts +1 -11
  100. package/components/date-picker/month-names.js +42 -72
  101. package/components/date-picker/month-slider.d.ts +0 -9
  102. package/components/date-picker/month-slider.js +43 -71
  103. package/components/date-picker/month.d.ts +1 -9
  104. package/components/date-picker/month.js +18 -30
  105. package/components/date-picker/months.d.ts +1 -9
  106. package/components/date-picker/months.js +45 -55
  107. package/components/date-picker/weekdays.d.ts +2 -8
  108. package/components/date-picker/weekdays.js +12 -25
  109. package/components/date-picker/years.d.ts +0 -6
  110. package/components/date-picker/years.js +77 -104
  111. package/components/dialog/dialog.d.ts +0 -20
  112. package/components/dialog/dialog.js +153 -210
  113. package/components/dialog/dialog__body-scroll-preventer.js +0 -3
  114. package/components/dropdown/anchor.d.ts +1 -8
  115. package/components/dropdown/anchor.js +0 -7
  116. package/components/dropdown/dropdown.d.ts +4 -22
  117. package/components/dropdown/dropdown.js +134 -176
  118. package/components/dropdown-menu/dropdown-menu.js +51 -103
  119. package/components/editable-heading/editable-heading.js +69 -118
  120. package/components/error-bubble/error-bubble.d.ts +0 -6
  121. package/components/error-bubble/error-bubble.js +30 -60
  122. package/components/error-message/error-message.d.ts +0 -10
  123. package/components/error-message/error-message.js +34 -59
  124. package/components/footer/footer.js +28 -44
  125. package/components/form/form.js +1 -1
  126. package/components/global/compose.js +1 -8
  127. package/components/global/composeRefs.d.ts +0 -3
  128. package/components/global/composeRefs.js +8 -15
  129. package/components/global/controls-height.js +2 -2
  130. package/components/global/create-stateful-context.d.ts +0 -4
  131. package/components/global/create-stateful-context.js +14 -17
  132. package/components/global/data-tests.js +7 -12
  133. package/components/global/dom.js +49 -82
  134. package/components/global/focus-sensor-hoc.js +95 -122
  135. package/components/global/fuzzy-highlight.js +23 -34
  136. package/components/global/get-event-key.js +8 -8
  137. package/components/global/get-uid.js +3 -7
  138. package/components/global/inject-styles.js +7 -14
  139. package/components/global/listeners.js +28 -47
  140. package/components/global/memoize.js +6 -10
  141. package/components/global/normalize-indent.js +19 -46
  142. package/components/global/promise-with-timeout.js +6 -8
  143. package/components/global/react-dom-renderer.d.ts +0 -5
  144. package/components/global/react-dom-renderer.js +29 -45
  145. package/components/global/rerender-hoc.d.ts +2 -2
  146. package/components/global/rerender-hoc.js +16 -32
  147. package/components/global/schedule-raf.js +4 -4
  148. package/components/global/sniffer.js +1 -1
  149. package/components/global/theme.d.ts +8 -2
  150. package/components/global/theme.js +2 -20
  151. package/components/global/trivial-template-tag.js +4 -9
  152. package/components/global/typescript-utils.js +2 -6
  153. package/components/global/url.js +20 -23
  154. package/components/global/use-event-callback.js +7 -4
  155. package/components/grid/col.d.ts +0 -14
  156. package/components/grid/col.js +27 -53
  157. package/components/grid/grid.d.ts +0 -5
  158. package/components/grid/grid.js +20 -32
  159. package/components/grid/row.d.ts +0 -18
  160. package/components/grid/row.js +23 -47
  161. package/components/group/group.d.ts +0 -5
  162. package/components/group/group.js +18 -27
  163. package/components/header/header-icon.d.ts +10 -0
  164. package/components/header/header-icon.js +39 -0
  165. package/components/header/header.d.ts +3 -7
  166. package/components/header/header.js +32 -74
  167. package/components/header/links.d.ts +2 -0
  168. package/components/header/links.js +20 -0
  169. package/components/header/logo.d.ts +0 -4
  170. package/components/header/logo.js +15 -30
  171. package/components/header/profile.d.ts +1 -39
  172. package/components/header/profile.js +126 -190
  173. package/components/header/services-link.d.ts +0 -10
  174. package/components/header/services-link.js +1 -4
  175. package/components/header/services.d.ts +0 -14
  176. package/components/header/services.js +67 -112
  177. package/components/header/smart-profile.d.ts +0 -9
  178. package/components/header/smart-profile.js +116 -205
  179. package/components/header/smart-services.d.ts +0 -4
  180. package/components/header/smart-services.js +73 -142
  181. package/components/header/tray.d.ts +0 -5
  182. package/components/header/tray.js +21 -35
  183. package/components/heading/heading.d.ts +1 -4
  184. package/components/heading/heading.js +25 -42
  185. package/components/http/http.js +162 -319
  186. package/components/http/http.mock.js +50 -98
  187. package/components/hub-source/hub-source.js +77 -182
  188. package/components/hub-source/hub-source__user.js +9 -37
  189. package/components/hub-source/hub-source__users-groups.js +34 -60
  190. package/components/i18n/i18n-context.js +7 -8
  191. package/components/i18n/i18n.js +3 -6
  192. package/components/icon/icon.d.ts +0 -11
  193. package/components/icon/icon.js +60 -85
  194. package/components/icon/icon__svg.d.ts +0 -8
  195. package/components/icon/icon__svg.js +0 -6
  196. package/components/icon/index.js +0 -6
  197. package/components/input/input-legacy.js +1 -1
  198. package/components/input/input.js +2 -14
  199. package/components/input-size/input-size.js +1 -1
  200. package/components/island/adaptive-island-hoc.d.ts +4 -5
  201. package/components/island/adaptive-island-hoc.js +30 -39
  202. package/components/island/content.d.ts +0 -10
  203. package/components/island/content.js +99 -119
  204. package/components/island/header.js +55 -73
  205. package/components/island/island.d.ts +4 -13
  206. package/components/island/island.js +25 -41
  207. package/components/island-legacy/content-legacy.d.ts +0 -5
  208. package/components/island-legacy/content-legacy.js +16 -27
  209. package/components/island-legacy/header-legacy.d.ts +0 -5
  210. package/components/island-legacy/header-legacy.js +19 -30
  211. package/components/island-legacy/island-legacy.d.ts +0 -5
  212. package/components/island-legacy/island-legacy.js +16 -27
  213. package/components/link/clickableLink.d.ts +0 -9
  214. package/components/link/clickableLink.js +33 -51
  215. package/components/link/link.d.ts +8 -33
  216. package/components/link/link.js +47 -68
  217. package/components/list/consts.js +2 -2
  218. package/components/list/list.d.ts +0 -32
  219. package/components/list/list.js +399 -516
  220. package/components/list/list__custom.js +51 -78
  221. package/components/list/list__hint.d.ts +0 -4
  222. package/components/list/list__hint.js +8 -21
  223. package/components/list/list__item.js +147 -211
  224. package/components/list/list__link.js +39 -59
  225. package/components/list/list__separator.js +15 -30
  226. package/components/list/list__title.js +25 -41
  227. package/components/list/list__users-groups-source.js +55 -123
  228. package/components/loader/loader.d.ts +0 -10
  229. package/components/loader/loader.js +38 -70
  230. package/components/loader/loader__core.js +123 -184
  231. package/components/loader-inline/loader-inline.d.ts +0 -6
  232. package/components/loader-inline/loader-inline.js +24 -38
  233. package/components/loader-screen/loader-screen.d.ts +0 -6
  234. package/components/loader-screen/loader-screen.js +24 -46
  235. package/components/login-dialog/login-dialog.d.ts +0 -11
  236. package/components/login-dialog/login-dialog.js +94 -145
  237. package/components/login-dialog/service.js +11 -33
  238. package/components/markdown/markdown.js +16 -29
  239. package/components/message/message.js +171 -218
  240. package/components/old-browsers-message/old-browsers-message.js +11 -14
  241. package/components/old-browsers-message/old-browsers-message__stop.js +1 -4
  242. package/components/old-browsers-message/white-list.js +8 -13
  243. package/components/pager/pager.d.ts +1 -0
  244. package/components/pager/pager.js +211 -275
  245. package/components/panel/panel.d.ts +0 -5
  246. package/components/panel/panel.js +16 -27
  247. package/components/permissions/permissions.js +118 -161
  248. package/components/permissions/permissions__cache.js +191 -218
  249. package/components/popup/popup.consts.js +1 -1
  250. package/components/popup/popup.js +237 -329
  251. package/components/popup/popup.target.js +9 -12
  252. package/components/popup/position.js +94 -101
  253. package/components/popup-menu/popup-menu.js +31 -76
  254. package/components/progress-bar/progress-bar.d.ts +19 -33
  255. package/components/progress-bar/progress-bar.js +55 -99
  256. package/components/query-assist/query-assist.d.ts +63 -93
  257. package/components/query-assist/query-assist.js +585 -748
  258. package/components/query-assist/query-assist__suggestions.js +2 -28
  259. package/components/radio/radio.d.ts +0 -8
  260. package/components/radio/radio.js +15 -35
  261. package/components/radio/radio__item.d.ts +0 -9
  262. package/components/radio/radio__item.js +52 -72
  263. package/components/scrollable-section/scrollable-section.d.ts +2 -0
  264. package/components/scrollable-section/scrollable-section.js +53 -0
  265. package/components/select/select.d.ts +3 -0
  266. package/components/select/select.js +714 -863
  267. package/components/select/select__filter.js +2 -29
  268. package/components/select/select__popup.js +317 -465
  269. package/components/shortcuts/core.js +147 -195
  270. package/components/shortcuts/shortcut-title.js +6 -10
  271. package/components/shortcuts/shortcuts-hoc.d.ts +4 -9
  272. package/components/shortcuts/shortcuts-hoc.js +23 -46
  273. package/components/shortcuts/shortcuts.d.ts +0 -8
  274. package/components/shortcuts/shortcuts.js +41 -72
  275. package/components/slider/slider.js +93 -113
  276. package/components/slider/slider.utils.js +16 -23
  277. package/components/storage/storage.d.ts +2 -3
  278. package/components/storage/storage.js +2 -46
  279. package/components/storage/storage__local.js +89 -148
  280. package/components/style.css +1 -1
  281. package/components/tab-trap/tab-trap.js +35 -61
  282. package/components/table/cell.d.ts +0 -6
  283. package/components/table/cell.js +11 -27
  284. package/components/table/disable-hover-hoc.d.ts +4 -5
  285. package/components/table/disable-hover-hoc.js +27 -42
  286. package/components/table/header-cell.d.ts +0 -10
  287. package/components/table/header-cell.js +59 -85
  288. package/components/table/header.d.ts +1 -23
  289. package/components/table/header.js +89 -126
  290. package/components/table/multitable.d.ts +0 -4
  291. package/components/table/multitable.js +83 -93
  292. package/components/table/row-with-focus-sensor.d.ts +2 -2
  293. package/components/table/row-with-focus-sensor.js +26 -60
  294. package/components/table/row.js +170 -235
  295. package/components/table/selection-adapter.js +2 -2
  296. package/components/table/selection-shortcuts-hoc.js +102 -126
  297. package/components/table/selection.js +150 -217
  298. package/components/table/simple-table.d.ts +17 -0
  299. package/components/table/simple-table.js +83 -0
  300. package/components/table/smart-table.d.ts +0 -46
  301. package/components/table/smart-table.js +41 -83
  302. package/components/table/table.d.ts +9 -6
  303. package/components/table/table.js +270 -372
  304. package/components/tabs/collapsible-more.d.ts +1 -9
  305. package/components/tabs/collapsible-more.js +47 -97
  306. package/components/tabs/collapsible-tab.js +32 -44
  307. package/components/tabs/collapsible-tabs.d.ts +2 -29
  308. package/components/tabs/collapsible-tabs.js +89 -161
  309. package/components/tabs/custom-item.d.ts +1 -7
  310. package/components/tabs/custom-item.js +4 -7
  311. package/components/tabs/dumb-tabs.d.ts +0 -11
  312. package/components/tabs/dumb-tabs.js +60 -104
  313. package/components/tabs/smart-tabs.d.ts +0 -6
  314. package/components/tabs/smart-tabs.js +29 -68
  315. package/components/tabs/tab-link.d.ts +0 -8
  316. package/components/tabs/tab-link.js +1 -4
  317. package/components/tabs/tab.d.ts +0 -8
  318. package/components/tabs/tab.js +14 -32
  319. package/components/tabs/tabs.js +1 -28
  320. package/components/tag/tag.d.ts +0 -19
  321. package/components/tag/tag.js +120 -179
  322. package/components/tags-input/tags-input.d.ts +7 -33
  323. package/components/tags-input/tags-input.js +224 -339
  324. package/components/tags-list/tags-list.d.ts +0 -13
  325. package/components/tags-list/tags-list.js +45 -74
  326. package/components/text/text.d.ts +0 -7
  327. package/components/text/text.js +27 -43
  328. package/components/toggle/toggle.d.ts +0 -15
  329. package/components/toggle/toggle.js +53 -78
  330. package/components/tooltip/tooltip.d.ts +4 -10
  331. package/components/tooltip/tooltip.js +105 -137
  332. package/components/user-agreement/service.d.ts +2 -1
  333. package/components/user-agreement/service.js +260 -405
  334. package/components/user-agreement/user-agreement.d.ts +0 -18
  335. package/components/user-agreement/user-agreement.js +92 -138
  336. package/components/user-card/card.d.ts +0 -35
  337. package/components/user-card/card.js +2 -27
  338. package/components/user-card/smart-user-card-tooltip.d.ts +0 -5
  339. package/components/user-card/smart-user-card-tooltip.js +52 -108
  340. package/components/user-card/tooltip.d.ts +0 -9
  341. package/components/user-card/tooltip.js +35 -74
  342. package/components/user-card/user-card.js +1 -26
  343. package/package.json +5 -7
  344. package/components/global/prop-types.d.ts +0 -4
  345. package/components/global/prop-types.js +0 -9
  346. package/components/global/react-render-adapter.d.ts +0 -1
  347. package/components/global/react-render-adapter.js +0 -6
  348. package/components/header/tray-icon.d.ts +0 -32
  349. package/components/header/tray-icon.js +0 -56
  350. package/components/storage/storage__fallback.d.ts +0 -79
  351. package/components/storage/storage__fallback.js +0 -253
@@ -1,24 +1,14 @@
1
- import { _ as _defineProperty, a as _inherits, b as _createClass, d as _objectSpread2, e as _classCallCheck, f as _callSuper, c as _objectWithoutProperties, n as _toPropertyKey } from '../_helpers/_rollupPluginBabelHelpers.js';
2
- import 'core-js/modules/es.array.concat.js';
3
- import 'core-js/modules/es.array.filter.js';
4
- import 'core-js/modules/es.array.find.js';
5
- import 'core-js/modules/es.array.index-of.js';
6
- import 'core-js/modules/es.array.map.js';
1
+ import { _ as _defineProperty, b as _objectSpread2, a as _objectWithoutProperties, c as _toPropertyKey } from '../_helpers/_rollupPluginBabelHelpers.js';
7
2
  import 'core-js/modules/es.array.reduce.js';
8
- import 'core-js/modules/es.array.slice.js';
9
- import 'core-js/modules/es.object.assign.js';
10
- import 'core-js/modules/es.object.to-string.js';
11
- import 'core-js/modules/es.object.values.js';
12
3
  import 'core-js/modules/es.regexp.exec.js';
13
4
  import 'core-js/modules/es.string.replace.js';
14
5
  import 'core-js/modules/es.string.trim.js';
15
- import 'core-js/modules/web.dom-collections.for-each.js';
16
- import { Fragment, Component } from 'react';
6
+ import 'core-js/modules/web.dom-collections.iterator.js';
7
+ import { Component, Fragment } from 'react';
17
8
  import classNames from 'classnames';
18
- import PropTypes from 'prop-types';
19
9
  import chevronDownIcon from '@jetbrains/icons/chevron-down';
20
10
  import closeIcon from '@jetbrains/icons/close-12px';
21
- import deepEqual from 'deep-equal';
11
+ import { dequal } from 'dequal';
22
12
  import '../dropdown/dropdown.js';
23
13
  import Avatar, { Size as Size$1 } from '../avatar/avatar.js';
24
14
  import Popup from '../popup/popup.js';
@@ -34,49 +24,32 @@ import fuzzyHighlight from '../global/fuzzy-highlight.js';
34
24
  import memoize from '../global/memoize.js';
35
25
  import { I18nContext } from '../i18n/i18n-context.js';
36
26
  import { createComposedRef } from '../global/composeRefs.js';
37
- import { refObject } from '../global/prop-types.js';
38
27
  import { isArray } from '../global/typescript-utils.js';
39
- import { ControlsHeightContext, ControlsHeight } from '../global/controls-height.js';
28
+ import { ControlsHeight, ControlsHeightContext } from '../global/controls-height.js';
40
29
  import SelectPopup from './select__popup.js';
41
30
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
42
31
  import { A as Anchor } from '../_helpers/anchor.js';
43
- import 'core-js/modules/es.object.entries.js';
44
32
  import '@jetbrains/icons/chevron-10px';
45
33
  import '../icon/icon.js';
46
34
  import 'util-deprecate';
47
35
  import '../icon/icon__constants.js';
48
36
  import '../_helpers/icon__svg.js';
49
- import 'core-js/modules/es.string.starts-with.js';
50
- import 'core-js/modules/es.array.iterator.js';
51
- import 'core-js/modules/es.map.js';
52
- import 'core-js/modules/es.weak-map.js';
53
- import 'core-js/modules/web.dom-collections.iterator.js';
54
37
  import '../link/clickableLink.js';
55
38
  import '../_helpers/button__classes.js';
56
39
  import '../global/url.js';
57
- import 'core-js/modules/es.string.match.js';
58
40
  import '../global/dom.js';
59
- import 'core-js/modules/es.set.js';
60
- import 'core-js/modules/es.string.split.js';
61
41
  import '../avatar/fallback-avatar.js';
62
- import 'core-js/modules/es.array.from.js';
63
- import 'core-js/modules/es.regexp.to-string.js';
64
42
  import 'react-dom';
65
43
  import '../global/schedule-raf.js';
66
44
  import '../tab-trap/tab-trap.js';
67
45
  import '../popup/position.js';
68
- import 'core-js/modules/es.array.includes.js';
69
46
  import 'core-js/modules/es.array.sort.js';
70
- import 'core-js/modules/es.string.includes.js';
71
47
  import '../popup/popup.consts.js';
72
48
  import '../popup/popup.target.js';
73
49
  import '../shortcuts/core.js';
74
- import 'core-js/modules/es.array.find-index.js';
75
- import 'core-js/modules/es.array.splice.js';
76
50
  import 'combokeys';
77
51
  import '../global/sniffer.js';
78
52
  import 'sniffr';
79
- import 'core-js/modules/es.symbol.js';
80
53
  import 'core-js/modules/es.symbol.description.js';
81
54
  import 'react-virtualized/dist/es/List';
82
55
  import 'react-virtualized/dist/es/AutoSizer';
@@ -109,7 +82,7 @@ import '../caret/caret.js';
109
82
  import '../text/text.js';
110
83
  import '../_helpers/select__filter.js';
111
84
 
112
- var modules_9d0de074 = {"button-shadow":"i__const_button_shadow_0","select":"select_rui_e9c2","value":"value_rui_e9c2 ellipsis_rui_f295 font_rui_f295","icons":"icons_rui_e9c2","light":"light_rui_2ac4","toolbar":"toolbar_rui_e9c2","button":"button_rui_e9c2","buttonSpaced":"buttonSpaced_rui_e9c2","inputMode":"inputMode_rui_e9c2","selectedIcon":"selectedIcon_rui_e9c2 resetButton_rui_f295","clearIcon":"clearIcon_rui_e9c2","sizeS":"sizeS_rui_e9c2","sizeM":"sizeM_rui_e9c2","sizeL":"sizeL_rui_e9c2","sizeFULL":"sizeFULL_rui_e9c2","sizeAUTO":"sizeAUTO_rui_e9c2","buttonMode":"buttonMode_rui_e9c2","open":"open_rui_e9c2","buttonContainer":"buttonContainer_rui_e9c2","buttonValue":"buttonValue_rui_e9c2 ellipsis_rui_f295","buttonValueOpen":"buttonValueOpen_rui_e9c2","buttonValueEmpty":"buttonValueEmpty_rui_e9c2","heightS":"heightS_rui_e9c2","label":"label_rui_e9c2","disabled":"disabled_rui_e9c2","avatar":"avatar_rui_e9c2","popup":"popup_rui_e9c2","chevron":"chevron_rui_e9c2","chevronIcon":"chevronIcon_rui_e9c2"};
85
+ var modules_9d0de074 = {"button-shadow":"i__const_button_shadow_0","select":"select_rui_e9c2","value":"value_rui_e9c2 ellipsis_rui_f295 font_rui_f295","icons":"icons_rui_e9c2","light":"light_rui_2ac4","toolbar":"toolbar_rui_e9c2","button":"button_rui_e9c2","buttonSpaced":"buttonSpaced_rui_e9c2","inputMode":"inputMode_rui_e9c2","heightS":"heightS_rui_e9c2","heightL":"heightL_rui_e9c2","selectedIcon":"selectedIcon_rui_e9c2 resetButton_rui_f295","clearIcon":"clearIcon_rui_e9c2","sizeS":"sizeS_rui_e9c2","sizeM":"sizeM_rui_e9c2","sizeL":"sizeL_rui_e9c2","sizeFULL":"sizeFULL_rui_e9c2","sizeAUTO":"sizeAUTO_rui_e9c2","buttonMode":"buttonMode_rui_e9c2","open":"open_rui_e9c2","buttonContainer":"buttonContainer_rui_e9c2","buttonValue":"buttonValue_rui_e9c2 ellipsis_rui_f295","buttonValueOpen":"buttonValueOpen_rui_e9c2","buttonValueEmpty":"buttonValueEmpty_rui_e9c2","label":"label_rui_e9c2","disabled":"disabled_rui_e9c2","avatar":"avatar_rui_e9c2","popup":"popup_rui_e9c2","chevron":"chevron_rui_e9c2","chevronIcon":"chevronIcon_rui_e9c2"};
113
86
 
114
87
  function noop() {}
115
88
  /**
@@ -123,16 +96,12 @@ var Type;
123
96
  Type["INLINE"] = "INLINE";
124
97
  Type["INPUT_WITHOUT_CONTROLS"] = "INPUT_WITHOUT_CONTROLS";
125
98
  })(Type || (Type = {}));
126
- var ICONS_OFFSET = 5;
127
- var ICON_WIDTH = 20;
128
- var getStyle = memoize(function (iconsLength) {
129
- return {
130
- paddingRight: ICONS_OFFSET + iconsLength * ICON_WIDTH
131
- };
132
- });
133
- var _isInputMode = function isInputMode(type) {
134
- return type === Type.INPUT || type === Type.INPUT_WITHOUT_CONTROLS;
135
- };
99
+ const ICONS_OFFSET = 5;
100
+ const ICON_WIDTH = 20;
101
+ const getStyle = memoize(iconsLength => ({
102
+ paddingRight: ICONS_OFFSET + iconsLength * ICON_WIDTH
103
+ }));
104
+ const isInputMode = type => type === Type.INPUT || type === Type.INPUT_WITHOUT_CONTROLS;
136
105
  function getLowerCaseLabel(item) {
137
106
  if (List.isItemType(List.ListProps.Type.SEPARATOR, item) || List.isItemType(List.ListProps.Type.HINT, item) || typeof item.label !== 'string') {
138
107
  return null;
@@ -140,49 +109,41 @@ function getLowerCaseLabel(item) {
140
109
  return item.label.toLowerCase();
141
110
  }
142
111
  function doesLabelMatch(itemToCheck, fn) {
143
- var lowerCaseLabel = getLowerCaseLabel(itemToCheck);
112
+ const lowerCaseLabel = getLowerCaseLabel(itemToCheck);
144
113
  if (lowerCaseLabel == null) {
145
114
  return true;
146
115
  }
147
116
  return fn(lowerCaseLabel);
148
117
  }
149
- function _getFilterFn(filter) {
118
+ function getFilterFn(filter) {
150
119
  if (typeof filter === 'object') {
151
120
  if (filter.fn) {
152
121
  return filter.fn;
153
122
  }
154
123
  if (filter.fuzzy) {
155
- return function (itemToCheck, checkString) {
156
- return doesLabelMatch(itemToCheck, function (lowerCaseLabel) {
157
- return fuzzyHighlight(checkString, lowerCaseLabel).matched;
158
- });
159
- };
124
+ return (itemToCheck, checkString) => doesLabelMatch(itemToCheck, lowerCaseLabel => fuzzyHighlight(checkString, lowerCaseLabel).matched);
160
125
  }
161
126
  }
162
- return function (itemToCheck, checkString) {
163
- return doesLabelMatch(itemToCheck, function (lowerCaseLabel) {
164
- return lowerCaseLabel.indexOf(checkString) >= 0;
165
- });
166
- };
127
+ return (itemToCheck, checkString) => doesLabelMatch(itemToCheck, lowerCaseLabel => lowerCaseLabel.indexOf(checkString) >= 0);
167
128
  }
168
129
  function buildMultipleMap(selected) {
169
- return selected.reduce(function (acc, item) {
130
+ return selected.reduce((acc, item) => {
170
131
  acc[item.key] = true;
171
132
  return acc;
172
133
  }, {});
173
134
  }
174
- function _getListItems(props, state, rawFilterString) {
175
- var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : props.data;
176
- var filterString = rawFilterString.trim();
177
- if (_isInputMode(props.type) && !props.allowAny && state.selected && !Array.isArray(state.selected) && filterString === state.selected.label) {
135
+ function getListItems(props, state, rawFilterString) {
136
+ let data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : props.data;
137
+ let filterString = rawFilterString.trim();
138
+ if (isInputMode(props.type) && !props.allowAny && state.selected && !Array.isArray(state.selected) && filterString === state.selected.label) {
178
139
  filterString = ''; // ignore multiple if it is exactly the selected item
179
140
  }
180
- var lowerCaseString = filterString.toLowerCase();
181
- var filteredData = [];
182
- var exactMatch = false;
183
- var check = _getFilterFn(props.filter);
184
- var _loop = function _loop() {
185
- var item = _objectSpread2({}, data[i]);
141
+ const lowerCaseString = filterString.toLowerCase();
142
+ const filteredData = [];
143
+ let exactMatch = false;
144
+ const check = getFilterFn(props.filter);
145
+ for (let i = 0; i < data.length; i++) {
146
+ const item = _objectSpread2({}, data[i]);
186
147
  if (check(item, lowerCaseString, data)) {
187
148
  var _state$multipleMap2;
188
149
  exactMatch = item.label === filterString;
@@ -191,25 +152,22 @@ function _getListItems(props, state, rawFilterString) {
191
152
  item.checkbox = !!((_state$multipleMap = state.multipleMap) !== null && _state$multipleMap !== void 0 && _state$multipleMap[item.key]);
192
153
  }
193
154
  if (props.multiple && typeof props.multiple === 'object' && props.multiple.limit && Array.isArray(state.selected)) {
194
- item.disabled = props.multiple.limit === state.selected.length && !state.selected.find(function (selectedItem) {
195
- return selectedItem.key === item.key;
196
- });
155
+ item.disabled = props.multiple.limit === state.selected.length && !state.selected.find(selectedItem => selectedItem.key === item.key);
197
156
  }
198
157
  // Ignore item if it's multiple and is already selected
199
158
  if (!(props.multiple && typeof props.multiple === 'object' && props.multiple.removeSelectedItems && (_state$multipleMap2 = state.multipleMap) !== null && _state$multipleMap2 !== void 0 && _state$multipleMap2[item.key])) {
200
159
  filteredData.push(item);
201
160
  }
202
161
  }
203
- };
204
- for (var i = 0; i < data.length; i++) {
205
- _loop();
206
162
  }
207
- var addButton = null;
208
- var add = props.add;
163
+ let addButton = null;
164
+ const {
165
+ add
166
+ } = props;
209
167
  if (add && filterString && !exactMatch || add && add.alwaysVisible) {
210
168
  if (!(add.regexp && !add.regexp.test(filterString)) && !(add.minlength && filterString.length < +add.minlength) || add.alwaysVisible) {
211
169
  var _add$delayed;
212
- var label;
170
+ let label;
213
171
  if (add.label) {
214
172
  label = typeof add.label === 'function' ? add.label(filterString) : add.label;
215
173
  } else {
@@ -228,12 +186,12 @@ function _getListItems(props, state, rawFilterString) {
228
186
  };
229
187
  }
230
188
  function getSelectedIndex(selected, data) {
231
- var firstSelected = Array.isArray(selected) ? selected[0] : selected;
189
+ const firstSelected = Array.isArray(selected) ? selected[0] : selected;
232
190
  if (firstSelected == null) {
233
191
  return null;
234
192
  }
235
- for (var i = 0; i < data.length; i++) {
236
- var item = data[i];
193
+ for (let i = 0; i < data.length; i++) {
194
+ const item = data[i];
237
195
  if (item.key === undefined) {
238
196
  continue;
239
197
  }
@@ -243,28 +201,26 @@ function getSelectedIndex(selected, data) {
243
201
  }
244
202
  return null;
245
203
  }
246
- var getItemLabel = function getItemLabel(_ref) {
247
- var selectedLabel = _ref.selectedLabel,
248
- label = _ref.label;
204
+ const getItemLabel = _ref => {
205
+ let {
206
+ selectedLabel,
207
+ label
208
+ } = _ref;
249
209
  if (selectedLabel != null) {
250
210
  return selectedLabel;
251
211
  }
252
212
  return typeof label === 'string' ? label : '';
253
213
  };
254
- var _getValueForFilter = function getValueForFilter(selected, type, filterValue) {
255
- return selected && !isArray(selected) && _isInputMode(type) ? getItemLabel(selected) : filterValue;
256
- };
214
+ const getValueForFilter = (selected, type, filterValue) => selected && !isArray(selected) && isInputMode(type) ? getItemLabel(selected) : filterValue;
257
215
  function isSameSelected(prevSelected, selected) {
258
216
  if (!prevSelected || !selected || prevSelected.length !== selected.length) {
259
217
  return false;
260
218
  }
261
- var keysMap = selected.reduce(function (result, item) {
219
+ const keysMap = selected.reduce((result, item) => {
262
220
  result[item.key] = true;
263
221
  return result;
264
222
  }, {});
265
- return prevSelected.every(function (it) {
266
- return keysMap[it.key];
267
- });
223
+ return prevSelected.every(it => keysMap[it.key]);
268
224
  }
269
225
  /**
270
226
  * @name Select
@@ -274,216 +230,218 @@ function isSameSelected(prevSelected, selected) {
274
230
  /**
275
231
  * Displays a select.
276
232
  */
277
- var Select = /*#__PURE__*/function (_Component) {
278
- function Select() {
233
+ class Select extends Component {
234
+ constructor() {
279
235
  var _this;
280
- _classCallCheck(this, Select);
281
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
282
- args[_key] = arguments[_key];
283
- }
284
- _this = _callSuper(this, Select, [].concat(args));
285
- _defineProperty(_this, "state", {
236
+ super(...arguments);
237
+ _this = this;
238
+ _defineProperty(this, "state", {
286
239
  data: [],
287
240
  shownData: [],
288
- selected: _this.props.multiple ? [] : null,
241
+ selected: this.props.multiple ? [] : null,
289
242
  selectedIndex: null,
290
- filterValue: _this.props.filter && typeof _this.props.filter === 'object' && _this.props.filter.value || '',
243
+ filterValue: this.props.filter && typeof this.props.filter === 'object' && this.props.filter.value || '',
291
244
  shortcutsEnabled: false,
292
245
  popupShortcuts: false,
293
- showPopup: _this.props.showPopup,
294
- prevData: _this.props.data,
246
+ showPopup: this.props.showPopup,
247
+ prevData: this.props.data,
295
248
  prevSelected: null,
296
- prevMultiple: _this.props.multiple,
249
+ prevMultiple: this.props.multiple,
297
250
  multipleMap: {},
298
251
  addButton: null
299
252
  });
300
- _defineProperty(_this, "id", getUID('select-'));
301
- _defineProperty(_this, "shortcutsScope", _this.id);
302
- _defineProperty(_this, "listId", "".concat(_this.id, ":list"));
303
- _defineProperty(_this, "_focusHandler", function (e) {
304
- _this.props.onFocus(e);
305
- _this.setState({
253
+ _defineProperty(this, "id", getUID('select-'));
254
+ _defineProperty(this, "shortcutsScope", this.id);
255
+ _defineProperty(this, "listId", "".concat(this.id, ":list"));
256
+ _defineProperty(this, "_focusHandler", e => {
257
+ this.props.onFocus(e);
258
+ this.setState({
306
259
  shortcutsEnabled: true,
307
260
  focused: true
308
261
  });
309
262
  });
310
- _defineProperty(_this, "_blurHandler", function () {
263
+ _defineProperty(this, "isClickingSelect", false);
264
+ _defineProperty(this, "mouseDownHandler", () => {
265
+ this.isClickingSelect = true;
266
+ });
267
+ _defineProperty(this, "mouseUpHandler", () => {
268
+ this.isClickingSelect = false;
269
+ });
270
+ _defineProperty(this, "_blurHandler", () => {
311
271
  var _this$_popup;
312
- _this.props.onBlur();
313
- if (_this._popup && _this._popup.isVisible() && !_this._popup.isClickingPopup) {
314
- window.setTimeout(function () {
315
- _this.setState({
272
+ this.props.onBlur();
273
+ if (this._popup && this._popup.isVisible() && !this._popup.isClickingPopup && !this.isClickingSelect) {
274
+ window.setTimeout(() => {
275
+ this.setState({
316
276
  showPopup: false
317
277
  });
318
278
  });
319
279
  }
320
- if (!((_this$_popup = _this._popup) !== null && _this$_popup !== void 0 && _this$_popup.isClickingPopup)) {
321
- _this.setState({
280
+ if (!((_this$_popup = this._popup) !== null && _this$_popup !== void 0 && _this$_popup.isClickingPopup)) {
281
+ this.setState({
322
282
  shortcutsEnabled: false,
323
283
  focused: false
324
284
  });
325
285
  }
326
286
  });
327
- _defineProperty(_this, "node", void 0);
328
- _defineProperty(_this, "nodeRef", function (el) {
329
- _this.node = el;
287
+ _defineProperty(this, "node", void 0);
288
+ _defineProperty(this, "nodeRef", el => {
289
+ this.node = el;
330
290
  });
331
- _defineProperty(_this, "_popup", null);
332
- _defineProperty(_this, "onEmptyPopupEnter", function () {
333
- if (_this.state.addButton) {
334
- _this.addHandler();
291
+ _defineProperty(this, "_popup", null);
292
+ _defineProperty(this, "onEmptyPopupEnter", () => {
293
+ if (this.state.addButton) {
294
+ this.addHandler();
335
295
  }
336
296
  });
337
- _defineProperty(_this, "focus", function () {
297
+ _defineProperty(this, "focus", () => {
338
298
  var _this$node;
339
- var focusableSelectExists = (_this$node = _this.node) === null || _this$node === void 0 ? void 0 : _this$node.querySelector('[data-test~=ring-select__focus]');
340
- var restoreFocusNode = _this.props.targetElement || focusableSelectExists;
299
+ const focusableSelectExists = (_this$node = this.node) === null || _this$node === void 0 ? void 0 : _this$node.querySelector('[data-test~=ring-select__focus]');
300
+ const restoreFocusNode = this.props.targetElement || focusableSelectExists;
341
301
  restoreFocusNode === null || restoreFocusNode === void 0 || restoreFocusNode.focus();
342
302
  });
343
- _defineProperty(_this, "_onEnter", function () {
303
+ _defineProperty(this, "_onEnter", () => {
344
304
  var _this$_popup2;
345
- if (_this.state.addButton && _this.state.shownData.length === 0) {
346
- _this.addHandler();
305
+ if (this.state.addButton && this.state.shownData.length === 0) {
306
+ this.addHandler();
347
307
  }
348
- _this.props.onDone();
349
- if (!((_this$_popup2 = _this._popup) !== null && _this$_popup2 !== void 0 && _this$_popup2.isVisible()) && _this.props.allowAny) {
308
+ this.props.onDone();
309
+ if (!((_this$_popup2 = this._popup) !== null && _this$_popup2 !== void 0 && _this$_popup2.isVisible()) && this.props.allowAny) {
350
310
  return true;
351
311
  }
352
312
  return undefined;
353
313
  });
354
- _defineProperty(_this, "_onEsc", function (event) {
314
+ _defineProperty(this, "_onEsc", event => {
355
315
  var _this$_popup3;
356
- if (!((_this$_popup3 = _this._popup) !== null && _this$_popup3 !== void 0 && _this$_popup3.isVisible())) {
316
+ if (!((_this$_popup3 = this._popup) !== null && _this$_popup3 !== void 0 && _this$_popup3.isVisible())) {
357
317
  return true;
358
- } else if (_this.props.multiple || !_this.props.getInitial) {
318
+ } else if (this.props.multiple || !this.props.getInitial) {
359
319
  return false;
360
320
  }
361
- var selected = {
321
+ const selected = {
362
322
  key: Math.random(),
363
- label: _this.props.getInitial()
323
+ label: this.props.getInitial()
364
324
  };
365
- _this.setState({
325
+ this.setState({
366
326
  selected,
367
- filterValue: _this.getValueForFilter(selected)
368
- }, function () {
369
- _this.props.onChange(selected, event);
370
- _this.props.onReset();
327
+ filterValue: this.getValueForFilter(selected)
328
+ }, () => {
329
+ this.props.onChange(selected, event);
330
+ this.props.onReset();
371
331
  });
372
332
  return undefined;
373
333
  });
374
- _defineProperty(_this, "_inputShortcutHandler", function () {
375
- if (_this.state.focused && _this._popup && !_this._popup.isVisible()) {
376
- _this._clickHandler();
334
+ _defineProperty(this, "_inputShortcutHandler", () => {
335
+ if (this.state.focused && this._popup && !this._popup.isVisible()) {
336
+ this._clickHandler();
377
337
  }
378
338
  });
379
- _defineProperty(_this, "popupRef", function (el) {
380
- _this._popup = el;
339
+ _defineProperty(this, "popupRef", el => {
340
+ this._popup = el;
381
341
  });
382
- _defineProperty(_this, "_showPopup", function () {
383
- if (!_this.node) {
342
+ _defineProperty(this, "_showPopup", () => {
343
+ if (!this.node) {
384
344
  return;
385
345
  }
386
- var shownData = _this.getListItems(_this.filterValue());
387
- _this.setState({
346
+ const shownData = this.getListItems(this.filterValue());
347
+ this.setState({
388
348
  showPopup: true,
389
349
  shownData
390
350
  });
391
351
  });
392
- _defineProperty(_this, "_hidePopup", function (tryFocusAnchor) {
393
- if (_this.node && _this.state.showPopup) {
394
- _this.setState(function (prevState) {
395
- return {
396
- showPopup: false,
397
- filterValue: _this.props.allowAny ? prevState.filterValue : ''
398
- };
399
- });
352
+ _defineProperty(this, "_hidePopup", tryFocusAnchor => {
353
+ if (this.node && this.state.showPopup) {
354
+ this.setState(prevState => ({
355
+ showPopup: false,
356
+ filterValue: this.props.allowAny ? prevState.filterValue : ''
357
+ }));
400
358
  if (tryFocusAnchor) {
401
- _this.focus();
359
+ this.focus();
402
360
  }
403
361
  }
404
362
  });
405
- _defineProperty(_this, "addHandler", function () {
406
- var value = _this.filterValue();
407
- _this._hidePopup();
408
- _this.props.onAdd(value);
363
+ _defineProperty(this, "addHandler", () => {
364
+ const value = this.filterValue();
365
+ this._hidePopup();
366
+ this.props.onAdd(value);
409
367
  });
410
- _defineProperty(_this, "getLowerCaseLabel", getLowerCaseLabel);
411
- _defineProperty(_this, "doesLabelMatch", doesLabelMatch);
412
- _defineProperty(_this, "_clickHandler", function () {
413
- if (!_this.props.disabled) {
414
- if (_this.state.showPopup) {
415
- _this._hidePopup();
368
+ _defineProperty(this, "getLowerCaseLabel", getLowerCaseLabel);
369
+ _defineProperty(this, "doesLabelMatch", doesLabelMatch);
370
+ _defineProperty(this, "_clickHandler", () => {
371
+ if (!this.props.disabled) {
372
+ if (this.state.showPopup) {
373
+ this._hidePopup();
416
374
  } else {
417
- _this.props.onBeforeOpen();
418
- _this._showPopup();
375
+ this.props.onBeforeOpen();
376
+ this._showPopup();
419
377
  }
420
378
  }
421
379
  });
422
- _defineProperty(_this, "_openPopupIfClosed", function () {
423
- if (_this.props.disabled || _this.state.showPopup) {
380
+ _defineProperty(this, "_openPopupIfClosed", () => {
381
+ if (this.props.disabled || this.state.showPopup) {
424
382
  return;
425
383
  }
426
- _this.props.onBeforeOpen();
427
- _this._showPopup();
384
+ this.props.onBeforeOpen();
385
+ this._showPopup();
428
386
  });
429
- _defineProperty(_this, "_filterChangeHandler", function (e) {
430
- _this._setFilter(e.currentTarget.value, e);
387
+ _defineProperty(this, "_filterChangeHandler", e => {
388
+ this._setFilter(e.currentTarget.value, e);
431
389
  });
432
- _defineProperty(_this, "_setFilter", function (value, event) {
390
+ _defineProperty(this, "_setFilter", (value, event) => {
433
391
  var _this$_popup4;
434
- if (_this.isInputMode() && !_this.state.focused) {
392
+ if (this.isInputMode() && !this.state.focused) {
435
393
  return;
436
394
  }
437
- if (value === _this.state.filterValue) {
395
+ if (value === this.state.filterValue) {
438
396
  return;
439
397
  }
440
- var filterValue = value.replace(/^\s+/g, '');
441
- _this.props.onFilter(filterValue);
442
- if (_this.props.allowAny) {
443
- var fakeSelected = {
398
+ const filterValue = value.replace(/^\s+/g, '');
399
+ this.props.onFilter(filterValue);
400
+ if (this.props.allowAny) {
401
+ const fakeSelected = {
444
402
  key: Math.random(),
445
403
  label: filterValue
446
404
  };
447
- _this.setState({
405
+ this.setState({
448
406
  selected: filterValue === '' ? null : fakeSelected,
449
407
  selectedIndex: null
450
- }, function () {
451
- _this.props.onSelect(fakeSelected, event);
452
- _this.props.onChange(fakeSelected, event);
408
+ }, () => {
409
+ this.props.onSelect(fakeSelected, event);
410
+ this.props.onChange(fakeSelected, event);
453
411
  });
454
412
  }
455
- !((_this$_popup4 = _this._popup) !== null && _this$_popup4 !== void 0 && _this$_popup4.isVisible()) && _this.props.onBeforeOpen();
456
- _this.setState({
413
+ if (!((_this$_popup4 = this._popup) !== null && _this$_popup4 !== void 0 && _this$_popup4.isVisible())) {
414
+ this.props.onBeforeOpen();
415
+ }
416
+ this.setState({
457
417
  filterValue
458
- }, function () {
459
- _this._showPopup();
418
+ }, () => {
419
+ this._showPopup();
460
420
  });
461
421
  });
462
- _defineProperty(_this, "_redrawPopup", function () {
463
- if (_this.props.multiple) {
464
- setTimeout(function () {
465
- _this.isInputMode() && _this.clearFilter();
466
- _this._showPopup();
422
+ _defineProperty(this, "_redrawPopup", () => {
423
+ if (this.props.multiple) {
424
+ setTimeout(() => {
425
+ if (this.isInputMode()) {
426
+ this.clearFilter();
427
+ }
428
+ this._showPopup();
467
429
  }, 0);
468
430
  }
469
431
  });
470
- _defineProperty(_this, "_listSelectHandler", function (selected, event) {
432
+ _defineProperty(this, "_listSelectHandler", function (selected, event) {
471
433
  var _this$props$tryKeepOp;
472
- var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
473
- var isItem = function isItem(item) {
474
- return List.isItemType(List.ListProps.Type.ITEM, item);
475
- };
476
- var isCustomItem = function isCustomItem(item) {
477
- return List.isItemType(List.ListProps.Type.CUSTOM, item);
478
- };
479
- var isSelectItemEvent = event && (event.type === 'select' || event.type === 'keydown');
434
+ let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
435
+ const isItem = item => List.isItemType(List.ListProps.Type.ITEM, item);
436
+ const isCustomItem = item => List.isItemType(List.ListProps.Type.CUSTOM, item);
437
+ const isSelectItemEvent = event && (event.type === 'select' || event.type === 'keydown');
480
438
  if (isSelectItemEvent) {
481
439
  event.preventDefault();
482
440
  }
483
441
  if (!isItem(selected) && !isCustomItem(selected) || selected.disabled || selected.isResetItem) {
484
442
  return;
485
443
  }
486
- var tryKeepOpen = (_this$props$tryKeepOp = _this.props.tryKeepOpen) !== null && _this$props$tryKeepOp !== void 0 ? _this$props$tryKeepOp : opts.tryKeepOpen;
444
+ const tryKeepOpen = (_this$props$tryKeepOp = _this.props.tryKeepOpen) !== null && _this$props$tryKeepOp !== void 0 ? _this$props$tryKeepOp : opts.tryKeepOpen;
487
445
  if (!_this.props.multiple) {
488
446
  if (!tryKeepOpen) {
489
447
  _this._hidePopup(isSelectItemEvent);
@@ -491,8 +449,8 @@ var Select = /*#__PURE__*/function (_Component) {
491
449
  _this.setState({
492
450
  selected,
493
451
  selectedIndex: _this._getSelectedIndex(selected, _this.props.data)
494
- }, function () {
495
- var newFilterValue = _this.isInputMode() && !_this.props.hideSelected ? getItemLabel(selected) : '';
452
+ }, () => {
453
+ const newFilterValue = _this.isInputMode() && !_this.props.hideSelected ? getItemLabel(selected) : '';
496
454
  _this.filterValue(newFilterValue);
497
455
  _this.props.onFilter(newFilterValue);
498
456
  _this.props.onSelect(selected, event);
@@ -505,78 +463,68 @@ var Select = /*#__PURE__*/function (_Component) {
505
463
  if (selected.key == null) {
506
464
  throw new Error('Multiple selection requires each item to have the "key" property');
507
465
  }
508
- _this.setState(function (prevState) {
509
- var currentSelection = prevState.selected;
510
- var nextSelection;
466
+ _this.setState(prevState => {
467
+ const currentSelection = prevState.selected;
468
+ let nextSelection;
511
469
  if (!prevState.multipleMap[selected.key]) {
512
470
  nextSelection = currentSelection.concat(selected);
513
- _this.props.onSelect && _this.props.onSelect(selected, event);
514
471
  } else {
515
- nextSelection = currentSelection.filter(function (item) {
516
- return item.key !== selected.key;
517
- });
518
- _this.props.onDeselect && _this.props.onDeselect(selected);
472
+ nextSelection = currentSelection.filter(item => item.key !== selected.key);
519
473
  }
520
- _this.props.onChange(nextSelection, event);
521
- var nextState = {
474
+ const nextState = {
522
475
  filterValue: '',
523
476
  selected: nextSelection,
524
477
  selectedIndex: _this._getSelectedIndex(selected, _this.props.data)
525
478
  };
526
479
  if (typeof _this.props.multiple === 'object' && _this.props.multiple.limit && nextSelection.length === _this.props.multiple.limit) {
527
- nextState.shownData = prevState.shownData.map(function (item) {
528
- return nextSelection.find(function (selectedItem) {
529
- return selectedItem.key === item.key;
530
- }) ? item : _objectSpread2(_objectSpread2({}, item), {}, {
531
- disabled: true
532
- });
533
- });
480
+ nextState.shownData = prevState.shownData.map(item => nextSelection.find(selectedItem => selectedItem.key === item.key) ? item : _objectSpread2(_objectSpread2({}, item), {}, {
481
+ disabled: true
482
+ }));
534
483
  }
535
484
  if (!prevState.multipleMap[selected.key]) {
536
485
  nextState.multipleMap = _objectSpread2(_objectSpread2({}, prevState.multipleMap), {}, {
537
486
  [selected.key]: true
538
487
  });
539
488
  } else {
540
- var _prevState$multipleMa = prevState.multipleMap,
541
- _selected$key = selected.key;
542
- _prevState$multipleMa[_selected$key];
543
- var restMultipleMap = _objectWithoutProperties(_prevState$multipleMa, [_selected$key].map(_toPropertyKey));
489
+ const _prevState$multipleMa = prevState.multipleMap,
490
+ _selected$key = selected.key,
491
+ restMultipleMap = _objectWithoutProperties(_prevState$multipleMa, [_selected$key].map(_toPropertyKey));
544
492
  nextState.multipleMap = restMultipleMap;
545
493
  }
546
494
  return _objectSpread2(_objectSpread2({}, prevState), nextState);
547
- }, function () {
495
+ }, () => {
496
+ if (_this.state.multipleMap[selected.key]) {
497
+ var _this$props$onSelect, _this$props;
498
+ (_this$props$onSelect = (_this$props = _this.props).onSelect) === null || _this$props$onSelect === void 0 || _this$props$onSelect.call(_this$props, selected, event);
499
+ } else {
500
+ var _this$props$onDeselec, _this$props2;
501
+ (_this$props$onDeselec = (_this$props2 = _this.props).onDeselect) === null || _this$props$onDeselec === void 0 || _this$props$onDeselec.call(_this$props2, selected);
502
+ }
503
+ _this.props.onChange(_this.state.selected, event);
548
504
  if (tryKeepOpen) {
549
505
  _this._redrawPopup();
550
506
  }
551
507
  });
552
508
  }
553
509
  });
554
- _defineProperty(_this, "_listSelectAllHandler", function () {
555
- var isSelectAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
556
- var isItem = function isItem(item) {
557
- return List.isItemType(List.ListProps.Type.ITEM, item);
558
- };
559
- var isCustomItem = function isCustomItem(item) {
560
- return List.isItemType(List.ListProps.Type.CUSTOM, item);
561
- };
562
- _this.setState(function (prevState) {
563
- var currentSelection = prevState.selected;
564
- var nextSelection;
510
+ _defineProperty(this, "_listSelectAllHandler", function () {
511
+ let isSelectAll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
512
+ const isItem = item => List.isItemType(List.ListProps.Type.ITEM, item);
513
+ const isCustomItem = item => List.isItemType(List.ListProps.Type.CUSTOM, item);
514
+ _this.setState(prevState => {
515
+ const currentSelection = prevState.selected;
516
+ let nextSelection;
565
517
  if (isSelectAll) {
566
- nextSelection = _this.props.data.filter(function (item) {
567
- return (isItem(item) || isCustomItem(item)) && !item.disabled;
568
- });
569
- nextSelection.filter(function (item) {
570
- return !_this.props.selected.find(function (selectedItem) {
571
- return item.key === selectedItem.key;
572
- });
573
- }).forEach(function (item) {
574
- _this.props.onSelect && _this.props.onSelect(item);
518
+ nextSelection = _this.props.data.filter(item => (isItem(item) || isCustomItem(item)) && !item.disabled);
519
+ nextSelection.filter(item => !_this.props.selected.find(selectedItem => item.key === selectedItem.key)).forEach(item => {
520
+ var _this$props$onSelect2, _this$props3;
521
+ (_this$props$onSelect2 = (_this$props3 = _this.props).onSelect) === null || _this$props$onSelect2 === void 0 || _this$props$onSelect2.call(_this$props3, item);
575
522
  });
576
523
  } else {
577
524
  nextSelection = [];
578
- currentSelection.forEach(function (item) {
579
- _this.props.onDeselect && _this.props.onDeselect(item);
525
+ currentSelection.forEach(item => {
526
+ var _this$props$onDeselec2, _this$props4;
527
+ (_this$props$onDeselec2 = (_this$props4 = _this.props).onDeselect) === null || _this$props$onDeselec2 === void 0 || _this$props$onDeselec2.call(_this$props4, item);
580
528
  });
581
529
  }
582
530
  _this.props.onChange(nextSelection, event);
@@ -584,617 +532,583 @@ var Select = /*#__PURE__*/function (_Component) {
584
532
  filterValue: '',
585
533
  selected: nextSelection,
586
534
  selectedIndex: isSelectAll ? _this._getSelectedIndex(nextSelection, _this.props.data) : null,
587
- shownData: prevState.shownData.map(function (item) {
588
- return _objectSpread2(_objectSpread2({}, item), {}, {
589
- checkbox: isSelectAll
590
- });
591
- }),
592
- multipleMap: isSelectAll ? buildMultipleMap(_this.props.data.filter(function (item) {
593
- return !item.disabled;
594
- })) : {}
535
+ shownData: prevState.shownData.map(item => _objectSpread2(_objectSpread2({}, item), {}, {
536
+ checkbox: isSelectAll
537
+ })),
538
+ multipleMap: isSelectAll ? buildMultipleMap(_this.props.data.filter(item => !item.disabled)) : {}
595
539
  };
596
540
  }, _this._redrawPopup);
597
541
  });
598
- _defineProperty(_this, "_onCloseAttempt", function (event, isEsc) {
599
- if (_this.isInputMode()) {
600
- if (!_this.props.allowAny) {
601
- if (_this.props.hideSelected || !_this.state.selected || _this.props.multiple) {
602
- _this.clearFilter();
603
- } else if (_this.state.selected && !Array.isArray(_this.state.selected)) {
604
- _this.filterValue(getItemLabel(_this.state.selected));
542
+ _defineProperty(this, "_onCloseAttempt", (event, isEsc) => {
543
+ if (this.isInputMode()) {
544
+ if (!this.props.allowAny) {
545
+ if (this.props.hideSelected || !this.state.selected || this.props.multiple) {
546
+ this.clearFilter();
547
+ } else if (this.state.selected && !Array.isArray(this.state.selected)) {
548
+ this.filterValue(getItemLabel(this.state.selected));
605
549
  }
606
550
  }
607
551
  }
608
- var isTagRemoved = _this.props.tags && event && event.target && event.target instanceof Element && event.target.matches('[data-test="ring-tag-remove"]');
552
+ const isTagRemoved = this.props.tags && event && event.target && event.target instanceof Element && event.target.matches('[data-test="ring-tag-remove"]');
609
553
  if (!isTagRemoved) {
610
- _this._hidePopup(isEsc);
554
+ this._hidePopup(isEsc);
611
555
  }
612
556
  });
613
- _defineProperty(_this, "clearFilter", function (e) {
614
- _this._setFilter('', e);
557
+ _defineProperty(this, "clearFilter", e => {
558
+ this._setFilter('', e);
615
559
  });
616
- _defineProperty(_this, "clear", function (event) {
560
+ _defineProperty(this, "clear", event => {
617
561
  if (event) {
618
562
  event.stopPropagation();
619
563
  }
620
- var empty = _this.props.multiple ? [] : null;
621
- _this.setState({
564
+ const empty = this.props.multiple ? [] : null;
565
+ this.setState({
622
566
  selected: empty,
623
567
  selectedIndex: null,
624
568
  filterValue: ''
625
- }, function () {
626
- if (_this.props.onChange) {
627
- _this.props.onChange(empty, event);
569
+ }, () => {
570
+ if (this.props.onChange) {
571
+ this.props.onChange(empty, event);
628
572
  }
629
573
  });
630
574
  return false;
631
575
  });
632
- _defineProperty(_this, "filter", void 0);
633
- _defineProperty(_this, "filterRef", function (el) {
634
- _this.filter = el;
576
+ _defineProperty(this, "filter", void 0);
577
+ _defineProperty(this, "filterRef", el => {
578
+ this.filter = el;
635
579
  });
636
- _defineProperty(_this, "composedFilterRef", createComposedRef());
637
- return _this;
580
+ _defineProperty(this, "composedFilterRef", createComposedRef());
638
581
  }
639
- _inherits(Select, _Component);
640
- return _createClass(Select, [{
641
- key: "componentDidUpdate",
642
- value: function componentDidUpdate(prevProps, prevState) {
643
- var _this$state = this.state,
644
- showPopup = _this$state.showPopup,
645
- selected = _this$state.selected;
646
- var _this$props = this.props,
647
- onClose = _this$props.onClose,
648
- onOpen = _this$props.onOpen,
649
- onChange = _this$props.onChange,
650
- multiple = _this$props.multiple;
651
- if (prevState.showPopup && !showPopup) {
652
- onClose(selected);
653
- } else if (!prevState.showPopup && showPopup) {
654
- onOpen();
655
- }
656
- if (multiple !== prevProps.multiple && !deepEqual(multiple, prevProps.multiple)) {
657
- onChange(selected);
658
- }
659
- }
660
- }, {
661
- key: "getValueForFilter",
662
- value: function getValueForFilter(selected) {
663
- return _getValueForFilter(selected, this.props.type, this.state.filterValue);
664
- }
665
- }, {
666
- key: "_getSelectedIndex",
667
- value: function _getSelectedIndex(selected, data) {
668
- return getSelectedIndex(selected, data);
669
- }
670
- }, {
671
- key: "_getResetOption",
672
- value: function _getResetOption() {
673
- var _this2 = this;
674
- var isOptionsSelected = Array.isArray(this.state.selected) && this.state.selected.length;
675
- var reset = this.props.tags && typeof this.props.tags === 'object' ? this.props.tags.reset : null;
676
- if (!isOptionsSelected || !reset) {
677
- return null;
678
- }
679
- var resetHandler = function resetHandler(item, event) {
680
- _this2.clear(event);
681
- _this2.clearFilter();
682
- _this2.props.onFilter('');
683
- _this2.setState(function (prevState) {
684
- return {
685
- shownData: prevState.shownData.slice(reset.separator ? 2 : 1),
686
- multipleMap: {}
687
- };
582
+ static getDerivedStateFromProps(nextProps, prevState) {
583
+ const {
584
+ multiple,
585
+ data,
586
+ type
587
+ } = nextProps;
588
+ const {
589
+ prevSelected,
590
+ prevData,
591
+ prevMultiple,
592
+ filterValue
593
+ } = prevState;
594
+ const nextState = {
595
+ prevData: data,
596
+ prevSelected: nextProps.selected,
597
+ prevMultiple: multiple
598
+ };
599
+ if ('data' in nextProps && data !== prevData) {
600
+ const {
601
+ filteredData,
602
+ addButton
603
+ } = getListItems(nextProps, prevState, filterValue, data);
604
+ Object.assign(nextState, {
605
+ shownData: filteredData,
606
+ addButton
607
+ });
608
+ if (prevState.selected) {
609
+ Object.assign(nextState, {
610
+ selectedIndex: getSelectedIndex(prevState.selected, data),
611
+ filterValue: getValueForFilter(prevState.selected, type, filterValue)
688
612
  });
689
- _this2._redrawPopup();
690
- };
691
- return {
692
- isResetItem: true,
693
- separator: reset.separator,
694
- key: reset.label,
695
- rgItemType: List.ListProps.Type.CUSTOM,
696
- template: /*#__PURE__*/jsx(Button, {
697
- text: true,
698
- className: modules_9d0de074.button,
699
- "data-test": "ring-select-reset-tags-button",
700
- height: ControlsHeight.S,
701
- children: reset.label
702
- }),
703
- glyph: reset.glyph,
704
- onClick: resetHandler
705
- };
706
- }
707
- }, {
708
- key: "_prependResetOption",
709
- value: function _prependResetOption(shownData) {
710
- var resetOption = this._getResetOption();
711
- if (resetOption) {
712
- var resetItems = [resetOption];
713
- if (resetOption.separator) {
714
- resetItems.push({
715
- rgItemType: List.ListProps.Type.SEPARATOR
716
- });
717
- }
718
- return resetItems.concat(shownData);
719
613
  }
720
- return shownData;
721
614
  }
722
- }, {
723
- key: "_renderPopup",
724
- value: function _renderPopup() {
725
- var _this3 = this;
726
- var anchorElement = this.props.targetElement || this.node;
727
- var _this$state2 = this.state,
728
- showPopup = _this$state2.showPopup,
729
- shownData = _this$state2.shownData;
730
- var _shownData = this._prependResetOption(shownData);
731
- return /*#__PURE__*/jsx(I18nContext.Consumer, {
732
- children: function children(_ref2) {
733
- var translate = _ref2.translate;
734
- var message;
735
- if (_this3.props.loading) {
736
- var _this3$props$loadingM;
737
- message = (_this3$props$loadingM = _this3.props.loadingMessage) !== null && _this3$props$loadingM !== void 0 ? _this3$props$loadingM : translate('loading');
738
- } else if (!shownData.length) {
739
- var _this3$props$notFound;
740
- message = (_this3$props$notFound = _this3.props.notFoundMessage) !== null && _this3$props$notFound !== void 0 ? _this3$props$notFound : translate('noOptionsFound');
741
- }
742
- return /*#__PURE__*/jsx(SelectPopup, {
743
- data: _shownData,
744
- message: message,
745
- toolbar: showPopup && _this3.getToolbar(),
746
- topbar: _this3.getTopbar(),
747
- loading: _this3.props.loading,
748
- activeIndex: _this3.state.selectedIndex,
749
- hidden: !showPopup,
750
- ref: _this3.popupRef,
751
- maxHeight: _this3.props.maxHeight,
752
- minWidth: _this3.props.minWidth,
753
- directions: _this3.props.directions,
754
- className: _this3.props.popupClassName,
755
- style: _this3.props.popupStyle,
756
- top: _this3.props.top,
757
- left: _this3.props.left,
758
- offset: _this3.props.offset,
759
- filter: _this3.isInputMode() ? false : _this3.props.filter // disable popup filter in INPUT mode
760
- ,
761
- filterIcon: _this3.props.filterIcon,
762
- filterRef: _this3.props.filterRef,
763
- multiple: _this3.props.multiple,
764
- filterValue: _this3.state.filterValue,
765
- anchorElement: anchorElement,
766
- onCloseAttempt: _this3._onCloseAttempt,
767
- onOutsideClick: _this3.props.onOutsideClick,
768
- onSelect: _this3._listSelectHandler,
769
- onSelectAll: _this3._listSelectAllHandler,
770
- onFilter: _this3._filterChangeHandler,
771
- onClear: _this3.clearFilter,
772
- onLoadMore: _this3.props.onLoadMore,
773
- isInputMode: _this3.isInputMode(),
774
- selected: _this3.state.selected,
775
- tags: _this3.props.tags,
776
- compact: _this3.props.compact,
777
- renderOptimization: _this3.props.renderOptimization,
778
- ringPopupTarget: _this3.props.ringPopupTarget,
779
- disableMoveOverflow: _this3.props.disableMoveOverflow,
780
- disableScrollToActive: _this3.props.disableScrollToActive,
781
- dir: _this3.props.dir,
782
- onEmptyPopupEnter: _this3.onEmptyPopupEnter,
783
- listId: _this3.listId,
784
- preventListOverscroll: _this3.props.preventListOverscroll
785
- });
786
- }
615
+ if ('selected' in nextProps && nextProps.selected !== prevSelected) {
616
+ const selected = nextProps.selected || (multiple ? [] : null);
617
+ const selectedIndex = getSelectedIndex(selected, data || prevData);
618
+ Object.assign(nextState, {
619
+ selected,
620
+ filterValue: getValueForFilter(selected, type, filterValue)
787
621
  });
788
- }
789
- }, {
790
- key: "getToolbar",
791
- value: function getToolbar() {
792
- var _this$props2 = this.props,
793
- hint = _this$props2.hint,
794
- renderBottomToolbar = _this$props2.renderBottomToolbar;
795
- var _ref3 = this.state.addButton || {},
796
- prefix = _ref3.prefix,
797
- label = _ref3.label,
798
- delayed = _ref3.delayed;
799
- var isToolbarHasElements = this.state.addButton || hint || renderBottomToolbar;
800
- if (!isToolbarHasElements) {
801
- return null;
622
+ if (!Array.isArray(prevSelected) || !Array.isArray(selected) || !isSameSelected(prevSelected, selected)) {
623
+ Object.assign(nextState, {
624
+ selectedIndex
625
+ });
802
626
  }
803
- return /*#__PURE__*/jsxs("div", {
804
- className: classNames({
805
- [modules_9d0de074.toolbar]: Boolean(this.state.addButton || renderBottomToolbar)
806
- }),
807
- "data-test": "ring-select-toolbar",
808
- children: [renderBottomToolbar && renderBottomToolbar(), this.state.addButton && /*#__PURE__*/jsx(Button, {
809
- text: true,
810
- delayed: delayed,
811
- className: classNames(modules_9d0de074.button, modules_9d0de074.buttonSpaced),
812
- onClick: this.addHandler,
813
- "data-test": "ring-select-toolbar-button",
814
- children: prefix ? "".concat(prefix, " ").concat(label) : label
815
- }), hint && /*#__PURE__*/jsx(List.ListHint, {
816
- label: hint,
817
- "data-test": "ring-select-toolbar-hint"
818
- })]
819
- });
820
627
  }
821
- }, {
822
- key: "getTopbar",
823
- value: function getTopbar() {
824
- var _this$props$renderTop, _this$props3;
825
- return (_this$props$renderTop = (_this$props3 = this.props).renderTopToolbar) === null || _this$props$renderTop === void 0 ? void 0 : _this$props$renderTop.call(_this$props3);
628
+ if (prevMultiple !== multiple && !dequal(prevMultiple, multiple)) {
629
+ nextState.selected = multiple ? [] : null;
826
630
  }
827
- }, {
828
- key: "getFilterFn",
829
- value: function getFilterFn() {
830
- return _getFilterFn(this.props.filter);
631
+ if (multiple && !nextState.selected) {
632
+ nextState.selected = prevState.selected;
831
633
  }
832
- }, {
833
- key: "getListItems",
834
- value: function getListItems(rawFilterString, data) {
835
- var _getListItems2 = _getListItems(this.props, this.state, rawFilterString, data),
836
- filteredData = _getListItems2.filteredData,
837
- addButton = _getListItems2.addButton;
838
- this.setState({
634
+ const {
635
+ selected
636
+ } = _objectSpread2(_objectSpread2({}, prevState), nextState);
637
+ if (selected && Array.isArray(selected)) {
638
+ nextState.multipleMap = buildMultipleMap(selected);
639
+ const {
640
+ filteredData,
641
+ addButton
642
+ } = getListItems(nextProps, nextState, filterValue, data);
643
+ Object.assign(nextState, {
644
+ shownData: filteredData,
839
645
  addButton
840
646
  });
841
- return filteredData;
842
647
  }
843
- }, {
844
- key: "filterValue",
845
- value: function filterValue(setValue) {
846
- if (typeof setValue === 'string' || typeof setValue === 'number') {
847
- this.setState({
848
- filterValue: setValue
648
+ return nextState;
649
+ }
650
+ componentDidUpdate(prevProps, prevState) {
651
+ const {
652
+ showPopup,
653
+ selected
654
+ } = this.state;
655
+ const {
656
+ onClose,
657
+ onOpen,
658
+ onChange,
659
+ multiple
660
+ } = this.props;
661
+ if (prevState.showPopup && !showPopup) {
662
+ onClose(selected);
663
+ } else if (!prevState.showPopup && showPopup) {
664
+ onOpen();
665
+ }
666
+ if (multiple !== prevProps.multiple && !dequal(multiple, prevProps.multiple)) {
667
+ onChange(selected);
668
+ }
669
+ }
670
+ getValueForFilter(selected) {
671
+ return getValueForFilter(selected, this.props.type, this.state.filterValue);
672
+ }
673
+ _getSelectedIndex(selected, data) {
674
+ return getSelectedIndex(selected, data);
675
+ }
676
+ _getResetOption() {
677
+ const isOptionsSelected = Array.isArray(this.state.selected) && this.state.selected.length;
678
+ const reset = this.props.tags && typeof this.props.tags === 'object' ? this.props.tags.reset : null;
679
+ if (!isOptionsSelected || !reset) {
680
+ return null;
681
+ }
682
+ const resetHandler = (item, event) => {
683
+ this.clear(event);
684
+ this.clearFilter();
685
+ this.props.onFilter('');
686
+ this.setState(prevState => ({
687
+ shownData: prevState.shownData.slice(reset.separator ? 2 : 1),
688
+ multipleMap: {}
689
+ }));
690
+ this._redrawPopup();
691
+ };
692
+ return {
693
+ isResetItem: true,
694
+ separator: reset.separator,
695
+ key: reset.label,
696
+ rgItemType: List.ListProps.Type.CUSTOM,
697
+ template: /*#__PURE__*/jsx(Button, {
698
+ text: true,
699
+ className: modules_9d0de074.button,
700
+ "data-test": "ring-select-reset-tags-button",
701
+ height: ControlsHeight.S,
702
+ children: reset.label
703
+ }),
704
+ glyph: reset.glyph,
705
+ onClick: resetHandler
706
+ };
707
+ }
708
+ _prependResetOption(shownData) {
709
+ const resetOption = this._getResetOption();
710
+ if (resetOption) {
711
+ const resetItems = [resetOption];
712
+ if (resetOption.separator) {
713
+ resetItems.push({
714
+ rgItemType: List.ListProps.Type.SEPARATOR
849
715
  });
850
- return undefined;
851
- } else {
852
- return this.state.filterValue;
853
716
  }
717
+ return resetItems.concat(shownData);
854
718
  }
855
- }, {
856
- key: "isInputMode",
857
- value: function isInputMode() {
858
- return _isInputMode(this.props.type);
859
- }
860
- }, {
861
- key: "_rebuildMultipleMap",
862
- value: function _rebuildMultipleMap(selected) {
863
- if (Array.isArray(selected)) {
864
- this.setState({
865
- multipleMap: buildMultipleMap(selected)
719
+ return shownData;
720
+ }
721
+ _renderPopup() {
722
+ const anchorElement = this.props.targetElement || this.node;
723
+ const {
724
+ showPopup,
725
+ shownData
726
+ } = this.state;
727
+ const _shownData = this._prependResetOption(shownData);
728
+ return /*#__PURE__*/jsx(I18nContext.Consumer, {
729
+ children: _ref2 => {
730
+ let {
731
+ translate
732
+ } = _ref2;
733
+ let message;
734
+ if (this.props.loading) {
735
+ var _this$props$loadingMe;
736
+ message = (_this$props$loadingMe = this.props.loadingMessage) !== null && _this$props$loadingMe !== void 0 ? _this$props$loadingMe : translate('loading');
737
+ } else if (!shownData.length) {
738
+ var _this$props$notFoundM;
739
+ message = (_this$props$notFoundM = this.props.notFoundMessage) !== null && _this$props$notFoundM !== void 0 ? _this$props$notFoundM : translate('noOptionsFound');
740
+ }
741
+ return /*#__PURE__*/jsx(SelectPopup, {
742
+ data: _shownData,
743
+ message: message,
744
+ toolbar: showPopup && this.getToolbar(),
745
+ topbar: this.getTopbar(),
746
+ loading: this.props.loading,
747
+ activeIndex: this.state.selectedIndex,
748
+ hidden: !showPopup,
749
+ ref: this.popupRef,
750
+ maxHeight: this.props.maxHeight,
751
+ minWidth: this.props.minWidth,
752
+ directions: this.props.directions,
753
+ className: this.props.popupClassName,
754
+ style: this.props.popupStyle,
755
+ top: this.props.top,
756
+ left: this.props.left,
757
+ offset: this.props.offset,
758
+ filter: this.isInputMode() ? false : this.props.filter // disable popup filter in INPUT mode
759
+ ,
760
+ filterIcon: this.props.filterIcon,
761
+ filterRef: this.props.filterRef,
762
+ multiple: this.props.multiple,
763
+ filterValue: this.state.filterValue,
764
+ anchorElement: anchorElement,
765
+ onCloseAttempt: this._onCloseAttempt,
766
+ onOutsideClick: this.props.onOutsideClick,
767
+ onSelect: this._listSelectHandler,
768
+ onSelectAll: this._listSelectAllHandler,
769
+ onFilter: this._filterChangeHandler,
770
+ onClear: this.clearFilter,
771
+ onLoadMore: this.props.onLoadMore,
772
+ isInputMode: this.isInputMode(),
773
+ selected: this.state.selected,
774
+ tags: this.props.tags,
775
+ compact: this.props.compact,
776
+ renderOptimization: this.props.renderOptimization,
777
+ ringPopupTarget: this.props.ringPopupTarget,
778
+ disableMoveOverflow: this.props.disableMoveOverflow,
779
+ disableScrollToActive: this.props.disableScrollToActive,
780
+ dir: this.props.dir,
781
+ onEmptyPopupEnter: this.onEmptyPopupEnter,
782
+ listId: this.listId,
783
+ preventListOverscroll: this.props.preventListOverscroll
866
784
  });
867
785
  }
786
+ });
787
+ }
788
+ getToolbar() {
789
+ const {
790
+ hint,
791
+ renderBottomToolbar
792
+ } = this.props;
793
+ const {
794
+ prefix,
795
+ label,
796
+ delayed
797
+ } = this.state.addButton || {};
798
+ const isToolbarHasElements = this.state.addButton || hint || renderBottomToolbar;
799
+ if (!isToolbarHasElements) {
800
+ return null;
801
+ }
802
+ return /*#__PURE__*/jsxs("div", {
803
+ className: classNames({
804
+ [modules_9d0de074.toolbar]: Boolean(this.state.addButton || renderBottomToolbar)
805
+ }),
806
+ "data-test": "ring-select-toolbar",
807
+ children: [renderBottomToolbar && renderBottomToolbar(), this.state.addButton && /*#__PURE__*/jsx(Button, {
808
+ text: true,
809
+ delayed: delayed,
810
+ className: classNames(modules_9d0de074.button, modules_9d0de074.buttonSpaced),
811
+ onClick: this.addHandler,
812
+ "data-test": "ring-select-toolbar-button",
813
+ children: prefix ? "".concat(prefix, " ").concat(label) : label
814
+ }), hint && /*#__PURE__*/jsx(List.ListHint, {
815
+ label: hint,
816
+ "data-test": "ring-select-toolbar-hint"
817
+ })]
818
+ });
819
+ }
820
+ getTopbar() {
821
+ var _this$props$renderTop, _this$props5;
822
+ return (_this$props$renderTop = (_this$props5 = this.props).renderTopToolbar) === null || _this$props$renderTop === void 0 ? void 0 : _this$props$renderTop.call(_this$props5);
823
+ }
824
+ getFilterFn() {
825
+ return getFilterFn(this.props.filter);
826
+ }
827
+ getListItems(rawFilterString, data) {
828
+ const {
829
+ filteredData,
830
+ addButton
831
+ } = getListItems(this.props, this.state, rawFilterString, data);
832
+ this.setState({
833
+ addButton
834
+ });
835
+ return filteredData;
836
+ }
837
+ filterValue(setValue) {
838
+ if (typeof setValue === 'string' || typeof setValue === 'number') {
839
+ this.setState({
840
+ filterValue: setValue
841
+ });
842
+ return undefined;
843
+ } else {
844
+ return this.state.filterValue;
868
845
  }
869
- }, {
870
- key: "_selectionIsEmpty",
871
- value: function _selectionIsEmpty() {
872
- return Array.isArray(this.state.selected) && !this.state.selected.length || !this.state.selected;
846
+ }
847
+ isInputMode() {
848
+ return isInputMode(this.props.type);
849
+ }
850
+ _rebuildMultipleMap(selected) {
851
+ if (Array.isArray(selected)) {
852
+ this.setState({
853
+ multipleMap: buildMultipleMap(selected)
854
+ });
873
855
  }
874
- }, {
875
- key: "_getLabel",
876
- value: function _getLabel() {
877
- var _ref4, _this$props$label;
878
- return (_ref4 = (_this$props$label = this.props.label) !== null && _this$props$label !== void 0 ? _this$props$label : this.props.selectedLabel) !== null && _ref4 !== void 0 ? _ref4 : 'Select an option';
856
+ }
857
+ _selectionIsEmpty() {
858
+ return Array.isArray(this.state.selected) && !this.state.selected.length || !this.state.selected;
859
+ }
860
+ _getLabel() {
861
+ var _ref3, _this$props$label;
862
+ return (_ref3 = (_this$props$label = this.props.label) !== null && _this$props$label !== void 0 ? _this$props$label : this.props.selectedLabel) !== null && _ref3 !== void 0 ? _ref3 : 'Select an option';
863
+ }
864
+ _getPlaceholder() {
865
+ if (this._selectionIsEmpty()) {
866
+ var _this$props$label2;
867
+ return (_this$props$label2 = this.props.label) !== null && _this$props$label2 !== void 0 ? _this$props$label2 : 'Select an option';
879
868
  }
880
- }, {
881
- key: "_getPlaceholder",
882
- value: function _getPlaceholder() {
883
- if (this._selectionIsEmpty()) {
884
- var _this$props$label2;
885
- return (_this$props$label2 = this.props.label) !== null && _this$props$label2 !== void 0 ? _this$props$label2 : 'Select an option';
869
+ return this._getSelectedString();
870
+ }
871
+ _getSelectedString() {
872
+ if (Array.isArray(this.state.selected)) {
873
+ const labels = [];
874
+ for (let i = 0; i < this.state.selected.length; i++) {
875
+ labels.push(getItemLabel(this.state.selected[i]));
886
876
  }
887
- return this._getSelectedString();
877
+ return labels.filter(Boolean).join(', ');
878
+ } else {
879
+ return this.state.selected != null ? getItemLabel(this.state.selected) : null;
888
880
  }
889
- }, {
890
- key: "_getSelectedString",
891
- value: function _getSelectedString() {
892
- if (Array.isArray(this.state.selected)) {
893
- var labels = [];
894
- for (var i = 0; i < this.state.selected.length; i++) {
895
- labels.push(getItemLabel(this.state.selected[i]));
881
+ }
882
+ _getIcons() {
883
+ const {
884
+ selected
885
+ } = this.state;
886
+ const {
887
+ disabled,
888
+ clear,
889
+ hideArrow
890
+ } = this.props;
891
+ const icons = [];
892
+ const height = this.props.height || this.context;
893
+ if (!Array.isArray(selected) && selected !== null && selected !== void 0 && selected.icon) {
894
+ icons.push(/*#__PURE__*/jsx("button", {
895
+ title: "Toggle options popup",
896
+ type: "button",
897
+ className: modules_9d0de074.selectedIcon,
898
+ disabled: this.props.disabled,
899
+ onClick: this._clickHandler,
900
+ style: {
901
+ backgroundImage: "url(".concat(selected.icon, ")")
896
902
  }
897
- return labels.filter(Boolean).join(', ');
898
- } else {
899
- return this.state.selected != null ? getItemLabel(this.state.selected) : null;
900
- }
903
+ }, "selected"));
901
904
  }
902
- }, {
903
- key: "_getIcons",
904
- value: function _getIcons() {
905
- var selected = this.state.selected;
906
- var _this$props4 = this.props,
907
- disabled = _this$props4.disabled,
908
- clear = _this$props4.clear,
909
- hideArrow = _this$props4.hideArrow;
910
- var icons = [];
911
- var height = this.props.height || this.context;
912
- if (!Array.isArray(selected) && selected !== null && selected !== void 0 && selected.icon) {
913
- icons.push( /*#__PURE__*/jsx("button", {
914
- title: "Toggle options popup",
915
- type: "button",
916
- className: modules_9d0de074.selectedIcon,
917
- disabled: this.props.disabled,
918
- onClick: this._clickHandler,
919
- style: {
920
- backgroundImage: "url(".concat(selected.icon, ")")
921
- }
922
- }, "selected"));
923
- }
924
- if (clear && !disabled && !this._selectionIsEmpty()) {
925
- icons.push( /*#__PURE__*/jsx(Button, {
926
- title: "Clear selection",
927
- "data-test": "ring-clear-select",
928
- className: modules_9d0de074.clearIcon,
929
- disabled: this.props.disabled,
930
- onClick: this.clear,
931
- height: height,
932
- icon: closeIcon
933
- }, "close"));
934
- }
935
- if (!hideArrow) {
936
- icons.push( /*#__PURE__*/jsx(Button, {
937
- title: "Toggle options popup",
938
- className: modules_9d0de074.chevron,
939
- iconClassName: modules_9d0de074.chevronIcon,
940
- icon: chevronDownIcon,
941
- disabled: this.props.disabled,
942
- height: height,
943
- onClick: this._clickHandler
944
- }, "hide"));
945
- }
946
- return icons;
947
- }
948
- }, {
949
- key: "_getAvatar",
950
- value: function _getAvatar() {
951
- var _this$state$selected, _this$state$selected2;
952
- return !Array.isArray(this.state.selected) && (((_this$state$selected = this.state.selected) === null || _this$state$selected === void 0 ? void 0 : _this$state$selected.avatar) || ((_this$state$selected2 = this.state.selected) === null || _this$state$selected2 === void 0 ? void 0 : _this$state$selected2.showGeneratedAvatar)) && /*#__PURE__*/jsx(Avatar, {
953
- className: modules_9d0de074.avatar,
954
- url: this.state.selected.avatar,
955
- username: this.state.selected.username,
956
- size: Size$1.Size20
957
- });
905
+ if (clear && !disabled && !this._selectionIsEmpty()) {
906
+ icons.push(/*#__PURE__*/jsx(Button, {
907
+ title: "Clear selection",
908
+ "data-test": "ring-clear-select",
909
+ className: modules_9d0de074.clearIcon,
910
+ disabled: this.props.disabled,
911
+ onClick: this.clear,
912
+ height: height,
913
+ icon: closeIcon
914
+ }, "close"));
958
915
  }
959
- }, {
960
- key: "getShortcutsMap",
961
- value: function getShortcutsMap() {
962
- return {
963
- enter: this._onEnter,
964
- esc: this._onEsc,
965
- up: this._inputShortcutHandler,
966
- down: this._inputShortcutHandler,
967
- right: noop,
968
- left: noop,
969
- 'shift+up': noop,
970
- 'shift+down': noop,
971
- space: noop
972
- };
916
+ if (!hideArrow) {
917
+ icons.push(/*#__PURE__*/jsx(Button, {
918
+ title: "Toggle options popup",
919
+ className: modules_9d0de074.chevron,
920
+ iconClassName: modules_9d0de074.chevronIcon,
921
+ icon: chevronDownIcon,
922
+ disabled: this.props.disabled,
923
+ height: height,
924
+ onClick: this._clickHandler
925
+ }, "hide"));
973
926
  }
974
- }, {
975
- key: "renderSelect",
976
- value: function renderSelect(activeItemId) {
977
- var _this$props$label3, _this$props$label4, _this$_popup5, _this$props$buttonCla;
978
- var dataTest = this.props['data-test'];
979
- var selectedLabel = this.props.selectedLabel;
980
- var shortcutsEnabled = this.state.shortcutsEnabled;
981
- var classes = classNames(modules_9d0de074.select, 'ring-js-shortcuts', this.props.className, modules_9d0de074["height".concat(this.props.height || this.context)], {
982
- [modules_9d0de074["size".concat(this.props.size)]]: this.props.type !== Type.INLINE,
983
- [modules_9d0de074.disabled]: this.props.disabled
927
+ return icons;
928
+ }
929
+ _getAvatar() {
930
+ var _this$state$selected, _this$state$selected2;
931
+ return !Array.isArray(this.state.selected) && (((_this$state$selected = this.state.selected) === null || _this$state$selected === void 0 ? void 0 : _this$state$selected.avatar) || ((_this$state$selected2 = this.state.selected) === null || _this$state$selected2 === void 0 ? void 0 : _this$state$selected2.showGeneratedAvatar)) && /*#__PURE__*/jsx(Avatar, {
932
+ className: modules_9d0de074.avatar,
933
+ url: this.state.selected.avatar,
934
+ username: this.state.selected.username,
935
+ size: Size$1.Size20
936
+ });
937
+ }
938
+ getShortcutsMap() {
939
+ return {
940
+ enter: this._onEnter,
941
+ esc: this._onEsc,
942
+ up: this._inputShortcutHandler,
943
+ down: this._inputShortcutHandler,
944
+ right: noop,
945
+ left: noop,
946
+ 'shift+up': noop,
947
+ 'shift+down': noop,
948
+ space: noop
949
+ };
950
+ }
951
+ renderSelect(activeItemId) {
952
+ var _this$props$label3, _this$props$label4, _this$_popup5, _this$props$buttonCla;
953
+ const dataTest = this.props['data-test'];
954
+ const {
955
+ selectedLabel
956
+ } = this.props;
957
+ const {
958
+ shortcutsEnabled
959
+ } = this.state;
960
+ const classes = classNames(modules_9d0de074.select, 'ring-js-shortcuts', this.props.className, modules_9d0de074["height".concat(this.props.height || this.context)], {
961
+ [modules_9d0de074["size".concat(this.props.size)]]: this.props.type !== Type.INLINE,
962
+ [modules_9d0de074.disabled]: this.props.disabled
963
+ });
964
+ let style;
965
+ let iconsNode;
966
+ if (this.props.type === Type.INPUT || this.props.type === Type.BUTTON) {
967
+ const icons = this._getIcons();
968
+ style = getStyle(icons.length);
969
+ iconsNode = /*#__PURE__*/jsx("div", {
970
+ className: modules_9d0de074.icons,
971
+ children: icons
984
972
  });
985
- var style;
986
- var iconsNode;
987
- if (this.props.type === Type.INPUT || this.props.type === Type.BUTTON) {
988
- var icons = this._getIcons();
989
- style = getStyle(icons.length);
990
- iconsNode = /*#__PURE__*/jsx("div", {
991
- className: modules_9d0de074.icons,
992
- children: icons
993
- });
994
- }
995
- var ariaProps = this.state.showPopup ? {
996
- 'aria-owns': this.listId,
997
- 'aria-activedescendant': activeItemId,
998
- 'aria-label': (_this$props$label3 = this.props.label) !== null && _this$props$label3 !== void 0 ? _this$props$label3 : undefined
999
- } : {
1000
- 'aria-label': (_this$props$label4 = this.props.label) !== null && _this$props$label4 !== void 0 ? _this$props$label4 : undefined
1001
- };
1002
- switch (this.props.type) {
1003
- case Type.INPUT_WITHOUT_CONTROLS:
1004
- case Type.INPUT:
1005
- return /*#__PURE__*/jsxs(Fragment$1, {
1006
- children: [/*#__PURE__*/jsxs("div", {
1007
- ref: this.nodeRef,
1008
- className: classNames(classes, modules_9d0de074.inputMode),
1009
- "data-test": joinDataTestAttributes('ring-select', dataTest),
1010
- children: [shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1011
- map: this.getShortcutsMap(),
1012
- scope: this.shortcutsScope
1013
- }), /*#__PURE__*/jsx(Input, _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1014
- height: this.props.height,
1015
- autoComplete: "off",
1016
- id: this.props.id,
1017
- onClick: this._clickHandler,
1018
- inputRef: this.composedFilterRef(this.filterRef, this.props.filterRef),
1019
- disabled: this.props.disabled,
1020
- value: this.state.filterValue,
1021
- borderless: this.props.type === Type.INPUT_WITHOUT_CONTROLS,
1022
- style: style,
1023
- size: Size.FULL,
1024
- onChange: this._filterChangeHandler,
1025
- onFocus: this._focusHandler,
1026
- onBlur: this._blurHandler
1027
- // Input with error style without description
1028
- ,
1029
- error: this.props.error != null ? '' : null,
1030
- label: this.props.type === Type.INPUT ? this._getLabel() : null,
1031
- placeholder: this.props.inputPlaceholder,
1032
- onKeyDown: this.props.onKeyDown,
1033
- "data-test": "ring-select__focus",
1034
- enableShortcuts: shortcutsEnabled ? Object.keys(_objectSpread2(_objectSpread2({}, this.getShortcutsMap()), (_this$_popup5 = this._popup) === null || _this$_popup5 === void 0 || (_this$_popup5 = _this$_popup5.list) === null || _this$_popup5 === void 0 ? void 0 : _this$_popup5.shortcutsMap)) : undefined,
1035
- icon: this.props.filterIcon,
1036
- afterInput: iconsNode
1037
- })), this._renderPopup()]
1038
- }), this.props.error && /*#__PURE__*/jsx("div", {
1039
- className: classNames(modules_88cfaf40.errorText, modules_88cfaf40["size".concat(this.props.size)]),
1040
- children: this.props.error
1041
- })]
1042
- });
1043
- case Type.BUTTON:
1044
- return /*#__PURE__*/jsxs("div", {
1045
- ref: this.nodeRef,
1046
- className: classNames(classes, modules_9d0de074.buttonMode),
1047
- "data-test": joinDataTestAttributes('ring-select', dataTest),
1048
- children: [selectedLabel && /*#__PURE__*/jsx(ControlLabel, {
1049
- type: this.props.labelType,
1050
- disabled: this.props.disabled,
1051
- htmlFor: this.props.id,
1052
- children: selectedLabel
1053
- }), shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1054
- map: this.getShortcutsMap(),
1055
- scope: this.shortcutsScope
1056
- }), /*#__PURE__*/jsxs("div", {
1057
- className: modules_9d0de074.buttonContainer,
1058
- children: [/*#__PURE__*/jsxs(Button, _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1059
- height: this.props.height,
1060
- id: this.props.id,
1061
- onClick: this._clickHandler,
1062
- className: classNames(this.props.buttonClassName, modules_9d0de074.buttonValue, {
1063
- [modules_9d0de074.buttonValueOpen]: this.state.showPopup,
1064
- [modules_9d0de074.buttonValueEmpty]: this._selectionIsEmpty()
1065
- }),
1066
- disabled: this.props.disabled,
1067
- style: style,
1068
- "data-test": "ring-select__button ring-select__focus",
1069
- children: [this._getAvatar(), this._getPlaceholder()]
1070
- })), iconsNode]
1071
- }), this._renderPopup()]
1072
- });
1073
- case Type.INLINE:
1074
- return /*#__PURE__*/jsxs("div", {
1075
- className: classes,
973
+ }
974
+ const ariaProps = this.state.showPopup ? {
975
+ 'aria-owns': this.listId,
976
+ 'aria-activedescendant': activeItemId,
977
+ 'aria-label': (_this$props$label3 = this.props.label) !== null && _this$props$label3 !== void 0 ? _this$props$label3 : undefined
978
+ } : {
979
+ 'aria-label': (_this$props$label4 = this.props.label) !== null && _this$props$label4 !== void 0 ? _this$props$label4 : undefined
980
+ };
981
+ switch (this.props.type) {
982
+ case Type.INPUT_WITHOUT_CONTROLS:
983
+ case Type.INPUT:
984
+ return /*#__PURE__*/jsxs(Fragment$1, {
985
+ children: [/*#__PURE__*/jsxs("div", {
1076
986
  ref: this.nodeRef,
987
+ className: classNames(classes, modules_9d0de074.inputMode),
1077
988
  "data-test": joinDataTestAttributes('ring-select', dataTest),
989
+ role: "presentation" // has interactive elements inside
990
+ ,
991
+ onMouseDown: this.mouseDownHandler,
992
+ onMouseUp: this.mouseUpHandler,
1078
993
  children: [shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1079
994
  map: this.getShortcutsMap(),
1080
995
  scope: this.shortcutsScope
1081
- }), /*#__PURE__*/jsx(Anchor, _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1082
- className: (_this$props$buttonCla = this.props.buttonClassName) !== null && _this$props$buttonCla !== void 0 ? _this$props$buttonCla : undefined,
996
+ }), /*#__PURE__*/jsx(Input, _objectSpread2(_objectSpread2({}, ariaProps), {}, {
997
+ height: this.props.height,
998
+ autoComplete: "off",
1083
999
  id: this.props.id,
1084
1000
  onClick: this._clickHandler,
1085
- "data-test": "ring-select__focus",
1001
+ inputRef: this.composedFilterRef(this.filterRef, this.props.filterRef),
1086
1002
  disabled: this.props.disabled,
1087
- active: this.state.showPopup,
1088
- children: this._getPlaceholder()
1003
+ value: this.state.filterValue,
1004
+ borderless: this.props.type === Type.INPUT_WITHOUT_CONTROLS,
1005
+ style: style,
1006
+ size: Size.FULL,
1007
+ onChange: this._filterChangeHandler,
1008
+ onFocus: this._focusHandler,
1009
+ onBlur: this._blurHandler
1010
+ // Input with error style without description
1011
+ ,
1012
+ error: this.props.error != null ? '' : null,
1013
+ label: this.props.type === Type.INPUT ? this._getLabel() : null,
1014
+ placeholder: this.props.inputPlaceholder,
1015
+ onKeyDown: this.props.onKeyDown,
1016
+ "data-test": "ring-select__focus",
1017
+ enableShortcuts: shortcutsEnabled ? Object.keys(_objectSpread2(_objectSpread2({}, this.getShortcutsMap()), (_this$_popup5 = this._popup) === null || _this$_popup5 === void 0 || (_this$_popup5 = _this$_popup5.list) === null || _this$_popup5 === void 0 ? void 0 : _this$_popup5.shortcutsMap)) : undefined,
1018
+ icon: this.props.filterIcon,
1019
+ afterInput: iconsNode
1089
1020
  })), this._renderPopup()]
1090
- });
1091
- default:
1092
- if (this.props.customAnchor) {
1093
- return /*#__PURE__*/jsxs(Fragment, {
1094
- children: [shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1095
- map: this.getShortcutsMap(),
1096
- scope: this.shortcutsScope
1097
- }), this.props.customAnchor({
1098
- wrapperProps: {
1099
- ref: this.nodeRef,
1100
- 'data-test': joinDataTestAttributes('ring-select', dataTest)
1101
- },
1102
- buttonProps: _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1103
- id: this.props.id,
1104
- onClick: this._clickHandler,
1105
- disabled: this.props.disabled,
1106
- children: this._getPlaceholder(),
1107
- 'data-test': 'ring-select__focus'
1108
- }),
1109
- popup: this._renderPopup()
1110
- })]
1111
- });
1112
- }
1113
- return /*#__PURE__*/jsx("span", {
1114
- id: this.props.id,
1115
- ref: this.nodeRef,
1116
- "data-test": "ring-select",
1117
- children: this._renderPopup()
1118
- });
1119
- }
1120
- }
1121
- }, {
1122
- key: "render",
1123
- value: function render() {
1124
- var _this4 = this;
1125
- return /*#__PURE__*/jsx(ActiveItemContext.Provider, {
1126
- children: /*#__PURE__*/jsx(ActiveItemContext.ValueContext.Consumer, {
1127
- children: function children(activeItemId) {
1128
- return _this4.renderSelect(activeItemId);
1129
- }
1130
- })
1131
- });
1132
- }
1133
- }], [{
1134
- key: "getDerivedStateFromProps",
1135
- value: function getDerivedStateFromProps(nextProps, prevState) {
1136
- var multiple = nextProps.multiple,
1137
- data = nextProps.data,
1138
- type = nextProps.type;
1139
- var prevSelected = prevState.prevSelected,
1140
- prevData = prevState.prevData,
1141
- prevMultiple = prevState.prevMultiple,
1142
- filterValue = prevState.filterValue;
1143
- var nextState = {
1144
- prevData: data,
1145
- prevSelected: nextProps.selected,
1146
- prevMultiple: multiple
1147
- };
1148
- if ('data' in nextProps && data !== prevData) {
1149
- var _getListItems3 = _getListItems(nextProps, prevState, filterValue, data),
1150
- filteredData = _getListItems3.filteredData,
1151
- addButton = _getListItems3.addButton;
1152
- Object.assign(nextState, {
1153
- shownData: filteredData,
1154
- addButton
1021
+ }), this.props.error && /*#__PURE__*/jsx("div", {
1022
+ className: classNames(modules_88cfaf40.errorText, modules_88cfaf40["size".concat(this.props.size)]),
1023
+ children: this.props.error
1024
+ })]
1155
1025
  });
1156
- if (prevState.selected) {
1157
- Object.assign(nextState, {
1158
- selectedIndex: getSelectedIndex(prevState.selected, data),
1159
- filterValue: _getValueForFilter(prevState.selected, type, filterValue)
1160
- });
1161
- }
1162
- }
1163
- if ('selected' in nextProps && nextProps.selected !== prevSelected) {
1164
- var _selected = nextProps.selected || (multiple ? [] : null);
1165
- var selectedIndex = getSelectedIndex(_selected, data || prevData);
1166
- Object.assign(nextState, {
1167
- selected: _selected,
1168
- filterValue: _getValueForFilter(_selected, type, filterValue)
1026
+ case Type.BUTTON:
1027
+ return /*#__PURE__*/jsxs("div", {
1028
+ ref: this.nodeRef,
1029
+ className: classNames(classes, modules_9d0de074.buttonMode),
1030
+ "data-test": joinDataTestAttributes('ring-select', dataTest),
1031
+ children: [selectedLabel && /*#__PURE__*/jsx(ControlLabel, {
1032
+ type: this.props.labelType,
1033
+ disabled: this.props.disabled,
1034
+ htmlFor: this.props.id,
1035
+ children: selectedLabel
1036
+ }), shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1037
+ map: this.getShortcutsMap(),
1038
+ scope: this.shortcutsScope
1039
+ }), /*#__PURE__*/jsxs("div", {
1040
+ className: modules_9d0de074.buttonContainer,
1041
+ children: [/*#__PURE__*/jsxs(Button, _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1042
+ height: this.props.height,
1043
+ id: this.props.id,
1044
+ onClick: this._clickHandler,
1045
+ className: classNames(this.props.buttonClassName, modules_9d0de074.buttonValue, {
1046
+ [modules_9d0de074.buttonValueOpen]: this.state.showPopup,
1047
+ [modules_9d0de074.buttonValueEmpty]: this._selectionIsEmpty()
1048
+ }),
1049
+ disabled: this.props.disabled,
1050
+ style: style,
1051
+ "data-test": "ring-select__button ring-select__focus",
1052
+ children: [this._getAvatar(), this._getPlaceholder()]
1053
+ })), iconsNode]
1054
+ }), this._renderPopup()]
1169
1055
  });
1170
- if (!Array.isArray(prevSelected) || !Array.isArray(_selected) || !isSameSelected(prevSelected, _selected)) {
1171
- Object.assign(nextState, {
1172
- selectedIndex
1056
+ case Type.INLINE:
1057
+ return /*#__PURE__*/jsxs("div", {
1058
+ className: classes,
1059
+ ref: this.nodeRef,
1060
+ "data-test": joinDataTestAttributes('ring-select', dataTest),
1061
+ children: [shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1062
+ map: this.getShortcutsMap(),
1063
+ scope: this.shortcutsScope
1064
+ }), /*#__PURE__*/jsx(Anchor, _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1065
+ className: (_this$props$buttonCla = this.props.buttonClassName) !== null && _this$props$buttonCla !== void 0 ? _this$props$buttonCla : undefined,
1066
+ id: this.props.id,
1067
+ onClick: this._clickHandler,
1068
+ "data-test": "ring-select__focus",
1069
+ disabled: this.props.disabled,
1070
+ active: this.state.showPopup,
1071
+ children: this._getPlaceholder()
1072
+ })), this._renderPopup()]
1073
+ });
1074
+ default:
1075
+ if (this.props.customAnchor) {
1076
+ return /*#__PURE__*/jsxs(Fragment, {
1077
+ children: [shortcutsEnabled && /*#__PURE__*/jsx(Shortcuts, {
1078
+ map: this.getShortcutsMap(),
1079
+ scope: this.shortcutsScope
1080
+ }), this.props.customAnchor({
1081
+ wrapperProps: {
1082
+ ref: this.nodeRef,
1083
+ 'data-test': joinDataTestAttributes('ring-select', dataTest)
1084
+ },
1085
+ buttonProps: _objectSpread2(_objectSpread2({}, ariaProps), {}, {
1086
+ id: this.props.id,
1087
+ onClick: this._clickHandler,
1088
+ disabled: this.props.disabled,
1089
+ children: this._getPlaceholder(),
1090
+ 'data-test': 'ring-select__focus'
1091
+ }),
1092
+ popup: this._renderPopup()
1093
+ })]
1173
1094
  });
1174
1095
  }
1175
- }
1176
- if (prevMultiple !== multiple && !deepEqual(prevMultiple, multiple)) {
1177
- nextState.selected = multiple ? [] : null;
1178
- }
1179
- if (multiple && !nextState.selected) {
1180
- nextState.selected = prevState.selected;
1181
- }
1182
- var _prevState$nextState = _objectSpread2(_objectSpread2({}, prevState), nextState),
1183
- selected = _prevState$nextState.selected;
1184
- if (selected && Array.isArray(selected)) {
1185
- nextState.multipleMap = buildMultipleMap(selected);
1186
- var _getListItems4 = _getListItems(nextProps, nextState, filterValue, data),
1187
- _filteredData = _getListItems4.filteredData,
1188
- _addButton = _getListItems4.addButton;
1189
- Object.assign(nextState, {
1190
- shownData: _filteredData,
1191
- addButton: _addButton
1096
+ return /*#__PURE__*/jsx("span", {
1097
+ id: this.props.id,
1098
+ ref: this.nodeRef,
1099
+ "data-test": "ring-select",
1100
+ children: this._renderPopup()
1192
1101
  });
1193
- }
1194
- return nextState;
1195
1102
  }
1196
- }]);
1197
- }(Component);
1103
+ }
1104
+ render() {
1105
+ return /*#__PURE__*/jsx(ActiveItemContext.Provider, {
1106
+ children: /*#__PURE__*/jsx(ActiveItemContext.ValueContext.Consumer, {
1107
+ children: activeItemId => this.renderSelect(activeItemId)
1108
+ })
1109
+ });
1110
+ }
1111
+ }
1198
1112
  _defineProperty(Select, "defaultProps", {
1199
1113
  data: [],
1200
1114
  filter: false,
@@ -1263,69 +1177,6 @@ _defineProperty(Select, "defaultProps", {
1263
1177
  _defineProperty(Select, "contextType", ControlsHeightContext);
1264
1178
  _defineProperty(Select, "Type", Type);
1265
1179
  _defineProperty(Select, "Size", Size);
1266
- Select.propTypes = {
1267
- className: PropTypes.string,
1268
- buttonClassName: PropTypes.string,
1269
- id: PropTypes.string,
1270
- multiple: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
1271
- allowAny: PropTypes.bool,
1272
- filter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
1273
- filterIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType]),
1274
- filterRef: PropTypes.oneOfType([PropTypes.func, refObject(PropTypes.instanceOf(HTMLInputElement))]),
1275
- getInitial: PropTypes.func,
1276
- onClose: PropTypes.func,
1277
- onOpen: PropTypes.func,
1278
- onDone: PropTypes.func,
1279
- onFilter: PropTypes.func,
1280
- onChange: PropTypes.func,
1281
- onReset: PropTypes.func,
1282
- onLoadMore: PropTypes.func,
1283
- onAdd: PropTypes.func,
1284
- onBeforeOpen: PropTypes.func,
1285
- onSelect: PropTypes.func,
1286
- onDeselect: PropTypes.func,
1287
- onOutsideClick: PropTypes.func,
1288
- onFocus: PropTypes.func,
1289
- onBlur: PropTypes.func,
1290
- onKeyDown: PropTypes.func,
1291
- selected: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
1292
- data: PropTypes.array,
1293
- tags: PropTypes.object,
1294
- targetElement: PropTypes.object,
1295
- loading: PropTypes.bool,
1296
- loadingMessage: PropTypes.string,
1297
- notFoundMessage: PropTypes.string,
1298
- maxHeight: PropTypes.number,
1299
- minWidth: PropTypes.number,
1300
- directions: PropTypes.array,
1301
- popupClassName: PropTypes.string,
1302
- popupStyle: PropTypes.object,
1303
- preventListOverscroll: PropTypes.bool,
1304
- top: PropTypes.number,
1305
- left: PropTypes.number,
1306
- renderOptimization: PropTypes.bool,
1307
- ringPopupTarget: PropTypes.string,
1308
- error: PropTypes.string,
1309
- hint: List.ListHint.propTypes.label,
1310
- add: PropTypes.object,
1311
- type: PropTypes.oneOf(Object.values(Type)),
1312
- disabled: PropTypes.bool,
1313
- hideSelected: PropTypes.bool,
1314
- label: PropTypes.string,
1315
- selectedLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
1316
- inputPlaceholder: PropTypes.string,
1317
- clear: PropTypes.bool,
1318
- hideArrow: PropTypes.bool,
1319
- showPopup: PropTypes.bool,
1320
- tryKeepOpen: PropTypes.bool,
1321
- compact: PropTypes.bool,
1322
- size: PropTypes.oneOf(Object.values(Size)),
1323
- customAnchor: PropTypes.func,
1324
- disableMoveOverflow: PropTypes.bool,
1325
- disableScrollToActive: PropTypes.bool,
1326
- dir: PropTypes.oneOf(['ltr', 'rtl']),
1327
- 'data-test': PropTypes.string
1328
- };
1329
- var RerenderableSelect = rerenderHOC(Select);
1180
+ const RerenderableSelect = rerenderHOC(Select);
1330
1181
 
1331
1182
  export { RerenderableSelect, Type, Select as default };