@atlaskit/smart-hooks 0.1.7 → 0.1.8

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 (47) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/i18n/cs.js +0 -1
  3. package/dist/cjs/i18n/da.js +0 -1
  4. package/dist/cjs/i18n/de.js +0 -1
  5. package/dist/cjs/i18n/en_ZZ.js +0 -1
  6. package/dist/cjs/i18n/es.js +0 -1
  7. package/dist/cjs/i18n/et.js +0 -1
  8. package/dist/cjs/i18n/fi.js +0 -1
  9. package/dist/cjs/i18n/fr.js +0 -1
  10. package/dist/cjs/i18n/hu.js +0 -1
  11. package/dist/cjs/i18n/index.js +0 -31
  12. package/dist/cjs/i18n/it.js +0 -1
  13. package/dist/cjs/i18n/ja.js +0 -1
  14. package/dist/cjs/i18n/ko.js +0 -1
  15. package/dist/cjs/i18n/nb.js +0 -1
  16. package/dist/cjs/i18n/nl.js +0 -1
  17. package/dist/cjs/i18n/pl.js +0 -1
  18. package/dist/cjs/i18n/pt_BR.js +0 -1
  19. package/dist/cjs/i18n/pt_PT.js +0 -1
  20. package/dist/cjs/i18n/ru.js +0 -1
  21. package/dist/cjs/i18n/sk.js +0 -1
  22. package/dist/cjs/i18n/sv.js +0 -1
  23. package/dist/cjs/i18n/th.js +0 -1
  24. package/dist/cjs/i18n/tr.js +0 -1
  25. package/dist/cjs/i18n/uk.js +0 -1
  26. package/dist/cjs/i18n/vi.js +0 -1
  27. package/dist/cjs/i18n/zh.js +0 -1
  28. package/dist/cjs/i18n/zh_TW.js +0 -1
  29. package/dist/cjs/index.js +0 -3
  30. package/dist/cjs/messages.js +0 -2
  31. package/dist/cjs/services/use-function-usage-tracking/index.js +8 -13
  32. package/dist/cjs/services/use-user-recommendations/analytics.js +9 -25
  33. package/dist/cjs/services/use-user-recommendations/index.js +42 -88
  34. package/dist/cjs/services/use-user-recommendations/ufoExperiences.js +0 -2
  35. package/dist/cjs/utils/transform-recommendations-to-options/index.js +0 -16
  36. package/dist/cjs/version.json +1 -1
  37. package/dist/es2019/services/use-function-usage-tracking/index.js +6 -6
  38. package/dist/es2019/services/use-user-recommendations/analytics.js +0 -2
  39. package/dist/es2019/services/use-user-recommendations/index.js +16 -18
  40. package/dist/es2019/utils/transform-recommendations-to-options/index.js +0 -10
  41. package/dist/es2019/version.json +1 -1
  42. package/dist/esm/services/use-function-usage-tracking/index.js +8 -9
  43. package/dist/esm/services/use-user-recommendations/analytics.js +9 -14
  44. package/dist/esm/services/use-user-recommendations/index.js +42 -68
  45. package/dist/esm/utils/transform-recommendations-to-options/index.js +0 -12
  46. package/dist/esm/version.json +1 -1
  47. package/package.json +8 -6
@@ -1,42 +1,25 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.instrumentFailureOption = exports.default = void 0;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
12
  var _react = require("react");
19
-
20
13
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
21
-
22
14
  var _memoizeOne = _interopRequireDefault(require("memoize-one"));
23
-
24
15
  var _uuid = require("uuid");
25
-
26
16
  var _analyticsNext = require("@atlaskit/analytics-next");
27
-
28
17
  var _smartCommon = require("@atlaskit/smart-common");
29
-
30
18
  var _useFunctionUsageTracking = _interopRequireDefault(require("../use-function-usage-tracking"));
31
-
32
19
  var _analytics = require("./analytics");
33
-
34
20
  var _ufoExperiences = require("./ufoExperiences");
35
-
36
21
  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; }
37
-
38
22
  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) { (0, _defineProperty2.default)(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; }
39
-
40
23
  var MAX_NUMBER_RESULTS = 25;
41
24
  var DEFAULT_DEBOUNCE_TIME_MS = 150;
42
25
  var defaultProps = {
@@ -52,54 +35,46 @@ var instrumentFailureOption = [{
52
35
  avatarUrl: ''
53
36
  }];
54
37
  exports.instrumentFailureOption = instrumentFailureOption;
55
-
56
38
  var useUserRecommendations = function useUserRecommendations(props) {
57
39
  var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props),
58
- baseUrl = _defaultProps$props.baseUrl,
59
- childObjectId = _defaultProps$props.childObjectId,
60
- containerId = _defaultProps$props.containerId,
61
- debounceTimeMs = _defaultProps$props.debounceTimeMs,
62
- fieldId = _defaultProps$props.fieldId,
63
- includeUsers = _defaultProps$props.includeUsers,
64
- includeGroups = _defaultProps$props.includeGroups,
65
- includeTeams = _defaultProps$props.includeTeams,
66
- maxNumberOfResults = _defaultProps$props.maxNumberOfResults,
67
- objectId = _defaultProps$props.objectId,
68
- preload = _defaultProps$props.preload,
69
- principalId = _defaultProps$props.principalId,
70
- productAttributes = _defaultProps$props.productAttributes,
71
- productKey = _defaultProps$props.productKey,
72
- cpusSearchQuery = _defaultProps$props.cpusSearchQuery,
73
- tenantId = _defaultProps$props.tenantId;
74
-
40
+ baseUrl = _defaultProps$props.baseUrl,
41
+ childObjectId = _defaultProps$props.childObjectId,
42
+ containerId = _defaultProps$props.containerId,
43
+ debounceTimeMs = _defaultProps$props.debounceTimeMs,
44
+ fieldId = _defaultProps$props.fieldId,
45
+ includeUsers = _defaultProps$props.includeUsers,
46
+ includeGroups = _defaultProps$props.includeGroups,
47
+ includeTeams = _defaultProps$props.includeTeams,
48
+ maxNumberOfResults = _defaultProps$props.maxNumberOfResults,
49
+ objectId = _defaultProps$props.objectId,
50
+ preload = _defaultProps$props.preload,
51
+ principalId = _defaultProps$props.principalId,
52
+ productAttributes = _defaultProps$props.productAttributes,
53
+ productKey = _defaultProps$props.productKey,
54
+ cpusSearchQuery = _defaultProps$props.cpusSearchQuery,
55
+ tenantId = _defaultProps$props.tenantId;
75
56
  var _useState = (0, _react.useState)([]),
76
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
77
- recommendations = _useState2[0],
78
- setRecommendations = _useState2[1];
79
-
57
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
+ recommendations = _useState2[0],
59
+ setRecommendations = _useState2[1];
80
60
  var _useState3 = (0, _react.useState)(false),
81
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
82
- isLoading = _useState4[0],
83
- setIsLoading = _useState4[1];
84
-
61
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
62
+ isLoading = _useState4[0],
63
+ setIsLoading = _useState4[1];
85
64
  var _useState5 = (0, _react.useState)(),
86
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
87
- error = _useState6[0],
88
- setError = _useState6[1];
89
-
65
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
66
+ error = _useState6[0],
67
+ setError = _useState6[1];
90
68
  var _useState7 = (0, _react.useState)(function () {
91
- return (0, _uuid.v4)();
92
- }),
93
- _useState8 = (0, _slicedToArray2.default)(_useState7, 1),
94
- renderId = _useState8[0];
95
-
69
+ return (0, _uuid.v4)();
70
+ }),
71
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 1),
72
+ renderId = _useState8[0];
96
73
  var sessionId = (0, _react.useRef)('');
97
74
  var currentQuery = (0, _react.useRef)('');
98
75
  var lastAbortController = (0, _react.useRef)();
99
-
100
76
  var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
101
- createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
102
-
77
+ createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
103
78
  var getAnalyticsAttributes = (0, _react.useCallback)(function () {
104
79
  return _objectSpread({}, (0, _analytics.createDefaultAttributes)({
105
80
  fieldId: fieldId,
@@ -117,25 +92,20 @@ var useUserRecommendations = function useUserRecommendations(props) {
117
92
  var fetchRecommendations = (0, _react.useCallback)( /*#__PURE__*/function () {
118
93
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query) {
119
94
  var _lastAbortController$, currentController, recommendedUsersResult;
120
-
121
95
  return _regenerator.default.wrap(function _callee$(_context) {
122
96
  while (1) {
123
97
  switch (_context.prev = _context.next) {
124
98
  case 0:
125
- setIsLoading(true); // restart session
126
-
99
+ setIsLoading(true);
100
+ // restart session
127
101
  sessionId.current = (0, _uuid.v4)();
128
-
129
102
  _ufoExperiences.UsersFetchedUfoExperience.getInstance(fieldId).start();
130
-
131
103
  _context.prev = 3;
132
-
133
104
  if (lastAbortController.current) {
134
105
  (_lastAbortController$ = lastAbortController.current) === null || _lastAbortController$ === void 0 ? void 0 : _lastAbortController$.abort();
135
- } // in case there are still IE users, check AbortController before init,
106
+ }
107
+ // in case there are still IE users, check AbortController before init,
136
108
  // IE has no timeout applied on fetch since AbortController isn't available
137
-
138
-
139
109
  currentController = typeof AbortController !== 'undefined' ? new AbortController() : null;
140
110
  lastAbortController.current = currentController;
141
111
  _context.next = 9;
@@ -159,48 +129,37 @@ var useUserRecommendations = function useUserRecommendations(props) {
159
129
  searchQuery: cpusSearchQuery,
160
130
  query: query
161
131
  }, currentController === null || currentController === void 0 ? void 0 : currentController.signal);
162
-
163
132
  case 9:
164
133
  recommendedUsersResult = _context.sent;
165
134
  currentQuery.current = query !== null && query !== void 0 ? query : '';
166
-
167
135
  _ufoExperiences.UsersFetchedUfoExperience.getInstance(fieldId).success({
168
136
  metadata: _objectSpread(_objectSpread({}, getAnalyticsAttributes()), {}, {
169
137
  loadedUsersSize: recommendedUsersResult.length
170
138
  })
171
139
  });
172
-
173
140
  setRecommendations(recommendedUsersResult);
174
141
  _context.next = 24;
175
142
  break;
176
-
177
143
  case 15:
178
144
  _context.prev = 15;
179
145
  _context.t0 = _context["catch"](3);
180
-
181
146
  if (!(_context.t0 instanceof Error && _context.t0.name === 'AbortError')) {
182
147
  _context.next = 22;
183
148
  break;
184
149
  }
185
-
186
150
  // Request aborted client-side
187
- _ufoExperiences.UsersFetchedUfoExperience.getInstance(fieldId).abort(); // return early to prevent disabling isLoading
188
-
189
-
151
+ _ufoExperiences.UsersFetchedUfoExperience.getInstance(fieldId).abort();
152
+ // return early to prevent disabling isLoading
190
153
  return _context.abrupt("return");
191
-
192
154
  case 22:
193
155
  _ufoExperiences.UsersFetchedUfoExperience.getInstance(fieldId).failure({
194
156
  metadata: getAnalyticsAttributes()
195
157
  });
196
-
197
158
  setError(_context.t0);
198
-
199
159
  case 24:
200
- setIsLoading(false); // clear abort controller
201
-
160
+ setIsLoading(false);
161
+ // clear abort controller
202
162
  lastAbortController.current = undefined;
203
-
204
163
  case 26:
205
164
  case "end":
206
165
  return _context.stop();
@@ -208,7 +167,6 @@ var useUserRecommendations = function useUserRecommendations(props) {
208
167
  }
209
168
  }, _callee, null, [[3, 15]]);
210
169
  }));
211
-
212
170
  return function (_x) {
213
171
  return _ref.apply(this, arguments);
214
172
  };
@@ -231,15 +189,12 @@ var useUserRecommendations = function useUserRecommendations(props) {
231
189
  position: (0, _analytics.findUserPosition)(recommendations, userId)
232
190
  }));
233
191
  }, [createAnalyticsEvent, getAnalyticsAttributes, recommendations]);
234
-
235
192
  var _useFunctionUsageTrac = (0, _useFunctionUsageTracking.default)(onInputChange),
236
- isOnInputChangeUsed = _useFunctionUsageTrac.isUsed,
237
- usageTrackedOnInputChange = _useFunctionUsageTrac.trackingFunction;
238
-
193
+ isOnInputChangeUsed = _useFunctionUsageTrac.isUsed,
194
+ usageTrackedOnInputChange = _useFunctionUsageTrac.trackingFunction;
239
195
  var _useFunctionUsageTrac2 = (0, _useFunctionUsageTracking.default)(onUserSelect),
240
- isOnUserSelectUsed = _useFunctionUsageTrac2.isUsed,
241
- usageTrackedOnUserSelect = _useFunctionUsageTrac2.trackingFunction;
242
-
196
+ isOnUserSelectUsed = _useFunctionUsageTrac2.isUsed,
197
+ usageTrackedOnUserSelect = _useFunctionUsageTrac2.trackingFunction;
243
198
  return {
244
199
  recommendations: isOnInputChangeUsed && isOnUserSelectUsed ? recommendations : instrumentFailureOption,
245
200
  triggerSearchFactory: usageTrackedOnInputChange,
@@ -248,6 +203,5 @@ var useUserRecommendations = function useUserRecommendations(props) {
248
203
  error: error
249
204
  };
250
205
  };
251
-
252
206
  var _default = useUserRecommendations;
253
207
  exports.default = _default;
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.UsersFetchedUfoExperience = void 0;
7
-
8
7
  var _ufo = require("@atlaskit/ufo");
9
-
10
8
  var COMPONENT_NAME = 'smart-hooks.use-user-recommendations';
11
9
  var UsersFetchedUfoExperience = new _ufo.ConcurrentExperience('users-fetched', {
12
10
  platform: {
@@ -4,20 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _smartCommon = require("@atlaskit/smart-common");
9
-
10
8
  var _userPicker = require("@atlaskit/user-picker");
11
-
12
9
  var _messages = require("../../messages");
13
-
14
10
  var getLozenzeProperties = function getLozenzeProperties(entity, intl) {
15
11
  var _entity$attributes, _entity$attributes2;
16
-
17
12
  if ((_entity$attributes = entity.attributes) !== null && _entity$attributes !== void 0 && _entity$attributes.workspaceMember) {
18
13
  return intl.formatMessage(_messages.messages.memberLozengeText);
19
14
  }
20
-
21
15
  if ((_entity$attributes2 = entity.attributes) !== null && _entity$attributes2 !== void 0 && _entity$attributes2.isConfluenceExternalCollaborator) {
22
16
  var lozengeTooltipMessage = entity.entityType === _smartCommon.EntityType.GROUP ? _messages.messages.guestGroupLozengeTooltip : _messages.messages.guestUserLozengeTooltip;
23
17
  return {
@@ -26,13 +20,10 @@ var getLozenzeProperties = function getLozenzeProperties(entity, intl) {
26
20
  appearance: 'new'
27
21
  };
28
22
  }
29
-
30
23
  return undefined;
31
24
  };
32
-
33
25
  var transformRecommendation = function transformRecommendation(item, intl) {
34
26
  var type = item.entityType;
35
-
36
27
  if (type === _smartCommon.EntityType.USER) {
37
28
  var user = item;
38
29
  var lozenge = getLozenzeProperties(user, intl);
@@ -45,7 +36,6 @@ var transformRecommendation = function transformRecommendation(item, intl) {
45
36
  lozenge: lozenge
46
37
  };
47
38
  }
48
-
49
39
  if (type === _smartCommon.EntityType.TEAM) {
50
40
  var team = item;
51
41
  return {
@@ -58,12 +48,9 @@ var transformRecommendation = function transformRecommendation(item, intl) {
58
48
  avatarUrl: team.largeAvatarImageUrl || team.smallAvatarImageUrl
59
49
  };
60
50
  }
61
-
62
51
  if (type === _smartCommon.EntityType.GROUP) {
63
52
  var group = item;
64
-
65
53
  var _lozenge = getLozenzeProperties(group, intl);
66
-
67
54
  return {
68
55
  id: group.id,
69
56
  type: _userPicker.GroupType,
@@ -71,10 +58,8 @@ var transformRecommendation = function transformRecommendation(item, intl) {
71
58
  lozenge: _lozenge
72
59
  };
73
60
  }
74
-
75
61
  return;
76
62
  };
77
-
78
63
  var _default = function _default(recommendations, intl) {
79
64
  return (recommendations || []).map(function (item) {
80
65
  return transformRecommendation(item, intl);
@@ -84,5 +69,4 @@ var _default = function _default(recommendations, intl) {
84
69
  return option;
85
70
  });
86
71
  };
87
-
88
72
  exports.default = _default;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-hooks",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "sideEffects": false
5
5
  }
@@ -1,17 +1,18 @@
1
1
  import { useMemo, useState } from 'react';
2
2
  import memoizeOne from 'memoize-one';
3
-
4
3
  function useFunctionUsageTracking(trackedFunction) {
5
- const [isUsed, setIsUsed] = useState(false); // trackingFunction needs to be stable for hook consumers...
4
+ const [isUsed, setIsUsed] = useState(false);
6
5
 
7
- const trackingFunction = useMemo(() => // ...and the function that the factory returns needs to be stable for hook consumers as well
6
+ // trackingFunction needs to be stable for hook consumers...
7
+ const trackingFunction = useMemo(() =>
8
+ // ...and the function that the factory returns needs to be stable for hook consumers as well
8
9
  memoizeOne(() => {
9
10
  if (!isUsed) {
10
11
  setIsUsed(true);
11
12
  }
12
-
13
13
  return trackedFunction;
14
- }), // isUsed deliberately left out to avoid new tracking fn being generated
14
+ }),
15
+ // isUsed deliberately left out to avoid new tracking fn being generated
15
16
  // eslint-disable-next-line react-hooks/exhaustive-deps
16
17
  [trackedFunction]);
17
18
  return {
@@ -19,5 +20,4 @@ function useFunctionUsageTracking(trackedFunction) {
19
20
  trackingFunction
20
21
  };
21
22
  }
22
-
23
23
  export default useFunctionUsageTracking;
@@ -3,7 +3,6 @@ import { FabricChannel } from '@atlaskit/analytics-listeners';
3
3
  import { createAndFireEvent } from '@atlaskit/analytics-next';
4
4
  import { name as packageName, version as packageVersion } from '../../version.json';
5
5
  const createAndFireEventInElementsChannel = createAndFireEvent(FabricChannel.elements);
6
-
7
6
  const createEvent = (eventType, action, actionSubject, attributes = {}) => ({
8
7
  eventType,
9
8
  action,
@@ -15,7 +14,6 @@ const createEvent = (eventType, action, actionSubject, attributes = {}) => ({
15
14
  ...attributes
16
15
  }
17
16
  });
18
-
19
17
  export const findUserPosition = (loadedUsers, userId) => {
20
18
  return loadedUsers.findIndex(val => val.id === userId);
21
19
  };
@@ -21,7 +21,6 @@ export const instrumentFailureOption = [{
21
21
  entityType: EntityType.USER,
22
22
  avatarUrl: ''
23
23
  }];
24
-
25
24
  const useUserRecommendations = props => {
26
25
  const {
27
26
  baseUrl,
@@ -40,7 +39,8 @@ const useUserRecommendations = props => {
40
39
  productKey,
41
40
  cpusSearchQuery,
42
41
  tenantId
43
- } = { ...defaultProps,
42
+ } = {
43
+ ...defaultProps,
44
44
  ...props
45
45
  };
46
46
  const [recommendations, setRecommendations] = useState([]);
@@ -53,7 +53,8 @@ const useUserRecommendations = props => {
53
53
  const {
54
54
  createAnalyticsEvent
55
55
  } = useAnalyticsEvents();
56
- const getAnalyticsAttributes = useCallback(() => ({ ...createDefaultAttributes({
56
+ const getAnalyticsAttributes = useCallback(() => ({
57
+ ...createDefaultAttributes({
57
58
  fieldId,
58
59
  objectId,
59
60
  containerId,
@@ -67,20 +68,17 @@ const useUserRecommendations = props => {
67
68
  }, renderId, sessionId.current, currentQuery.current)
68
69
  }), [childObjectId, containerId, fieldId, includeTeams, maxNumberOfResults, objectId, preload, principalId, productKey, renderId, tenantId]);
69
70
  const fetchRecommendations = useCallback(async query => {
70
- setIsLoading(true); // restart session
71
-
71
+ setIsLoading(true);
72
+ // restart session
72
73
  sessionId.current = uuid();
73
74
  UsersFetchedUfoExperience.getInstance(fieldId).start();
74
-
75
75
  try {
76
76
  if (lastAbortController.current) {
77
77
  var _lastAbortController$;
78
-
79
78
  (_lastAbortController$ = lastAbortController.current) === null || _lastAbortController$ === void 0 ? void 0 : _lastAbortController$.abort();
80
- } // in case there are still IE users, check AbortController before init,
79
+ }
80
+ // in case there are still IE users, check AbortController before init,
81
81
  // IE has no timeout applied on fetch since AbortController isn't available
82
-
83
-
84
82
  const currentController = typeof AbortController !== 'undefined' ? new AbortController() : null;
85
83
  lastAbortController.current = currentController;
86
84
  const recommendedUsersResult = await fetchUserRecommendations({
@@ -105,7 +103,8 @@ const useUserRecommendations = props => {
105
103
  }, currentController === null || currentController === void 0 ? void 0 : currentController.signal);
106
104
  currentQuery.current = query !== null && query !== void 0 ? query : '';
107
105
  UsersFetchedUfoExperience.getInstance(fieldId).success({
108
- metadata: { ...getAnalyticsAttributes(),
106
+ metadata: {
107
+ ...getAnalyticsAttributes(),
109
108
  loadedUsersSize: recommendedUsersResult.length
110
109
  }
111
110
  });
@@ -113,8 +112,8 @@ const useUserRecommendations = props => {
113
112
  } catch (error) {
114
113
  if (error instanceof Error && error.name === 'AbortError') {
115
114
  // Request aborted client-side
116
- UsersFetchedUfoExperience.getInstance(fieldId).abort(); // return early to prevent disabling isLoading
117
-
115
+ UsersFetchedUfoExperience.getInstance(fieldId).abort();
116
+ // return early to prevent disabling isLoading
118
117
  return;
119
118
  } else {
120
119
  UsersFetchedUfoExperience.getInstance(fieldId).failure({
@@ -123,9 +122,8 @@ const useUserRecommendations = props => {
123
122
  setError(error);
124
123
  }
125
124
  }
126
-
127
- setIsLoading(false); // clear abort controller
128
-
125
+ setIsLoading(false);
126
+ // clear abort controller
129
127
  lastAbortController.current = undefined;
130
128
  }, [baseUrl, childObjectId, containerId, objectId, principalId, productAttributes, productKey, fieldId, tenantId, includeUsers, includeGroups, includeTeams, maxNumberOfResults, cpusSearchQuery, getAnalyticsAttributes]);
131
129
  const memoizedDebouncedFetchRecommendations = useMemo(() => memoizeOne(debounce(fetchRecommendations, debounceTimeMs)), [fetchRecommendations, debounceTimeMs]);
@@ -138,7 +136,8 @@ const useUserRecommendations = props => {
138
136
  memoizedDebouncedFetchRecommendations(query !== null && query !== void 0 ? query : '');
139
137
  }, [memoizedDebouncedFetchRecommendations]);
140
138
  const onUserSelect = useCallback(userId => {
141
- fireUserSelectedEvent(createAnalyticsEvent, { ...getAnalyticsAttributes(),
139
+ fireUserSelectedEvent(createAnalyticsEvent, {
140
+ ...getAnalyticsAttributes(),
142
141
  selectedUser: userId,
143
142
  loadedUsersSize: recommendations.length,
144
143
  position: findUserPosition(recommendations, userId)
@@ -160,5 +159,4 @@ const useUserRecommendations = props => {
160
159
  error
161
160
  };
162
161
  };
163
-
164
162
  export default useUserRecommendations;
@@ -1,14 +1,11 @@
1
1
  import { EntityType } from '@atlaskit/smart-common';
2
2
  import { GroupType, TeamType, UserType } from '@atlaskit/user-picker';
3
3
  import { messages } from '../../messages';
4
-
5
4
  const getLozenzeProperties = (entity, intl) => {
6
5
  var _entity$attributes, _entity$attributes2;
7
-
8
6
  if ((_entity$attributes = entity.attributes) !== null && _entity$attributes !== void 0 && _entity$attributes.workspaceMember) {
9
7
  return intl.formatMessage(messages.memberLozengeText);
10
8
  }
11
-
12
9
  if ((_entity$attributes2 = entity.attributes) !== null && _entity$attributes2 !== void 0 && _entity$attributes2.isConfluenceExternalCollaborator) {
13
10
  const lozengeTooltipMessage = entity.entityType === EntityType.GROUP ? messages.guestGroupLozengeTooltip : messages.guestUserLozengeTooltip;
14
11
  return {
@@ -17,13 +14,10 @@ const getLozenzeProperties = (entity, intl) => {
17
14
  appearance: 'new'
18
15
  };
19
16
  }
20
-
21
17
  return undefined;
22
18
  };
23
-
24
19
  const transformRecommendation = (item, intl) => {
25
20
  const type = item.entityType;
26
-
27
21
  if (type === EntityType.USER) {
28
22
  const user = item;
29
23
  const lozenge = getLozenzeProperties(user, intl);
@@ -36,7 +30,6 @@ const transformRecommendation = (item, intl) => {
36
30
  lozenge: lozenge
37
31
  };
38
32
  }
39
-
40
33
  if (type === EntityType.TEAM) {
41
34
  const team = item;
42
35
  return {
@@ -49,7 +42,6 @@ const transformRecommendation = (item, intl) => {
49
42
  avatarUrl: team.largeAvatarImageUrl || team.smallAvatarImageUrl
50
43
  };
51
44
  }
52
-
53
45
  if (type === EntityType.GROUP) {
54
46
  const group = item;
55
47
  const lozenge = getLozenzeProperties(group, intl);
@@ -60,8 +52,6 @@ const transformRecommendation = (item, intl) => {
60
52
  lozenge: lozenge
61
53
  };
62
54
  }
63
-
64
55
  return;
65
56
  };
66
-
67
57
  export default ((recommendations, intl) => (recommendations || []).map(item => transformRecommendation(item, intl)).filter(option => !!option).map(option => option));
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-hooks",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "sideEffects": false
5
5
  }
@@ -1,25 +1,25 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { useMemo, useState } from 'react';
3
3
  import memoizeOne from 'memoize-one';
4
-
5
4
  function useFunctionUsageTracking(trackedFunction) {
6
5
  var _useState = useState(false),
7
- _useState2 = _slicedToArray(_useState, 2),
8
- isUsed = _useState2[0],
9
- setIsUsed = _useState2[1]; // trackingFunction needs to be stable for hook consumers...
10
-
6
+ _useState2 = _slicedToArray(_useState, 2),
7
+ isUsed = _useState2[0],
8
+ setIsUsed = _useState2[1];
11
9
 
10
+ // trackingFunction needs to be stable for hook consumers...
12
11
  var trackingFunction = useMemo(function () {
13
- return (// ...and the function that the factory returns needs to be stable for hook consumers as well
12
+ return (
13
+ // ...and the function that the factory returns needs to be stable for hook consumers as well
14
14
  memoizeOne(function () {
15
15
  if (!isUsed) {
16
16
  setIsUsed(true);
17
17
  }
18
-
19
18
  return trackedFunction;
20
19
  })
21
20
  );
22
- }, // isUsed deliberately left out to avoid new tracking fn being generated
21
+ },
22
+ // isUsed deliberately left out to avoid new tracking fn being generated
23
23
  // eslint-disable-next-line react-hooks/exhaustive-deps
24
24
  [trackedFunction]);
25
25
  return {
@@ -27,5 +27,4 @@ function useFunctionUsageTracking(trackedFunction) {
27
27
  trackingFunction: trackingFunction
28
28
  };
29
29
  }
30
-
31
30
  export default useFunctionUsageTracking;
@@ -1,15 +1,11 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
-
3
2
  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
3
  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
4
  import { TRACK_EVENT_TYPE } from '@atlaskit/analytics-gas-types';
8
5
  import { FabricChannel } from '@atlaskit/analytics-listeners';
9
6
  import { createAndFireEvent } from '@atlaskit/analytics-next';
10
7
  import { name as packageName, version as packageVersion } from '../../version.json';
11
8
  var createAndFireEventInElementsChannel = createAndFireEvent(FabricChannel.elements);
12
-
13
9
  var createEvent = function createEvent(eventType, action, actionSubject) {
14
10
  var attributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
15
11
  return {
@@ -23,7 +19,6 @@ var createEvent = function createEvent(eventType, action, actionSubject) {
23
19
  }, attributes)
24
20
  };
25
21
  };
26
-
27
22
  export var findUserPosition = function findUserPosition(loadedUsers, userId) {
28
23
  return loadedUsers.findIndex(function (val) {
29
24
  return val.id === userId;
@@ -31,15 +26,15 @@ export var findUserPosition = function findUserPosition(loadedUsers, userId) {
31
26
  };
32
27
  export var createDefaultAttributes = function createDefaultAttributes(props, renderId, sessionId, query) {
33
28
  var fieldId = props.fieldId,
34
- objectId = props.objectId,
35
- containerId = props.containerId,
36
- childObjectId = props.childObjectId,
37
- preload = props.preload,
38
- includeTeams = props.includeTeams,
39
- productKey = props.productKey,
40
- principalId = props.principalId,
41
- tenantId = props.tenantId,
42
- maxNumberOfResults = props.maxNumberOfResults;
29
+ objectId = props.objectId,
30
+ containerId = props.containerId,
31
+ childObjectId = props.childObjectId,
32
+ preload = props.preload,
33
+ includeTeams = props.includeTeams,
34
+ productKey = props.productKey,
35
+ principalId = props.principalId,
36
+ tenantId = props.tenantId,
37
+ maxNumberOfResults = props.maxNumberOfResults;
43
38
  return {
44
39
  context: fieldId,
45
40
  childObjectId: childObjectId,