@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,261 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
+ import { UserType } from '@atlaskit/user-picker';
5
+ import { getConfig } from '../config';
6
+ import getHydratedUsersFromPrs from './users-client';
7
+ import hydrateTeamFromLegion from './teams-client';
8
+ import { UNKNOWN } from './constants';
9
+
10
+ var getHydratedUsersFromProducts = function getHydratedUsersFromProducts(request) {
11
+ var url = "".concat(getConfig().getUsersServiceUrl(request.productKey, request.baseUrl));
12
+ var params = new URLSearchParams();
13
+ request.accountIds.map(function (id) {
14
+ return params.append('accountId', id);
15
+ });
16
+ params.append('maxResults', '2000');
17
+ return fetch("".concat(url, "?").concat(params), {
18
+ method: 'GET',
19
+ credentials: 'include',
20
+ headers: {
21
+ 'content-type': 'application/json'
22
+ }
23
+ }).then(function (response) {
24
+ if (response.status === 200) {
25
+ return response.json();
26
+ }
27
+
28
+ return Promise.reject({
29
+ message: "error calling users service, statusCode=".concat(response.status, ", statusText=").concat(response.statusText)
30
+ });
31
+ }).then(request.productKey === 'jira' ? transformJiraUsers : transformConfluenceUsers);
32
+ };
33
+
34
+ var transformJiraUsers = function transformJiraUsers(userResponse) {
35
+ return userResponse.values.map(transformJiraUser).filter(function (user) {
36
+ return !!user;
37
+ }).map(function (user) {
38
+ return user;
39
+ });
40
+ };
41
+
42
+ var transformJiraUser = function transformJiraUser(item) {
43
+ if (!item) {
44
+ return null;
45
+ }
46
+
47
+ return {
48
+ id: item.accountId,
49
+ type: UserType,
50
+ avatarUrl: item.avatarUrls ? item.avatarUrls['16x16'] : '',
51
+ name: item.displayName,
52
+ email: item.emailAddress
53
+ };
54
+ };
55
+
56
+ var transformConfluenceUsers = function transformConfluenceUsers(userResponse) {
57
+ return userResponse.results.map(transformConfluenceUser).filter(function (user) {
58
+ return !!user;
59
+ }).map(function (user) {
60
+ return user;
61
+ });
62
+ };
63
+
64
+ var transformConfluenceUser = function transformConfluenceUser(item) {
65
+ if (!item) {
66
+ return null;
67
+ }
68
+
69
+ return {
70
+ id: item.accountId,
71
+ type: UserType,
72
+ avatarUrl: item.profilePicture ? item.profilePicture.path : '',
73
+ name: item.publicName,
74
+ email: item.email
75
+ };
76
+ };
77
+
78
+ var sortResults = function sortResults(options, sortIds) {
79
+ var resultsMap = new Map(options.map(function (option) {
80
+ return [option && option.id, option];
81
+ }));
82
+ return sortIds.map(function (option) {
83
+ var user = resultsMap.get(option.id);
84
+
85
+ if (user) {
86
+ return user;
87
+ }
88
+
89
+ return {
90
+ id: option.id,
91
+ type: option.type,
92
+ name: UNKNOWN
93
+ };
94
+ });
95
+ };
96
+
97
+ var isOptionData = function isOptionData(option) {
98
+ return option.name !== undefined;
99
+ };
100
+
101
+ var hydrateTeamIds = /*#__PURE__*/function () {
102
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(baseUrl, values) {
103
+ var legionPromises;
104
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
105
+ while (1) {
106
+ switch (_context.prev = _context.next) {
107
+ case 0:
108
+ if (!(values.length === 0)) {
109
+ _context.next = 2;
110
+ break;
111
+ }
112
+
113
+ return _context.abrupt("return", []);
114
+
115
+ case 2:
116
+ legionPromises = values.map(function (value) {
117
+ return hydrateTeamFromLegion({
118
+ baseUrl: baseUrl,
119
+ id: value.id
120
+ });
121
+ });
122
+ _context.next = 5;
123
+ return Promise.all(legionPromises);
124
+
125
+ case 5:
126
+ return _context.abrupt("return", _context.sent);
127
+
128
+ case 6:
129
+ case "end":
130
+ return _context.stop();
131
+ }
132
+ }
133
+ }, _callee);
134
+ }));
135
+
136
+ return function hydrateTeamIds(_x, _x2) {
137
+ return _ref.apply(this, arguments);
138
+ };
139
+ }();
140
+
141
+ var hydrateAccountIds = /*#__PURE__*/function () {
142
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(baseUrl, productKey, values) {
143
+ var accountIds;
144
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
145
+ while (1) {
146
+ switch (_context2.prev = _context2.next) {
147
+ case 0:
148
+ if (!(values.length === 0)) {
149
+ _context2.next = 2;
150
+ break;
151
+ }
152
+
153
+ return _context2.abrupt("return", []);
154
+
155
+ case 2:
156
+ accountIds = values.map(function (val) {
157
+ return val.id;
158
+ }); //if we are not jira or confluence then use PRS platform hydration
159
+
160
+ if (!(productKey === 'jira' || productKey === 'confluence')) {
161
+ _context2.next = 9;
162
+ break;
163
+ }
164
+
165
+ _context2.next = 6;
166
+ return getHydratedUsersFromProducts({
167
+ baseUrl: baseUrl,
168
+ productKey: productKey,
169
+ accountIds: accountIds
170
+ });
171
+
172
+ case 6:
173
+ _context2.t0 = _context2.sent;
174
+ _context2.next = 12;
175
+ break;
176
+
177
+ case 9:
178
+ _context2.next = 11;
179
+ return getHydratedUsersFromPrs(baseUrl, accountIds);
180
+
181
+ case 11:
182
+ _context2.t0 = _context2.sent;
183
+
184
+ case 12:
185
+ return _context2.abrupt("return", _context2.t0);
186
+
187
+ case 13:
188
+ case "end":
189
+ return _context2.stop();
190
+ }
191
+ }
192
+ }, _callee2);
193
+ }));
194
+
195
+ return function hydrateAccountIds(_x3, _x4, _x5) {
196
+ return _ref2.apply(this, arguments);
197
+ };
198
+ }();
199
+
200
+ function hydrateDefaultValues(_x6, _x7, _x8) {
201
+ return _hydrateDefaultValues.apply(this, arguments);
202
+ }
203
+
204
+ function _hydrateDefaultValues() {
205
+ _hydrateDefaultValues = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(baseUrl, value, productKey) {
206
+ var values, _yield$Promise$all, _yield$Promise$all2, hydratedUsers, hydratedTeams, hydratedOptions;
207
+
208
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
209
+ while (1) {
210
+ switch (_context3.prev = _context3.next) {
211
+ case 0:
212
+ if (!(!value || Array.isArray(value) && value.length === 0)) {
213
+ _context3.next = 2;
214
+ break;
215
+ }
216
+
217
+ return _context3.abrupt("return", []);
218
+
219
+ case 2:
220
+ values = Array.isArray(value) ? value : [value]; // return if all hydrated
221
+
222
+ if (values.some(function (val) {
223
+ return !isOptionData(val);
224
+ })) {
225
+ _context3.next = 5;
226
+ break;
227
+ }
228
+
229
+ return _context3.abrupt("return", value);
230
+
231
+ case 5:
232
+ _context3.next = 7;
233
+ return Promise.all([hydrateAccountIds(baseUrl, productKey, values.filter(function (val) {
234
+ return !isOptionData(val) && val.type === 'user';
235
+ })), hydrateTeamIds(baseUrl, values.filter(function (val) {
236
+ return !isOptionData(val) && val.type === 'team';
237
+ }))]);
238
+
239
+ case 7:
240
+ _yield$Promise$all = _context3.sent;
241
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
242
+ hydratedUsers = _yield$Promise$all2[0];
243
+ hydratedTeams = _yield$Promise$all2[1];
244
+ hydratedOptions = values.filter(function (val) {
245
+ return isOptionData(val);
246
+ }).map(function (val) {
247
+ return val;
248
+ }).concat(hydratedUsers).concat(hydratedTeams);
249
+ return _context3.abrupt("return", sortResults(hydratedOptions, values));
250
+
251
+ case 13:
252
+ case "end":
253
+ return _context3.stop();
254
+ }
255
+ }
256
+ }, _callee3);
257
+ }));
258
+ return _hydrateDefaultValues.apply(this, arguments);
259
+ }
260
+
261
+ export default hydrateDefaultValues;
@@ -0,0 +1,41 @@
1
+ var buildHeaders = function buildHeaders() {
2
+ var headers = new Headers();
3
+ headers.append('Content-Type', 'application/json');
4
+ return headers;
5
+ };
6
+
7
+ /**
8
+ * @param {string} serviceUrl - GraphQL service endpoint
9
+ * @param {Query} query - GraphQL query
10
+ */
11
+ export function graphqlQuery(serviceUrl, query) {
12
+ var headers = buildHeaders();
13
+ return fetch(new Request("".concat(serviceUrl), {
14
+ method: 'POST',
15
+ credentials: 'include',
16
+ mode: 'cors',
17
+ headers: headers,
18
+ body: JSON.stringify(query)
19
+ })).then(function (response) {
20
+ if (!response.ok) {
21
+ return Promise.reject({
22
+ code: response.status,
23
+ reason: response.statusText
24
+ });
25
+ }
26
+
27
+ return response;
28
+ }).then(function (response) {
29
+ return response.json();
30
+ }).then(function (json) {
31
+ if (json.errors) {
32
+ var _json$errors$;
33
+
34
+ return Promise.reject({
35
+ reason: ((_json$errors$ = json.errors[0]) === null || _json$errors$ === void 0 ? void 0 : _json$errors$.category) || 'default'
36
+ });
37
+ }
38
+
39
+ return json.data;
40
+ });
41
+ }
@@ -0,0 +1,2 @@
1
+ export { default as getUserRecommendations } from './recommendation-client';
2
+ export { default as hydrateDefaultValues } from './default-value-hydration-client';
@@ -0,0 +1,60 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ 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; }
4
+
5
+ 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; }
6
+
7
+ import { transformUsers } from './users-transformer';
8
+ import { getConfig } from '../config';
9
+
10
+ var getUserRecommendations = function getUserRecommendations(request, intl) {
11
+ var _request$context, _request$context$prod;
12
+
13
+ var url = getConfig().getRecommendationServiceUrl(request.baseUrl || '');
14
+ return fetch(url, {
15
+ method: 'POST',
16
+ credentials: 'include',
17
+ headers: {
18
+ 'content-type': 'application/json'
19
+ },
20
+ body: JSON.stringify({
21
+ context: request.context,
22
+ includeUsers: request.includeUsers,
23
+ includeGroups: request.includeGroups,
24
+ includeTeams: request.includeTeams,
25
+ maxNumberOfResults: request.maxNumberOfResults,
26
+ performSearchQueryOnly: false,
27
+ searchQuery: _objectSpread(_objectSpread({
28
+ cpusQueryHighlights: {
29
+ query: '',
30
+ field: ''
31
+ }
32
+ }, ((_request$context = request.context) === null || _request$context === void 0 ? void 0 : (_request$context$prod = _request$context.productAttributes) === null || _request$context$prod === void 0 ? void 0 : _request$context$prod.isEntitledConfluenceExternalCollaborator) && {
33
+ productAccessPermissionIds: ['write', 'external-collaborator-write']
34
+ }), {}, {
35
+ customQuery: '',
36
+ customerDirectoryId: '',
37
+ filter: request.searchQueryFilter || '',
38
+ minimumAccessLevel: 'APPLICATION',
39
+ queryString: request.query,
40
+ restrictTo: {
41
+ userIds: [],
42
+ groupIds: []
43
+ },
44
+ searchUserbase: false
45
+ })
46
+ })
47
+ }).then(function (response) {
48
+ if (response.status === 200) {
49
+ return response.json();
50
+ }
51
+
52
+ return Promise.reject({
53
+ message: "error calling smart service, statusCode=".concat(response.status, ", statusText=").concat(response.statusText)
54
+ });
55
+ }).then(function (response) {
56
+ return transformUsers(response, intl);
57
+ });
58
+ };
59
+
60
+ export default getUserRecommendations;
@@ -0,0 +1,45 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ 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; }
4
+
5
+ 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; }
6
+
7
+ import { getConfig } from '../config';
8
+ import { UNKNOWN_TEAM } from './constants';
9
+
10
+ var transformTeam = function transformTeam(team, id) {
11
+ return {
12
+ id: id,
13
+ name: team.displayName,
14
+ type: 'team',
15
+ avatarUrl: team.smallAvatarImageUrl
16
+ };
17
+ };
18
+
19
+ var hydrateTeamFromLegion = function hydrateTeamFromLegion(request) {
20
+ var url = "".concat(getConfig().getTeamsUrl(request.baseUrl), "/").concat(request.id);
21
+ return fetch(url, {
22
+ method: 'GET',
23
+ credentials: 'include',
24
+ headers: {
25
+ 'content-type': 'application/json'
26
+ }
27
+ }).then(function (response) {
28
+ if (response.status === 200) {
29
+ return response.json();
30
+ }
31
+
32
+ return Promise.reject({
33
+ message: "error calling Legion, statusCode=".concat(response.status, ", statusText=").concat(response.statusText)
34
+ });
35
+ }).then(function (response) {
36
+ return transformTeam(response, request.id);
37
+ }).catch(function () {
38
+ return _objectSpread(_objectSpread({}, UNKNOWN_TEAM), {}, {
39
+ // on network error, return original team with label 'Unknown'
40
+ id: request.id
41
+ });
42
+ });
43
+ };
44
+
45
+ export default hydrateTeamFromLegion;
@@ -0,0 +1,83 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
+
5
+ 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; }
6
+
7
+ 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; }
8
+
9
+ import { UNKNOWN_USER } from './constants';
10
+ import { graphqlQuery } from './graphqlUtils';
11
+ import { getConfig } from '../config';
12
+
13
+ /**
14
+ * @param {string} accountIds ids to hydrate
15
+ * @return GraphQL Query
16
+ */
17
+ var buildUsersQuery = function buildUsersQuery(accountIds) {
18
+ return {
19
+ query: "query usersQuery($accountIds: [ID!]!) {\n users(accountIds: $accountIds) {\n name\n accountId\n picture\n }\n }",
20
+ variables: {
21
+ accountIds: accountIds
22
+ }
23
+ };
24
+ };
25
+
26
+ var makeRequest = /*#__PURE__*/function () {
27
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(url, accountIds) {
28
+ var query;
29
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
30
+ while (1) {
31
+ switch (_context.prev = _context.next) {
32
+ case 0:
33
+ query = buildUsersQuery(accountIds);
34
+ _context.next = 3;
35
+ return graphqlQuery(url, query);
36
+
37
+ case 3:
38
+ return _context.abrupt("return", _context.sent);
39
+
40
+ case 4:
41
+ case "end":
42
+ return _context.stop();
43
+ }
44
+ }
45
+ }, _callee);
46
+ }));
47
+
48
+ return function makeRequest(_x, _x2) {
49
+ return _ref.apply(this, arguments);
50
+ };
51
+ }();
52
+
53
+ var modifyResponse = function modifyResponse(users) {
54
+ return users.map(function (_ref2) {
55
+ var accountId = _ref2.accountId,
56
+ name = _ref2.name,
57
+ picture = _ref2.picture;
58
+ return {
59
+ avatarUrl: picture,
60
+ id: accountId,
61
+ name: name,
62
+ type: 'user'
63
+ };
64
+ });
65
+ };
66
+
67
+ var getHydratedUsers = function getHydratedUsers(baseUrl, userIds) {
68
+ var url = getConfig().getGraphQLUrl(baseUrl);
69
+ return new Promise(function (resolve) {
70
+ makeRequest(url, userIds).then(function (data) {
71
+ resolve(modifyResponse(data.users));
72
+ }).catch(function () {
73
+ // on network error, return original list with label 'Unknown'
74
+ resolve(userIds.map(function (id) {
75
+ return _objectSpread(_objectSpread({}, UNKNOWN_USER), {}, {
76
+ id: id
77
+ });
78
+ }));
79
+ });
80
+ });
81
+ };
82
+
83
+ export default getHydratedUsers;
@@ -0,0 +1,83 @@
1
+ import { TeamType, UserType, GroupType } from '@atlaskit/user-picker';
2
+ import { messages } from '../i18n';
3
+ var EntityType;
4
+
5
+ (function (EntityType) {
6
+ EntityType["USER"] = "USER";
7
+ EntityType["TEAM"] = "TEAM";
8
+ EntityType["GROUP"] = "GROUP";
9
+ })(EntityType || (EntityType = {}));
10
+
11
+ var getLozenzeProperties = function getLozenzeProperties(entity, intl) {
12
+ var _entity$attributes, _entity$attributes2;
13
+
14
+ if ((_entity$attributes = entity.attributes) !== null && _entity$attributes !== void 0 && _entity$attributes.workspaceMember) {
15
+ return intl.formatMessage(messages.memberLozengeText);
16
+ }
17
+
18
+ if ((_entity$attributes2 = entity.attributes) !== null && _entity$attributes2 !== void 0 && _entity$attributes2.isConfluenceExternalCollaborator) {
19
+ var lozengeTooltipMessage = entity.entityType === EntityType.GROUP ? messages.guestGroupLozengeTooltip : messages.guestUserLozengeTooltip;
20
+ return {
21
+ text: intl.formatMessage(messages.guestLozengeText),
22
+ tooltip: intl.formatMessage(lozengeTooltipMessage),
23
+ appearance: 'new'
24
+ };
25
+ }
26
+
27
+ return undefined;
28
+ };
29
+
30
+ var transformUser = function transformUser(item, intl) {
31
+ var type = item.entityType;
32
+
33
+ if (type === EntityType.USER) {
34
+ var user = item;
35
+ var lozenge = getLozenzeProperties(user, intl);
36
+ return {
37
+ id: user.id,
38
+ type: UserType,
39
+ avatarUrl: user.avatarUrl,
40
+ name: user.name,
41
+ email: user.email,
42
+ lozenge: lozenge
43
+ };
44
+ }
45
+
46
+ if (type === EntityType.TEAM) {
47
+ var team = item;
48
+ return {
49
+ id: team.id,
50
+ type: TeamType,
51
+ description: team.description || '',
52
+ name: team.displayName || '',
53
+ memberCount: team.memberCount,
54
+ includesYou: team.includesYou,
55
+ avatarUrl: team.largeAvatarImageUrl || team.smallAvatarImageUrl
56
+ };
57
+ }
58
+
59
+ if (type === EntityType.GROUP) {
60
+ var group = item;
61
+
62
+ var _lozenge = getLozenzeProperties(group, intl);
63
+
64
+ return {
65
+ id: group.id,
66
+ type: GroupType,
67
+ name: group.name || '',
68
+ lozenge: _lozenge
69
+ };
70
+ }
71
+
72
+ return;
73
+ };
74
+
75
+ export var transformUsers = function transformUsers(serverResponse, intl) {
76
+ return (serverResponse.recommendedUsers || []).map(function (item) {
77
+ return transformUser(item, intl);
78
+ }).filter(function (user) {
79
+ return !!user;
80
+ }).map(function (user) {
81
+ return user;
82
+ });
83
+ };
@@ -0,0 +1,7 @@
1
+ export var EntityType;
2
+
3
+ (function (EntityType) {
4
+ EntityType["USER"] = "USER";
5
+ EntityType["TEAM"] = "TEAM";
6
+ EntityType["GROUP"] = "GROUP";
7
+ })(EntityType || (EntityType = {}));
@@ -0,0 +1,26 @@
1
+ import { ExperiencePerformanceTypes, ExperienceTypes, ConcurrentExperience } from '@atlaskit/ufo';
2
+ import { useEffect, useState } from 'react';
3
+ var COMPONENT_NAME = 'smart-user-picker';
4
+ export var smartUserPickerRenderedUfoExperience = new ConcurrentExperience('smart-user-picker-rendered', {
5
+ platform: {
6
+ component: COMPONENT_NAME
7
+ },
8
+ type: ExperienceTypes.Load,
9
+ performanceType: ExperiencePerformanceTypes.PageSegmentLoad
10
+ });
11
+ export var useUFOConcurrentExperience = function useUFOConcurrentExperience(experience, id) {
12
+ var experienceForId = experience.getInstance(id); // Equivalent to componentWillMount - replace with @atlaskit/ufo's
13
+ // useUFOComponentExperience when it supports ConcurrentExperience.
14
+
15
+ useState(function () {
16
+ experienceForId.start();
17
+ }); // Replace with @atlaskit/ufo's <ExperienceSuccess> when it supports ConcurrentExperience
18
+
19
+ useEffect(function () {
20
+ experienceForId.success();
21
+ return function () {
22
+ experienceForId.abort();
23
+ }; // We only want this useEffect to run once after component mount, so no deps are needed.
24
+ // eslint-disable-next-line react-hooks/exhaustive-deps
25
+ }, []);
26
+ };