@atlaskit/smart-user-picker 4.0.0

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 (209) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/LICENSE +13 -0
  3. package/build/tsconfig.json +16 -0
  4. package/dist/cjs/analytics.js +131 -0
  5. package/dist/cjs/components/MessagesIntlProvider.js +72 -0
  6. package/dist/cjs/components/SmartUserPicker.js +473 -0
  7. package/dist/cjs/components/index.js +24 -0
  8. package/dist/cjs/config/index.js +50 -0
  9. package/dist/cjs/i18n/cs.js +26 -0
  10. package/dist/cjs/i18n/da.js +26 -0
  11. package/dist/cjs/i18n/de.js +26 -0
  12. package/dist/cjs/i18n/en.js +14 -0
  13. package/dist/cjs/i18n/en_GB.js +14 -0
  14. package/dist/cjs/i18n/en_ZZ.js +26 -0
  15. package/dist/cjs/i18n/es.js +26 -0
  16. package/dist/cjs/i18n/et.js +16 -0
  17. package/dist/cjs/i18n/fi.js +26 -0
  18. package/dist/cjs/i18n/fr.js +26 -0
  19. package/dist/cjs/i18n/hu.js +26 -0
  20. package/dist/cjs/i18n/index.js +247 -0
  21. package/dist/cjs/i18n/is.js +14 -0
  22. package/dist/cjs/i18n/it.js +26 -0
  23. package/dist/cjs/i18n/ja.js +26 -0
  24. package/dist/cjs/i18n/ko.js +26 -0
  25. package/dist/cjs/i18n/languages.js +33 -0
  26. package/dist/cjs/i18n/nb.js +26 -0
  27. package/dist/cjs/i18n/nl.js +26 -0
  28. package/dist/cjs/i18n/pl.js +26 -0
  29. package/dist/cjs/i18n/pt_BR.js +26 -0
  30. package/dist/cjs/i18n/pt_PT.js +16 -0
  31. package/dist/cjs/i18n/ro.js +14 -0
  32. package/dist/cjs/i18n/ru.js +26 -0
  33. package/dist/cjs/i18n/sk.js +16 -0
  34. package/dist/cjs/i18n/sv.js +26 -0
  35. package/dist/cjs/i18n/th.js +26 -0
  36. package/dist/cjs/i18n/tr.js +26 -0
  37. package/dist/cjs/i18n/uk.js +26 -0
  38. package/dist/cjs/i18n/vi.js +26 -0
  39. package/dist/cjs/i18n/zh.js +26 -0
  40. package/dist/cjs/i18n/zh_TW.js +26 -0
  41. package/dist/cjs/i18n.js +57 -0
  42. package/dist/cjs/index.js +87 -0
  43. package/dist/cjs/service/constants.js +20 -0
  44. package/dist/cjs/service/default-value-hydration-client.js +278 -0
  45. package/dist/cjs/service/graphqlUtils.js +48 -0
  46. package/dist/cjs/service/index.js +23 -0
  47. package/dist/cjs/service/recommendation-client.js +71 -0
  48. package/dist/cjs/service/teams-client.js +56 -0
  49. package/dist/cjs/service/users-client.js +97 -0
  50. package/dist/cjs/service/users-transformer.js +94 -0
  51. package/dist/cjs/types.js +14 -0
  52. package/dist/cjs/ufoExperiences.js +39 -0
  53. package/dist/cjs/util/i18n-util.js +274 -0
  54. package/dist/cjs/version.json +5 -0
  55. package/dist/es2019/analytics.js +85 -0
  56. package/dist/es2019/components/MessagesIntlProvider.js +43 -0
  57. package/dist/es2019/components/SmartUserPicker.js +316 -0
  58. package/dist/es2019/components/index.js +11 -0
  59. package/dist/es2019/config/index.js +42 -0
  60. package/dist/es2019/i18n/cs.js +18 -0
  61. package/dist/es2019/i18n/da.js +18 -0
  62. package/dist/es2019/i18n/de.js +18 -0
  63. package/dist/es2019/i18n/en.js +7 -0
  64. package/dist/es2019/i18n/en_GB.js +7 -0
  65. package/dist/es2019/i18n/en_ZZ.js +18 -0
  66. package/dist/es2019/i18n/es.js +18 -0
  67. package/dist/es2019/i18n/et.js +8 -0
  68. package/dist/es2019/i18n/fi.js +18 -0
  69. package/dist/es2019/i18n/fr.js +18 -0
  70. package/dist/es2019/i18n/hu.js +18 -0
  71. package/dist/es2019/i18n/index.js +36 -0
  72. package/dist/es2019/i18n/is.js +7 -0
  73. package/dist/es2019/i18n/it.js +18 -0
  74. package/dist/es2019/i18n/ja.js +18 -0
  75. package/dist/es2019/i18n/ko.js +18 -0
  76. package/dist/es2019/i18n/languages.js +26 -0
  77. package/dist/es2019/i18n/nb.js +18 -0
  78. package/dist/es2019/i18n/nl.js +18 -0
  79. package/dist/es2019/i18n/pl.js +18 -0
  80. package/dist/es2019/i18n/pt_BR.js +18 -0
  81. package/dist/es2019/i18n/pt_PT.js +8 -0
  82. package/dist/es2019/i18n/ro.js +7 -0
  83. package/dist/es2019/i18n/ru.js +18 -0
  84. package/dist/es2019/i18n/sk.js +8 -0
  85. package/dist/es2019/i18n/sv.js +18 -0
  86. package/dist/es2019/i18n/th.js +18 -0
  87. package/dist/es2019/i18n/tr.js +18 -0
  88. package/dist/es2019/i18n/uk.js +18 -0
  89. package/dist/es2019/i18n/vi.js +18 -0
  90. package/dist/es2019/i18n/zh.js +18 -0
  91. package/dist/es2019/i18n/zh_TW.js +18 -0
  92. package/dist/es2019/i18n.js +48 -0
  93. package/dist/es2019/index.js +6 -0
  94. package/dist/es2019/service/constants.js +11 -0
  95. package/dist/es2019/service/default-value-hydration-client.js +125 -0
  96. package/dist/es2019/service/graphqlUtils.js +39 -0
  97. package/dist/es2019/service/index.js +2 -0
  98. package/dist/es2019/service/recommendation-client.js +52 -0
  99. package/dist/es2019/service/teams-client.js +37 -0
  100. package/dist/es2019/service/users-client.js +52 -0
  101. package/dist/es2019/service/users-transformer.js +73 -0
  102. package/dist/es2019/types.js +7 -0
  103. package/dist/es2019/ufoExperiences.js +26 -0
  104. package/dist/es2019/util/i18n-util.js +231 -0
  105. package/dist/es2019/version.json +5 -0
  106. package/dist/esm/analytics.js +99 -0
  107. package/dist/esm/components/MessagesIntlProvider.js +50 -0
  108. package/dist/esm/components/SmartUserPicker.js +454 -0
  109. package/dist/esm/components/index.js +11 -0
  110. package/dist/esm/config/index.js +39 -0
  111. package/dist/esm/i18n/cs.js +18 -0
  112. package/dist/esm/i18n/da.js +18 -0
  113. package/dist/esm/i18n/de.js +18 -0
  114. package/dist/esm/i18n/en.js +7 -0
  115. package/dist/esm/i18n/en_GB.js +7 -0
  116. package/dist/esm/i18n/en_ZZ.js +18 -0
  117. package/dist/esm/i18n/es.js +18 -0
  118. package/dist/esm/i18n/et.js +8 -0
  119. package/dist/esm/i18n/fi.js +18 -0
  120. package/dist/esm/i18n/fr.js +18 -0
  121. package/dist/esm/i18n/hu.js +18 -0
  122. package/dist/esm/i18n/index.js +36 -0
  123. package/dist/esm/i18n/is.js +7 -0
  124. package/dist/esm/i18n/it.js +18 -0
  125. package/dist/esm/i18n/ja.js +18 -0
  126. package/dist/esm/i18n/ko.js +18 -0
  127. package/dist/esm/i18n/languages.js +26 -0
  128. package/dist/esm/i18n/nb.js +18 -0
  129. package/dist/esm/i18n/nl.js +18 -0
  130. package/dist/esm/i18n/pl.js +18 -0
  131. package/dist/esm/i18n/pt_BR.js +18 -0
  132. package/dist/esm/i18n/pt_PT.js +8 -0
  133. package/dist/esm/i18n/ro.js +7 -0
  134. package/dist/esm/i18n/ru.js +18 -0
  135. package/dist/esm/i18n/sk.js +8 -0
  136. package/dist/esm/i18n/sv.js +18 -0
  137. package/dist/esm/i18n/th.js +18 -0
  138. package/dist/esm/i18n/tr.js +18 -0
  139. package/dist/esm/i18n/uk.js +18 -0
  140. package/dist/esm/i18n/vi.js +18 -0
  141. package/dist/esm/i18n/zh.js +18 -0
  142. package/dist/esm/i18n/zh_TW.js +18 -0
  143. package/dist/esm/i18n.js +48 -0
  144. package/dist/esm/index.js +6 -0
  145. package/dist/esm/service/constants.js +11 -0
  146. package/dist/esm/service/default-value-hydration-client.js +261 -0
  147. package/dist/esm/service/graphqlUtils.js +41 -0
  148. package/dist/esm/service/index.js +2 -0
  149. package/dist/esm/service/recommendation-client.js +60 -0
  150. package/dist/esm/service/teams-client.js +45 -0
  151. package/dist/esm/service/users-client.js +83 -0
  152. package/dist/esm/service/users-transformer.js +83 -0
  153. package/dist/esm/types.js +7 -0
  154. package/dist/esm/ufoExperiences.js +26 -0
  155. package/dist/esm/util/i18n-util.js +256 -0
  156. package/dist/esm/version.json +5 -0
  157. package/dist/types/analytics.d.ts +21 -0
  158. package/dist/types/components/MessagesIntlProvider.d.ts +9 -0
  159. package/dist/types/components/SmartUserPicker.d.ts +30 -0
  160. package/dist/types/components/index.d.ts +4 -0
  161. package/dist/types/config/index.d.ts +9 -0
  162. package/dist/types/i18n/cs.d.ts +18 -0
  163. package/dist/types/i18n/da.d.ts +18 -0
  164. package/dist/types/i18n/de.d.ts +18 -0
  165. package/dist/types/i18n/en.d.ts +7 -0
  166. package/dist/types/i18n/en_GB.d.ts +7 -0
  167. package/dist/types/i18n/en_ZZ.d.ts +18 -0
  168. package/dist/types/i18n/es.d.ts +18 -0
  169. package/dist/types/i18n/et.d.ts +8 -0
  170. package/dist/types/i18n/fi.d.ts +18 -0
  171. package/dist/types/i18n/fr.d.ts +18 -0
  172. package/dist/types/i18n/hu.d.ts +18 -0
  173. package/dist/types/i18n/index.d.ts +36 -0
  174. package/dist/types/i18n/is.d.ts +7 -0
  175. package/dist/types/i18n/it.d.ts +18 -0
  176. package/dist/types/i18n/ja.d.ts +18 -0
  177. package/dist/types/i18n/ko.d.ts +18 -0
  178. package/dist/types/i18n/languages.d.ts +27 -0
  179. package/dist/types/i18n/nb.d.ts +18 -0
  180. package/dist/types/i18n/nl.d.ts +18 -0
  181. package/dist/types/i18n/pl.d.ts +18 -0
  182. package/dist/types/i18n/pt_BR.d.ts +18 -0
  183. package/dist/types/i18n/pt_PT.d.ts +8 -0
  184. package/dist/types/i18n/ro.d.ts +7 -0
  185. package/dist/types/i18n/ru.d.ts +18 -0
  186. package/dist/types/i18n/sk.d.ts +8 -0
  187. package/dist/types/i18n/sv.d.ts +18 -0
  188. package/dist/types/i18n/th.d.ts +18 -0
  189. package/dist/types/i18n/tr.d.ts +18 -0
  190. package/dist/types/i18n/uk.d.ts +18 -0
  191. package/dist/types/i18n/vi.d.ts +18 -0
  192. package/dist/types/i18n/zh.d.ts +18 -0
  193. package/dist/types/i18n/zh_TW.d.ts +18 -0
  194. package/dist/types/i18n.d.ts +47 -0
  195. package/dist/types/index.d.ts +6 -0
  196. package/dist/types/service/constants.d.ts +4 -0
  197. package/dist/types/service/default-value-hydration-client.d.ts +8 -0
  198. package/dist/types/service/graphqlUtils.d.ts +14 -0
  199. package/dist/types/service/index.d.ts +2 -0
  200. package/dist/types/service/recommendation-client.d.ts +5 -0
  201. package/dist/types/service/teams-client.d.ts +12 -0
  202. package/dist/types/service/users-client.d.ts +11 -0
  203. package/dist/types/service/users-transformer.d.ts +22 -0
  204. package/dist/types/types.d.ts +208 -0
  205. package/dist/types/ufoExperiences.d.ts +3 -0
  206. package/dist/types/util/i18n-util.d.ts +11 -0
  207. package/docs/0-intro.tsx +52 -0
  208. package/package.json +56 -0
  209. package/tsconfig.json +16 -0
@@ -0,0 +1,454 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
+ import _createClass from "@babel/runtime/helpers/createClass";
6
+ import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
7
+ import _inherits from "@babel/runtime/helpers/inherits";
8
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
9
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
10
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
11
+
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
+
16
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
17
+
18
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
19
+
20
+ import React from 'react';
21
+ import debounce from 'lodash/debounce';
22
+ import { v4 as uuidV4 } from 'uuid';
23
+ import { withAnalyticsEvents } from '@atlaskit/analytics-next';
24
+ import memoizeOne from 'memoize-one';
25
+ import { injectIntl } from 'react-intl-next';
26
+ import UserPicker from '@atlaskit/user-picker';
27
+ import { requestUsersEvent, filterUsersEvent, preparedUsersLoadedEvent, successfulRequestUsersEvent, failedRequestUsersEvent, mountedWithPrefetchEvent, createAndFireEventInElementsChannel } from '../analytics';
28
+ import MessagesIntlProvider from './MessagesIntlProvider';
29
+ import { getUserRecommendations, hydrateDefaultValues } from '../service';
30
+ var DEFAULT_DEBOUNCE_TIME_MS = 150;
31
+
32
+ var hasContextChanged = function hasContextChanged(oldContext, newContext) {
33
+ return oldContext.siteId !== newContext.siteId || oldContext.orgId !== newContext.orgId || oldContext.productKey !== newContext.productKey || oldContext.principalId !== newContext.principalId || oldContext.containerId !== newContext.containerId || oldContext.objectId !== newContext.objectId || oldContext.childObjectId !== newContext.childObjectId;
34
+ };
35
+
36
+ var stringContains = function stringContains(str, substr) {
37
+ if (str === null || str === undefined) {
38
+ return false;
39
+ }
40
+
41
+ if (substr === null || substr === '' || substr === undefined) {
42
+ return true;
43
+ }
44
+
45
+ return str.toLowerCase().includes(substr.toLowerCase());
46
+ };
47
+
48
+ var getUsersForAnalytics = function getUsersForAnalytics(users) {
49
+ return (users || []).map(function (_ref) {
50
+ var id = _ref.id,
51
+ type = _ref.type;
52
+ return {
53
+ id: id,
54
+ type: type
55
+ };
56
+ });
57
+ };
58
+
59
+ export var SmartUserPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component) {
60
+ _inherits(SmartUserPickerWithoutAnalytics, _React$Component);
61
+
62
+ var _super = _createSuper(SmartUserPickerWithoutAnalytics);
63
+
64
+ function SmartUserPickerWithoutAnalytics() {
65
+ var _this$props$debounceT;
66
+
67
+ var _this;
68
+
69
+ _classCallCheck(this, SmartUserPickerWithoutAnalytics);
70
+
71
+ for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
72
+ _args[_key] = arguments[_key];
73
+ }
74
+
75
+ _this = _super.call.apply(_super, [this].concat(_args));
76
+
77
+ _defineProperty(_assertThisInitialized(_this), "state", {
78
+ users: [],
79
+ loading: false,
80
+ error: false,
81
+ closed: true,
82
+ query: '',
83
+ defaultValue: [],
84
+ bootstrapOptions: []
85
+ });
86
+
87
+ _defineProperty(_assertThisInitialized(_this), "fireEvent", function (eventCreator) {
88
+ var createAnalyticsEvent = _this.props.createAnalyticsEvent;
89
+
90
+ if (createAnalyticsEvent) {
91
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
92
+ args[_key2 - 1] = arguments[_key2];
93
+ }
94
+
95
+ createAndFireEventInElementsChannel(eventCreator.apply(void 0, [_this.props, _this.state].concat(args)))(createAnalyticsEvent);
96
+ }
97
+ });
98
+
99
+ _defineProperty(_assertThisInitialized(_this), "filterOptions", function (users, query, propFilterOptions) {
100
+ return propFilterOptions ? propFilterOptions(users, query) : users;
101
+ });
102
+
103
+ _defineProperty(_assertThisInitialized(_this), "memoizedFilterOptions", memoizeOne(_this.filterOptions));
104
+
105
+ _defineProperty(_assertThisInitialized(_this), "getUsers", debounce( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
106
+ var _this$state, query, sessionId, _this$props, containerId, childObjectId, objectId, principalId, productKey, siteId, orgId, baseUrl, includeUsers, includeGroups, includeTeams, maxOptions, searchQueryFilter, onEmpty, productAttributes, intl, maxNumberOfResults, startTime, recommendationsRequest, _yield$onEmpty, recommendedUsers, elapsedTimeMilli, displayedUsers, defaultUsers, _elapsedTimeMilli;
107
+
108
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
109
+ while (1) {
110
+ switch (_context.prev = _context.next) {
111
+ case 0:
112
+ _this$state = _this.state, query = _this$state.query, sessionId = _this$state.sessionId;
113
+ _this$props = _this.props, containerId = _this$props.containerId, childObjectId = _this$props.childObjectId, objectId = _this$props.objectId, principalId = _this$props.principalId, productKey = _this$props.productKey, siteId = _this$props.siteId, orgId = _this$props.orgId, baseUrl = _this$props.baseUrl, includeUsers = _this$props.includeUsers, includeGroups = _this$props.includeGroups, includeTeams = _this$props.includeTeams, maxOptions = _this$props.maxOptions, searchQueryFilter = _this$props.searchQueryFilter, onEmpty = _this$props.onEmpty, productAttributes = _this$props.productAttributes, intl = _this$props.intl;
114
+ maxNumberOfResults = maxOptions || 100;
115
+ startTime = window.performance.now();
116
+ recommendationsRequest = {
117
+ baseUrl: baseUrl,
118
+ context: {
119
+ containerId: containerId,
120
+ contextType: _this.props.fieldId,
121
+ objectId: objectId,
122
+ principalId: principalId,
123
+ productKey: productKey,
124
+ siteId: siteId,
125
+ orgId: orgId,
126
+ childObjectId: childObjectId,
127
+ sessionId: sessionId,
128
+ productAttributes: productAttributes
129
+ },
130
+ includeUsers: includeUsers,
131
+ includeGroups: includeGroups,
132
+ includeTeams: includeTeams,
133
+ maxNumberOfResults: maxNumberOfResults,
134
+ query: query,
135
+ searchQueryFilter: searchQueryFilter
136
+ };
137
+ _context.prev = 5;
138
+
139
+ _this.fireEvent(requestUsersEvent);
140
+
141
+ _context.next = 9;
142
+ return getUserRecommendations(recommendationsRequest, intl);
143
+
144
+ case 9:
145
+ recommendedUsers = _context.sent;
146
+ elapsedTimeMilli = window.performance.now() - startTime;
147
+
148
+ if (!(recommendedUsers.length === 0 && onEmpty)) {
149
+ _context.next = 26;
150
+ break;
151
+ }
152
+
153
+ _context.next = 14;
154
+ return onEmpty(query);
155
+
156
+ case 14:
157
+ _context.t2 = _yield$onEmpty = _context.sent;
158
+ _context.t1 = _context.t2 !== null;
159
+
160
+ if (!_context.t1) {
161
+ _context.next = 18;
162
+ break;
163
+ }
164
+
165
+ _context.t1 = _yield$onEmpty !== void 0;
166
+
167
+ case 18:
168
+ if (!_context.t1) {
169
+ _context.next = 22;
170
+ break;
171
+ }
172
+
173
+ _context.t3 = _yield$onEmpty;
174
+ _context.next = 23;
175
+ break;
176
+
177
+ case 22:
178
+ _context.t3 = [];
179
+
180
+ case 23:
181
+ _context.t0 = _context.t3;
182
+ _context.next = 27;
183
+ break;
184
+
185
+ case 26:
186
+ _context.t0 = recommendedUsers;
187
+
188
+ case 27:
189
+ displayedUsers = _context.t0;
190
+
191
+ _this.setState(function (state) {
192
+ var applicable = state.query === query;
193
+ var users = applicable ? displayedUsers : state.users;
194
+ var loading = !applicable;
195
+
196
+ _this.fireEvent(successfulRequestUsersEvent, {
197
+ users: getUsersForAnalytics(recommendedUsers),
198
+ elapsedTimeMilli: elapsedTimeMilli,
199
+ displayedUsers: getUsersForAnalytics(displayedUsers),
200
+ productAttributes: productAttributes,
201
+ applicable: applicable
202
+ });
203
+
204
+ return {
205
+ users: users,
206
+ loading: loading
207
+ };
208
+ });
209
+
210
+ _context.next = 40;
211
+ break;
212
+
213
+ case 31:
214
+ _context.prev = 31;
215
+ _context.t4 = _context["catch"](5);
216
+
217
+ _this.setState({
218
+ users: [],
219
+ error: true
220
+ });
221
+
222
+ _context.next = 36;
223
+ return _this.props.onError ? _this.props.onError(_context.t4, recommendationsRequest) || Promise.resolve([]) : Promise.resolve([]);
224
+
225
+ case 36:
226
+ defaultUsers = _context.sent;
227
+ _elapsedTimeMilli = window.performance.now() - startTime;
228
+
229
+ _this.setState({
230
+ users: defaultUsers,
231
+ loading: false
232
+ });
233
+
234
+ _this.fireEvent(failedRequestUsersEvent, {
235
+ elapsedTimeMilli: _elapsedTimeMilli,
236
+ productAttributes: productAttributes
237
+ });
238
+
239
+ case 40:
240
+ case "end":
241
+ return _context.stop();
242
+ }
243
+ }
244
+ }, _callee, null, [[5, 31]]);
245
+ })), (_this$props$debounceT = _this.props.debounceTime) !== null && _this$props$debounceT !== void 0 ? _this$props$debounceT : 0));
246
+
247
+ _defineProperty(_assertThisInitialized(_this), "onInputChange", function (newQuery, sessionId) {
248
+ var query = newQuery || '';
249
+ var closed = _this.state.closed;
250
+
251
+ if (query === _this.state.query) {
252
+ return;
253
+ }
254
+
255
+ if (!closed) {
256
+ _this.setState({
257
+ loading: true,
258
+ query: query,
259
+ sessionId: sessionId
260
+ });
261
+
262
+ if (_this.props.onInputChange) {
263
+ _this.props.onInputChange(query, sessionId);
264
+ }
265
+ }
266
+ });
267
+
268
+ _defineProperty(_assertThisInitialized(_this), "filterUsers", function () {
269
+ var _this$state2 = _this.state,
270
+ loading = _this$state2.loading,
271
+ users = _this$state2.users,
272
+ query = _this$state2.query;
273
+
274
+ var filteredUsers = _this.memoizedFilterOptions(users, query, _this.props.filterOptions); //If bootstrapOptions have been passed in and it is bootstrap
275
+
276
+
277
+ if (_this.props.bootstrapOptions && _this.props.bootstrapOptions.length !== 0 && query === '') {
278
+ var bootstrapFilteredUsers = _this.memoizedFilterOptions(_this.props.bootstrapOptions, query, _this.props.filterOptions);
279
+
280
+ _this.fireEvent(filterUsersEvent, {
281
+ filtered: getUsersForAnalytics(bootstrapFilteredUsers),
282
+ all: getUsersForAnalytics(_this.props.bootstrapOptions)
283
+ });
284
+
285
+ return bootstrapFilteredUsers;
286
+ } // while when not loading just return already filtered result from server.
287
+
288
+
289
+ if (!loading) {
290
+ return filteredUsers;
291
+ }
292
+
293
+ var queryFilteredUsers = filteredUsers.filter(function (user) {
294
+ return stringContains(user.name, query);
295
+ });
296
+
297
+ _this.fireEvent(filterUsersEvent, {
298
+ filtered: getUsersForAnalytics(queryFilteredUsers),
299
+ all: getUsersForAnalytics(users)
300
+ }); // when loading filter previous result.
301
+
302
+
303
+ return filteredUsers;
304
+ });
305
+
306
+ _defineProperty(_assertThisInitialized(_this), "onFocus", function (sessionId) {
307
+ var state = {
308
+ query: '',
309
+ closed: false
310
+ };
311
+
312
+ if (_this.state.users.length === 0) {
313
+ state.sessionId = sessionId;
314
+ state.loading = true;
315
+ } else {
316
+ _this.fireEvent(preparedUsersLoadedEvent, {
317
+ users: getUsersForAnalytics(_this.state.users),
318
+ preparedSessionId: _this.state.sessionId,
319
+ sessionId: sessionId
320
+ });
321
+ }
322
+
323
+ _this.setState(function (currentState) {
324
+ return _objectSpread(_objectSpread({}, currentState), state);
325
+ });
326
+
327
+ if (_this.props.onFocus) {
328
+ _this.props.onFocus(sessionId);
329
+ }
330
+ });
331
+
332
+ _defineProperty(_assertThisInitialized(_this), "onBlur", function (sessionId) {
333
+ _this.getUsers.cancel(); // clear old users if query is populated so that on refocus,
334
+ // the old list is not shown
335
+
336
+
337
+ var users = _this.state.query.length === 0 ? _this.state.users : [];
338
+
339
+ _this.setState({
340
+ loading: false,
341
+ closed: true,
342
+ users: users
343
+ });
344
+
345
+ if (_this.props.onBlur) {
346
+ _this.props.onBlur(sessionId);
347
+ }
348
+ });
349
+
350
+ return _this;
351
+ }
352
+
353
+ _createClass(SmartUserPickerWithoutAnalytics, [{
354
+ key: "componentDidMount",
355
+ value: function () {
356
+ var _componentDidMount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
357
+ var value, defaultValue, prefetch, sessionId;
358
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
359
+ while (1) {
360
+ switch (_context2.prev = _context2.next) {
361
+ case 0:
362
+ _context2.prev = 0;
363
+ _context2.next = 3;
364
+ return hydrateDefaultValues(this.props.baseUrl, this.props.defaultValue, this.props.productKey);
365
+
366
+ case 3:
367
+ value = _context2.sent;
368
+ this.setState({
369
+ defaultValue: value
370
+ });
371
+ _context2.next = 13;
372
+ break;
373
+
374
+ case 7:
375
+ _context2.prev = 7;
376
+ _context2.t0 = _context2["catch"](0);
377
+ _context2.next = 11;
378
+ return this.props.onValueError ? this.props.onValueError(_context2.t0, this.props.defaultValue) || Promise.resolve([]) : Promise.resolve([]);
379
+
380
+ case 11:
381
+ defaultValue = _context2.sent;
382
+ this.setState({
383
+ defaultValue: defaultValue
384
+ });
385
+
386
+ case 13:
387
+ prefetch = this.props.prefetch;
388
+
389
+ if (prefetch) {
390
+ sessionId = uuidV4();
391
+ this.fireEvent(mountedWithPrefetchEvent, {
392
+ sessionId: sessionId
393
+ });
394
+ this.setState({
395
+ sessionId: sessionId
396
+ });
397
+ }
398
+
399
+ case 15:
400
+ case "end":
401
+ return _context2.stop();
402
+ }
403
+ }
404
+ }, _callee2, this, [[0, 7]]);
405
+ }));
406
+
407
+ function componentDidMount() {
408
+ return _componentDidMount.apply(this, arguments);
409
+ }
410
+
411
+ return componentDidMount;
412
+ }()
413
+ }, {
414
+ key: "componentDidUpdate",
415
+ value: function componentDidUpdate(prevProps, prevState) {
416
+ if (hasContextChanged(prevProps, this.props) || this.props.fieldId !== prevProps.fieldId) {
417
+ this.setState({
418
+ users: []
419
+ });
420
+ }
421
+
422
+ if ((this.state.sessionId !== prevState.sessionId || this.state.query !== prevState.query) && (this.state.query !== '' || !this.props.bootstrapOptions)) {
423
+ this.getUsers();
424
+ }
425
+ }
426
+ }, {
427
+ key: "render",
428
+ value: function render() {
429
+ return /*#__PURE__*/React.createElement(MessagesIntlProvider, null, /*#__PURE__*/React.createElement(UserPicker, _extends({}, this.props, {
430
+ onInputChange: this.onInputChange,
431
+ onBlur: this.onBlur,
432
+ onFocus: this.onFocus,
433
+ defaultValue: this.state.defaultValue,
434
+ isLoading: this.props.isLoading || this.state.loading && !this.state.closed && (!this.props.bootstrapOptions || this.state.query !== ''),
435
+ options: this.filterUsers()
436
+ })));
437
+ }
438
+ }]);
439
+
440
+ return SmartUserPickerWithoutAnalytics;
441
+ }(React.Component); // TODO: Smart User picker team will have to add a type annotation here
442
+
443
+ _defineProperty(SmartUserPickerWithoutAnalytics, "defaultProps", {
444
+ onError: function onError() {},
445
+ baseUrl: '',
446
+ includeUsers: true,
447
+ includeGroups: false,
448
+ includeTeams: false,
449
+ prefetch: false,
450
+ principalId: 'Context',
451
+ debounceTime: DEFAULT_DEBOUNCE_TIME_MS
452
+ });
453
+
454
+ export var SmartUserPicker = withAnalyticsEvents()(injectIntl(SmartUserPickerWithoutAnalytics));
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { SmartUserPicker } from './SmartUserPicker';
3
+ import MessagesIntlProvider from './MessagesIntlProvider';
4
+ import { useUFOConcurrentExperience, smartUserPickerRenderedUfoExperience } from '../ufoExperiences';
5
+
6
+ var SmartUserPickerWithIntlProvider = function SmartUserPickerWithIntlProvider(props) {
7
+ useUFOConcurrentExperience(smartUserPickerRenderedUfoExperience, props.inputId || props.fieldId);
8
+ return /*#__PURE__*/React.createElement(MessagesIntlProvider, null, /*#__PURE__*/React.createElement(SmartUserPicker, props));
9
+ };
10
+
11
+ export default SmartUserPickerWithIntlProvider;
@@ -0,0 +1,39 @@
1
+ var env = 'prod';
2
+ var STG_INSTANCE = 'https://api-private.stg.atlassian.com';
3
+ var LOCAL_CONFIG = {
4
+ getRecommendationServiceUrl: function getRecommendationServiceUrl(baseUrl) {
5
+ return baseUrl ? "".concat(STG_INSTANCE, "/").concat(baseUrl, "/gateway/api/v1/recommendations") : "".concat(STG_INSTANCE, "/gateway/api/v1/recommendations");
6
+ },
7
+ getUsersServiceUrl: function getUsersServiceUrl(productKey) {
8
+ return productKey === 'jira' ? "https://jdog.jira-dev.com/rest/api/3/user/bulk" : "https://pug.jira-dev.com/wiki/rest/api/user/bulk";
9
+ },
10
+ getGraphQLUrl: function getGraphQLUrl(baseUrl) {
11
+ return baseUrl ? "".concat(STG_INSTANCE, "/").concat(baseUrl, "/graphql") : "".concat(STG_INSTANCE, "/graphql");
12
+ },
13
+ getTeamsUrl: function getTeamsUrl(baseUrl) {
14
+ return baseUrl ? "".concat(STG_INSTANCE, "/").concat(baseUrl, "/gateway/api/v3/teams") : "".concat(STG_INSTANCE, "/gateway/api/v3/teams");
15
+ }
16
+ };
17
+ var PRD_CONFIG = {
18
+ getRecommendationServiceUrl: function getRecommendationServiceUrl(baseUrl) {
19
+ return baseUrl ? "".concat(baseUrl, "/gateway/api/v1/recommendations") : '/gateway/api/v1/recommendations';
20
+ },
21
+ getUsersServiceUrl: function getUsersServiceUrl(productKey) {
22
+ var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
23
+ return productKey === 'jira' ? "".concat(baseUrl, "/rest/api/3/user/bulk") : "".concat(baseUrl, "/wiki/rest/api/user/bulk");
24
+ },
25
+ getGraphQLUrl: function getGraphQLUrl(baseUrl) {
26
+ return baseUrl ? "".concat(baseUrl, "/graphql") : "/graphql";
27
+ },
28
+ getTeamsUrl: function getTeamsUrl(baseUrl) {
29
+ return baseUrl ? "".concat(baseUrl, "/gateway/api/v3/teams") : "/gateway/api/v3/teams";
30
+ }
31
+ }; // TODO remove this once no external code is calling it
32
+
33
+ export var setSmartUserPickerEnv = function setSmartUserPickerEnv(newEnv) {
34
+ return env = newEnv;
35
+ }; // TODO remove this once no external code is calling it
36
+
37
+ export var getConfig = function getConfig() {
38
+ return env === 'local' ? LOCAL_CONFIG : PRD_CONFIG;
39
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // Czech
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Nalezen v:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'HOST',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'Skupiny hostů mají přístup pouze k určitým prostorům a mají omezený přístup k uživatelským údajům.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'Hosté mají přístup pouze k určitým prostorům a mají omezený přístup k uživatelským údajům.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'ČLEN',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // Danish
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Fundet i:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'GÆST',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'Gæstegrupper har kun adgang til bestemte områder og har begrænset adgang til brugeroplysninger.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'Gæster har kun adgang til bestemte områder og har begrænset adgang til brugeroplysninger.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'Medlem',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // German
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Gefunden in:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'GAST',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'Gästegruppen können ausschließlich auf ausgewählte Bereiche zugreifen und verfügen über eingeschränkten Zugriff auf Benutzerinformationen.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'Gäste können ausschließlich auf ausgewählte Bereiche zugreifen und verfügen über eingeschränkten Zugriff auf Benutzerinformationen.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'Mitglied',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };
@@ -0,0 +1,7 @@
1
+ // English
2
+ export default {
3
+ 'fabric.elements.user-picker.placeholder': 'Find a person...',
4
+ 'fabric.elements.user-picker.placeholder.add-more': 'add more people...',
5
+ 'fabric.elements.user-picker.multi.remove-item': 'Remove',
6
+ 'fabric.elements.user-picker.single.clear': 'Clear'
7
+ };
@@ -0,0 +1,7 @@
1
+ // English (United Kingdom)
2
+ export default {
3
+ 'fabric.elements.user-picker.placeholder': 'Find a person...',
4
+ 'fabric.elements.user-picker.placeholder.add-more': 'add more people...',
5
+ 'fabric.elements.user-picker.multi.remove-item': 'Remove',
6
+ 'fabric.elements.user-picker.single.clear': 'Clear'
7
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // English (Instrumented)
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': '⁣⁢Found in:؜‍⁠⁠‌؜‍⁠؜‍⁣⁤',
10
+ 'fabric.elements.user-picker.github.provider': '⁣⁢GitHub⁠؜⁠‍⁠؜⁡؜‌⁣⁤',
11
+ 'fabric.elements.user-picker.google.provider': '⁣⁢Google‍‌‍‌⁠؜‍⁡‌‌‌⁠⁡‍⁣⁤',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': '⁣⁢GUEST⁡؜⁠⁡‍‍‍⁣⁤',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': '⁣⁢Guest groups can only access certain spaces and have limited access to user info.⁠‍⁡‍⁡؜⁡⁠⁠⁠⁣⁤',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': '⁣⁢Guests can only access certain spaces and have limited access to user info.‌؜⁠‌⁠‍‌‌‌؜⁡⁣⁤',
15
+ 'fabric.elements.user-picker.member.lozenge.text': '⁣⁢MEMBER‍‍⁡‍‍⁣⁤',
16
+ 'fabric.elements.user-picker.microsoft.provider': '⁣⁢Microsoft‍⁡؜‌؜‍⁡⁠⁡⁠⁠⁠‍‍⁡⁣⁤',
17
+ 'fabric.elements.user-picker.slack.provider': '⁣⁢Slack‍‍⁠‌؜⁠⁠⁡؜⁠‍⁡⁣⁤'
18
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // Spanish
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Encontrado en:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'INVITADO',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'Los grupos de invitados solo pueden acceder a espacios determinados y tienen un acceso limitado a la información de los usuarios.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'Los invitados solo pueden acceder a espacios determinados y tienen un acceso limitado a la información de los usuarios.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'MIEMBRO',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // Estonian
8
+ export default {};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // Finnish
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Löydetty kohteesta:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'VIERAS',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'Vierasryhmillä on pääsy vain tiettyihin työtiloihin ja rajoitettu pääsy käyttäjätietoihin.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'Vierailla on pääsy vain tiettyihin työtiloihin ja rajoitettu pääsy käyttäjätietoihin.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'Jäsen',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * NOTE:
3
+ *
4
+ * This file is automatically generated by i18n-tools.
5
+ * DO NOT CHANGE IT BY HAND or your changes will be lost.
6
+ */
7
+ // French
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Trouvé dans :',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'INVITÉ',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': "Les groupes d'invités peuvent uniquement accéder à certains espaces et ont un accès limité aux informations utilisateur.",
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'Les invités peuvent uniquement accéder à certains espaces et ont un accès limité aux informations utilisateur.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'MEMBRE',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };