@jetbrains/ring-ui 5.0.156 → 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 (295) hide show
  1. package/dist/_helpers/_rollupPluginBabelHelpers.js +642 -1
  2. package/dist/_helpers/anchor.js +6 -7
  3. package/dist/_helpers/button__classes.js +16 -28
  4. package/dist/_helpers/card.js +107 -95
  5. package/dist/_helpers/dialog__body-scroll-preventer.js +20 -11
  6. package/dist/_helpers/footer.js +29 -34
  7. package/dist/_helpers/query-assist__suggestions.js +91 -74
  8. package/dist/_helpers/select__filter.js +71 -48
  9. package/dist/_helpers/services-link.js +41 -29
  10. package/dist/_helpers/sidebar.js +103 -99
  11. package/dist/_helpers/theme.js +42 -35
  12. package/dist/_helpers/title.js +71 -57
  13. package/dist/alert/alert.js +199 -158
  14. package/dist/alert/container.js +43 -32
  15. package/dist/alert-service/alert-service.js +172 -104
  16. package/dist/analytics/analytics.js +92 -68
  17. package/dist/analytics/analytics__custom-plugin.js +84 -60
  18. package/dist/analytics/analytics__fus-plugin.js +28 -15
  19. package/dist/analytics/analytics__ga-plugin.js +60 -43
  20. package/dist/analytics/analytics__plugin-utils.js +28 -22
  21. package/dist/auth/auth.js +36 -4
  22. package/dist/auth/auth__core.js +1458 -732
  23. package/dist/auth/background-flow.js +129 -87
  24. package/dist/auth/down-notification.js +75 -30
  25. package/dist/auth/iframe-flow.js +136 -75
  26. package/dist/auth/landing.js +90 -30
  27. package/dist/auth/request-builder.js +82 -46
  28. package/dist/auth/response-parser.js +119 -86
  29. package/dist/auth/storage.js +333 -171
  30. package/dist/auth/token-validator.js +244 -137
  31. package/dist/auth/window-flow.js +136 -92
  32. package/dist/auth-dialog/auth-dialog.js +176 -114
  33. package/dist/auth-dialog-service/auth-dialog-service.js +32 -7
  34. package/dist/auth-ng/auth-ng.js +70 -34
  35. package/dist/auth-ng/auth-ng.mock.js +6 -6
  36. package/dist/autofocus-ng/autofocus-ng.js +23 -8
  37. package/dist/avatar/avatar-example-datauri.js +1 -23
  38. package/dist/avatar/avatar.js +155 -119
  39. package/dist/avatar/fallback-avatar.js +41 -22
  40. package/dist/avatar-editor-ng/avatar-editor-ng.js +56 -23
  41. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +1 -28
  42. package/dist/avatar-ng/avatar-ng.js +23 -1
  43. package/dist/badge/badge.js +43 -35
  44. package/dist/badge-ng/badge-ng.js +13 -1
  45. package/dist/breadcrumb-ng/breadcrumb-ng.js +15 -29
  46. package/dist/button/button.js +111 -87
  47. package/dist/button/button__classes.js +1 -0
  48. package/dist/button-group/button-group.js +35 -19
  49. package/dist/button-group/caption.js +22 -14
  50. package/dist/button-group-ng/button-group-ng.js +13 -7
  51. package/dist/button-ng/button-ng.js +154 -133
  52. package/dist/button-set/button-set.js +34 -20
  53. package/dist/button-set-ng/button-set-ng.js +2 -2
  54. package/dist/button-toolbar/button-toolbar.js +33 -19
  55. package/dist/button-toolbar-ng/button-toolbar-ng.js +5 -3
  56. package/dist/caret/caret.js +225 -188
  57. package/dist/checkbox/checkbox.js +104 -76
  58. package/dist/checkbox-ng/checkbox-ng.js +18 -27
  59. package/dist/clipboard/clipboard-fallback.js +10 -10
  60. package/dist/clipboard/clipboard.js +131 -34
  61. package/dist/code/code.js +168 -92
  62. package/dist/compiler-ng/compiler-ng.js +18 -15
  63. package/dist/confirm/confirm.js +108 -66
  64. package/dist/confirm-ng/confirm-ng.js +33 -4
  65. package/dist/confirm-service/confirm-service.js +66 -42
  66. package/dist/content-layout/content-layout.js +64 -43
  67. package/dist/content-layout/sidebar.js +1 -0
  68. package/dist/contenteditable/contenteditable.js +61 -50
  69. package/dist/control-label/control-label.js +11 -15
  70. package/dist/data-list/data-list.js +184 -128
  71. package/dist/data-list/data-list.mock.js +11 -2
  72. package/dist/data-list/item.js +174 -143
  73. package/dist/data-list/selection.js +139 -76
  74. package/dist/data-list/title.js +13 -1
  75. package/dist/data-list-ng/data-list-ng.js +31 -1
  76. package/dist/date-picker/consts.js +18 -15
  77. package/dist/date-picker/date-input.js +147 -115
  78. package/dist/date-picker/date-picker.js +285 -228
  79. package/dist/date-picker/date-popup.js +397 -356
  80. package/dist/date-picker/day.js +98 -84
  81. package/dist/date-picker/month-names.js +64 -43
  82. package/dist/date-picker/month-slider.js +74 -51
  83. package/dist/date-picker/month.js +21 -15
  84. package/dist/date-picker/months.js +48 -43
  85. package/dist/date-picker/weekdays.js +18 -12
  86. package/dist/date-picker/years.js +109 -84
  87. package/dist/dialog/dialog.js +189 -141
  88. package/dist/dialog/dialog__body-scroll-preventer.js +5 -0
  89. package/dist/dialog-ng/dialog-ng.js +401 -287
  90. package/dist/dialog-ng/dialog-ng__template.js +1 -70
  91. package/dist/docked-panel-ng/docked-panel-ng.js +33 -18
  92. package/dist/dropdown/anchor.js +10 -0
  93. package/dist/dropdown/dropdown.js +214 -182
  94. package/dist/dropdown-menu/dropdown-menu.js +102 -72
  95. package/dist/editable-heading/editable-heading.js +100 -58
  96. package/dist/error-bubble/error-bubble.js +64 -31
  97. package/dist/error-message/error-message.js +61 -38
  98. package/dist/error-message-ng/error-message-ng.js +11 -22
  99. package/dist/footer/footer.js +11 -1
  100. package/dist/footer-ng/footer-ng.js +64 -36
  101. package/dist/form-ng/form-ng.js +66 -56
  102. package/dist/global/angular-component-factory.js +76 -53
  103. package/dist/global/compose.js +10 -1
  104. package/dist/global/composeRefs.js +12 -7
  105. package/dist/global/controls-height.js +2 -2
  106. package/dist/global/create-stateful-context.js +19 -19
  107. package/dist/global/data-tests.js +15 -7
  108. package/dist/global/dom.js +95 -53
  109. package/dist/global/focus-sensor-hoc.js +134 -122
  110. package/dist/global/fuzzy-highlight.js +41 -27
  111. package/dist/global/get-event-key.js +8 -8
  112. package/dist/global/get-uid.js +8 -4
  113. package/dist/global/inject-styles.js +15 -10
  114. package/dist/global/linear-function.js +2 -2
  115. package/dist/global/listeners.js +53 -27
  116. package/dist/global/memoize.js +13 -6
  117. package/dist/global/normalize-indent.js +51 -19
  118. package/dist/global/promise-with-timeout.js +8 -6
  119. package/dist/global/prop-types.js +5 -3
  120. package/dist/global/react-dom-renderer.js +47 -28
  121. package/dist/global/react-render-adapter.js +19 -13
  122. package/dist/global/rerender-hoc.js +41 -16
  123. package/dist/global/ring-angular-component.js +20 -10
  124. package/dist/global/schedule-raf.js +6 -5
  125. package/dist/global/sniffer.js +1 -1
  126. package/dist/global/theme.js +24 -0
  127. package/dist/global/trivial-template-tag.js +10 -3
  128. package/dist/global/typescript-utils.js +6 -2
  129. package/dist/global/url.js +27 -21
  130. package/dist/global/use-event-callback.js +4 -6
  131. package/dist/grid/col.js +55 -35
  132. package/dist/grid/grid.js +36 -17
  133. package/dist/grid/row.js +48 -35
  134. package/dist/group/group.js +27 -17
  135. package/dist/group-ng/group-ng.js +2 -2
  136. package/dist/header/header.js +80 -33
  137. package/dist/header/logo.js +39 -20
  138. package/dist/header/profile.js +188 -150
  139. package/dist/header/services-link.js +9 -0
  140. package/dist/header/services.js +118 -73
  141. package/dist/header/smart-profile.js +207 -111
  142. package/dist/header/smart-services.js +115 -62
  143. package/dist/header/tray-icon.js +38 -21
  144. package/dist/header/tray.js +34 -21
  145. package/dist/heading/heading.js +25 -26
  146. package/dist/heading-ng/heading-ng.js +11 -1
  147. package/dist/http/http.js +368 -215
  148. package/dist/http/http.mock.js +104 -49
  149. package/dist/hub-source/hub-source.js +191 -83
  150. package/dist/hub-source/hub-source__user.js +45 -11
  151. package/dist/hub-source/hub-source__users-groups.js +67 -37
  152. package/dist/i18n/i18n-context.js +14 -10
  153. package/dist/i18n/i18n.js +11 -7
  154. package/dist/icon/icon.js +94 -76
  155. package/dist/icon/icon__svg.js +31 -24
  156. package/dist/icon/index.js +9 -0
  157. package/dist/icon-ng/icon-ng.js +27 -15
  158. package/dist/input/input.js +184 -145
  159. package/dist/input-ng/input-ng.js +96 -118
  160. package/dist/island/adaptive-island-hoc.js +45 -30
  161. package/dist/island/content.js +130 -115
  162. package/dist/island/header.js +69 -56
  163. package/dist/island/island.js +40 -28
  164. package/dist/island-legacy/content-legacy.js +27 -17
  165. package/dist/island-legacy/header-legacy.js +29 -19
  166. package/dist/island-legacy/island-legacy.js +27 -17
  167. package/dist/island-ng/island-content-ng.js +17 -26
  168. package/dist/island-ng/island-header-ng.js +9 -12
  169. package/dist/island-ng/island-ng-class-fixer.js +3 -0
  170. package/dist/island-ng/island-ng.js +6 -10
  171. package/dist/link/clickableLink.js +61 -44
  172. package/dist/link/link.js +85 -74
  173. package/dist/link-ng/link-ng.js +3 -5
  174. package/dist/list/consts.js +1 -1
  175. package/dist/list/list.js +696 -602
  176. package/dist/list/list__custom.js +61 -44
  177. package/dist/list/list__hint.js +21 -10
  178. package/dist/list/list__item.js +167 -129
  179. package/dist/list/list__link.js +54 -37
  180. package/dist/list/list__separator.js +24 -14
  181. package/dist/list/list__title.js +32 -22
  182. package/dist/list/list__users-groups-source.js +131 -54
  183. package/dist/loader/loader.js +78 -43
  184. package/dist/loader/loader__core.js +257 -189
  185. package/dist/loader-inline/loader-inline.js +37 -23
  186. package/dist/loader-inline-ng/loader-inline-ng.js +2 -2
  187. package/dist/loader-ng/loader-ng.js +46 -19
  188. package/dist/loader-screen/loader-screen.js +48 -25
  189. package/dist/loader-screen-ng/loader-screen-ng.js +46 -30
  190. package/dist/login-dialog/login-dialog.js +162 -111
  191. package/dist/login-dialog/service.js +35 -7
  192. package/dist/markdown/code.js +31 -9
  193. package/dist/markdown/heading.js +3 -5
  194. package/dist/markdown/link.js +13 -6
  195. package/dist/markdown/markdown.js +66 -33
  196. package/dist/message/message.js +157 -125
  197. package/dist/message-bundle-ng/message-bundle-ng.js +128 -44
  198. package/dist/old-browsers-message/old-browsers-message.js +19 -11
  199. package/dist/old-browsers-message/old-browsers-message__stop.js +8 -0
  200. package/dist/old-browsers-message/white-list.js +16 -9
  201. package/dist/pager/pager.js +275 -210
  202. package/dist/pager-ng/pager-ng.js +36 -1
  203. package/dist/panel/panel.js +27 -17
  204. package/dist/panel-ng/panel-ng.js +14 -1
  205. package/dist/permissions/permissions.js +173 -127
  206. package/dist/permissions/permissions__cache.js +225 -194
  207. package/dist/permissions-ng/permissions-ng.js +86 -35
  208. package/dist/place-under-ng/place-under-ng.js +68 -45
  209. package/dist/popup/popup.consts.js +1 -1
  210. package/dist/popup/popup.js +342 -280
  211. package/dist/popup/popup.target.js +8 -9
  212. package/dist/popup/position.js +153 -153
  213. package/dist/popup-menu/popup-menu.js +86 -44
  214. package/dist/progress-bar/progress-bar.js +97 -80
  215. package/dist/progress-bar-ng/progress-bar-ng.js +11 -1
  216. package/dist/promised-click-ng/promised-click-ng.js +92 -58
  217. package/dist/proxy-attrs/proxy-attrs.js +18 -9
  218. package/dist/query-assist/query-assist.js +903 -832
  219. package/dist/query-assist/query-assist__suggestions.js +33 -1
  220. package/dist/query-assist-ng/query-assist-ng.js +38 -1
  221. package/dist/radio/radio.js +36 -19
  222. package/dist/radio/radio__item.js +71 -52
  223. package/dist/radio-ng/radio-ng.js +14 -25
  224. package/dist/save-field-ng/save-field-ng.js +86 -52
  225. package/dist/save-field-ng/save-field-ng__template.js +1 -32
  226. package/dist/select/select.js +937 -835
  227. package/dist/select/select__filter.js +33 -0
  228. package/dist/select/select__popup.js +472 -359
  229. package/dist/select-ng/select-ng.js +125 -74
  230. package/dist/select-ng/select-ng__lazy.js +101 -50
  231. package/dist/select-ng/select-ng__options.js +107 -81
  232. package/dist/shortcuts/core.js +218 -166
  233. package/dist/shortcuts/shortcut-title.js +11 -6
  234. package/dist/shortcuts/shortcuts-hoc.js +47 -19
  235. package/dist/shortcuts/shortcuts.js +77 -50
  236. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +104 -53
  237. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +1 -48
  238. package/dist/shortcuts-ng/shortcuts-ng.js +86 -51
  239. package/dist/sidebar-ng/sidebar-ng.js +53 -22
  240. package/dist/sidebar-ng/sidebar-ng__button-template.js +1 -18
  241. package/dist/sidebar-ng/sidebar-ng__template.js +1 -10
  242. package/dist/storage/storage.js +35 -4
  243. package/dist/storage/storage__fallback.js +224 -149
  244. package/dist/storage/storage__local.js +156 -90
  245. package/dist/tab-trap/tab-trap.js +157 -122
  246. package/dist/table/cell.js +28 -14
  247. package/dist/table/disable-hover-hoc.js +53 -33
  248. package/dist/table/header-cell.js +87 -64
  249. package/dist/table/header.js +126 -98
  250. package/dist/table/multitable.js +127 -107
  251. package/dist/table/row-with-focus-sensor.js +73 -25
  252. package/dist/table/row.js +208 -170
  253. package/dist/table/selection-adapter.js +3 -1
  254. package/dist/table/selection-shortcuts-hoc.js +184 -181
  255. package/dist/table/selection.js +228 -156
  256. package/dist/table/smart-table.js +93 -51
  257. package/dist/table/table.js +348 -281
  258. package/dist/table-legacy-ng/table-legacy-ng.js +117 -102
  259. package/dist/table-legacy-ng/table-legacy-ng__pager.js +42 -10
  260. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +92 -69
  261. package/dist/table-legacy-ng/table-legacy-ng__selection.js +169 -119
  262. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +36 -21
  263. package/dist/table-ng/smart-table-ng.js +31 -1
  264. package/dist/table-ng/table-ng.js +31 -1
  265. package/dist/tabs/collapsible-more.js +87 -50
  266. package/dist/tabs/collapsible-tab.js +45 -38
  267. package/dist/tabs/collapsible-tabs.js +161 -94
  268. package/dist/tabs/custom-item.js +2 -4
  269. package/dist/tabs/dumb-tabs.js +122 -75
  270. package/dist/tabs/smart-tabs.js +75 -29
  271. package/dist/tabs/tab-link.js +29 -19
  272. package/dist/tabs/tab.js +33 -19
  273. package/dist/tabs/tabs.js +35 -0
  274. package/dist/tabs-ng/tabs-ng.js +38 -24
  275. package/dist/tabs-ng/tabs-ng__template.js +1 -38
  276. package/dist/tag/tag.js +170 -133
  277. package/dist/tags-input/tags-input.js +428 -327
  278. package/dist/tags-input-ng/tags-input-ng.js +37 -1
  279. package/dist/tags-list/tags-list.js +80 -56
  280. package/dist/template-ng/template-ng.js +50 -39
  281. package/dist/text/text.js +38 -28
  282. package/dist/title-ng/title-ng.js +28 -23
  283. package/dist/toggle/toggle.js +72 -56
  284. package/dist/toggle-ng/toggle-ng.js +14 -1
  285. package/dist/tooltip/tooltip.js +192 -146
  286. package/dist/tooltip-ng/tooltip-ng.js +51 -25
  287. package/dist/user-agreement/service.js +374 -227
  288. package/dist/user-agreement/toolbox.eula.js +1 -160
  289. package/dist/user-agreement/user-agreement.js +128 -86
  290. package/dist/user-card/card.js +32 -0
  291. package/dist/user-card/smart-user-card-tooltip.js +116 -51
  292. package/dist/user-card/tooltip.js +90 -48
  293. package/dist/user-card/user-card.js +32 -0
  294. package/dist/user-card-ng/user-card-ng.js +34 -2
  295. package/package.json +2 -2
@@ -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),