@jetbrains/ring-ui 5.0.155 → 5.0.157

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 (299) hide show
  1. package/components/checkbox/checkbox.css +1 -1
  2. package/components/global/variables_dark.css +2 -2
  3. package/components/radio/radio.css +1 -1
  4. package/dist/_helpers/_rollupPluginBabelHelpers.js +642 -1
  5. package/dist/_helpers/anchor.js +6 -7
  6. package/dist/_helpers/button__classes.js +16 -28
  7. package/dist/_helpers/card.js +107 -95
  8. package/dist/_helpers/dialog__body-scroll-preventer.js +20 -11
  9. package/dist/_helpers/footer.js +29 -34
  10. package/dist/_helpers/query-assist__suggestions.js +91 -74
  11. package/dist/_helpers/select__filter.js +71 -48
  12. package/dist/_helpers/services-link.js +41 -29
  13. package/dist/_helpers/sidebar.js +103 -99
  14. package/dist/_helpers/theme.js +42 -35
  15. package/dist/_helpers/title.js +71 -57
  16. package/dist/alert/alert.js +199 -158
  17. package/dist/alert/container.js +43 -32
  18. package/dist/alert-service/alert-service.js +172 -104
  19. package/dist/analytics/analytics.js +92 -68
  20. package/dist/analytics/analytics__custom-plugin.js +84 -60
  21. package/dist/analytics/analytics__fus-plugin.js +28 -15
  22. package/dist/analytics/analytics__ga-plugin.js +60 -43
  23. package/dist/analytics/analytics__plugin-utils.js +28 -22
  24. package/dist/auth/auth.js +36 -4
  25. package/dist/auth/auth__core.js +1458 -732
  26. package/dist/auth/background-flow.js +129 -87
  27. package/dist/auth/down-notification.js +75 -30
  28. package/dist/auth/iframe-flow.js +136 -75
  29. package/dist/auth/landing.js +90 -30
  30. package/dist/auth/request-builder.js +82 -46
  31. package/dist/auth/response-parser.js +119 -86
  32. package/dist/auth/storage.js +333 -171
  33. package/dist/auth/token-validator.js +244 -137
  34. package/dist/auth/window-flow.js +136 -92
  35. package/dist/auth-dialog/auth-dialog.js +176 -114
  36. package/dist/auth-dialog-service/auth-dialog-service.js +32 -7
  37. package/dist/auth-ng/auth-ng.js +70 -34
  38. package/dist/auth-ng/auth-ng.mock.js +6 -6
  39. package/dist/autofocus-ng/autofocus-ng.js +23 -8
  40. package/dist/avatar/avatar-example-datauri.js +1 -23
  41. package/dist/avatar/avatar.js +155 -119
  42. package/dist/avatar/fallback-avatar.js +41 -22
  43. package/dist/avatar-editor-ng/avatar-editor-ng.js +56 -23
  44. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +1 -28
  45. package/dist/avatar-ng/avatar-ng.js +23 -1
  46. package/dist/badge/badge.js +43 -35
  47. package/dist/badge-ng/badge-ng.js +13 -1
  48. package/dist/breadcrumb-ng/breadcrumb-ng.js +15 -29
  49. package/dist/button/button.js +111 -87
  50. package/dist/button/button__classes.js +1 -0
  51. package/dist/button-group/button-group.js +35 -19
  52. package/dist/button-group/caption.js +22 -14
  53. package/dist/button-group-ng/button-group-ng.js +13 -7
  54. package/dist/button-ng/button-ng.js +154 -133
  55. package/dist/button-set/button-set.js +34 -20
  56. package/dist/button-set-ng/button-set-ng.js +2 -2
  57. package/dist/button-toolbar/button-toolbar.js +33 -19
  58. package/dist/button-toolbar-ng/button-toolbar-ng.js +5 -3
  59. package/dist/caret/caret.js +225 -188
  60. package/dist/checkbox/checkbox.js +104 -76
  61. package/dist/checkbox-ng/checkbox-ng.js +18 -27
  62. package/dist/clipboard/clipboard-fallback.js +10 -10
  63. package/dist/clipboard/clipboard.js +131 -34
  64. package/dist/code/code.js +168 -92
  65. package/dist/compiler-ng/compiler-ng.js +18 -15
  66. package/dist/confirm/confirm.js +108 -66
  67. package/dist/confirm-ng/confirm-ng.js +33 -4
  68. package/dist/confirm-service/confirm-service.js +66 -42
  69. package/dist/content-layout/content-layout.js +64 -43
  70. package/dist/content-layout/sidebar.js +1 -0
  71. package/dist/contenteditable/contenteditable.js +61 -50
  72. package/dist/control-label/control-label.js +11 -15
  73. package/dist/data-list/data-list.js +184 -128
  74. package/dist/data-list/data-list.mock.js +11 -2
  75. package/dist/data-list/item.js +174 -143
  76. package/dist/data-list/selection.js +139 -76
  77. package/dist/data-list/title.js +13 -1
  78. package/dist/data-list-ng/data-list-ng.js +31 -1
  79. package/dist/date-picker/consts.js +18 -15
  80. package/dist/date-picker/date-input.js +147 -115
  81. package/dist/date-picker/date-picker.js +285 -228
  82. package/dist/date-picker/date-popup.js +397 -356
  83. package/dist/date-picker/day.js +98 -84
  84. package/dist/date-picker/month-names.js +64 -43
  85. package/dist/date-picker/month-slider.js +74 -51
  86. package/dist/date-picker/month.js +21 -15
  87. package/dist/date-picker/months.js +48 -43
  88. package/dist/date-picker/weekdays.js +18 -12
  89. package/dist/date-picker/years.js +109 -84
  90. package/dist/dialog/dialog.js +189 -141
  91. package/dist/dialog/dialog__body-scroll-preventer.js +5 -0
  92. package/dist/dialog-ng/dialog-ng.js +401 -287
  93. package/dist/dialog-ng/dialog-ng__template.js +1 -70
  94. package/dist/docked-panel-ng/docked-panel-ng.js +33 -18
  95. package/dist/dropdown/anchor.js +10 -0
  96. package/dist/dropdown/dropdown.js +214 -182
  97. package/dist/dropdown-menu/dropdown-menu.js +102 -72
  98. package/dist/editable-heading/editable-heading.js +100 -58
  99. package/dist/error-bubble/error-bubble.js +64 -31
  100. package/dist/error-message/error-message.js +61 -38
  101. package/dist/error-message-ng/error-message-ng.js +11 -22
  102. package/dist/footer/footer.js +11 -1
  103. package/dist/footer-ng/footer-ng.js +64 -36
  104. package/dist/form-ng/form-ng.js +66 -56
  105. package/dist/global/angular-component-factory.js +76 -53
  106. package/dist/global/compose.js +10 -1
  107. package/dist/global/composeRefs.js +12 -7
  108. package/dist/global/controls-height.js +2 -2
  109. package/dist/global/create-stateful-context.js +19 -19
  110. package/dist/global/data-tests.js +15 -7
  111. package/dist/global/dom.js +95 -53
  112. package/dist/global/focus-sensor-hoc.js +134 -122
  113. package/dist/global/fuzzy-highlight.js +41 -27
  114. package/dist/global/get-event-key.js +8 -8
  115. package/dist/global/get-uid.js +8 -4
  116. package/dist/global/inject-styles.js +15 -10
  117. package/dist/global/linear-function.js +2 -2
  118. package/dist/global/listeners.js +53 -27
  119. package/dist/global/memoize.js +13 -6
  120. package/dist/global/normalize-indent.js +51 -19
  121. package/dist/global/promise-with-timeout.js +8 -6
  122. package/dist/global/prop-types.js +5 -3
  123. package/dist/global/react-dom-renderer.js +47 -28
  124. package/dist/global/react-render-adapter.js +19 -13
  125. package/dist/global/rerender-hoc.js +41 -16
  126. package/dist/global/ring-angular-component.js +20 -10
  127. package/dist/global/schedule-raf.js +6 -5
  128. package/dist/global/sniffer.js +1 -1
  129. package/dist/global/theme.js +24 -0
  130. package/dist/global/trivial-template-tag.js +10 -3
  131. package/dist/global/typescript-utils.js +6 -2
  132. package/dist/global/url.js +27 -21
  133. package/dist/global/use-event-callback.js +4 -6
  134. package/dist/grid/col.js +55 -35
  135. package/dist/grid/grid.js +36 -17
  136. package/dist/grid/row.js +48 -35
  137. package/dist/group/group.js +27 -17
  138. package/dist/group-ng/group-ng.js +2 -2
  139. package/dist/header/header.js +80 -33
  140. package/dist/header/logo.js +39 -20
  141. package/dist/header/profile.js +188 -150
  142. package/dist/header/services-link.js +9 -0
  143. package/dist/header/services.js +118 -73
  144. package/dist/header/smart-profile.js +207 -111
  145. package/dist/header/smart-services.js +115 -62
  146. package/dist/header/tray-icon.js +38 -21
  147. package/dist/header/tray.js +34 -21
  148. package/dist/heading/heading.js +25 -26
  149. package/dist/heading-ng/heading-ng.js +11 -1
  150. package/dist/http/http.js +368 -215
  151. package/dist/http/http.mock.js +104 -49
  152. package/dist/hub-source/hub-source.js +191 -83
  153. package/dist/hub-source/hub-source__user.js +45 -11
  154. package/dist/hub-source/hub-source__users-groups.js +67 -37
  155. package/dist/i18n/i18n-context.js +14 -10
  156. package/dist/i18n/i18n.js +11 -7
  157. package/dist/icon/icon.js +94 -76
  158. package/dist/icon/icon__svg.js +31 -24
  159. package/dist/icon/index.js +9 -0
  160. package/dist/icon-ng/icon-ng.js +27 -15
  161. package/dist/input/input.js +184 -145
  162. package/dist/input-ng/input-ng.js +96 -118
  163. package/dist/island/adaptive-island-hoc.js +45 -30
  164. package/dist/island/content.js +130 -115
  165. package/dist/island/header.js +69 -56
  166. package/dist/island/island.js +40 -28
  167. package/dist/island-legacy/content-legacy.js +27 -17
  168. package/dist/island-legacy/header-legacy.js +29 -19
  169. package/dist/island-legacy/island-legacy.js +27 -17
  170. package/dist/island-ng/island-content-ng.js +17 -26
  171. package/dist/island-ng/island-header-ng.js +9 -12
  172. package/dist/island-ng/island-ng-class-fixer.js +3 -0
  173. package/dist/island-ng/island-ng.js +6 -10
  174. package/dist/link/clickableLink.js +61 -44
  175. package/dist/link/link.js +85 -74
  176. package/dist/link-ng/link-ng.js +3 -5
  177. package/dist/list/consts.js +1 -1
  178. package/dist/list/list.js +696 -602
  179. package/dist/list/list__custom.js +61 -44
  180. package/dist/list/list__hint.js +21 -10
  181. package/dist/list/list__item.js +167 -129
  182. package/dist/list/list__link.js +54 -37
  183. package/dist/list/list__separator.js +24 -14
  184. package/dist/list/list__title.js +32 -22
  185. package/dist/list/list__users-groups-source.js +131 -54
  186. package/dist/loader/loader.js +78 -43
  187. package/dist/loader/loader__core.js +257 -189
  188. package/dist/loader-inline/loader-inline.js +37 -23
  189. package/dist/loader-inline-ng/loader-inline-ng.js +2 -2
  190. package/dist/loader-ng/loader-ng.js +46 -19
  191. package/dist/loader-screen/loader-screen.js +48 -25
  192. package/dist/loader-screen-ng/loader-screen-ng.js +46 -30
  193. package/dist/login-dialog/login-dialog.js +162 -111
  194. package/dist/login-dialog/service.js +35 -7
  195. package/dist/markdown/code.js +31 -9
  196. package/dist/markdown/heading.js +3 -5
  197. package/dist/markdown/link.js +13 -6
  198. package/dist/markdown/markdown.js +66 -33
  199. package/dist/message/message.js +157 -125
  200. package/dist/message-bundle-ng/message-bundle-ng.js +128 -44
  201. package/dist/old-browsers-message/old-browsers-message.js +19 -11
  202. package/dist/old-browsers-message/old-browsers-message__stop.js +8 -0
  203. package/dist/old-browsers-message/white-list.js +16 -9
  204. package/dist/pager/pager.js +275 -210
  205. package/dist/pager-ng/pager-ng.js +36 -1
  206. package/dist/panel/panel.js +27 -17
  207. package/dist/panel-ng/panel-ng.js +14 -1
  208. package/dist/permissions/permissions.js +173 -127
  209. package/dist/permissions/permissions__cache.js +225 -194
  210. package/dist/permissions-ng/permissions-ng.js +86 -35
  211. package/dist/place-under-ng/place-under-ng.js +68 -45
  212. package/dist/popup/popup.consts.js +1 -1
  213. package/dist/popup/popup.js +342 -280
  214. package/dist/popup/popup.target.js +8 -9
  215. package/dist/popup/position.js +153 -153
  216. package/dist/popup-menu/popup-menu.js +86 -44
  217. package/dist/progress-bar/progress-bar.js +97 -80
  218. package/dist/progress-bar-ng/progress-bar-ng.js +11 -1
  219. package/dist/promised-click-ng/promised-click-ng.js +92 -58
  220. package/dist/proxy-attrs/proxy-attrs.js +18 -9
  221. package/dist/query-assist/query-assist.js +903 -832
  222. package/dist/query-assist/query-assist__suggestions.js +33 -1
  223. package/dist/query-assist-ng/query-assist-ng.js +38 -1
  224. package/dist/radio/radio.js +36 -19
  225. package/dist/radio/radio__item.js +71 -52
  226. package/dist/radio-ng/radio-ng.js +14 -25
  227. package/dist/save-field-ng/save-field-ng.js +86 -52
  228. package/dist/save-field-ng/save-field-ng__template.js +1 -32
  229. package/dist/select/select.js +937 -835
  230. package/dist/select/select__filter.js +33 -0
  231. package/dist/select/select__popup.js +472 -359
  232. package/dist/select-ng/select-ng.js +125 -74
  233. package/dist/select-ng/select-ng__lazy.js +101 -50
  234. package/dist/select-ng/select-ng__options.js +107 -81
  235. package/dist/shortcuts/core.js +218 -166
  236. package/dist/shortcuts/shortcut-title.js +11 -6
  237. package/dist/shortcuts/shortcuts-hoc.js +47 -19
  238. package/dist/shortcuts/shortcuts.js +77 -50
  239. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +104 -53
  240. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +1 -48
  241. package/dist/shortcuts-ng/shortcuts-ng.js +86 -51
  242. package/dist/sidebar-ng/sidebar-ng.js +53 -22
  243. package/dist/sidebar-ng/sidebar-ng__button-template.js +1 -18
  244. package/dist/sidebar-ng/sidebar-ng__template.js +1 -10
  245. package/dist/storage/storage.js +35 -4
  246. package/dist/storage/storage__fallback.js +224 -149
  247. package/dist/storage/storage__local.js +156 -90
  248. package/dist/style.css +1 -1
  249. package/dist/tab-trap/tab-trap.js +157 -122
  250. package/dist/table/cell.js +28 -14
  251. package/dist/table/disable-hover-hoc.js +53 -33
  252. package/dist/table/header-cell.js +87 -64
  253. package/dist/table/header.js +126 -98
  254. package/dist/table/multitable.js +127 -107
  255. package/dist/table/row-with-focus-sensor.js +73 -25
  256. package/dist/table/row.js +208 -170
  257. package/dist/table/selection-adapter.js +3 -1
  258. package/dist/table/selection-shortcuts-hoc.js +184 -181
  259. package/dist/table/selection.js +228 -156
  260. package/dist/table/smart-table.js +93 -51
  261. package/dist/table/table.js +348 -281
  262. package/dist/table-legacy-ng/table-legacy-ng.js +117 -102
  263. package/dist/table-legacy-ng/table-legacy-ng__pager.js +42 -10
  264. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +92 -69
  265. package/dist/table-legacy-ng/table-legacy-ng__selection.js +169 -119
  266. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +36 -21
  267. package/dist/table-ng/smart-table-ng.js +31 -1
  268. package/dist/table-ng/table-ng.js +31 -1
  269. package/dist/tabs/collapsible-more.js +87 -50
  270. package/dist/tabs/collapsible-tab.js +45 -38
  271. package/dist/tabs/collapsible-tabs.js +161 -94
  272. package/dist/tabs/custom-item.js +2 -4
  273. package/dist/tabs/dumb-tabs.js +122 -75
  274. package/dist/tabs/smart-tabs.js +75 -29
  275. package/dist/tabs/tab-link.js +29 -19
  276. package/dist/tabs/tab.js +33 -19
  277. package/dist/tabs/tabs.js +35 -0
  278. package/dist/tabs-ng/tabs-ng.js +38 -24
  279. package/dist/tabs-ng/tabs-ng__template.js +1 -38
  280. package/dist/tag/tag.js +170 -133
  281. package/dist/tags-input/tags-input.js +428 -327
  282. package/dist/tags-input-ng/tags-input-ng.js +37 -1
  283. package/dist/tags-list/tags-list.js +80 -56
  284. package/dist/template-ng/template-ng.js +50 -39
  285. package/dist/text/text.js +38 -28
  286. package/dist/title-ng/title-ng.js +28 -23
  287. package/dist/toggle/toggle.js +72 -56
  288. package/dist/toggle-ng/toggle-ng.js +14 -1
  289. package/dist/tooltip/tooltip.js +192 -146
  290. package/dist/tooltip-ng/tooltip-ng.js +51 -25
  291. package/dist/user-agreement/service.js +374 -227
  292. package/dist/user-agreement/toolbox.eula.js +1 -160
  293. package/dist/user-agreement/user-agreement.js +128 -86
  294. package/dist/user-card/card.js +32 -0
  295. package/dist/user-card/smart-user-card-tooltip.js +116 -51
  296. package/dist/user-card/tooltip.js +90 -48
  297. package/dist/user-card/user-card.js +32 -0
  298. package/dist/user-card-ng/user-card-ng.js +34 -2
  299. package/package.json +13 -13
@@ -1,3 +1,12 @@
1
+ import { c as _defineProperty, j as _inherits, k as _createSuper, b as _classCallCheck, m as _assertThisInitialized, _ as _createClass, d as _typeof } 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.object.to-string.js';
5
+ import 'core-js/modules/es.array.index-of.js';
6
+ import 'core-js/modules/es.array.reduce.js';
7
+ import 'core-js/modules/es.number.constructor.js';
8
+ import 'core-js/modules/es.array.slice.js';
9
+ import 'core-js/modules/es.object.keys.js';
1
10
  import React, { PureComponent } from 'react';
2
11
  import classNames from 'classnames';
3
12
  import searchIcon from '@jetbrains/icons/search';
@@ -21,15 +30,36 @@ import Text from '../text/text.js';
21
30
  import { ControlsHeight } from '../global/controls-height.js';
22
31
  import { DEFAULT_DIRECTIONS } from '../popup/popup.consts.js';
23
32
  import { S as SelectFilter, m as modules_b607bec2 } from '../_helpers/select__filter.js';
24
- import '../_helpers/_rollupPluginBabelHelpers.js';
25
33
  import 'util-deprecate';
26
34
  import '../icon/icon__constants.js';
27
35
  import '../_helpers/icon.js';
28
36
  import '../icon/icon__svg.js';
37
+ import 'core-js/modules/es.regexp.exec.js';
38
+ import 'core-js/modules/es.string.replace.js';
39
+ import 'core-js/modules/es.string.starts-with.js';
40
+ import 'core-js/modules/es.array.iterator.js';
41
+ import 'core-js/modules/es.map.js';
42
+ import 'core-js/modules/es.string.iterator.js';
43
+ import 'core-js/modules/web.dom-collections.iterator.js';
44
+ import 'core-js/modules/es.weak-map.js';
45
+ import 'core-js/modules/web.dom-collections.for-each.js';
46
+ import 'core-js/modules/es.object.entries.js';
47
+ import 'core-js/modules/es.regexp.to-string.js';
29
48
  import 'react-dom';
30
49
  import '../global/schedule-raf.js';
31
50
  import '../global/data-tests.js';
32
51
  import '../tab-trap/tab-trap.js';
52
+ import 'core-js/modules/es.array.includes.js';
53
+ import 'core-js/modules/es.string.includes.js';
54
+ import 'core-js/modules/es.array.sort.js';
55
+ import 'core-js/modules/es.array.map.js';
56
+ import 'core-js/modules/es.object.assign.js';
57
+ import 'core-js/modules/es.string.split.js';
58
+ import 'core-js/modules/es.set.js';
59
+ import 'core-js/modules/es.symbol.js';
60
+ import 'core-js/modules/es.symbol.description.js';
61
+ import 'core-js/modules/es.array.find-index.js';
62
+ import 'core-js/modules/es.array.find.js';
33
63
  import 'react-virtualized/dist/es/List';
34
64
  import 'react-virtualized/dist/es/AutoSizer';
35
65
  import 'react-virtualized/dist/es/WindowScroller';
@@ -43,7 +73,9 @@ import '../_helpers/list.js';
43
73
  import '../list/list__item.js';
44
74
  import '../avatar/avatar.js';
45
75
  import '../global/url.js';
76
+ import 'core-js/modules/es.string.match.js';
46
77
  import '../avatar/fallback-avatar.js';
78
+ import 'core-js/modules/es.array.from.js';
47
79
  import '../checkbox/checkbox.js';
48
80
  import '@jetbrains/icons/checkmark-14px';
49
81
  import '@jetbrains/icons/remove-14px';
@@ -57,6 +89,7 @@ import '../list/list__separator.js';
57
89
  import '../list/list__hint.js';
58
90
  import '../list/consts.js';
59
91
  import '../shortcuts/core.js';
92
+ import 'core-js/modules/es.array.splice.js';
60
93
  import 'combokeys';
61
94
  import '../global/sniffer.js';
62
95
  import 'sniffr';
@@ -66,394 +99,474 @@ import '@jetbrains/icons/close-12px';
66
99
  import '@jetbrains/icons/chevron-10px';
67
100
  import '../_helpers/button__classes.js';
68
101
  import '../input/input.js';
102
+ import 'core-js/modules/es.object.values.js';
69
103
  import '../i18n/i18n-context.js';
70
104
  import '../i18n/i18n.js';
71
105
  import '../control-label/control-label.js';
72
106
  import '../_helpers/control-label.js';
73
107
  import '../_helpers/input.js';
74
108
 
75
- const FILTER_HEIGHT = 35;
76
- const TOOLBAR_HEIGHT = 49;
109
+ var FILTER_HEIGHT = 35;
110
+ var TOOLBAR_HEIGHT = 49;
77
111
  function noop() {}
78
- const FilterWithShortcuts = shortcutsHOC(SelectFilter);
79
- class SelectPopup extends PureComponent {
80
- static defaultProps = {
81
- data: [],
82
- activeIndex: null,
83
- toolbar: null,
84
- topbar: null,
85
- filter: false,
86
- multiple: false,
87
- message: null,
88
- anchorElement: null,
89
- maxHeight: 600,
90
- minWidth: 240,
91
- loading: false,
92
- onSelect: noop,
93
- onCloseAttempt: noop,
94
- onOutsideClick: noop,
95
- onFilter: noop,
96
- onClear: noop,
97
- onLoadMore: noop,
98
- selected: [],
99
- tags: null,
100
- ringPopupTarget: null,
101
- onSelectAll: noop,
102
- onEmptyPopupEnter: noop
103
- };
104
- state = {
105
- popupFilterShortcutsOptions: {
106
- modal: true,
107
- disabled: true
108
- },
109
- tagsActiveIndex: null
110
- };
111
- componentDidMount() {
112
- window.document.addEventListener('mouseup', this.mouseUpHandler);
113
- }
114
- componentWillUnmount() {
115
- window.document.removeEventListener('mouseup', this.mouseUpHandler);
116
- }
117
- isClickingPopup = false; // This flag is set to true while an item in the popup is being clicked
118
- filter;
119
- focusFilter() {
120
- setTimeout(() => this.filter?.focus());
121
- }
122
- isEventTargetFilter(event) {
123
- return event.target instanceof Element && event.target.matches('input,textarea');
124
- }
125
- caret;
126
- handleNavigation(event, navigateLeft) {
127
- if (this.isEventTargetFilter(event) && this.caret != null && Number(this.caret.getPosition()) > 0 || !Array.isArray(this.props.selected)) {
128
- return;
129
- }
130
- let newIndex = null;
131
- if (navigateLeft) {
132
- newIndex = this.state.tagsActiveIndex === null ? this.props.selected.length - 1 : this.state.tagsActiveIndex - 1;
133
- } else if (this.state.tagsActiveIndex !== null) {
134
- newIndex = this.state.tagsActiveIndex + 1;
112
+ var FilterWithShortcuts = shortcutsHOC(SelectFilter);
113
+ var SelectPopup = /*#__PURE__*/function (_PureComponent) {
114
+ _inherits(SelectPopup, _PureComponent);
115
+ var _super = _createSuper(SelectPopup);
116
+ function SelectPopup() {
117
+ var _this;
118
+ _classCallCheck(this, SelectPopup);
119
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
120
+ args[_key] = arguments[_key];
135
121
  }
136
- if (newIndex !== null && (newIndex >= this.props.selected.length || newIndex < 0)) {
137
- newIndex = null;
138
- this.focusFilter();
139
- }
140
- this.setState({
141
- tagsActiveIndex: newIndex
122
+ _this = _super.call.apply(_super, [this].concat(args));
123
+ _defineProperty(_assertThisInitialized(_this), "state", {
124
+ popupFilterShortcutsOptions: {
125
+ modal: true,
126
+ disabled: true
127
+ },
128
+ tagsActiveIndex: null
129
+ });
130
+ _defineProperty(_assertThisInitialized(_this), "isClickingPopup", false);
131
+ // This flag is set to true while an item in the popup is being clicked
132
+ _defineProperty(_assertThisInitialized(_this), "filter", void 0);
133
+ _defineProperty(_assertThisInitialized(_this), "caret", void 0);
134
+ _defineProperty(_assertThisInitialized(_this), "onFilterFocus", function () {
135
+ _this._togglePopupFilterShortcuts(false);
136
+ _this.setState({
137
+ tagsActiveIndex: null
138
+ });
139
+ });
140
+ _defineProperty(_assertThisInitialized(_this), "popupFilterOnBlur", function () {
141
+ if (_this.state.tagsActiveIndex === null) {
142
+ _this._togglePopupFilterShortcuts(true);
143
+ }
144
+ });
145
+ _defineProperty(_assertThisInitialized(_this), "mouseDownHandler", function () {
146
+ _this.isClickingPopup = true;
147
+ });
148
+ _defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function () {
149
+ _this.isClickingPopup = false;
150
+ });
151
+ _defineProperty(_assertThisInitialized(_this), "popup", void 0);
152
+ _defineProperty(_assertThisInitialized(_this), "onListSelect", function (selected, event, opts) {
153
+ var getSelectItemEvent = function getSelectItemEvent() {
154
+ var customEvent = document.createEvent('Event');
155
+ customEvent.initEvent('select', true, false);
156
+ if (event && 'persist' in event) {
157
+ event.persist();
158
+ }
159
+ customEvent.originalEvent = event;
160
+ return customEvent;
161
+ };
162
+ _this.props.onSelect(selected, getSelectItemEvent(), opts);
163
+ });
164
+ _defineProperty(_assertThisInitialized(_this), "tabPress", function (event) {
165
+ _this.props.onCloseAttempt(event, true);
166
+ });
167
+ _defineProperty(_assertThisInitialized(_this), "onClickHandler", function () {
168
+ var _this$filter;
169
+ return (_this$filter = _this.filter) === null || _this$filter === void 0 ? void 0 : _this$filter.focus();
142
170
  });
171
+ _defineProperty(_assertThisInitialized(_this), "handleRemoveTag", memoize(function (tag) {
172
+ return function (event) {
173
+ return _this.removeTag(tag, event);
174
+ };
175
+ }));
176
+ _defineProperty(_assertThisInitialized(_this), "handleTagClick", memoize(function (tag) {
177
+ return function () {
178
+ if (Array.isArray(_this.props.selected)) {
179
+ _this.setState({
180
+ tagsActiveIndex: _this.props.selected.indexOf(tag)
181
+ });
182
+ }
183
+ };
184
+ }));
185
+ _defineProperty(_assertThisInitialized(_this), "handleListResize", function () {
186
+ _this.forceUpdate();
187
+ });
188
+ _defineProperty(_assertThisInitialized(_this), "handleSelectAll", function () {
189
+ if (Array.isArray(_this.props.selected)) {
190
+ _this.props.onSelectAll(_this.props.data.filter(function (item) {
191
+ return !item.disabled;
192
+ }).length !== _this.props.selected.length);
193
+ }
194
+ });
195
+ _defineProperty(_assertThisInitialized(_this), "getSelectAll", function () {
196
+ var _multiple$renderSelec;
197
+ var multiple = _this.props.multiple;
198
+ var activeFilters = _this.props.data.filter(function (item) {
199
+ return !item.disabled;
200
+ });
201
+ return Array.isArray(_this.props.selected) && /*#__PURE__*/React.createElement("div", {
202
+ className: modules_b607bec2.selectAll
203
+ }, activeFilters.length === 0 ? /*#__PURE__*/React.createElement("span", null) : /*#__PURE__*/React.createElement(Button, {
204
+ text: true,
205
+ inline: true,
206
+ onClick: _this.handleSelectAll
207
+ }, activeFilters.length !== _this.props.selected.length ? multiple.selectAllLabel || 'Select all' : multiple.deselectAllLabel || 'Deselect all'), ((_multiple$renderSelec = multiple.renderSelectedItemsDescription) === null || _multiple$renderSelec === void 0 ? void 0 : _multiple$renderSelec.call(multiple, _this.props.selected, activeFilters.length)) || /*#__PURE__*/React.createElement(Text, {
208
+ info: true
209
+ }, "".concat(_this.props.selected.length, " selected")));
210
+ });
211
+ // Cache the value because this method is called
212
+ // inside `render` function which can be called N times
213
+ // and should be fast as possible.
214
+ // Cache invalidates each time hidden or userDefinedMaxHeight changes
215
+ _defineProperty(_assertThisInitialized(_this), "_adjustListMaxHeight", memoizeOne(function (hidden, userDefinedMaxHeight, ringPopupTarget) {
216
+ if (hidden) {
217
+ return userDefinedMaxHeight;
218
+ }
219
+ // Calculate list's maximum height that can't
220
+ // get beyond the screen
221
+ // @see RG-1838, JT-48358
222
+ var minMaxHeight = 100;
223
+ var directions = _this.props.directions || DEFAULT_DIRECTIONS;
224
+ // Note:
225
+ // Create a method which'll be called only when the popup opens and before
226
+ // render the list would be a better way
227
+ var anchorNode = _this.props.anchorElement;
228
+ var containerNode = getPopupContainer(ringPopupTarget) || document.documentElement;
229
+ return anchorNode != null ? Math.min(directions.reduce(function (maxHeight, direction) {
230
+ var _maxHeightForDirectio;
231
+ return Math.max(maxHeight, (_maxHeightForDirectio = maxHeightForDirection(direction, anchorNode, getStyles(containerNode).position !== 'static' ? containerNode : null)) !== null && _maxHeightForDirectio !== void 0 ? _maxHeightForDirectio : 0);
232
+ }, minMaxHeight), userDefinedMaxHeight) : userDefinedMaxHeight;
233
+ }));
234
+ _defineProperty(_assertThisInitialized(_this), "popupRef", function (el) {
235
+ _this.popup = el;
236
+ });
237
+ _defineProperty(_assertThisInitialized(_this), "list", void 0);
238
+ _defineProperty(_assertThisInitialized(_this), "listRef", function (el) {
239
+ _this.list = el;
240
+ });
241
+ _defineProperty(_assertThisInitialized(_this), "filterRef", function (el) {
242
+ _this.filter = el;
243
+ _this.caret = el && new Caret(el);
244
+ });
245
+ _defineProperty(_assertThisInitialized(_this), "shortcutsScope", getUID('select-popup-'));
246
+ _defineProperty(_assertThisInitialized(_this), "shortcutsMap", {
247
+ tab: _this.tabPress
248
+ });
249
+ _defineProperty(_assertThisInitialized(_this), "popupFilterShortcutsMap", {
250
+ up: function up(event) {
251
+ return _this.list && _this.list.upHandler(event);
252
+ },
253
+ down: function down(event) {
254
+ return _this.list && _this.list.downHandler(event);
255
+ },
256
+ home: function home(event) {
257
+ return _this.list && _this.list.homeHandler(event);
258
+ },
259
+ end: function end(event) {
260
+ return _this.list && _this.list.endHandler(event);
261
+ },
262
+ enter: function enter(event) {
263
+ return _this.list ? _this.list.enterHandler(event) : _this.props.onEmptyPopupEnter(event);
264
+ },
265
+ esc: function esc(event) {
266
+ return _this.props.onCloseAttempt(event, true);
267
+ },
268
+ tab: function tab(event) {
269
+ return _this.tabPress(event);
270
+ },
271
+ backspace: function backspace(event) {
272
+ return _this.handleBackspace(event);
273
+ },
274
+ del: function del() {
275
+ return _this.removeSelectedTag();
276
+ },
277
+ left: function left(event) {
278
+ return _this.handleNavigation(event, true);
279
+ },
280
+ right: function right(event) {
281
+ return _this.handleNavigation(event);
282
+ }
283
+ });
284
+ return _this;
143
285
  }
144
- removeTag(tag, event) {
145
- if (!Array.isArray(this.props.selected)) {
146
- return;
286
+ _createClass(SelectPopup, [{
287
+ key: "componentDidMount",
288
+ value: function componentDidMount() {
289
+ window.document.addEventListener('mouseup', this.mouseUpHandler);
147
290
  }
148
- const _tag = tag || this.props.selected.slice(0)[this.props.selected.length - 1];
149
- if (_tag) {
150
- this.onListSelect(_tag, event, {
151
- tryKeepOpen: true
291
+ }, {
292
+ key: "componentWillUnmount",
293
+ value: function componentWillUnmount() {
294
+ window.document.removeEventListener('mouseup', this.mouseUpHandler);
295
+ }
296
+ }, {
297
+ key: "focusFilter",
298
+ value: function focusFilter() {
299
+ var _this2 = this;
300
+ setTimeout(function () {
301
+ var _this2$filter;
302
+ return (_this2$filter = _this2.filter) === null || _this2$filter === void 0 ? void 0 : _this2$filter.focus();
152
303
  });
304
+ }
305
+ }, {
306
+ key: "isEventTargetFilter",
307
+ value: function isEventTargetFilter(event) {
308
+ return event.target instanceof Element && event.target.matches('input,textarea');
309
+ }
310
+ }, {
311
+ key: "handleNavigation",
312
+ value: function handleNavigation(event, navigateLeft) {
313
+ if (this.isEventTargetFilter(event) && this.caret != null && Number(this.caret.getPosition()) > 0 || !Array.isArray(this.props.selected)) {
314
+ return;
315
+ }
316
+ var newIndex = null;
317
+ if (navigateLeft) {
318
+ newIndex = this.state.tagsActiveIndex === null ? this.props.selected.length - 1 : this.state.tagsActiveIndex - 1;
319
+ } else if (this.state.tagsActiveIndex !== null) {
320
+ newIndex = this.state.tagsActiveIndex + 1;
321
+ }
322
+ if (newIndex !== null && (newIndex >= this.props.selected.length || newIndex < 0)) {
323
+ newIndex = null;
324
+ this.focusFilter();
325
+ }
153
326
  this.setState({
154
- tagsActiveIndex: null
327
+ tagsActiveIndex: newIndex
155
328
  });
156
- this.focusFilter();
157
329
  }
158
- }
159
- removeSelectedTag() {
160
- if (Array.isArray(this.props.selected) && this.state.tagsActiveIndex != null) {
161
- this.removeTag(this.props.selected[this.state.tagsActiveIndex]);
162
- return false;
330
+ }, {
331
+ key: "removeTag",
332
+ value: function removeTag(tag, event) {
333
+ if (!Array.isArray(this.props.selected)) {
334
+ return;
335
+ }
336
+ var _tag = tag || this.props.selected.slice(0)[this.props.selected.length - 1];
337
+ if (_tag) {
338
+ this.onListSelect(_tag, event, {
339
+ tryKeepOpen: true
340
+ });
341
+ this.setState({
342
+ tagsActiveIndex: null
343
+ });
344
+ this.focusFilter();
345
+ }
163
346
  }
164
- return true;
165
- }
166
- handleBackspace(event) {
167
- if (!this.props.tags) {
347
+ }, {
348
+ key: "removeSelectedTag",
349
+ value: function removeSelectedTag() {
350
+ if (Array.isArray(this.props.selected) && this.state.tagsActiveIndex != null) {
351
+ this.removeTag(this.props.selected[this.state.tagsActiveIndex]);
352
+ return false;
353
+ }
168
354
  return true;
169
355
  }
170
- if (!this.isEventTargetFilter(event)) {
171
- this.removeSelectedTag();
172
- return false;
173
- }
174
- if ((event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) && !event.target.value) {
175
- this.removeTag();
176
- return false;
177
- }
178
- return true;
179
- }
180
- onFilterFocus = () => {
181
- this._togglePopupFilterShortcuts(false);
182
- this.setState({
183
- tagsActiveIndex: null
184
- });
185
- };
186
- popupFilterOnBlur = () => {
187
- if (this.state.tagsActiveIndex === null) {
188
- this._togglePopupFilterShortcuts(true);
189
- }
190
- };
191
- _togglePopupFilterShortcuts(shortcutsDisabled) {
192
- this.setState({
193
- popupFilterShortcutsOptions: {
194
- modal: true,
195
- disabled: shortcutsDisabled
356
+ }, {
357
+ key: "handleBackspace",
358
+ value: function handleBackspace(event) {
359
+ if (!this.props.tags) {
360
+ return true;
196
361
  }
197
- });
198
- }
199
- mouseDownHandler = () => {
200
- this.isClickingPopup = true;
201
- };
202
- mouseUpHandler = () => {
203
- this.isClickingPopup = false;
204
- };
205
- popup;
206
- isVisible() {
207
- return this.popup && this.popup.isVisible();
208
- }
209
- onListSelect = (selected, event, opts) => {
210
- const getSelectItemEvent = () => {
211
- const customEvent = document.createEvent('Event');
212
- customEvent.initEvent('select', true, false);
213
- if (event && 'persist' in event) {
214
- event.persist();
362
+ if (!this.isEventTargetFilter(event)) {
363
+ this.removeSelectedTag();
364
+ return false;
215
365
  }
216
- customEvent.originalEvent = event;
217
- return customEvent;
218
- };
219
- this.props.onSelect(selected, getSelectItemEvent(), opts);
220
- };
221
- tabPress = event => {
222
- this.props.onCloseAttempt(event, true);
223
- };
224
- onClickHandler = () => this.filter?.focus();
225
- getFilter() {
226
- if (this.props.filter || this.props.tags) {
227
- return /*#__PURE__*/React.createElement("div", {
228
- className: modules_b607bec2.filterWrapper,
229
- "data-test": "ring-select-popup-filter"
230
- }, !this.props.tags && /*#__PURE__*/React.createElement(Icon, {
231
- glyph: searchIcon,
232
- className: modules_b607bec2.filterIcon,
233
- "data-test-custom": "ring-select-popup-filter-icon"
234
- }), /*#__PURE__*/React.createElement(FilterWithShortcuts, {
235
- rgShortcutsOptions: this.state.popupFilterShortcutsOptions,
236
- rgShortcutsMap: this.popupFilterShortcutsMap,
237
- value: this.props.filterValue,
238
- inputRef: this.filterRef,
239
- onBlur: this.popupFilterOnBlur,
240
- onFocus: this.onFilterFocus,
241
- className: "ring-js-shortcuts",
242
- inputClassName: classNames({
243
- [modules_b607bec2.filterWithTagsInput]: this.props.tags
244
- }),
245
- placeholder: typeof this.props.filter === 'object' ? this.props.filter.placeholder : undefined,
246
- height: this.props.tags ? ControlsHeight.S : ControlsHeight.L,
247
- onChange: this.props.onFilter,
248
- onClick: this.onClickHandler,
249
- onClear: this.props.tags ? undefined : this.props.onClear,
250
- "data-test-custom": "ring-select-popup-filter-input",
251
- listId: this.props.listId,
252
- enableShortcuts: Object.keys(this.popupFilterShortcutsMap)
253
- }));
366
+ if ((event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) && !event.target.value) {
367
+ this.removeTag();
368
+ return false;
369
+ }
370
+ return true;
254
371
  }
255
- return null;
256
- }
257
- handleRemoveTag = memoize(tag => event => this.removeTag(tag, event));
258
- handleTagClick = memoize(tag => () => {
259
- if (Array.isArray(this.props.selected)) {
372
+ }, {
373
+ key: "_togglePopupFilterShortcuts",
374
+ value: function _togglePopupFilterShortcuts(shortcutsDisabled) {
260
375
  this.setState({
261
- tagsActiveIndex: this.props.selected.indexOf(tag)
376
+ popupFilterShortcutsOptions: {
377
+ modal: true,
378
+ disabled: shortcutsDisabled
379
+ }
262
380
  });
263
381
  }
264
- });
265
- getTags() {
266
- return Array.isArray(this.props.selected) && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(TagsList, {
267
- tags: this.props.selected,
268
- activeIndex: this.state.tagsActiveIndex,
269
- handleRemove: this.handleRemoveTag,
270
- handleClick: this.handleTagClick,
271
- disabled: this.props.disabled
272
- }));
273
- }
274
- getFilterWithTags() {
275
- if (this.props.tags) {
276
- const classes = classNames([modules_b607bec2.filterWithTags, {
277
- [modules_b607bec2.filterWithTagsFocused]: !this.state.popupFilterShortcutsOptions.disabled
278
- }]);
279
- return /*#__PURE__*/React.createElement("div", {
280
- className: classes
281
- }, this.getTags(), this.getFilter());
382
+ }, {
383
+ key: "isVisible",
384
+ value: function isVisible() {
385
+ return this.popup && this.popup.isVisible();
282
386
  }
283
- return this.getFilter();
284
- }
285
- getBottomLine() {
286
- const {
287
- loading,
288
- message
289
- } = this.props;
290
- return (loading || message) && /*#__PURE__*/React.createElement("div", {
291
- className: modules_b607bec2.bottomLine
292
- }, loading && /*#__PURE__*/React.createElement(LoaderInline, null), message && /*#__PURE__*/React.createElement("div", {
293
- className: modules_b607bec2.message
294
- }, message));
295
- }
296
- handleListResize = () => {
297
- this.forceUpdate();
298
- };
299
- getList(ringPopupTarget) {
300
- if (this.props.data.length) {
301
- let {
302
- maxHeight
303
- } = this.props;
304
- if (this.props.anchorElement) {
305
- maxHeight = this._adjustListMaxHeight(this.props.hidden, maxHeight, ringPopupTarget);
387
+ }, {
388
+ key: "getFilter",
389
+ value: function getFilter() {
390
+ if (this.props.filter || this.props.tags) {
391
+ return /*#__PURE__*/React.createElement("div", {
392
+ className: modules_b607bec2.filterWrapper,
393
+ "data-test": "ring-select-popup-filter"
394
+ }, !this.props.tags && /*#__PURE__*/React.createElement(Icon, {
395
+ glyph: searchIcon,
396
+ className: modules_b607bec2.filterIcon,
397
+ "data-test-custom": "ring-select-popup-filter-icon"
398
+ }), /*#__PURE__*/React.createElement(FilterWithShortcuts, {
399
+ rgShortcutsOptions: this.state.popupFilterShortcutsOptions,
400
+ rgShortcutsMap: this.popupFilterShortcutsMap,
401
+ value: this.props.filterValue,
402
+ inputRef: this.filterRef,
403
+ onBlur: this.popupFilterOnBlur,
404
+ onFocus: this.onFilterFocus,
405
+ className: "ring-js-shortcuts",
406
+ inputClassName: classNames(_defineProperty({}, modules_b607bec2.filterWithTagsInput, this.props.tags)),
407
+ placeholder: _typeof(this.props.filter) === 'object' ? this.props.filter.placeholder : undefined,
408
+ height: this.props.tags ? ControlsHeight.S : ControlsHeight.L,
409
+ onChange: this.props.onFilter,
410
+ onClick: this.onClickHandler,
411
+ onClear: this.props.tags ? undefined : this.props.onClear,
412
+ "data-test-custom": "ring-select-popup-filter-input",
413
+ listId: this.props.listId,
414
+ enableShortcuts: Object.keys(this.popupFilterShortcutsMap)
415
+ }));
306
416
  }
307
- if (this.props.filter) {
308
- maxHeight -= FILTER_HEIGHT;
309
- }
310
- if (this.props.toolbar) {
311
- maxHeight -= TOOLBAR_HEIGHT;
417
+ return null;
418
+ }
419
+ }, {
420
+ key: "getTags",
421
+ value: function getTags() {
422
+ return Array.isArray(this.props.selected) && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(TagsList, {
423
+ tags: this.props.selected,
424
+ activeIndex: this.state.tagsActiveIndex,
425
+ handleRemove: this.handleRemoveTag,
426
+ handleClick: this.handleTagClick,
427
+ disabled: this.props.disabled
428
+ }));
429
+ }
430
+ }, {
431
+ key: "getFilterWithTags",
432
+ value: function getFilterWithTags() {
433
+ if (this.props.tags) {
434
+ var classes = classNames([modules_b607bec2.filterWithTags, _defineProperty({}, modules_b607bec2.filterWithTagsFocused, !this.state.popupFilterShortcutsOptions.disabled)]);
435
+ return /*#__PURE__*/React.createElement("div", {
436
+ className: classes
437
+ }, this.getTags(), this.getFilter());
312
438
  }
313
- return /*#__PURE__*/React.createElement(List, {
314
- id: this.props.listId,
315
- maxHeight: maxHeight,
316
- data: this.props.data,
317
- activeIndex: this.props.activeIndex,
318
- ref: this.listRef,
319
- restoreActiveIndex: true,
320
- activateFirstItem: true,
321
- onSelect: this.onListSelect,
322
- onResize: this.handleListResize,
323
- onScrollToBottom: this.props.onLoadMore,
324
- hidden: this.props.hidden,
325
- shortcuts: !this.props.hidden,
326
- disableMoveOverflow: this.props.disableMoveOverflow,
327
- disableMoveDownOverflow: this.props.loading,
328
- disableScrollToActive: this.props.disableScrollToActive,
329
- compact: this.props.compact,
330
- renderOptimization: this.props.renderOptimization
331
- });
439
+ return this.getFilter();
332
440
  }
333
- return null;
334
- }
335
- handleSelectAll = () => {
336
- if (Array.isArray(this.props.selected)) {
337
- this.props.onSelectAll(this.props.data.filter(item => !item.disabled).length !== this.props.selected.length);
441
+ }, {
442
+ key: "getBottomLine",
443
+ value: function getBottomLine() {
444
+ var _this$props = this.props,
445
+ loading = _this$props.loading,
446
+ message = _this$props.message;
447
+ return (loading || message) && /*#__PURE__*/React.createElement("div", {
448
+ className: modules_b607bec2.bottomLine
449
+ }, loading && /*#__PURE__*/React.createElement(LoaderInline, null), message && /*#__PURE__*/React.createElement("div", {
450
+ className: modules_b607bec2.message
451
+ }, message));
338
452
  }
339
- };
340
- getSelectAll = () => {
341
- const multiple = this.props.multiple;
342
- const activeFilters = this.props.data.filter(item => !item.disabled);
343
- return Array.isArray(this.props.selected) && /*#__PURE__*/React.createElement("div", {
344
- className: modules_b607bec2.selectAll
345
- }, activeFilters.length === 0 ? /*#__PURE__*/React.createElement("span", null) : /*#__PURE__*/React.createElement(Button, {
346
- text: true,
347
- inline: true,
348
- onClick: this.handleSelectAll
349
- }, activeFilters.length !== this.props.selected.length ? multiple.selectAllLabel || 'Select all' : multiple.deselectAllLabel || 'Deselect all'), multiple.renderSelectedItemsDescription?.(this.props.selected, activeFilters.length) || /*#__PURE__*/React.createElement(Text, {
350
- info: true
351
- }, `${this.props.selected.length} selected`));
352
- };
353
- // Cache the value because this method is called
354
- // inside `render` function which can be called N times
355
- // and should be fast as possible.
356
- // Cache invalidates each time hidden or userDefinedMaxHeight changes
357
- _adjustListMaxHeight = memoizeOne((hidden, userDefinedMaxHeight, ringPopupTarget) => {
358
- if (hidden) {
359
- return userDefinedMaxHeight;
453
+ }, {
454
+ key: "getList",
455
+ value: function getList(ringPopupTarget) {
456
+ if (this.props.data.length) {
457
+ var maxHeight = this.props.maxHeight;
458
+ if (this.props.anchorElement) {
459
+ maxHeight = this._adjustListMaxHeight(this.props.hidden, maxHeight, ringPopupTarget);
460
+ }
461
+ if (this.props.filter) {
462
+ maxHeight -= FILTER_HEIGHT;
463
+ }
464
+ if (this.props.toolbar) {
465
+ maxHeight -= TOOLBAR_HEIGHT;
466
+ }
467
+ return /*#__PURE__*/React.createElement(List, {
468
+ id: this.props.listId,
469
+ maxHeight: maxHeight,
470
+ data: this.props.data,
471
+ activeIndex: this.props.activeIndex,
472
+ ref: this.listRef,
473
+ restoreActiveIndex: true,
474
+ activateFirstItem: true,
475
+ onSelect: this.onListSelect,
476
+ onResize: this.handleListResize,
477
+ onScrollToBottom: this.props.onLoadMore,
478
+ hidden: this.props.hidden,
479
+ shortcuts: !this.props.hidden,
480
+ disableMoveOverflow: this.props.disableMoveOverflow,
481
+ disableMoveDownOverflow: this.props.loading,
482
+ disableScrollToActive: this.props.disableScrollToActive,
483
+ compact: this.props.compact,
484
+ renderOptimization: this.props.renderOptimization
485
+ });
486
+ }
487
+ return null;
360
488
  }
361
- // Calculate list's maximum height that can't
362
- // get beyond the screen
363
- // @see RG-1838, JT-48358
364
- const minMaxHeight = 100;
365
- const directions = this.props.directions || DEFAULT_DIRECTIONS;
366
- // Note:
367
- // Create a method which'll be called only when the popup opens and before
368
- // render the list would be a better way
369
- const anchorNode = this.props.anchorElement;
370
- const containerNode = getPopupContainer(ringPopupTarget) || document.documentElement;
371
- return anchorNode != null ? Math.min(directions.reduce((maxHeight, direction) => {
372
- var _maxHeightForDirectio;
373
- return Math.max(maxHeight, (_maxHeightForDirectio = maxHeightForDirection(direction, anchorNode, getStyles(containerNode).position !== 'static' ? containerNode : null)) !== null && _maxHeightForDirectio !== void 0 ? _maxHeightForDirectio : 0);
374
- }, minMaxHeight), userDefinedMaxHeight) : userDefinedMaxHeight;
375
- });
376
- popupRef = el => {
377
- this.popup = el;
378
- };
379
- list;
380
- listRef = el => {
381
- this.list = el;
382
- };
383
- filterRef = el => {
384
- this.filter = el;
385
- this.caret = el && new Caret(el);
386
- };
387
- shortcutsScope = getUID('select-popup-');
388
- shortcutsMap = {
389
- tab: this.tabPress
390
- };
391
- popupFilterShortcutsMap = {
392
- up: event => this.list && this.list.upHandler(event),
393
- down: event => this.list && this.list.downHandler(event),
394
- home: event => this.list && this.list.homeHandler(event),
395
- end: event => this.list && this.list.endHandler(event),
396
- enter: event => this.list ? this.list.enterHandler(event) : this.props.onEmptyPopupEnter(event),
397
- esc: event => this.props.onCloseAttempt(event, true),
398
- tab: event => this.tabPress(event),
399
- backspace: event => this.handleBackspace(event),
400
- del: () => this.removeSelectedTag(),
401
- left: event => this.handleNavigation(event, true),
402
- right: event => this.handleNavigation(event)
403
- };
404
- render() {
405
- const {
406
- toolbar,
407
- topbar,
408
- className,
409
- multiple,
410
- hidden,
411
- isInputMode,
412
- anchorElement,
413
- minWidth,
414
- onCloseAttempt,
415
- onOutsideClick,
416
- directions,
417
- top,
418
- left,
419
- style,
420
- dir,
421
- filter
422
- } = this.props;
423
- const classes = classNames(modules_b607bec2.popup, className);
424
- return /*#__PURE__*/React.createElement(PopupTargetContext.Consumer, null, ringPopupTarget => {
425
- const filterWithTags = this.getFilterWithTags();
426
- const selectAll = multiple && typeof multiple === 'object' && !multiple.limit && multiple.selectAll && this.getSelectAll();
427
- const list = this.getList(this.props.ringPopupTarget || ringPopupTarget);
428
- const bottomLine = this.getBottomLine();
429
- const hasContent = filterWithTags || selectAll || list || bottomLine || toolbar || topbar;
430
- return /*#__PURE__*/React.createElement(Popup, {
431
- trapFocus: false,
432
- ref: this.popupRef,
433
- hidden: hidden || !hasContent,
434
- attached: isInputMode,
435
- className: classes,
436
- dontCloseOnAnchorClick: true,
437
- anchorElement: anchorElement,
438
- minWidth: minWidth,
439
- onCloseAttempt: onCloseAttempt,
440
- onOutsideClick: onOutsideClick,
441
- directions: directions,
442
- top: top,
443
- left: left,
444
- onMouseDown: this.mouseDownHandler,
445
- target: this.props.ringPopupTarget,
446
- autoCorrectTopOverflow: false,
447
- style: style
448
- }, /*#__PURE__*/React.createElement("div", {
449
- dir: dir
450
- }, !hidden && filter && /*#__PURE__*/React.createElement(Shortcuts, {
451
- map: this.shortcutsMap,
452
- scope: this.shortcutsScope
453
- }), topbar, hidden ? /*#__PURE__*/React.createElement("div", null) : filterWithTags, selectAll, list, bottomLine, toolbar));
454
- });
455
- }
456
- }
489
+ }, {
490
+ key: "render",
491
+ value: function render() {
492
+ var _this3 = this;
493
+ var _this$props2 = this.props,
494
+ toolbar = _this$props2.toolbar,
495
+ topbar = _this$props2.topbar,
496
+ className = _this$props2.className,
497
+ multiple = _this$props2.multiple,
498
+ hidden = _this$props2.hidden,
499
+ isInputMode = _this$props2.isInputMode,
500
+ anchorElement = _this$props2.anchorElement,
501
+ minWidth = _this$props2.minWidth,
502
+ onCloseAttempt = _this$props2.onCloseAttempt,
503
+ onOutsideClick = _this$props2.onOutsideClick,
504
+ directions = _this$props2.directions,
505
+ top = _this$props2.top,
506
+ left = _this$props2.left,
507
+ style = _this$props2.style,
508
+ dir = _this$props2.dir,
509
+ filter = _this$props2.filter;
510
+ var classes = classNames(modules_b607bec2.popup, className);
511
+ return /*#__PURE__*/React.createElement(PopupTargetContext.Consumer, null, function (ringPopupTarget) {
512
+ var filterWithTags = _this3.getFilterWithTags();
513
+ var selectAll = multiple && _typeof(multiple) === 'object' && !multiple.limit && multiple.selectAll && _this3.getSelectAll();
514
+ var list = _this3.getList(_this3.props.ringPopupTarget || ringPopupTarget);
515
+ var bottomLine = _this3.getBottomLine();
516
+ var hasContent = filterWithTags || selectAll || list || bottomLine || toolbar || topbar;
517
+ return /*#__PURE__*/React.createElement(Popup, {
518
+ trapFocus: false,
519
+ ref: _this3.popupRef,
520
+ hidden: hidden || !hasContent,
521
+ attached: isInputMode,
522
+ className: classes,
523
+ dontCloseOnAnchorClick: true,
524
+ anchorElement: anchorElement,
525
+ minWidth: minWidth,
526
+ onCloseAttempt: onCloseAttempt,
527
+ onOutsideClick: onOutsideClick,
528
+ directions: directions,
529
+ top: top,
530
+ left: left,
531
+ onMouseDown: _this3.mouseDownHandler,
532
+ target: _this3.props.ringPopupTarget,
533
+ autoCorrectTopOverflow: false,
534
+ style: style
535
+ }, /*#__PURE__*/React.createElement("div", {
536
+ dir: dir
537
+ }, !hidden && filter && /*#__PURE__*/React.createElement(Shortcuts, {
538
+ map: _this3.shortcutsMap,
539
+ scope: _this3.shortcutsScope
540
+ }), topbar, hidden ? /*#__PURE__*/React.createElement("div", null) : filterWithTags, selectAll, list, bottomLine, toolbar));
541
+ });
542
+ }
543
+ }]);
544
+ return SelectPopup;
545
+ }(PureComponent);
546
+ _defineProperty(SelectPopup, "defaultProps", {
547
+ data: [],
548
+ activeIndex: null,
549
+ toolbar: null,
550
+ topbar: null,
551
+ filter: false,
552
+ multiple: false,
553
+ message: null,
554
+ anchorElement: null,
555
+ maxHeight: 600,
556
+ minWidth: 240,
557
+ loading: false,
558
+ onSelect: noop,
559
+ onCloseAttempt: noop,
560
+ onOutsideClick: noop,
561
+ onFilter: noop,
562
+ onClear: noop,
563
+ onLoadMore: noop,
564
+ selected: [],
565
+ tags: null,
566
+ ringPopupTarget: null,
567
+ onSelectAll: noop,
568
+ onEmptyPopupEnter: noop
569
+ });
457
570
  SelectPopup.propTypes = {
458
571
  activeIndex: PropTypes.number,
459
572
  anchorElement: PropTypes.instanceOf(HTMLElement),