@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.
- package/CHANGELOG.md +140 -0
- package/LICENSE +13 -0
- package/build/tsconfig.json +16 -0
- package/dist/cjs/analytics.js +131 -0
- package/dist/cjs/components/MessagesIntlProvider.js +72 -0
- package/dist/cjs/components/SmartUserPicker.js +473 -0
- package/dist/cjs/components/index.js +24 -0
- package/dist/cjs/config/index.js +50 -0
- package/dist/cjs/i18n/cs.js +26 -0
- package/dist/cjs/i18n/da.js +26 -0
- package/dist/cjs/i18n/de.js +26 -0
- package/dist/cjs/i18n/en.js +14 -0
- package/dist/cjs/i18n/en_GB.js +14 -0
- package/dist/cjs/i18n/en_ZZ.js +26 -0
- package/dist/cjs/i18n/es.js +26 -0
- package/dist/cjs/i18n/et.js +16 -0
- package/dist/cjs/i18n/fi.js +26 -0
- package/dist/cjs/i18n/fr.js +26 -0
- package/dist/cjs/i18n/hu.js +26 -0
- package/dist/cjs/i18n/index.js +247 -0
- package/dist/cjs/i18n/is.js +14 -0
- package/dist/cjs/i18n/it.js +26 -0
- package/dist/cjs/i18n/ja.js +26 -0
- package/dist/cjs/i18n/ko.js +26 -0
- package/dist/cjs/i18n/languages.js +33 -0
- package/dist/cjs/i18n/nb.js +26 -0
- package/dist/cjs/i18n/nl.js +26 -0
- package/dist/cjs/i18n/pl.js +26 -0
- package/dist/cjs/i18n/pt_BR.js +26 -0
- package/dist/cjs/i18n/pt_PT.js +16 -0
- package/dist/cjs/i18n/ro.js +14 -0
- package/dist/cjs/i18n/ru.js +26 -0
- package/dist/cjs/i18n/sk.js +16 -0
- package/dist/cjs/i18n/sv.js +26 -0
- package/dist/cjs/i18n/th.js +26 -0
- package/dist/cjs/i18n/tr.js +26 -0
- package/dist/cjs/i18n/uk.js +26 -0
- package/dist/cjs/i18n/vi.js +26 -0
- package/dist/cjs/i18n/zh.js +26 -0
- package/dist/cjs/i18n/zh_TW.js +26 -0
- package/dist/cjs/i18n.js +57 -0
- package/dist/cjs/index.js +87 -0
- package/dist/cjs/service/constants.js +20 -0
- package/dist/cjs/service/default-value-hydration-client.js +278 -0
- package/dist/cjs/service/graphqlUtils.js +48 -0
- package/dist/cjs/service/index.js +23 -0
- package/dist/cjs/service/recommendation-client.js +71 -0
- package/dist/cjs/service/teams-client.js +56 -0
- package/dist/cjs/service/users-client.js +97 -0
- package/dist/cjs/service/users-transformer.js +94 -0
- package/dist/cjs/types.js +14 -0
- package/dist/cjs/ufoExperiences.js +39 -0
- package/dist/cjs/util/i18n-util.js +274 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/analytics.js +85 -0
- package/dist/es2019/components/MessagesIntlProvider.js +43 -0
- package/dist/es2019/components/SmartUserPicker.js +316 -0
- package/dist/es2019/components/index.js +11 -0
- package/dist/es2019/config/index.js +42 -0
- package/dist/es2019/i18n/cs.js +18 -0
- package/dist/es2019/i18n/da.js +18 -0
- package/dist/es2019/i18n/de.js +18 -0
- package/dist/es2019/i18n/en.js +7 -0
- package/dist/es2019/i18n/en_GB.js +7 -0
- package/dist/es2019/i18n/en_ZZ.js +18 -0
- package/dist/es2019/i18n/es.js +18 -0
- package/dist/es2019/i18n/et.js +8 -0
- package/dist/es2019/i18n/fi.js +18 -0
- package/dist/es2019/i18n/fr.js +18 -0
- package/dist/es2019/i18n/hu.js +18 -0
- package/dist/es2019/i18n/index.js +36 -0
- package/dist/es2019/i18n/is.js +7 -0
- package/dist/es2019/i18n/it.js +18 -0
- package/dist/es2019/i18n/ja.js +18 -0
- package/dist/es2019/i18n/ko.js +18 -0
- package/dist/es2019/i18n/languages.js +26 -0
- package/dist/es2019/i18n/nb.js +18 -0
- package/dist/es2019/i18n/nl.js +18 -0
- package/dist/es2019/i18n/pl.js +18 -0
- package/dist/es2019/i18n/pt_BR.js +18 -0
- package/dist/es2019/i18n/pt_PT.js +8 -0
- package/dist/es2019/i18n/ro.js +7 -0
- package/dist/es2019/i18n/ru.js +18 -0
- package/dist/es2019/i18n/sk.js +8 -0
- package/dist/es2019/i18n/sv.js +18 -0
- package/dist/es2019/i18n/th.js +18 -0
- package/dist/es2019/i18n/tr.js +18 -0
- package/dist/es2019/i18n/uk.js +18 -0
- package/dist/es2019/i18n/vi.js +18 -0
- package/dist/es2019/i18n/zh.js +18 -0
- package/dist/es2019/i18n/zh_TW.js +18 -0
- package/dist/es2019/i18n.js +48 -0
- package/dist/es2019/index.js +6 -0
- package/dist/es2019/service/constants.js +11 -0
- package/dist/es2019/service/default-value-hydration-client.js +125 -0
- package/dist/es2019/service/graphqlUtils.js +39 -0
- package/dist/es2019/service/index.js +2 -0
- package/dist/es2019/service/recommendation-client.js +52 -0
- package/dist/es2019/service/teams-client.js +37 -0
- package/dist/es2019/service/users-client.js +52 -0
- package/dist/es2019/service/users-transformer.js +73 -0
- package/dist/es2019/types.js +7 -0
- package/dist/es2019/ufoExperiences.js +26 -0
- package/dist/es2019/util/i18n-util.js +231 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/analytics.js +99 -0
- package/dist/esm/components/MessagesIntlProvider.js +50 -0
- package/dist/esm/components/SmartUserPicker.js +454 -0
- package/dist/esm/components/index.js +11 -0
- package/dist/esm/config/index.js +39 -0
- package/dist/esm/i18n/cs.js +18 -0
- package/dist/esm/i18n/da.js +18 -0
- package/dist/esm/i18n/de.js +18 -0
- package/dist/esm/i18n/en.js +7 -0
- package/dist/esm/i18n/en_GB.js +7 -0
- package/dist/esm/i18n/en_ZZ.js +18 -0
- package/dist/esm/i18n/es.js +18 -0
- package/dist/esm/i18n/et.js +8 -0
- package/dist/esm/i18n/fi.js +18 -0
- package/dist/esm/i18n/fr.js +18 -0
- package/dist/esm/i18n/hu.js +18 -0
- package/dist/esm/i18n/index.js +36 -0
- package/dist/esm/i18n/is.js +7 -0
- package/dist/esm/i18n/it.js +18 -0
- package/dist/esm/i18n/ja.js +18 -0
- package/dist/esm/i18n/ko.js +18 -0
- package/dist/esm/i18n/languages.js +26 -0
- package/dist/esm/i18n/nb.js +18 -0
- package/dist/esm/i18n/nl.js +18 -0
- package/dist/esm/i18n/pl.js +18 -0
- package/dist/esm/i18n/pt_BR.js +18 -0
- package/dist/esm/i18n/pt_PT.js +8 -0
- package/dist/esm/i18n/ro.js +7 -0
- package/dist/esm/i18n/ru.js +18 -0
- package/dist/esm/i18n/sk.js +8 -0
- package/dist/esm/i18n/sv.js +18 -0
- package/dist/esm/i18n/th.js +18 -0
- package/dist/esm/i18n/tr.js +18 -0
- package/dist/esm/i18n/uk.js +18 -0
- package/dist/esm/i18n/vi.js +18 -0
- package/dist/esm/i18n/zh.js +18 -0
- package/dist/esm/i18n/zh_TW.js +18 -0
- package/dist/esm/i18n.js +48 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/service/constants.js +11 -0
- package/dist/esm/service/default-value-hydration-client.js +261 -0
- package/dist/esm/service/graphqlUtils.js +41 -0
- package/dist/esm/service/index.js +2 -0
- package/dist/esm/service/recommendation-client.js +60 -0
- package/dist/esm/service/teams-client.js +45 -0
- package/dist/esm/service/users-client.js +83 -0
- package/dist/esm/service/users-transformer.js +83 -0
- package/dist/esm/types.js +7 -0
- package/dist/esm/ufoExperiences.js +26 -0
- package/dist/esm/util/i18n-util.js +256 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/analytics.d.ts +21 -0
- package/dist/types/components/MessagesIntlProvider.d.ts +9 -0
- package/dist/types/components/SmartUserPicker.d.ts +30 -0
- package/dist/types/components/index.d.ts +4 -0
- package/dist/types/config/index.d.ts +9 -0
- package/dist/types/i18n/cs.d.ts +18 -0
- package/dist/types/i18n/da.d.ts +18 -0
- package/dist/types/i18n/de.d.ts +18 -0
- package/dist/types/i18n/en.d.ts +7 -0
- package/dist/types/i18n/en_GB.d.ts +7 -0
- package/dist/types/i18n/en_ZZ.d.ts +18 -0
- package/dist/types/i18n/es.d.ts +18 -0
- package/dist/types/i18n/et.d.ts +8 -0
- package/dist/types/i18n/fi.d.ts +18 -0
- package/dist/types/i18n/fr.d.ts +18 -0
- package/dist/types/i18n/hu.d.ts +18 -0
- package/dist/types/i18n/index.d.ts +36 -0
- package/dist/types/i18n/is.d.ts +7 -0
- package/dist/types/i18n/it.d.ts +18 -0
- package/dist/types/i18n/ja.d.ts +18 -0
- package/dist/types/i18n/ko.d.ts +18 -0
- package/dist/types/i18n/languages.d.ts +27 -0
- package/dist/types/i18n/nb.d.ts +18 -0
- package/dist/types/i18n/nl.d.ts +18 -0
- package/dist/types/i18n/pl.d.ts +18 -0
- package/dist/types/i18n/pt_BR.d.ts +18 -0
- package/dist/types/i18n/pt_PT.d.ts +8 -0
- package/dist/types/i18n/ro.d.ts +7 -0
- package/dist/types/i18n/ru.d.ts +18 -0
- package/dist/types/i18n/sk.d.ts +8 -0
- package/dist/types/i18n/sv.d.ts +18 -0
- package/dist/types/i18n/th.d.ts +18 -0
- package/dist/types/i18n/tr.d.ts +18 -0
- package/dist/types/i18n/uk.d.ts +18 -0
- package/dist/types/i18n/vi.d.ts +18 -0
- package/dist/types/i18n/zh.d.ts +18 -0
- package/dist/types/i18n/zh_TW.d.ts +18 -0
- package/dist/types/i18n.d.ts +47 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/service/constants.d.ts +4 -0
- package/dist/types/service/default-value-hydration-client.d.ts +8 -0
- package/dist/types/service/graphqlUtils.d.ts +14 -0
- package/dist/types/service/index.d.ts +2 -0
- package/dist/types/service/recommendation-client.d.ts +5 -0
- package/dist/types/service/teams-client.d.ts +12 -0
- package/dist/types/service/users-client.d.ts +11 -0
- package/dist/types/service/users-transformer.d.ts +22 -0
- package/dist/types/types.d.ts +208 -0
- package/dist/types/ufoExperiences.d.ts +3 -0
- package/dist/types/util/i18n-util.d.ts +11 -0
- package/docs/0-intro.tsx +52 -0
- package/package.json +56 -0
- 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,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,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
|
+
};
|