@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,316 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import React from 'react';
4
+ import debounce from 'lodash/debounce';
5
+ import { v4 as uuidV4 } from 'uuid';
6
+ import { withAnalyticsEvents } from '@atlaskit/analytics-next';
7
+ import memoizeOne from 'memoize-one';
8
+ import { injectIntl } from 'react-intl-next';
9
+ import UserPicker from '@atlaskit/user-picker';
10
+ import { requestUsersEvent, filterUsersEvent, preparedUsersLoadedEvent, successfulRequestUsersEvent, failedRequestUsersEvent, mountedWithPrefetchEvent, createAndFireEventInElementsChannel } from '../analytics';
11
+ import MessagesIntlProvider from './MessagesIntlProvider';
12
+ import { getUserRecommendations, hydrateDefaultValues } from '../service';
13
+ const DEFAULT_DEBOUNCE_TIME_MS = 150;
14
+
15
+ const hasContextChanged = (oldContext, newContext) => 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;
16
+
17
+ const stringContains = (str, substr) => {
18
+ if (str === null || str === undefined) {
19
+ return false;
20
+ }
21
+
22
+ if (substr === null || substr === '' || substr === undefined) {
23
+ return true;
24
+ }
25
+
26
+ return str.toLowerCase().includes(substr.toLowerCase());
27
+ };
28
+
29
+ const getUsersForAnalytics = users => (users || []).map(({
30
+ id,
31
+ type
32
+ }) => ({
33
+ id,
34
+ type
35
+ }));
36
+
37
+ export class SmartUserPickerWithoutAnalytics extends React.Component {
38
+ constructor(..._args) {
39
+ var _this$props$debounceT;
40
+
41
+ super(..._args);
42
+
43
+ _defineProperty(this, "state", {
44
+ users: [],
45
+ loading: false,
46
+ error: false,
47
+ closed: true,
48
+ query: '',
49
+ defaultValue: [],
50
+ bootstrapOptions: []
51
+ });
52
+
53
+ _defineProperty(this, "fireEvent", (eventCreator, ...args) => {
54
+ const {
55
+ createAnalyticsEvent
56
+ } = this.props;
57
+
58
+ if (createAnalyticsEvent) {
59
+ createAndFireEventInElementsChannel(eventCreator(this.props, this.state, ...args))(createAnalyticsEvent);
60
+ }
61
+ });
62
+
63
+ _defineProperty(this, "filterOptions", (users, query, propFilterOptions) => propFilterOptions ? propFilterOptions(users, query) : users);
64
+
65
+ _defineProperty(this, "memoizedFilterOptions", memoizeOne(this.filterOptions));
66
+
67
+ _defineProperty(this, "getUsers", debounce(async () => {
68
+ const {
69
+ query,
70
+ sessionId
71
+ } = this.state;
72
+ const {
73
+ containerId,
74
+ childObjectId,
75
+ objectId,
76
+ principalId,
77
+ productKey,
78
+ siteId,
79
+ orgId,
80
+ baseUrl,
81
+ includeUsers,
82
+ includeGroups,
83
+ includeTeams,
84
+ maxOptions,
85
+ searchQueryFilter,
86
+ onEmpty,
87
+ productAttributes,
88
+ intl
89
+ } = this.props;
90
+ const maxNumberOfResults = maxOptions || 100;
91
+ const startTime = window.performance.now();
92
+ const recommendationsRequest = {
93
+ baseUrl,
94
+ context: {
95
+ containerId,
96
+ contextType: this.props.fieldId,
97
+ objectId,
98
+ principalId,
99
+ productKey,
100
+ siteId,
101
+ orgId,
102
+ childObjectId,
103
+ sessionId,
104
+ productAttributes
105
+ },
106
+ includeUsers,
107
+ includeGroups,
108
+ includeTeams,
109
+ maxNumberOfResults,
110
+ query,
111
+ searchQueryFilter
112
+ };
113
+
114
+ try {
115
+ var _await$onEmpty;
116
+
117
+ this.fireEvent(requestUsersEvent);
118
+ const recommendedUsers = await getUserRecommendations(recommendationsRequest, intl);
119
+ const elapsedTimeMilli = window.performance.now() - startTime;
120
+ const displayedUsers = recommendedUsers.length === 0 && onEmpty ? (_await$onEmpty = await onEmpty(query)) !== null && _await$onEmpty !== void 0 ? _await$onEmpty : [] : recommendedUsers;
121
+ this.setState(state => {
122
+ const applicable = state.query === query;
123
+ const users = applicable ? displayedUsers : state.users;
124
+ const loading = !applicable;
125
+ this.fireEvent(successfulRequestUsersEvent, {
126
+ users: getUsersForAnalytics(recommendedUsers),
127
+ elapsedTimeMilli,
128
+ displayedUsers: getUsersForAnalytics(displayedUsers),
129
+ productAttributes,
130
+ applicable
131
+ });
132
+ return {
133
+ users,
134
+ loading
135
+ };
136
+ });
137
+ } catch (e) {
138
+ this.setState({
139
+ users: [],
140
+ error: true
141
+ });
142
+ const defaultUsers = await (this.props.onError ? this.props.onError(e, recommendationsRequest) || Promise.resolve([]) : Promise.resolve([]));
143
+ const elapsedTimeMilli = window.performance.now() - startTime;
144
+ this.setState({
145
+ users: defaultUsers,
146
+ loading: false
147
+ });
148
+ this.fireEvent(failedRequestUsersEvent, {
149
+ elapsedTimeMilli,
150
+ productAttributes
151
+ });
152
+ }
153
+ }, (_this$props$debounceT = this.props.debounceTime) !== null && _this$props$debounceT !== void 0 ? _this$props$debounceT : 0));
154
+
155
+ _defineProperty(this, "onInputChange", (newQuery, sessionId) => {
156
+ const query = newQuery || '';
157
+ const {
158
+ closed
159
+ } = this.state;
160
+
161
+ if (query === this.state.query) {
162
+ return;
163
+ }
164
+
165
+ if (!closed) {
166
+ this.setState({
167
+ loading: true,
168
+ query,
169
+ sessionId
170
+ });
171
+
172
+ if (this.props.onInputChange) {
173
+ this.props.onInputChange(query, sessionId);
174
+ }
175
+ }
176
+ });
177
+
178
+ _defineProperty(this, "filterUsers", () => {
179
+ const {
180
+ loading,
181
+ users,
182
+ query
183
+ } = this.state;
184
+ const filteredUsers = this.memoizedFilterOptions(users, query, this.props.filterOptions); //If bootstrapOptions have been passed in and it is bootstrap
185
+
186
+ if (this.props.bootstrapOptions && this.props.bootstrapOptions.length !== 0 && query === '') {
187
+ const bootstrapFilteredUsers = this.memoizedFilterOptions(this.props.bootstrapOptions, query, this.props.filterOptions);
188
+ this.fireEvent(filterUsersEvent, {
189
+ filtered: getUsersForAnalytics(bootstrapFilteredUsers),
190
+ all: getUsersForAnalytics(this.props.bootstrapOptions)
191
+ });
192
+ return bootstrapFilteredUsers;
193
+ } // while when not loading just return already filtered result from server.
194
+
195
+
196
+ if (!loading) {
197
+ return filteredUsers;
198
+ }
199
+
200
+ const queryFilteredUsers = filteredUsers.filter(user => stringContains(user.name, query));
201
+ this.fireEvent(filterUsersEvent, {
202
+ filtered: getUsersForAnalytics(queryFilteredUsers),
203
+ all: getUsersForAnalytics(users)
204
+ }); // when loading filter previous result.
205
+
206
+ return filteredUsers;
207
+ });
208
+
209
+ _defineProperty(this, "onFocus", sessionId => {
210
+ const state = {
211
+ query: '',
212
+ closed: false
213
+ };
214
+
215
+ if (this.state.users.length === 0) {
216
+ state.sessionId = sessionId;
217
+ state.loading = true;
218
+ } else {
219
+ this.fireEvent(preparedUsersLoadedEvent, {
220
+ users: getUsersForAnalytics(this.state.users),
221
+ preparedSessionId: this.state.sessionId,
222
+ sessionId
223
+ });
224
+ }
225
+
226
+ this.setState(currentState => ({ ...currentState,
227
+ ...state
228
+ }));
229
+
230
+ if (this.props.onFocus) {
231
+ this.props.onFocus(sessionId);
232
+ }
233
+ });
234
+
235
+ _defineProperty(this, "onBlur", sessionId => {
236
+ this.getUsers.cancel(); // clear old users if query is populated so that on refocus,
237
+ // the old list is not shown
238
+
239
+ const users = this.state.query.length === 0 ? this.state.users : [];
240
+ this.setState({
241
+ loading: false,
242
+ closed: true,
243
+ users
244
+ });
245
+
246
+ if (this.props.onBlur) {
247
+ this.props.onBlur(sessionId);
248
+ }
249
+ });
250
+ }
251
+
252
+ async componentDidMount() {
253
+ try {
254
+ const value = await hydrateDefaultValues(this.props.baseUrl, this.props.defaultValue, this.props.productKey);
255
+ this.setState({
256
+ defaultValue: value
257
+ });
258
+ } catch (e) {
259
+ const defaultValue = await (this.props.onValueError ? this.props.onValueError(e, this.props.defaultValue) || Promise.resolve([]) : Promise.resolve([]));
260
+ this.setState({
261
+ defaultValue: defaultValue
262
+ });
263
+ }
264
+
265
+ const {
266
+ prefetch
267
+ } = this.props;
268
+
269
+ if (prefetch) {
270
+ const sessionId = uuidV4();
271
+ this.fireEvent(mountedWithPrefetchEvent, {
272
+ sessionId
273
+ });
274
+ this.setState({
275
+ sessionId
276
+ });
277
+ }
278
+ }
279
+
280
+ componentDidUpdate(prevProps, prevState) {
281
+ if (hasContextChanged(prevProps, this.props) || this.props.fieldId !== prevProps.fieldId) {
282
+ this.setState({
283
+ users: []
284
+ });
285
+ }
286
+
287
+ if ((this.state.sessionId !== prevState.sessionId || this.state.query !== prevState.query) && (this.state.query !== '' || !this.props.bootstrapOptions)) {
288
+ this.getUsers();
289
+ }
290
+ }
291
+
292
+ render() {
293
+ return /*#__PURE__*/React.createElement(MessagesIntlProvider, null, /*#__PURE__*/React.createElement(UserPicker, _extends({}, this.props, {
294
+ onInputChange: this.onInputChange,
295
+ onBlur: this.onBlur,
296
+ onFocus: this.onFocus,
297
+ defaultValue: this.state.defaultValue,
298
+ isLoading: this.props.isLoading || this.state.loading && !this.state.closed && (!this.props.bootstrapOptions || this.state.query !== ''),
299
+ options: this.filterUsers()
300
+ })));
301
+ }
302
+
303
+ } // TODO: Smart User picker team will have to add a type annotation here
304
+
305
+ _defineProperty(SmartUserPickerWithoutAnalytics, "defaultProps", {
306
+ onError: () => {},
307
+ baseUrl: '',
308
+ includeUsers: true,
309
+ includeGroups: false,
310
+ includeTeams: false,
311
+ prefetch: false,
312
+ principalId: 'Context',
313
+ debounceTime: DEFAULT_DEBOUNCE_TIME_MS
314
+ });
315
+
316
+ export const 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
+ const 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,42 @@
1
+ let env = 'prod';
2
+ const STG_INSTANCE = 'https://api-private.stg.atlassian.com';
3
+ const LOCAL_CONFIG = {
4
+ getRecommendationServiceUrl(baseUrl) {
5
+ return baseUrl ? `${STG_INSTANCE}/${baseUrl}/gateway/api/v1/recommendations` : `${STG_INSTANCE}/gateway/api/v1/recommendations`;
6
+ },
7
+
8
+ getUsersServiceUrl(productKey) {
9
+ return productKey === 'jira' ? `https://jdog.jira-dev.com/rest/api/3/user/bulk` : `https://pug.jira-dev.com/wiki/rest/api/user/bulk`;
10
+ },
11
+
12
+ getGraphQLUrl(baseUrl) {
13
+ return baseUrl ? `${STG_INSTANCE}/${baseUrl}/graphql` : `${STG_INSTANCE}/graphql`;
14
+ },
15
+
16
+ getTeamsUrl(baseUrl) {
17
+ return baseUrl ? `${STG_INSTANCE}/${baseUrl}/gateway/api/v3/teams` : `${STG_INSTANCE}/gateway/api/v3/teams`;
18
+ }
19
+
20
+ };
21
+ const PRD_CONFIG = {
22
+ getRecommendationServiceUrl(baseUrl) {
23
+ return baseUrl ? `${baseUrl}/gateway/api/v1/recommendations` : '/gateway/api/v1/recommendations';
24
+ },
25
+
26
+ getUsersServiceUrl(productKey, baseUrl = '') {
27
+ return productKey === 'jira' ? `${baseUrl}/rest/api/3/user/bulk` : `${baseUrl}/wiki/rest/api/user/bulk`;
28
+ },
29
+
30
+ getGraphQLUrl(baseUrl) {
31
+ return baseUrl ? `${baseUrl}/graphql` : `/graphql`;
32
+ },
33
+
34
+ getTeamsUrl(baseUrl) {
35
+ return baseUrl ? `${baseUrl}/gateway/api/v3/teams` : `/gateway/api/v3/teams`;
36
+ }
37
+
38
+ }; // TODO remove this once no external code is calling it
39
+
40
+ export const setSmartUserPickerEnv = newEnv => env = newEnv; // TODO remove this once no external code is calling it
41
+
42
+ export const getConfig = () => env === 'local' ? LOCAL_CONFIG : PRD_CONFIG;
@@ -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
+ };
@@ -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
+ // Hungarian
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Itt található:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'VENDÉG',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'A vendégcsoportok csak bizonyos munkaterekhez kapnak hozzáférést, és korlátozottan érik el a felhasználói adatokat.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'A vendégek csak bizonyos munkaterekhez kapnak hozzáférést, és korlátozottan érik el a felhasználói adatokat.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'TAG',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };
@@ -0,0 +1,36 @@
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
+ export { default as zh } from './zh';
8
+ export { default as zh_TW } from './zh_TW';
9
+ export { default as cs } from './cs';
10
+ export { default as da } from './da';
11
+ export { default as nl } from './nl';
12
+ export { default as et } from './et';
13
+ export { default as fi } from './fi';
14
+ export { default as fr } from './fr';
15
+ export { default as de } from './de';
16
+ export { default as hu } from './hu';
17
+ export { default as it } from './it';
18
+ export { default as ja } from './ja';
19
+ export { default as ko } from './ko';
20
+ export { default as nb } from './nb';
21
+ export { default as pl } from './pl';
22
+ export { default as pt_BR } from './pt_BR';
23
+ export { default as pt_PT } from './pt_PT';
24
+ export { default as ru } from './ru';
25
+ export { default as sk } from './sk';
26
+ export { default as es } from './es';
27
+ export { default as sv } from './sv';
28
+ export { default as th } from './th';
29
+ export { default as tr } from './tr';
30
+ export { default as uk } from './uk';
31
+ export { default as vi } from './vi';
32
+ export { default as en_ZZ } from './en_ZZ';
33
+ export { default as en } from './en';
34
+ export { default as en_GB } from './en_GB';
35
+ export { default as is } from './is';
36
+ export { default as ro } from './ro';
@@ -0,0 +1,7 @@
1
+ // Icelandic
2
+ export default {
3
+ 'fabric.elements.user-picker.placeholder': 'Finna einstakling...',
4
+ 'fabric.elements.user-picker.placeholder.add-more': 'Bæta við meira fólki...',
5
+ 'fabric.elements.user-picker.multi.remove-item': 'Fjarlægja',
6
+ 'fabric.elements.user-picker.single.clear': 'Hreinsa'
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
+ // Italian
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'Trovato 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': 'OSPITE',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': "I gruppi guest possono accedere solamente a determinati spazi e hanno accesso limitato alle informazioni dell'utente.",
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': "Gli utenti guest possono accedere solamente a determinati spazi e hanno accesso limitato alle informazioni dell'utente.",
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'MEMBRO',
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
+ // Japanese
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': 'ユーザーのソース元: ',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': 'ゲスト',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': 'ゲスト グループは一部のスペースにのみアクセスでき、ユーザー情報へのアクセスが制限されます。',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': 'ゲストは一部のスペースにのみアクセスでき、ユーザー情報へのアクセスが制限されます。',
15
+ 'fabric.elements.user-picker.member.lozenge.text': 'メンバー',
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
+ // Korean
8
+ export default {
9
+ 'fabric.elements.user-picker.external.sourced.from': '찾은 위치:',
10
+ 'fabric.elements.user-picker.github.provider': 'GitHub',
11
+ 'fabric.elements.user-picker.google.provider': 'Google',
12
+ 'fabric.elements.user-picker.guest.lozenge.text': '게스트',
13
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.group': '게스트 그룹은 특정 스페이스에만 액세스할 수 있고 사용자 정보에 대한 액세스 권한이 제한적입니다.',
14
+ 'fabric.elements.user-picker.guest.lozenge.tooltip.user': '게스트는 특정 스페이스에만 액세스할 수 있고 사용자 정보에 대한 액세스 권한이 제한적입니다.',
15
+ 'fabric.elements.user-picker.member.lozenge.text': '구성원',
16
+ 'fabric.elements.user-picker.microsoft.provider': 'Microsoft',
17
+ 'fabric.elements.user-picker.slack.provider': 'Slack'
18
+ };