@atlaskit/link-datasource 1.27.4 → 1.28.1

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 (117) hide show
  1. package/CHANGELOG.md +12 -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 +6 -3
  6. package/dist/cjs/ui/common/modal/popup-select/index.js +2 -1
  7. package/dist/cjs/ui/common/modal/popup-select/trigger.js +1 -2
  8. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/PopupComponent.js +19 -0
  9. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.js +89 -0
  10. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.js +49 -0
  11. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.js +75 -0
  12. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.js +32 -0
  13. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.js +110 -0
  14. package/dist/cjs/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.js +14 -0
  15. package/dist/cjs/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.js +48 -0
  16. package/dist/cjs/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.js +120 -0
  17. package/dist/cjs/ui/confluence-search-modal/basic-filters/index.js +14 -3
  18. package/dist/cjs/ui/confluence-search-modal/basic-filters/types.js +11 -0
  19. package/dist/cjs/ui/confluence-search-modal/confluence-search-container/index.js +25 -1
  20. package/dist/cjs/ui/confluence-search-modal/modal/index.js +41 -11
  21. package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +1 -0
  22. package/dist/cjs/ui/table-footer/index.js +8 -2
  23. package/dist/cjs/ui/table-footer/messages.js +5 -0
  24. package/dist/cjs/ui/table-footer/powered-by-jsm-assets/index.js +53 -0
  25. package/dist/es2019/services/mocks.js +151 -0
  26. package/dist/es2019/services/useBasicFilterAGG.js +8 -3
  27. package/dist/es2019/services/utils.js +8 -0
  28. package/dist/es2019/ui/common/modal/popup-select/formatOptionLabel.js +6 -3
  29. package/dist/es2019/ui/common/modal/popup-select/index.js +1 -1
  30. package/dist/es2019/ui/common/modal/popup-select/trigger.js +1 -2
  31. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/PopupComponent.js +7 -0
  32. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.js +68 -0
  33. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.js +43 -0
  34. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.js +66 -0
  35. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.js +26 -0
  36. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.js +82 -0
  37. package/dist/es2019/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.js +8 -0
  38. package/dist/es2019/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.js +25 -0
  39. package/dist/es2019/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.js +74 -0
  40. package/dist/es2019/ui/confluence-search-modal/basic-filters/index.js +17 -2
  41. package/dist/es2019/ui/confluence-search-modal/basic-filters/types.js +5 -0
  42. package/dist/es2019/ui/confluence-search-modal/confluence-search-container/index.js +20 -1
  43. package/dist/es2019/ui/confluence-search-modal/modal/index.js +27 -3
  44. package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +1 -0
  45. package/dist/es2019/ui/table-footer/index.js +7 -1
  46. package/dist/es2019/ui/table-footer/messages.js +5 -0
  47. package/dist/es2019/ui/table-footer/powered-by-jsm-assets/index.js +45 -0
  48. package/dist/esm/services/mocks.js +151 -0
  49. package/dist/esm/services/useBasicFilterAGG.js +10 -3
  50. package/dist/esm/services/utils.js +2 -1
  51. package/dist/esm/ui/common/modal/popup-select/formatOptionLabel.js +6 -3
  52. package/dist/esm/ui/common/modal/popup-select/index.js +2 -1
  53. package/dist/esm/ui/common/modal/popup-select/trigger.js +1 -2
  54. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/PopupComponent.js +9 -0
  55. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.js +79 -0
  56. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.js +43 -0
  57. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.js +68 -0
  58. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.js +25 -0
  59. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.js +100 -0
  60. package/dist/esm/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.js +8 -0
  61. package/dist/esm/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.js +41 -0
  62. package/dist/esm/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.js +113 -0
  63. package/dist/esm/ui/confluence-search-modal/basic-filters/index.js +14 -3
  64. package/dist/esm/ui/confluence-search-modal/basic-filters/types.js +5 -0
  65. package/dist/esm/ui/confluence-search-modal/confluence-search-container/index.js +25 -1
  66. package/dist/esm/ui/confluence-search-modal/modal/index.js +41 -11
  67. package/dist/esm/ui/datasource-table-view/datasourceTableView.js +1 -0
  68. package/dist/esm/ui/table-footer/index.js +8 -2
  69. package/dist/esm/ui/table-footer/messages.js +5 -0
  70. package/dist/esm/ui/table-footer/powered-by-jsm-assets/index.js +46 -0
  71. package/dist/types/analytics/generated/analytics.types.d.ts +7 -0
  72. package/dist/types/services/mocks.d.ts +51 -0
  73. package/dist/types/services/useBasicFilterAGG.d.ts +2 -0
  74. package/dist/types/services/utils.d.ts +1 -0
  75. package/dist/types/ui/common/modal/popup-select/index.d.ts +1 -1
  76. package/dist/types/ui/common/modal/popup-select/types.d.ts +6 -1
  77. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/PopupComponent.d.ts +3 -0
  78. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.d.ts +8 -0
  79. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.d.ts +42 -0
  80. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.d.ts +31 -0
  81. package/dist/types/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.d.ts +10 -0
  82. package/dist/types/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.d.ts +10 -0
  83. package/dist/types/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.d.ts +7 -0
  84. package/dist/types/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.d.ts +7 -0
  85. package/dist/types/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.d.ts +16 -0
  86. package/dist/types/ui/confluence-search-modal/basic-filters/index.d.ts +6 -1
  87. package/dist/types/ui/confluence-search-modal/basic-filters/types.d.ts +20 -0
  88. package/dist/types/ui/confluence-search-modal/confluence-search-container/index.d.ts +2 -1
  89. package/dist/types/ui/confluence-search-modal/types.d.ts +2 -1
  90. package/dist/types/ui/table-footer/index.d.ts +2 -1
  91. package/dist/types/ui/table-footer/messages.d.ts +5 -0
  92. package/dist/types/ui/table-footer/powered-by-jsm-assets/index.d.ts +4 -0
  93. package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +7 -0
  94. package/dist/types-ts4.5/services/mocks.d.ts +51 -0
  95. package/dist/types-ts4.5/services/useBasicFilterAGG.d.ts +2 -0
  96. package/dist/types-ts4.5/services/utils.d.ts +1 -0
  97. package/dist/types-ts4.5/ui/common/modal/popup-select/index.d.ts +1 -1
  98. package/dist/types-ts4.5/ui/common/modal/popup-select/types.d.ts +6 -1
  99. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/PopupComponent.d.ts +3 -0
  100. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/index.d.ts +8 -0
  101. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/messages.d.ts +42 -0
  102. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/styled.d.ts +31 -0
  103. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/date-range-picker/trigger.d.ts +10 -0
  104. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/index.d.ts +10 -0
  105. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/filters/edited-or-created-by/messages.d.ts +7 -0
  106. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/hooks/useCurrentUserInfo.d.ts +7 -0
  107. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/hooks/useRecommendation.d.ts +16 -0
  108. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/index.d.ts +6 -1
  109. package/dist/types-ts4.5/ui/confluence-search-modal/basic-filters/types.d.ts +20 -0
  110. package/dist/types-ts4.5/ui/confluence-search-modal/confluence-search-container/index.d.ts +2 -1
  111. package/dist/types-ts4.5/ui/confluence-search-modal/types.d.ts +2 -1
  112. package/dist/types-ts4.5/ui/table-footer/index.d.ts +2 -1
  113. package/dist/types-ts4.5/ui/table-footer/messages.d.ts +5 -0
  114. package/dist/types-ts4.5/ui/table-footer/powered-by-jsm-assets/index.d.ts +4 -0
  115. package/examples-helpers/buildAssetsIssuesTable.tsx +71 -0
  116. package/examples-helpers/useAssetsTableProps.tsx +57 -0
  117. package/package.json +8 -2
@@ -0,0 +1,113 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ import { useCallback, useRef, useState } from 'react';
5
+ import { useIntl } from 'react-intl-next';
6
+ import { getUserRecommendations } from '@atlaskit/smart-user-picker';
7
+ var useRecommendation = function useRecommendation() {
8
+ var intl = useIntl();
9
+ var _useState = useState([]),
10
+ _useState2 = _slicedToArray(_useState, 2),
11
+ filterOptions = _useState2[0],
12
+ setFilterOptions = _useState2[1];
13
+ var _useState3 = useState('empty'),
14
+ _useState4 = _slicedToArray(_useState3, 2),
15
+ status = _useState4[0],
16
+ setStatus = _useState4[1];
17
+ var _useState5 = useState([]),
18
+ _useState6 = _slicedToArray(_useState5, 2),
19
+ errors = _useState6[0],
20
+ setErrors = _useState6[1];
21
+ var initialData = useRef();
22
+ var convertRecommendationsToFilterOptions = function convertRecommendationsToFilterOptions(recommendations) {
23
+ return recommendations.map(function (item) {
24
+ return {
25
+ optionType: 'avatarLabel',
26
+ label: item.name,
27
+ value: item.id,
28
+ avatar: item.avatarUrl
29
+ };
30
+ });
31
+ };
32
+ var fetchFilterOptions = useCallback( /*#__PURE__*/function () {
33
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
34
+ var userId, cloudId, searchTerm, requestParams, initialResponseData, isRequestLikeInitialSearch, recommendations;
35
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
36
+ while (1) switch (_context.prev = _context.next) {
37
+ case 0:
38
+ userId = _ref.userId, cloudId = _ref.cloudId, searchTerm = _ref.searchTerm;
39
+ setStatus('loading');
40
+ requestParams = {
41
+ context: {
42
+ contextType: 'contributors',
43
+ principalId: userId || '',
44
+ productAttributes: {
45
+ isEntitledConfluenceExternalCollaborator: true
46
+ },
47
+ productKey: 'confluence',
48
+ siteId: cloudId
49
+ },
50
+ includeGroups: false,
51
+ includeTeams: false,
52
+ includeUsers: true,
53
+ maxNumberOfResults: 10,
54
+ performSearchQueryOnly: false,
55
+ query: searchTerm
56
+ };
57
+ initialResponseData = initialData.current;
58
+ isRequestLikeInitialSearch = !searchTerm;
59
+ _context.prev = 5;
60
+ if (!(isRequestLikeInitialSearch && initialResponseData)) {
61
+ _context.next = 10;
62
+ break;
63
+ }
64
+ _context.t0 = initialResponseData;
65
+ _context.next = 13;
66
+ break;
67
+ case 10:
68
+ _context.next = 12;
69
+ return getUserRecommendations(requestParams, intl);
70
+ case 12:
71
+ _context.t0 = _context.sent;
72
+ case 13:
73
+ recommendations = _context.t0;
74
+ setFilterOptions(convertRecommendationsToFilterOptions(recommendations));
75
+ setStatus('resolved');
76
+ if (!searchTerm) {
77
+ /**
78
+ * The initial dataset is used in couple of paths, eg: when a user searches and clears the search text.
79
+ * During these times, we dont want to fetch data again and again, hence a mini cache setup to store and provide the initial dataset
80
+ */
81
+ initialData.current = recommendations;
82
+ }
83
+ _context.next = 23;
84
+ break;
85
+ case 19:
86
+ _context.prev = 19;
87
+ _context.t1 = _context["catch"](5);
88
+ setStatus('rejected');
89
+ setErrors([_context.t1]);
90
+ case 23:
91
+ case "end":
92
+ return _context.stop();
93
+ }
94
+ }, _callee, null, [[5, 19]]);
95
+ }));
96
+ return function (_x) {
97
+ return _ref2.apply(this, arguments);
98
+ };
99
+ }(), [intl]);
100
+ var reset = useCallback(function () {
101
+ setStatus('empty');
102
+ setFilterOptions([]);
103
+ setErrors([]);
104
+ }, []);
105
+ return {
106
+ status: status,
107
+ errors: errors,
108
+ filterOptions: filterOptions,
109
+ reset: reset,
110
+ fetchFilterOptions: fetchFilterOptions
111
+ };
112
+ };
113
+ export default useRecommendation;
@@ -1,15 +1,26 @@
1
- import _objectDestructuringEmpty from "@babel/runtime/helpers/objectDestructuringEmpty";
2
1
  import React from 'react';
3
2
  import { Flex, xcss } from '@atlaskit/primitives';
3
+ import { DateRangePicker } from './filters/date-range-picker';
4
+ import EditedOrCreatedByFilter from './filters/edited-or-created-by';
4
5
  var basicFilterContainerStyles = xcss({
5
6
  paddingLeft: 'space.100'
6
7
  });
7
8
  var BasicFilterContainer = function BasicFilterContainer(_ref) {
8
- _objectDestructuringEmpty(_ref);
9
+ var cloudId = _ref.cloudId,
10
+ onChange = _ref.onChange,
11
+ _ref$selections = _ref.selections,
12
+ selections = _ref$selections === void 0 ? {} : _ref$selections;
13
+ var editedOrCreatedBy = selections.editedOrCreatedBy;
9
14
  return /*#__PURE__*/React.createElement(Flex, {
10
15
  xcss: basicFilterContainerStyles,
11
16
  gap: "space.100",
12
17
  testId: "clol-basic-filter-container"
13
- }, /*#__PURE__*/React.createElement(React.Fragment, null), /*#__PURE__*/React.createElement(React.Fragment, null));
18
+ }, /*#__PURE__*/React.createElement(EditedOrCreatedByFilter, {
19
+ cloudId: cloudId,
20
+ onSelectionChange: onChange,
21
+ selection: editedOrCreatedBy || []
22
+ }), /*#__PURE__*/React.createElement(DateRangePicker, {
23
+ onSelectionChange: onChange
24
+ }));
14
25
  };
15
26
  export default BasicFilterContainer;
@@ -0,0 +1,5 @@
1
+ export var CLOLBasicFilters = /*#__PURE__*/function (CLOLBasicFilters) {
2
+ CLOLBasicFilters["editedOrCreatedBy"] = "editedOrCreatedBy";
3
+ CLOLBasicFilters["lastModified"] = "lastModified";
4
+ return CLOLBasicFilters;
5
+ }({});
@@ -1,8 +1,13 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2
5
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
+ import { useDebouncedCallback } from 'use-debounce';
3
7
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
4
8
  import { Flex, xcss } from '@atlaskit/primitives';
5
9
  import { BasicSearchInput } from '../../common/modal/basic-search-input';
10
+ import { FILTER_SELECTION_DEBOUNCE_MS } from '../../common/modal/popup-select/constants';
6
11
  import BasicFilters from '../basic-filters';
7
12
  import { searchMessages } from './messages';
8
13
  var basicSearchInputContainerStyles = xcss({
@@ -18,16 +23,31 @@ var ConfluenceSearchContainer = function ConfluenceSearchContainer(_ref) {
18
23
  _useState2 = _slicedToArray(_useState, 2),
19
24
  searchBarSearchString = _useState2[0],
20
25
  setSearchBarSearchString = _useState2[1];
26
+ var _useState3 = useState({}),
27
+ _useState4 = _slicedToArray(_useState3, 2),
28
+ filterSelections = _useState4[0],
29
+ setFilterSelections = _useState4[1];
21
30
  var handleSearchChange = useCallback(function (e) {
22
31
  var rawSearch = e.currentTarget.value;
23
32
  setSearchBarSearchString(rawSearch);
24
33
  }, []);
34
+ var _useDebouncedCallback = useDebouncedCallback(function (filterValues) {
35
+ onSearch(searchBarSearchString, filterValues);
36
+ }, FILTER_SELECTION_DEBOUNCE_MS),
37
+ _useDebouncedCallback2 = _slicedToArray(_useDebouncedCallback, 1),
38
+ debouncedBasicFilterSelectionChange = _useDebouncedCallback2[0];
39
+ var handleBasicFilterSelectionChange = useCallback(function (filterType, options) {
40
+ var updatedSelection = _objectSpread(_objectSpread({}, filterSelections), {}, _defineProperty({}, filterType, options));
41
+ setFilterSelections(updatedSelection);
42
+ debouncedBasicFilterSelectionChange(updatedSelection);
43
+ }, [debouncedBasicFilterSelectionChange, filterSelections]);
25
44
 
26
45
  // TODO: further refactoring in EDM-9573
27
46
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6827913
28
47
  useEffect(function () {
29
48
  if (currentCloudId.current !== cloudId) {
30
49
  setSearchBarSearchString('');
50
+ setFilterSelections({});
31
51
  currentCloudId.current = cloudId;
32
52
  }
33
53
  }, [cloudId]);
@@ -48,6 +68,10 @@ var ConfluenceSearchContainer = function ConfluenceSearchContainer(_ref) {
48
68
  searchTerm: searchBarSearchString,
49
69
  placeholder: searchMessages.searchLabel,
50
70
  fullWidth: !showBasicFilters
51
- }), showBasicFilters && /*#__PURE__*/React.createElement(BasicFilters, null));
71
+ }), showBasicFilters && /*#__PURE__*/React.createElement(BasicFilters, {
72
+ cloudId: cloudId,
73
+ selections: filterSelections,
74
+ onChange: handleBasicFilterSelectionChange
75
+ }));
52
76
  };
53
77
  export default ConfluenceSearchContainer;
@@ -99,6 +99,14 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
99
99
  _useState10 = _slicedToArray(_useState9, 2),
100
100
  visibleColumnKeys = _useState10[0],
101
101
  setVisibleColumnKeys = _useState10[1];
102
+ var _useState11 = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModified),
103
+ _useState12 = _slicedToArray(_useState11, 2),
104
+ lastModified = _useState12[0],
105
+ setLastModified = _useState12[1];
106
+ var _useState13 = useState((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.contributorAccountIds) || []),
107
+ _useState14 = _slicedToArray(_useState13, 2),
108
+ contributorAccountIds = _useState14[0],
109
+ setContributorAccountIds = _useState14[1];
102
110
 
103
111
  // analytics related parameters
104
112
  var searchCount = useRef(0);
@@ -108,11 +116,15 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
108
116
  // TODO: further refactoring in EDM-9573
109
117
  // https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
110
118
  var parameters = useMemo(function () {
111
- return _objectSpread(_objectSpread({}, initialParameters), {}, {
119
+ return _objectSpread(_objectSpread(_objectSpread({}, initialParameters), {}, {
112
120
  cloudId: cloudId,
113
121
  searchString: searchString
122
+ }, ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.lastModified) || lastModified) && {
123
+ lastModified: lastModified
124
+ }), ((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.contributorAccountIds) || (contributorAccountIds === null || contributorAccountIds === void 0 ? void 0 : contributorAccountIds.length) > 0) && {
125
+ contributorAccountIds: contributorAccountIds
114
126
  });
115
- }, [cloudId, initialParameters, searchString /** Add more parameters when more filters are added */]);
127
+ }, [cloudId, lastModified, contributorAccountIds, initialParameters, searchString /** Add more parameters when more filters are added */]);
116
128
  var isParametersSet = useMemo(function () {
117
129
  return !!cloudId && Object.values(parameters !== null && parameters !== void 0 ? parameters : {}).filter(function (v) {
118
130
  return v !== undefined;
@@ -176,6 +188,8 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
176
188
  var onSiteSelection = useCallback(function (site) {
177
189
  userInteractionActions.current.add(DatasourceAction.INSTANCE_UPDATED);
178
190
  setSearchString(undefined);
191
+ setLastModified(undefined);
192
+ setContributorAccountIds([]);
179
193
  setCloudId(site.cloudId);
180
194
  reset({
181
195
  shouldForceRequest: true
@@ -218,17 +232,17 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
218
232
  setVisibleColumnKeys(newVisibleColumnKeys);
219
233
  }, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
220
234
  var siteSelectorLabel = availableSites && availableSites.length > 1 ? confluenceSearchModalMessages.insertIssuesTitleManySites : confluenceSearchModalMessages.insertIssuesTitle;
221
- var _useState11 = useState(initialColumnCustomSizes),
222
- _useState12 = _slicedToArray(_useState11, 2),
223
- columnCustomSizes = _useState12[0],
224
- setColumnCustomSizes = _useState12[1];
235
+ var _useState15 = useState(initialColumnCustomSizes),
236
+ _useState16 = _slicedToArray(_useState15, 2),
237
+ columnCustomSizes = _useState16[0],
238
+ setColumnCustomSizes = _useState16[1];
225
239
  var onColumnResize = useCallback(function (key, width) {
226
240
  setColumnCustomSizes(_objectSpread(_objectSpread({}, columnCustomSizes), {}, _defineProperty({}, key, width)));
227
241
  }, [columnCustomSizes]);
228
- var _useState13 = useState(initialWrappedColumnKeys),
229
- _useState14 = _slicedToArray(_useState13, 2),
230
- wrappedColumnKeys = _useState14[0],
231
- setWrappedColumnKeys = _useState14[1];
242
+ var _useState17 = useState(initialWrappedColumnKeys),
243
+ _useState18 = _slicedToArray(_useState17, 2),
244
+ wrappedColumnKeys = _useState18[0],
245
+ setWrappedColumnKeys = _useState18[1];
232
246
  var onWrappedColumnChange = useCallback(function (key, isWrapped) {
233
247
  var set = new Set(wrappedColumnKeys);
234
248
  if (isWrapped) {
@@ -407,9 +421,25 @@ export var PlainConfluenceSearchConfigModal = function PlainConfluenceSearchConf
407
421
  userInteractionActions.current.add(DatasourceAction.DISPLAY_VIEW_CHANGED);
408
422
  setCurrentViewMode(selectedMode);
409
423
  };
410
- var onSearch = useCallback(function (newSearchString) {
424
+ var onSearch = useCallback(function (newSearchString, filters) {
411
425
  searchCount.current++;
412
426
  userInteractionActions.current.add(DatasourceAction.QUERY_UPDATED);
427
+ if (filters) {
428
+ var editedOrCreatedBy = filters.editedOrCreatedBy,
429
+ _lastModified = filters.lastModified;
430
+ if (_lastModified) {
431
+ var lastModifiedValue = _lastModified.find(function (range) {
432
+ return range.value;
433
+ });
434
+ setLastModified(lastModifiedValue === null || lastModifiedValue === void 0 ? void 0 : lastModifiedValue.value);
435
+ }
436
+ if (editedOrCreatedBy) {
437
+ var accountIds = editedOrCreatedBy.map(function (user) {
438
+ return user.value;
439
+ });
440
+ setContributorAccountIds(accountIds);
441
+ }
442
+ }
413
443
  setSearchString(newSearchString);
414
444
  reset({
415
445
  shouldForceRequest: true
@@ -170,6 +170,7 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
170
170
  testId: "datasource-table-view-skeleton",
171
171
  isCompact: true
172
172
  }), jsx(TableFooter, {
173
+ datasourceId: datasourceId,
173
174
  itemCount: isDataReady ? totalCount : undefined,
174
175
  onRefresh: onRefresh,
175
176
  isLoading: !isDataReady || status === 'loading',
@@ -8,9 +8,12 @@ import { FormattedMessage, FormattedNumber, useIntl } from 'react-intl-next';
8
8
  import Button from '@atlaskit/button';
9
9
  import Heading from '@atlaskit/heading';
10
10
  import RefreshIcon from '@atlaskit/icon/glyph/refresh';
11
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
11
12
  import LinkUrl from '@atlaskit/smart-card/link-url';
12
13
  import { N0, N40, N800, N90 } from '@atlaskit/theme/colors';
14
+ import { ASSETS_LIST_OF_LINKS_DATASOURCE_ID } from '../assets-modal';
13
15
  import { footerMessages } from './messages';
16
+ import { PoweredByJSMAssets } from './powered-by-jsm-assets';
14
17
  import { SyncInfo } from './sync-info';
15
18
  var FooterWrapper = styled.div({
16
19
  padding: "var(--ds-space-0, 0px)".concat(" ", "var(--ds-space-200, 16px)"),
@@ -41,7 +44,8 @@ var SyncTextWrapper = styled.div({
41
44
  fontSize: '12px'
42
45
  });
43
46
  export var TableFooter = function TableFooter(_ref) {
44
- var itemCount = _ref.itemCount,
47
+ var datasourceId = _ref.datasourceId,
48
+ itemCount = _ref.itemCount,
45
49
  onRefresh = _ref.onRefresh,
46
50
  isLoading = _ref.isLoading,
47
51
  url = _ref.url;
@@ -80,7 +84,9 @@ export var TableFooter = function TableFooter(_ref) {
80
84
  values: {
81
85
  itemCount: itemCount
82
86
  }
83
- }))))), jsx(SyncWrapper, null, onRefresh && jsx(Fragment, null, jsx(SyncTextWrapper, {
87
+ }))))), getBooleanFF('platform.linking-platform.datasource-assets_objects_add_jsm_promotional_tag') && datasourceId === ASSETS_LIST_OF_LINKS_DATASOURCE_ID ? jsx(PoweredByJSMAssets, {
88
+ text: intl.formatMessage(footerMessages.powerByJSM)
89
+ }) : null, jsx(SyncWrapper, null, onRefresh && jsx(Fragment, null, jsx(SyncTextWrapper, {
84
90
  "data-testid": "sync-text"
85
91
  }, isLoading ? jsx(FormattedMessage, footerMessages.loadingText) : jsx(SyncInfo, {
86
92
  lastSyncTime: lastSyncTime
@@ -14,5 +14,10 @@ export var footerMessages = defineMessages({
14
14
  id: 'linkDataSource.table-footer.refresh',
15
15
  description: 'Label for refresh icon',
16
16
  defaultMessage: 'Refresh'
17
+ },
18
+ powerByJSM: {
19
+ id: 'linkDataSource.table-footer.power-by-jsm',
20
+ description: 'Displayed on the issue like table footer to increase JSM Assets visibility',
21
+ defaultMessage: 'Powered by Assets in Jira Service Management'
17
22
  }
18
23
  });
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import { JiraServiceManagementIcon } from '@atlaskit/logo';
3
+ import { Box, xcss } from '@atlaskit/primitives';
4
+ import { useDatasourceAnalyticsEvents } from '../../../analytics';
5
+ var jsmTextStyles = xcss({
6
+ fontSize: 'small',
7
+ color: 'color.text.subtle',
8
+ marginLeft: "var(--ds-space-075, 6px)",
9
+ ':hover': {
10
+ color: 'color.link.pressed'
11
+ }
12
+ });
13
+ var jsmContainerStyles = xcss({
14
+ display: 'flex',
15
+ flexDirection: 'row-reverse'
16
+ });
17
+ export var PoweredByJSMAssets = function PoweredByJSMAssets(props) {
18
+ var ASSETS_LINK = '/jira/servicedesk/assets';
19
+ var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
20
+ fireEvent = _useDatasourceAnalyti.fireEvent;
21
+ return /*#__PURE__*/React.createElement(Box, {
22
+ xcss: jsmContainerStyles,
23
+ padding: "space.150"
24
+ }, /*#__PURE__*/React.createElement("a", {
25
+ "data-testid": 'powered-by-jsm-assets-link',
26
+ onClick: function onClick() {
27
+ return fireEvent('ui.link.clicked.poweredBy', {
28
+ componentHierarchy: 'datasourceTable',
29
+ extensionKey: 'jsm-cmdb-gateway'
30
+ });
31
+ },
32
+ href: ASSETS_LINK,
33
+ rel: "noreferrer",
34
+ target: "_blank",
35
+ style: {
36
+ display: 'inline-flex',
37
+ alignItems: 'center'
38
+ }
39
+ }, /*#__PURE__*/React.createElement(JiraServiceManagementIcon, {
40
+ size: "xsmall",
41
+ appearance: "brand",
42
+ label: props.text
43
+ }), /*#__PURE__*/React.createElement(Box, {
44
+ xcss: jsmTextStyles
45
+ }, props.text)));
46
+ };
@@ -16,6 +16,10 @@ export type AnalyticsContextAttributesType = {
16
16
  dataProvider: 'jira-issues' | 'jsm-assets' | 'confluence-search';
17
17
  };
18
18
  export type DatasourceModalDialogViewedAttributesType = {};
19
+ export type LinkClickedPoweredByAttributesType = {
20
+ extensionKey: string;
21
+ componentHierarchy: string;
22
+ };
19
23
  export type ModalReadyDatasourceAttributesType = {
20
24
  instancesCount: number | null;
21
25
  schemasCount: number | null;
@@ -211,6 +215,9 @@ export type AnalyticsEventAttributes = {
211
215
  /**
212
216
  * Fired when the “show more” button inside the dropdown menu is clicked */
213
217
  'ui.button.clicked.basicSearchDropdown': ButtonClickedBasicSearchDropdownAttributesType;
218
+ /**
219
+ * Fired when the “show more” button inside the dropdown menu is clicked */
220
+ 'ui.link.clicked.poweredBy': LinkClickedPoweredByAttributesType;
214
221
  /**
215
222
  * Fired when search is initiated via the search icon or enter key press for aql editor input field. */
216
223
  'ui.aqlEditor.searched': AqlEditorSearchedAttributesType;
@@ -1,3 +1,54 @@
1
1
  import { FieldValuesResponse, HydrateResponse } from '../ui/jira-issues-modal/basic-filters/types';
2
2
  export declare const mockHydrateJqlResponse: HydrateResponse;
3
3
  export declare const mockFieldValuesResponse: FieldValuesResponse;
4
+ export declare const mockUserRecommendationsResponse: {
5
+ recommendedUsers: ({
6
+ entityType: string;
7
+ id: string;
8
+ name: string;
9
+ avatarUrl: string;
10
+ nickname: string;
11
+ matchPositions: {};
12
+ accessLevel: string;
13
+ accountStatus: string;
14
+ notMentionable: boolean;
15
+ userType: string;
16
+ attributes: {
17
+ isConfluenceExternalCollaborator: boolean;
18
+ };
19
+ email?: undefined;
20
+ locale?: undefined;
21
+ } | {
22
+ entityType: string;
23
+ id: string;
24
+ name: string;
25
+ email: string;
26
+ avatarUrl: string;
27
+ nickname: string;
28
+ matchPositions: {};
29
+ accessLevel: string;
30
+ accountStatus: string;
31
+ notMentionable: boolean;
32
+ locale: string;
33
+ userType: string;
34
+ attributes: {
35
+ isConfluenceExternalCollaborator: boolean;
36
+ };
37
+ } | {
38
+ entityType: string;
39
+ id: string;
40
+ name: string;
41
+ avatarUrl: string;
42
+ nickname: string;
43
+ matchPositions: {};
44
+ accessLevel: string;
45
+ accountStatus: string;
46
+ notMentionable: boolean;
47
+ locale: string;
48
+ userType: string;
49
+ attributes: {
50
+ isConfluenceExternalCollaborator: boolean;
51
+ };
52
+ email?: undefined;
53
+ })[];
54
+ };
@@ -1,3 +1,4 @@
1
+ import { UserInfoAGGResponse } from '../ui/confluence-search-modal/basic-filters/types';
1
2
  import { BasicFilterFieldType, FieldValuesResponse, HydrateResponse } from '../ui/jira-issues-modal/basic-filters/types';
2
3
  interface GetFieldValuesProps {
3
4
  cloudId: string;
@@ -9,5 +10,6 @@ interface GetFieldValuesProps {
9
10
  export declare const useBasicFilterAGG: () => {
10
11
  getHydratedJQL: (cloudId: string, jql: string) => Promise<HydrateResponse>;
11
12
  getFieldValues: ({ cloudId, jql, jqlTerm, searchString, pageCursor, }: GetFieldValuesProps) => Promise<FieldValuesResponse>;
13
+ getCurrentUserInfo: () => Promise<UserInfoAGGResponse>;
12
14
  };
13
15
  export {};
@@ -6,3 +6,4 @@
6
6
  */
7
7
  export declare const 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}";
8
8
  export declare const 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}";
9
+ export declare const userQuery = "query userQuery {\n me {\n user {\n id\n accountId\n }\n }\n}";
@@ -4,7 +4,7 @@ import { CustomMenuListProps } from './menu-list';
4
4
  import { SelectOption } from './types';
5
5
  export interface FilterPopupSelectProps {
6
6
  buttonLabel: string;
7
- totalCount: number;
7
+ totalCount?: number;
8
8
  filterName: string;
9
9
  isDisabled: boolean;
10
10
  showLoading: boolean;
@@ -18,5 +18,10 @@ export type AvatarLabelOption = OptionBase & {
18
18
  isSquare?: boolean;
19
19
  isGroup?: boolean;
20
20
  };
21
- export type SelectOption = IconLabelOption | LozengeLabelOption | AvatarLabelOption;
21
+ export type DateRangeType = 'anyTime' | 'today' | 'yesterday' | 'past7Days' | 'past30Days' | 'pastYear' | 'custom';
22
+ export type DateRangeOption = OptionBase & {
23
+ optionType: 'defaultOption';
24
+ value: DateRangeType;
25
+ };
26
+ export type SelectOption = IconLabelOption | LozengeLabelOption | AvatarLabelOption | DateRangeOption;
22
27
  export type FormatOptionLabel = (option: SelectOption) => ReactElement;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import type { PopupComponentProps } from '@atlaskit/popup';
3
+ export declare const PopupComponent: React.ForwardRefExoticComponent<Pick<PopupComponentProps, "style" | "children" | "id" | "tabIndex" | "data-testid" | "shouldRenderToParent" | "data-placement"> & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { SelectOption } from '../../../../common/modal/popup-select/types';
3
+ import { CLOLBasicFilters } from '../../types';
4
+ interface DateRangeProps {
5
+ onSelectionChange: (filterType: CLOLBasicFilters, options: SelectOption[]) => void;
6
+ }
7
+ export declare const DateRangePicker: ({ onSelectionChange }: DateRangeProps) => JSX.Element;
8
+ export {};
@@ -0,0 +1,42 @@
1
+ export declare const dateRangeMessages: {
2
+ dateRangeTitle: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ dateRangeAnyTime: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ dateRangeToday: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ dateRangeYesterday: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ dateRangeLastWeek: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ dateRangeLastMonth: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ dateRangeLastYear: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ dateRangeCustom: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ };
@@ -0,0 +1,31 @@
1
+ /// <reference types="react" />
2
+ export declare const PopupComponentContainer: import("@emotion/styled").StyledComponent<{
3
+ theme?: import("@emotion/react").Theme | undefined;
4
+ as?: import("react").ElementType<any> | undefined;
5
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
6
+ export declare const CustomDropdown: import("@emotion/styled").StyledComponent<{
7
+ theme?: import("@emotion/react").Theme | undefined;
8
+ as?: import("react").ElementType<any> | undefined;
9
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
10
+ export declare const CustomDropdownItem: import("@emotion/styled").StyledComponent<{
11
+ theme?: import("@emotion/react").Theme | undefined;
12
+ as?: import("react").ElementType<any> | undefined;
13
+ } & {
14
+ isSelected: boolean;
15
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
16
+ export declare const CustomDateWrapper: import("@emotion/styled").StyledComponent<{
17
+ theme?: import("@emotion/react").Theme | undefined;
18
+ as?: import("react").ElementType<any> | undefined;
19
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
20
+ export declare const DatePickersWrapper: import("@emotion/styled").StyledComponent<{
21
+ theme?: import("@emotion/react").Theme | undefined;
22
+ as?: import("react").ElementType<any> | undefined;
23
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
24
+ export declare const SelectDateRangeButton: import("@emotion/styled").StyledComponent<{
25
+ theme?: import("@emotion/react").Theme | undefined;
26
+ as?: import("react").ElementType<any> | undefined;
27
+ }, import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
28
+ export declare const DateRangeErrorMessage: import("@emotion/styled").StyledComponent<{
29
+ theme?: import("@emotion/react").Theme | undefined;
30
+ as?: import("react").ElementType<any> | undefined;
31
+ }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import type { TriggerProps } from '@atlaskit/popup/types';
3
+ export interface PopupTriggerProps {
4
+ triggerProps: TriggerProps;
5
+ optionSelected: boolean;
6
+ label?: string;
7
+ selectedLabel?: string;
8
+ onClickButton: () => void;
9
+ }
10
+ export declare const PopupTrigger: ({ triggerProps, optionSelected, label, selectedLabel, onClickButton, }: PopupTriggerProps) => JSX.Element;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { SelectOption } from '../../../../common/modal/popup-select/types';
3
+ import { CLOLBasicFilters } from '../../types';
4
+ interface EditedOrCreatedByFilterProps {
5
+ cloudId?: string;
6
+ selection: SelectOption[];
7
+ onSelectionChange: (filterType: CLOLBasicFilters, selection: SelectOption[]) => void;
8
+ }
9
+ declare const EditedOrCreatedByFilter: ({ cloudId, onSelectionChange, selection, }: EditedOrCreatedByFilterProps) => JSX.Element;
10
+ export default EditedOrCreatedByFilter;
@@ -0,0 +1,7 @@
1
+ export declare const editedOrCreatedByMessage: {
2
+ buttonLabel: {
3
+ id: string;
4
+ description: string;
5
+ defaultMessage: string;
6
+ };
7
+ };