@atlaskit/link-datasource 1.28.0 → 1.28.2

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 (59) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/services/mocks.js +152 -1
  3. package/dist/cjs/services/useBasicFilterAGG.js +9 -2
  4. package/dist/cjs/services/utils.js +3 -2
  5. package/dist/cjs/ui/common/modal/popup-select/formatOptionLabel.js +7 -10
  6. package/dist/cjs/ui/common/modal/popup-select/index.js +2 -1
  7. package/dist/cjs/ui/common/modal/popup-select/trigger.js +7 -8
  8. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.js +110 -0
  9. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.js +14 -0
  10. package/dist/cjs/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.js +48 -0
  11. package/dist/cjs/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.js +120 -0
  12. package/dist/cjs/ui/confluence-search-modal/basic-filters/index.js +12 -3
  13. package/dist/cjs/ui/confluence-search-modal/confluence-search-container/index.js +15 -6
  14. package/dist/cjs/ui/confluence-search-modal/modal/index.js +35 -17
  15. package/dist/es2019/services/mocks.js +151 -0
  16. package/dist/es2019/services/useBasicFilterAGG.js +8 -3
  17. package/dist/es2019/services/utils.js +8 -0
  18. package/dist/es2019/ui/common/modal/popup-select/formatOptionLabel.js +7 -7
  19. package/dist/es2019/ui/common/modal/popup-select/index.js +1 -1
  20. package/dist/es2019/ui/common/modal/popup-select/trigger.js +7 -8
  21. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.js +82 -0
  22. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.js +8 -0
  23. package/dist/es2019/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.js +25 -0
  24. package/dist/es2019/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.js +74 -0
  25. package/dist/es2019/ui/confluence-search-modal/basic-filters/index.js +13 -3
  26. package/dist/es2019/ui/confluence-search-modal/confluence-search-container/index.js +16 -9
  27. package/dist/es2019/ui/confluence-search-modal/modal/index.js +22 -6
  28. package/dist/esm/services/mocks.js +151 -0
  29. package/dist/esm/services/useBasicFilterAGG.js +10 -3
  30. package/dist/esm/services/utils.js +2 -1
  31. package/dist/esm/ui/common/modal/popup-select/formatOptionLabel.js +7 -7
  32. package/dist/esm/ui/common/modal/popup-select/index.js +2 -1
  33. package/dist/esm/ui/common/modal/popup-select/trigger.js +7 -8
  34. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.js +100 -0
  35. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.js +8 -0
  36. package/dist/esm/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.js +41 -0
  37. package/dist/esm/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.js +113 -0
  38. package/dist/esm/ui/confluence-search-modal/basic-filters/index.js +12 -3
  39. package/dist/esm/ui/confluence-search-modal/confluence-search-container/index.js +15 -6
  40. package/dist/esm/ui/confluence-search-modal/modal/index.js +35 -17
  41. package/dist/types/services/mocks.d.ts +51 -0
  42. package/dist/types/services/useBasicFilterAGG.d.ts +2 -0
  43. package/dist/types/services/utils.d.ts +1 -0
  44. package/dist/types/ui/common/modal/popup-select/index.d.ts +1 -1
  45. package/dist/types/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.d.ts +10 -0
  46. package/dist/types/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.d.ts +7 -0
  47. package/dist/types/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.d.ts +7 -0
  48. package/dist/types/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.d.ts +16 -0
  49. package/dist/types/ui/confluence-search-modal/basic-filters/index.d.ts +4 -2
  50. package/dist/types-ts4.5/services/mocks.d.ts +51 -0
  51. package/dist/types-ts4.5/services/useBasicFilterAGG.d.ts +2 -0
  52. package/dist/types-ts4.5/services/utils.d.ts +1 -0
  53. package/dist/types-ts4.5/ui/common/modal/popup-select/index.d.ts +1 -1
  54. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.d.ts +10 -0
  55. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.d.ts +7 -0
  56. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.d.ts +7 -0
  57. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.d.ts +16 -0
  58. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/index.d.ts +4 -2
  59. package/package.json +7 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.28.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#92426](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/92426) [`32c76c7c225c`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/32c76c7c225c) - Bump adf-schema to 35.9.2 to support table alignment options
8
+ - Updated dependencies
9
+
10
+ ## 1.28.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [#91884](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/91884) [`e6c2b9a64494`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e6c2b9a64494) - The changes here adds `Edited or Created by` filter to the confluence list of links config modal.
15
+
3
16
  ## 1.28.0
4
17
 
5
18
  ### Minor Changes
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.mockHydrateJqlResponse = exports.mockFieldValuesResponse = void 0;
6
+ exports.mockUserRecommendationsResponse = exports.mockHydrateJqlResponse = exports.mockFieldValuesResponse = void 0;
7
7
  var mockHydrateJqlResponse = exports.mockHydrateJqlResponse = {
8
8
  data: {
9
9
  jira: {
@@ -131,4 +131,155 @@ var mockFieldValuesResponse = exports.mockFieldValuesResponse = {
131
131
  }
132
132
  }
133
133
  }
134
+ };
135
+ var mockUserRecommendationsResponse = exports.mockUserRecommendationsResponse = {
136
+ recommendedUsers: [{
137
+ entityType: 'USER',
138
+ id: '5ffe1efc34847e0069446bf8',
139
+ name: 'Atlassian Assist (staging)',
140
+ avatarUrl: '',
141
+ nickname: 'Atlassian Assist (staging)',
142
+ matchPositions: {},
143
+ accessLevel: 'CONTAINER',
144
+ accountStatus: 'ACTIVE',
145
+ notMentionable: false,
146
+ userType: 'APP',
147
+ attributes: {
148
+ isConfluenceExternalCollaborator: false
149
+ }
150
+ }, {
151
+ entityType: 'USER',
152
+ id: '62df272c3aaeedcae755c533',
153
+ name: 'Atlas for Jira (staging)',
154
+ avatarUrl: '',
155
+ nickname: 'Atlas for Jira (staging)',
156
+ matchPositions: {},
157
+ accessLevel: 'CONTAINER',
158
+ accountStatus: 'ACTIVE',
159
+ notMentionable: false,
160
+ userType: 'APP',
161
+ attributes: {
162
+ isConfluenceExternalCollaborator: false
163
+ }
164
+ }, {
165
+ entityType: 'USER',
166
+ id: '6232be743eacc50071fe13ba',
167
+ name: 'Stephen',
168
+ email: 'sdemontfort+10@atlassian.com',
169
+ avatarUrl: '',
170
+ nickname: 'Stephen',
171
+ matchPositions: {},
172
+ accessLevel: 'CONTAINER',
173
+ accountStatus: 'ACTIVE',
174
+ notMentionable: false,
175
+ locale: 'en-GB',
176
+ userType: 'DEFAULT',
177
+ attributes: {
178
+ isConfluenceExternalCollaborator: false
179
+ }
180
+ }, {
181
+ entityType: 'USER',
182
+ id: '608b253e2911000071b6e6d6',
183
+ name: 'Pranay Test 1773',
184
+ email: 'pmarella+1773@atlassian.com',
185
+ avatarUrl: '',
186
+ nickname: 'Pranay Test 1773',
187
+ matchPositions: {},
188
+ accessLevel: 'CONTAINER',
189
+ accountStatus: 'ACTIVE',
190
+ notMentionable: false,
191
+ locale: 'en-US',
192
+ userType: 'DEFAULT',
193
+ attributes: {
194
+ isConfluenceExternalCollaborator: false
195
+ }
196
+ }, {
197
+ entityType: 'USER',
198
+ id: '6202a8cfc4e2c9006ae620b1',
199
+ name: 'Jacob Test3',
200
+ email: 'jbrunson+test3@atlassian.com',
201
+ avatarUrl: '',
202
+ nickname: 'Jacob Test3',
203
+ matchPositions: {},
204
+ accessLevel: 'CONTAINER',
205
+ accountStatus: 'ACTIVE',
206
+ notMentionable: false,
207
+ locale: 'en-US',
208
+ userType: 'DEFAULT',
209
+ attributes: {
210
+ isConfluenceExternalCollaborator: false
211
+ }
212
+ }, {
213
+ entityType: 'USER',
214
+ id: '61428180ff23ba00717b7d78',
215
+ name: 'Test Themes',
216
+ avatarUrl: '',
217
+ nickname: 'Test Themes',
218
+ matchPositions: {},
219
+ accessLevel: 'CONTAINER',
220
+ accountStatus: 'ACTIVE',
221
+ notMentionable: false,
222
+ userType: 'APP',
223
+ attributes: {
224
+ isConfluenceExternalCollaborator: false
225
+ }
226
+ }, {
227
+ entityType: 'USER',
228
+ id: '5d9e2c300d44fc0dca5428bb',
229
+ name: 'Confluence Connect Test - AP methods',
230
+ avatarUrl: '',
231
+ nickname: 'Confluence Connect Test - AP methods',
232
+ matchPositions: {},
233
+ accessLevel: 'CONTAINER',
234
+ accountStatus: 'ACTIVE',
235
+ notMentionable: false,
236
+ userType: 'APP',
237
+ attributes: {
238
+ isConfluenceExternalCollaborator: false
239
+ }
240
+ }, {
241
+ entityType: 'USER',
242
+ id: '655363:1276a696-f0d0-4f3a-a022-636723eb5148',
243
+ name: 'Confluence Google Drive',
244
+ avatarUrl: '',
245
+ nickname: 'Confluence Google Drive',
246
+ matchPositions: {},
247
+ accessLevel: 'CONTAINER',
248
+ accountStatus: 'ACTIVE',
249
+ notMentionable: false,
250
+ userType: 'APP',
251
+ attributes: {
252
+ isConfluenceExternalCollaborator: false
253
+ }
254
+ }, {
255
+ entityType: 'USER',
256
+ id: '712020:413e43c0-7202-4016-a318-a004892e7f8c',
257
+ name: 'arthur chen nth user',
258
+ avatarUrl: '',
259
+ nickname: 'arthur chen nth user',
260
+ matchPositions: {},
261
+ accessLevel: 'CONTAINER',
262
+ accountStatus: 'ACTIVE',
263
+ notMentionable: false,
264
+ locale: 'en-US',
265
+ userType: 'DEFAULT',
266
+ attributes: {
267
+ isConfluenceExternalCollaborator: false
268
+ }
269
+ }, {
270
+ entityType: 'USER',
271
+ id: '712020:9219bf5f-0358-4782-99dc-bc73258b2ddc',
272
+ name: 'jeff mellis',
273
+ avatarUrl: '',
274
+ nickname: 'jeff mellis',
275
+ matchPositions: {},
276
+ accessLevel: 'CONTAINER',
277
+ accountStatus: 'ACTIVE',
278
+ notMentionable: false,
279
+ locale: 'en-US',
280
+ userType: 'DEFAULT',
281
+ attributes: {
282
+ isConfluenceExternalCollaborator: false
283
+ }
284
+ }]
134
285
  };
@@ -61,10 +61,17 @@ var useBasicFilterAGG = exports.useBasicFilterAGG = function useBasicFilterAGG()
61
61
  query: _utils.fieldValuesQuery
62
62
  });
63
63
  }, [requestCall]);
64
+ var getCurrentUserInfo = (0, _react.useCallback)(function () {
65
+ return requestCall({
66
+ operationName: 'userQuery',
67
+ query: _utils.userQuery
68
+ });
69
+ }, [requestCall]);
64
70
  return (0, _react.useMemo)(function () {
65
71
  return {
66
72
  getHydratedJQL: getHydratedJQL,
67
- getFieldValues: getFieldValues
73
+ getFieldValues: getFieldValues,
74
+ getCurrentUserInfo: getCurrentUserInfo
68
75
  };
69
- }, [getHydratedJQL, getFieldValues]);
76
+ }, [getHydratedJQL, getFieldValues, getCurrentUserInfo]);
70
77
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.hydrateJQLQuery = exports.fieldValuesQuery = void 0;
6
+ exports.userQuery = exports.hydrateJQLQuery = exports.fieldValuesQuery = void 0;
7
7
  /**
8
8
  * HELLO DEV :wave
9
9
  * If you are here to change these queries, please also remember to update the query in jira/src/packages/platform/linking/link-datasource/src/index.tsx
@@ -12,4 +12,5 @@ exports.hydrateJQLQuery = exports.fieldValuesQuery = void 0;
12
12
  */
13
13
 
14
14
  var hydrateJQLQuery = exports.hydrateJQLQuery = "query hydrate($cloudId: ID!, $jql: String!) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n hydrateJqlQuery(query: $jql) {\n ... on JiraJqlHydratedQuery {\n fields {\n ... on JiraJqlQueryHydratedField {\n jqlTerm\n values {\n ... on JiraJqlQueryHydratedValue {\n values {\n ... on JiraJqlProjectFieldValue {\n jqlTerm\n displayName\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n jqlTerm\n displayName\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n jqlTerm\n displayName\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlUserFieldValue {\n jqlTerm\n displayName\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n jqlTerm\n displayName\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}";
15
- var fieldValuesQuery = exports.fieldValuesQuery = "query fieldValues($cloudId: ID!, $first: Int = 10, $jqlTerm: String!, $jql: String!, $searchString: String!, $after: String) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n fieldValues(\n first: $first\n jqlTerm: $jqlTerm\n jqlContext: $jql\n searchString: $searchString\n after: $after\n ) {\n totalCount\n pageInfo {\n endCursor\n }\n edges {\n node {\n jqlTerm\n displayName\n ... on JiraJqlProjectFieldValue {\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlUserFieldValue {\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n}";
15
+ var fieldValuesQuery = exports.fieldValuesQuery = "query fieldValues($cloudId: ID!, $first: Int = 10, $jqlTerm: String!, $jql: String!, $searchString: String!, $after: String) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n fieldValues(\n first: $first\n jqlTerm: $jqlTerm\n jqlContext: $jql\n searchString: $searchString\n after: $after\n ) {\n totalCount\n pageInfo {\n endCursor\n }\n edges {\n node {\n jqlTerm\n displayName\n ... on JiraJqlProjectFieldValue {\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlUserFieldValue {\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n}";
16
+ var userQuery = exports.userQuery = "query userQuery {\n me {\n user {\n id\n accountId\n }\n }\n}";
@@ -1,18 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = _interopRequireDefault(require("react"));
10
9
  var _avatar = _interopRequireDefault(require("@atlaskit/avatar"));
11
10
  var _peopleGroup = _interopRequireDefault(require("@atlaskit/icon/glyph/people-group"));
12
11
  var _lozenge = _interopRequireDefault(require("@atlaskit/lozenge"));
13
12
  var _primitives = require("@atlaskit/primitives");
14
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
13
  var commonLabelStyles = (0, _primitives.xcss)({
17
14
  overflow: 'hidden',
18
15
  textOverflow: 'ellipsis'
@@ -73,9 +70,6 @@ var AvatarOptionLabel = function AvatarOptionLabel(_ref3) {
73
70
  }, data.label));
74
71
  };
75
72
  var formatOptionLabel = function formatOptionLabel(data) {
76
- if (data.optionType === 'defaultOption') {
77
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null);
78
- }
79
73
  if (data.optionType === 'lozengeLabel') {
80
74
  return /*#__PURE__*/_react.default.createElement(LozengeOptionLabel, {
81
75
  data: data
@@ -86,8 +80,11 @@ var formatOptionLabel = function formatOptionLabel(data) {
86
80
  data: data
87
81
  });
88
82
  }
89
- return /*#__PURE__*/_react.default.createElement(IconOptionLabel, {
90
- data: data
91
- });
83
+ if (data.optionType === 'iconLabel') {
84
+ return /*#__PURE__*/_react.default.createElement(IconOptionLabel, {
85
+ data: data
86
+ });
87
+ }
88
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
92
89
  };
93
90
  var _default = exports.default = formatOptionLabel;
@@ -33,7 +33,8 @@ var noFilterOptions = function noFilterOptions() {
33
33
  };
34
34
  var FilterPopupSelect = exports.FilterPopupSelect = function FilterPopupSelect(_ref) {
35
35
  var filterName = _ref.filterName,
36
- totalCount = _ref.totalCount,
36
+ _ref$totalCount = _ref.totalCount,
37
+ totalCount = _ref$totalCount === void 0 ? 0 : _ref$totalCount,
37
38
  status = _ref.status,
38
39
  buttonLabel = _ref.buttonLabel,
39
40
  _ref$showLoading = _ref.showLoading,
@@ -18,8 +18,7 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
18
18
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
19
  var triggerButtonLabelStyles = (0, _primitives.xcss)({
20
20
  textOverflow: 'ellipsis',
21
- overflow: 'hidden',
22
- maxWidth: '150px'
21
+ overflow: 'hidden'
23
22
  });
24
23
  var badgeStyles = (0, _primitives.xcss)({
25
24
  marginLeft: 'space.050'
@@ -51,15 +50,15 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
51
50
  firstOption = _ref3[0];
52
51
  var hasOptions = selectedOptions && selectedOptions.length > 0;
53
52
  var showButtonLoading = !isDisabled && isLoading;
54
- var tiggerButtonTestId = "".concat(testId, "-trigger");
53
+ var triggerButtonTestId = "".concat(testId, "-trigger");
55
54
  var LoadingButton = (0, _react.useCallback)(function () {
56
55
  return /*#__PURE__*/_react.default.createElement(LoadingStateAnimationWrapper, null, /*#__PURE__*/_react.default.createElement(_standardButton.default, {
57
56
  iconAfter: /*#__PURE__*/_react.default.createElement(_spinner.default, {
58
57
  size: 'xsmall'
59
58
  }),
60
- testId: "".concat(tiggerButtonTestId, "--loading-button")
59
+ testId: "".concat(triggerButtonTestId, "--loading-button")
61
60
  }, label));
62
- }, [label, tiggerButtonTestId]);
61
+ }, [label, triggerButtonTestId]);
63
62
  var DefaultButton = (0, _react.useCallback)(function () {
64
63
  return /*#__PURE__*/_react.default.createElement(_standardButton.default, {
65
64
  appearance: "default",
@@ -68,7 +67,7 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
68
67
  iconAfter: /*#__PURE__*/_react.default.createElement(_chevronDown.default, {
69
68
  label: ""
70
69
  }),
71
- testId: "".concat(tiggerButtonTestId, "--button")
70
+ testId: "".concat(triggerButtonTestId, "--button")
72
71
  }, /*#__PURE__*/_react.default.createElement(_primitives.Flex, null, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
73
72
  xcss: triggerButtonLabelStyles
74
73
  }, label, firstOption && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, ": ", firstOption.label)), selectedOptions && selectedOptions.length > 1 && /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
@@ -77,7 +76,7 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
77
76
  }, /*#__PURE__*/_react.default.createElement(_badge.default, {
78
77
  appearance: "primary"
79
78
  }, "+", selectedOptions.length - 1))));
80
- }, [firstOption, hasOptions, isDisabled, isSelected, label, selectedOptions, tiggerButtonTestId]);
79
+ }, [firstOption, hasOptions, isDisabled, isSelected, label, selectedOptions, triggerButtonTestId]);
81
80
 
82
81
  /**
83
82
  * We had an issue with the popup component referencing a stale DOM ref for the trigger button.
@@ -85,7 +84,7 @@ var PopupTrigger = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
85
84
  */
86
85
  return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
87
86
  ref: ref,
88
- testId: tiggerButtonTestId
87
+ testId: triggerButtonTestId
89
88
  }, showButtonLoading ? /*#__PURE__*/_react.default.createElement(LoadingButton, null) : /*#__PURE__*/_react.default.createElement(DefaultButton, null));
90
89
  });
91
90
  var _default = exports.default = PopupTrigger;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _reactIntlNext = require("react-intl-next");
14
+ var _useDebounce = require("use-debounce");
15
+ var _popupSelect = require("../../../../common/modal/popup-select");
16
+ var _constants = require("../../../../common/modal/popup-select/constants");
17
+ var _useCurrentUserInfo2 = require("../../hooks/useCurrentUserInfo");
18
+ var _useRecommendation2 = _interopRequireDefault(require("../../hooks/useRecommendation"));
19
+ var _types = require("../../types");
20
+ var _messages = require("./messages");
21
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
22
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
+ var filterName = "clol-basic-filter-".concat(_types.CLOLBasicFilters.editedOrCreatedBy);
24
+ var EditedOrCreatedByFilter = function EditedOrCreatedByFilter(_ref) {
25
+ var cloudId = _ref.cloudId,
26
+ onSelectionChange = _ref.onSelectionChange,
27
+ _ref$selection = _ref.selection,
28
+ selection = _ref$selection === void 0 ? [] : _ref$selection;
29
+ var _useCurrentUserInfo = (0, _useCurrentUserInfo2.useCurrentUserInfo)(),
30
+ user = _useCurrentUserInfo.user;
31
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
32
+ formatMessage = _useIntl.formatMessage;
33
+ var _useRecommendation = (0, _useRecommendation2.default)(),
34
+ status = _useRecommendation.status,
35
+ filterOptions = _useRecommendation.filterOptions,
36
+ fetchFilterOptions = _useRecommendation.fetchFilterOptions,
37
+ errors = _useRecommendation.errors;
38
+ var _useState = (0, _react.useState)(''),
39
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
40
+ searchTerm = _useState2[0],
41
+ setSearchTerm = _useState2[1];
42
+ var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function (searchTerm) {
43
+ if (cloudId && user !== null && user !== void 0 && user.accountId) {
44
+ fetchFilterOptions({
45
+ searchTerm: searchTerm,
46
+ cloudId: cloudId,
47
+ userId: user.accountId
48
+ });
49
+ }
50
+ }, _constants.SEARCH_DEBOUNCE_MS),
51
+ _useDebouncedCallback2 = (0, _slicedToArray2.default)(_useDebouncedCallback, 1),
52
+ handleDebouncedFetchFilterOptions = _useDebouncedCallback2[0];
53
+ var handleInputChange = (0, _react.useCallback)( /*#__PURE__*/function () {
54
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(newSearchTerm) {
55
+ return _regenerator.default.wrap(function _callee$(_context) {
56
+ while (1) switch (_context.prev = _context.next) {
57
+ case 0:
58
+ setSearchTerm(newSearchTerm);
59
+ handleDebouncedFetchFilterOptions(newSearchTerm);
60
+ case 2:
61
+ case "end":
62
+ return _context.stop();
63
+ }
64
+ }, _callee);
65
+ }));
66
+ return function (_x) {
67
+ return _ref2.apply(this, arguments);
68
+ };
69
+ }(), [handleDebouncedFetchFilterOptions]);
70
+ var handleOptionSelection = (0, _react.useCallback)(function (newValue) {
71
+ onSelectionChange(_types.CLOLBasicFilters.editedOrCreatedBy, newValue);
72
+ }, [onSelectionChange]);
73
+ var handleMenuOpen = (0, _react.useCallback)(function () {
74
+ if ((status === 'empty' || status === 'rejected') && cloudId && user !== null && user !== void 0 && user.accountId) {
75
+ // if user searches and gets status as rejected, we want the dropdown to try load the request with searchString when the user reopens the dropdown
76
+ fetchFilterOptions({
77
+ cloudId: cloudId,
78
+ userId: user.accountId,
79
+ searchTerm: searchTerm
80
+ });
81
+ }
82
+ }, [fetchFilterOptions, status, cloudId, user === null || user === void 0 ? void 0 : user.accountId, searchTerm]);
83
+ var filterOptionsLength = filterOptions.length;
84
+ var isError = status === 'rejected';
85
+ var isLoading = status === 'loading' || status === 'empty';
86
+ var isEmpty = status === 'resolved' && filterOptionsLength === 0;
87
+ var isDisabled = !cloudId || !(user !== null && user !== void 0 && user.accountId);
88
+ return /*#__PURE__*/_react.default.createElement(_popupSelect.FilterPopupSelect, {
89
+ buttonLabel: formatMessage(_messages.editedOrCreatedByMessage.buttonLabel),
90
+ filterName: filterName,
91
+ isDisabled: isDisabled,
92
+ options: filterOptions,
93
+ showLoading: isLoading,
94
+ selectedOptions: selection,
95
+ onSelectionChange: handleOptionSelection,
96
+ onInputChange: handleInputChange,
97
+ showHydrating: false,
98
+ shouldShowFooter: false,
99
+ status: status,
100
+ onMenuOpen: handleMenuOpen,
101
+ menuListProps: {
102
+ filterName: filterName,
103
+ errors: errors,
104
+ isLoading: isLoading,
105
+ isError: isError,
106
+ isEmpty: isEmpty
107
+ }
108
+ });
109
+ };
110
+ var _default = exports.default = EditedOrCreatedByFilter;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.editedOrCreatedByMessage = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var editedOrCreatedByMessage = exports.editedOrCreatedByMessage = (0, _reactIntlNext.defineMessages)({
9
+ buttonLabel: {
10
+ id: 'linkDataSource.clol-basic-filter.editedOrCreatedBy.label',
11
+ description: 'Label to be displayed for "Edited or created by" filter dropdown button.',
12
+ defaultMessage: 'Edited or created by'
13
+ }
14
+ });
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useCurrentUserInfo = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = require("react");
12
+ var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
13
+ var useCurrentUserInfo = exports.useCurrentUserInfo = function useCurrentUserInfo() {
14
+ var _useState = (0, _react.useState)(),
15
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
16
+ user = _useState2[0],
17
+ setUser = _useState2[1];
18
+ var _useBasicFilterAGG = (0, _useBasicFilterAGG2.useBasicFilterAGG)(),
19
+ getCurrentUserInfoFromAGG = _useBasicFilterAGG.getCurrentUserInfo;
20
+ var getCurrentUserInfo = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
21
+ var _user$data;
22
+ var user, _user$data2;
23
+ return _regenerator.default.wrap(function _callee$(_context) {
24
+ while (1) switch (_context.prev = _context.next) {
25
+ case 0:
26
+ _context.next = 2;
27
+ return getCurrentUserInfoFromAGG();
28
+ case 2:
29
+ user = _context.sent;
30
+ if (user !== null && user !== void 0 && (_user$data = user.data) !== null && _user$data !== void 0 && _user$data.me.user) {
31
+ setUser((_user$data2 = user.data) === null || _user$data2 === void 0 ? void 0 : _user$data2.me.user);
32
+ } else {
33
+ setUser(undefined);
34
+ }
35
+ case 4:
36
+ case "end":
37
+ return _context.stop();
38
+ }
39
+ }, _callee);
40
+ })), [getCurrentUserInfoFromAGG]);
41
+ (0, _react.useEffect)(function () {
42
+ getCurrentUserInfo();
43
+ }, [getCurrentUserInfo]);
44
+ return {
45
+ user: user,
46
+ getCurrentUserInfo: getCurrentUserInfo
47
+ };
48
+ };
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = require("react");
12
+ var _reactIntlNext = require("react-intl-next");
13
+ var _smartUserPicker = require("@atlaskit/smart-user-picker");
14
+ var useRecommendation = function useRecommendation() {
15
+ var intl = (0, _reactIntlNext.useIntl)();
16
+ var _useState = (0, _react.useState)([]),
17
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
18
+ filterOptions = _useState2[0],
19
+ setFilterOptions = _useState2[1];
20
+ var _useState3 = (0, _react.useState)('empty'),
21
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
22
+ status = _useState4[0],
23
+ setStatus = _useState4[1];
24
+ var _useState5 = (0, _react.useState)([]),
25
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
26
+ errors = _useState6[0],
27
+ setErrors = _useState6[1];
28
+ var initialData = (0, _react.useRef)();
29
+ var convertRecommendationsToFilterOptions = function convertRecommendationsToFilterOptions(recommendations) {
30
+ return recommendations.map(function (item) {
31
+ return {
32
+ optionType: 'avatarLabel',
33
+ label: item.name,
34
+ value: item.id,
35
+ avatar: item.avatarUrl
36
+ };
37
+ });
38
+ };
39
+ var fetchFilterOptions = (0, _react.useCallback)( /*#__PURE__*/function () {
40
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
41
+ var userId, cloudId, searchTerm, requestParams, initialResponseData, isRequestLikeInitialSearch, recommendations;
42
+ return _regenerator.default.wrap(function _callee$(_context) {
43
+ while (1) switch (_context.prev = _context.next) {
44
+ case 0:
45
+ userId = _ref.userId, cloudId = _ref.cloudId, searchTerm = _ref.searchTerm;
46
+ setStatus('loading');
47
+ requestParams = {
48
+ context: {
49
+ contextType: 'contributors',
50
+ principalId: userId || '',
51
+ productAttributes: {
52
+ isEntitledConfluenceExternalCollaborator: true
53
+ },
54
+ productKey: 'confluence',
55
+ siteId: cloudId
56
+ },
57
+ includeGroups: false,
58
+ includeTeams: false,
59
+ includeUsers: true,
60
+ maxNumberOfResults: 10,
61
+ performSearchQueryOnly: false,
62
+ query: searchTerm
63
+ };
64
+ initialResponseData = initialData.current;
65
+ isRequestLikeInitialSearch = !searchTerm;
66
+ _context.prev = 5;
67
+ if (!(isRequestLikeInitialSearch && initialResponseData)) {
68
+ _context.next = 10;
69
+ break;
70
+ }
71
+ _context.t0 = initialResponseData;
72
+ _context.next = 13;
73
+ break;
74
+ case 10:
75
+ _context.next = 12;
76
+ return (0, _smartUserPicker.getUserRecommendations)(requestParams, intl);
77
+ case 12:
78
+ _context.t0 = _context.sent;
79
+ case 13:
80
+ recommendations = _context.t0;
81
+ setFilterOptions(convertRecommendationsToFilterOptions(recommendations));
82
+ setStatus('resolved');
83
+ if (!searchTerm) {
84
+ /**
85
+ * The initial dataset is used in couple of paths, eg: when a user searches and clears the search text.
86
+ * During these times, we dont want to fetch data again and again, hence a mini cache setup to store and provide the initial dataset
87
+ */
88
+ initialData.current = recommendations;
89
+ }
90
+ _context.next = 23;
91
+ break;
92
+ case 19:
93
+ _context.prev = 19;
94
+ _context.t1 = _context["catch"](5);
95
+ setStatus('rejected');
96
+ setErrors([_context.t1]);
97
+ case 23:
98
+ case "end":
99
+ return _context.stop();
100
+ }
101
+ }, _callee, null, [[5, 19]]);
102
+ }));
103
+ return function (_x) {
104
+ return _ref2.apply(this, arguments);
105
+ };
106
+ }(), [intl]);
107
+ var reset = (0, _react.useCallback)(function () {
108
+ setStatus('empty');
109
+ setFilterOptions([]);
110
+ setErrors([]);
111
+ }, []);
112
+ return {
113
+ status: status,
114
+ errors: errors,
115
+ filterOptions: filterOptions,
116
+ reset: reset,
117
+ fetchFilterOptions: fetchFilterOptions
118
+ };
119
+ };
120
+ var _default = exports.default = useRecommendation;
@@ -8,17 +8,26 @@ exports.default = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
  var _primitives = require("@atlaskit/primitives");
10
10
  var _dateRangePicker = require("./filters/date-range-picker");
11
+ var _editedOrCreatedBy = _interopRequireDefault(require("./filters/edited-or-created-by"));
11
12
  var basicFilterContainerStyles = (0, _primitives.xcss)({
12
13
  paddingLeft: 'space.100'
13
14
  });
14
15
  var BasicFilterContainer = function BasicFilterContainer(_ref) {
15
- var onChange = _ref.onChange;
16
+ var cloudId = _ref.cloudId,
17
+ onChange = _ref.onChange,
18
+ _ref$selections = _ref.selections,
19
+ selections = _ref$selections === void 0 ? {} : _ref$selections;
20
+ var editedOrCreatedBy = selections.editedOrCreatedBy;
16
21
  return /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
17
22
  xcss: basicFilterContainerStyles,
18
23
  gap: "space.100",
19
24
  testId: "clol-basic-filter-container"
20
- }, /*#__PURE__*/_react.default.createElement(_dateRangePicker.DateRangePicker, {
25
+ }, /*#__PURE__*/_react.default.createElement(_editedOrCreatedBy.default, {
26
+ cloudId: cloudId,
27
+ onSelectionChange: onChange,
28
+ selection: editedOrCreatedBy || []
29
+ }), /*#__PURE__*/_react.default.createElement(_dateRangePicker.DateRangePicker, {
21
30
  onSelectionChange: onChange
22
- }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null));
31
+ }));
23
32
  };
24
33
  var _default = exports.default = BasicFilterContainer;