@atlaskit/link-datasource 1.19.7 → 1.19.9

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 +12 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/ui/assets-modal/modal/index.js +6 -1
  4. package/dist/cjs/ui/issue-like-table/empty-state/index.js +6 -4
  5. package/dist/cjs/ui/issue-like-table/index.js +137 -62
  6. package/dist/cjs/ui/issue-like-table/styled.js +3 -1
  7. package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/messages.js +14 -0
  8. package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +34 -10
  9. package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +24 -9
  10. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +3 -2
  11. package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/menu-list/messages.js +3 -2
  12. package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +11 -3
  13. package/dist/cjs/ui/jira-issues-modal/modal/index.js +5 -1
  14. package/dist/cjs/ui/table-footer/index.js +2 -2
  15. package/dist/es2019/analytics/constants.js +1 -1
  16. package/dist/es2019/ui/assets-modal/modal/index.js +6 -1
  17. package/dist/es2019/ui/issue-like-table/empty-state/index.js +6 -4
  18. package/dist/es2019/ui/issue-like-table/index.js +123 -11
  19. package/dist/es2019/ui/issue-like-table/styled.js +7 -5
  20. package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/messages.js +8 -0
  21. package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +25 -4
  22. package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +21 -3
  23. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +3 -2
  24. package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/menu-list/messages.js +3 -2
  25. package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +11 -1
  26. package/dist/es2019/ui/jira-issues-modal/modal/index.js +6 -2
  27. package/dist/es2019/ui/table-footer/index.js +3 -1
  28. package/dist/esm/analytics/constants.js +1 -1
  29. package/dist/esm/ui/assets-modal/modal/index.js +6 -1
  30. package/dist/esm/ui/issue-like-table/empty-state/index.js +6 -4
  31. package/dist/esm/ui/issue-like-table/index.js +136 -61
  32. package/dist/esm/ui/issue-like-table/styled.js +3 -1
  33. package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/messages.js +8 -0
  34. package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +33 -9
  35. package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +24 -9
  36. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/messages.js +3 -2
  37. package/dist/esm/ui/jira-issues-modal/basic-filters/ui/menu-list/messages.js +3 -2
  38. package/dist/esm/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +11 -3
  39. package/dist/esm/ui/jira-issues-modal/modal/index.js +6 -2
  40. package/dist/esm/ui/table-footer/index.js +2 -2
  41. package/dist/types/ui/issue-like-table/index.d.ts +6 -0
  42. package/dist/types/ui/jira-issues-modal/basic-filters/hooks/messages.d.ts +7 -0
  43. package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +3 -1
  44. package/dist/types-ts4.5/ui/issue-like-table/index.d.ts +6 -0
  45. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/messages.d.ts +7 -0
  46. package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +3 -1
  47. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.19.9
4
+
5
+ ### Patch Changes
6
+
7
+ - [#56564](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/56564) [`b26cc1ff959d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b26cc1ff959d) - Add `Unassigned` option for Assignee filter dropdown.
8
+
9
+ ## 1.19.8
10
+
11
+ ### Patch Changes
12
+
13
+ - [#55010](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/55010) [`2b36c74cc7ac`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2b36c74cc7ac) - Adds inner box shadow to datasource table scroll container
14
+
3
15
  ## 1.19.7
4
16
 
5
17
  ### Patch Changes
@@ -7,5 +7,5 @@ exports.packageMetaData = exports.EVENT_CHANNEL = void 0;
7
7
  var EVENT_CHANNEL = exports.EVENT_CHANNEL = 'media';
8
8
  var packageMetaData = exports.packageMetaData = {
9
9
  packageName: "@atlaskit/link-datasource",
10
- packageVersion: "1.19.7"
10
+ packageVersion: "1.19.9"
11
11
  };
@@ -32,6 +32,7 @@ var _en = _interopRequireDefault(require("../../../i18n/en"));
32
32
  var _cmdbService = require("../../../services/cmdbService.utils");
33
33
  var _accessRequired = require("../../../ui/common/error-state/access-required");
34
34
  var _modalLoadingError = require("../../common/error-state/modal-loading-error");
35
+ var _issueLikeTable = require("../../issue-like-table");
35
36
  var _searchContainer = require("../search-container");
36
37
  var _loadingState = require("../search-container/loading-state");
37
38
  var _messages = require("./messages");
@@ -43,7 +44,11 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
43
44
  var modalBodyWrapperStyles = (0, _react2.css)({
44
45
  display: 'grid',
45
46
  height: '420px',
46
- overflow: 'auto'
47
+ overflow: 'auto',
48
+ background: _issueLikeTable.scrollableContainerShadowsCssComponents.background,
49
+ backgroundRepeat: _issueLikeTable.scrollableContainerShadowsCssComponents.backgroundRepeat,
50
+ backgroundSize: _issueLikeTable.scrollableContainerShadowsCssComponents.backgroundSize,
51
+ backgroundAttachment: _issueLikeTable.scrollableContainerShadowsCssComponents.backgroundAttachment
47
52
  });
48
53
  var modalBodyErrorWrapperStyles = (0, _react2.css)({
49
54
  alignItems: 'center'
@@ -23,16 +23,17 @@ var SkeletonComponent = function SkeletonComponent(_ref) {
23
23
  var tableBodyStyles = (0, _react.css)({
24
24
  borderBottom: 0
25
25
  });
26
+ var padding = "var(--ds-space-100, 8px)".concat(" ", "var(--ds-space-100, 8px)");
26
27
  var cellStyles = (0, _react.css)({
27
- paddingBlock: "var(--ds-space-100, 12px)",
28
+ padding: padding,
28
29
  borderRight: "0.5px solid ".concat("var(--ds-border, ".concat(_colors.N40, ")")),
29
30
  borderBottom: "0.5px solid ".concat("var(--ds-border, ".concat(_colors.N40, ")")),
30
31
  '&:first-child': {
31
- paddingLeft: "var(--ds-space-100, 4px)"
32
+ paddingLeft: "var(--ds-space-100, 8px)"
32
33
  },
33
34
  '&:last-child': {
34
35
  borderRight: 0,
35
- paddingRight: "var(--ds-space-100, 4px)"
36
+ paddingRight: "var(--ds-space-100, 8px)"
36
37
  }
37
38
  });
38
39
  var baseColumns = [{
@@ -122,7 +123,8 @@ var _default = exports.default = function _default(_ref4) {
122
123
  return (0, _react.jsx)(_styled.TableHeading, {
123
124
  key: key,
124
125
  style: {
125
- width: width
126
+ width: width,
127
+ padding: padding
126
128
  }
127
129
  }, (0, _react.jsx)(_linkingCommon.Skeleton, {
128
130
  appearance: "darkGray",
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getOrderedColumns = exports.IssueLikeDataTableView = exports.EmptyState = exports.COLUMN_MIN_WIDTH = void 0;
7
+ exports.scrollableContainerShadowsCssComponents = exports.getOrderedColumns = exports.IssueLikeDataTableView = exports.EmptyState = exports.COLUMN_MIN_WIDTH = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -39,12 +39,12 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
39
39
  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) { (0, _defineProperty2.default)(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; }
40
40
  var tableSidePadding = "var(--ds-space-200, 16px)";
41
41
  var tableHeadStyles = (0, _react2.css)({
42
- background: "var(--ds-surface, #FFF)",
42
+ background: "var(--ds-elevation-surface-current, #FFF)",
43
43
  position: 'sticky',
44
44
  top: 0,
45
45
  zIndex: _zindex.stickyTableHeadersIndex
46
46
  });
47
- var ColumnPickerHeader = _styled.default.th(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 56px;\n z-index: 10;\n position: sticky;\n right: calc(-1 * ", ");\n background-color: ", ";\n border-bottom: 2px solid ", "; /* It is required to have solid (not half-transparent) color because of this gradient business below */\n\n padding-right: ", ";\n\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n ", " 10%\n );\n vertical-align: middle; /* Keeps dropdown button in the middle */\n &:last-of-type {\n padding-right: ", ";\n }\n text-align: right; /* In case when TH itself is bigger we want to keep picker at the right side */\n"])), tableSidePadding, "var(--ds-surface, #FFF)", "var(--ds-border, ".concat(_colors.N40, ")"), "var(--ds-space-100, 4px)", "var(--ds-surface, #FFF)", tableSidePadding);
47
+ var ColumnPickerHeader = _styled.default.th(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 56px;\n z-index: 10;\n position: sticky;\n right: calc(-1 * ", ");\n background-color: ", ";\n border-bottom: 2px solid ", "; /* It is required to have solid (not half-transparent) color because of this gradient business below */\n\n padding-right: ", ";\n\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n ", " 10%\n );\n vertical-align: middle; /* Keeps dropdown button in the middle */\n &:last-of-type {\n padding-right: ", ";\n }\n text-align: right; /* In case when TH itself is bigger we want to keep picker at the right side */\n"])), tableSidePadding, "var(--ds-elevation-surface-current, #FFF)", "var(--ds-border, ".concat(_colors.N40, ")"), "var(--ds-space-100, 4px)", "var(--ds-elevation-surface-current, #FFF)", tableSidePadding);
48
48
  var truncatedCellStyles = (0, _react2.css)({
49
49
  overflow: 'hidden',
50
50
  textOverflow: 'ellipsis',
@@ -52,19 +52,94 @@ var truncatedCellStyles = (0, _react2.css)({
52
52
  borderRight: "0.5px solid ".concat("var(--ds-border, ".concat(_colors.N40, ")")),
53
53
  borderBottom: "0.5px solid ".concat("var(--ds-border, ".concat(_colors.N40, ")")),
54
54
  '&:first-child': {
55
- paddingLeft: "var(--ds-space-100, 4px)"
55
+ paddingLeft: "var(--ds-space-100, 8px)"
56
56
  },
57
57
  '&:last-child': {
58
58
  borderRight: 0,
59
- paddingRight: "var(--ds-space-100, 4px)"
59
+ paddingRight: "var(--ds-space-100, 8px)"
60
60
  }
61
61
  });
62
62
  var tableContainerStyles = (0, _react2.css)({
63
- borderRadius: 'inherit'
63
+ borderRadius: 'inherit',
64
+ borderBottomLeftRadius: 0,
65
+ borderBottomRightRadius: 0
64
66
  });
67
+
68
+ /**
69
+ * Following section deals with slight gradient shadows that we add
70
+ * on all four sides when there is more content in that direction.
71
+ *
72
+ * We do that by applying two gradients to the background -
73
+ * one is "static" ('local') and other is "sticky" ('scroll'). \
74
+ * "Static" one makes a white color gradient, that when window is at the end of scrollable area goes on top
75
+ * of "sticky" (gray) one, dominating and hence disabling sticky one.
76
+ */
77
+
78
+ var shadowColor = "var(--ds-shadow-overflow-perimeter, rgba(0, 0, 0, 0.1))";
79
+ var shadowColorLight = "var(--ds-shadow-overflow-perimeter, rgba(0, 0, 0, 0.05))";
80
+ var leftWhiteOverrideGradient = {
81
+ background: "\n linear-gradient(\n 90deg,\n ".concat("var(--ds-elevation-surface-current, #FFF)", " 30%,\n rgba(255, 255, 255, 0)\n ) left center"),
82
+ size: "40px 100%",
83
+ attachment: "local"
84
+ };
85
+ var topWhiteOverrideGradient = {
86
+ background: "\n linear-gradient(\n 0deg,\n rgba(255, 255, 255, 0),\n ".concat("var(--ds-elevation-surface-current, #FFF)", " 30%\n ) top center"),
87
+ size: "100% 100px",
88
+ attachment: "local"
89
+ };
90
+ var rightWhiteOverrideGradient = {
91
+ background: "\n linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0),\n ".concat("var(--ds-elevation-surface-current, #FFF)", " 70%\n ) right center"),
92
+ size: "40px 100%",
93
+ attachment: "local"
94
+ };
95
+ var bottomWhiteOverride = {
96
+ background: "\n linear-gradient(\n 0deg,\n ".concat("var(--ds-elevation-surface-current, #FFF)", " 30%,\n rgba(255, 255, 255, 0)\n ) bottom center"),
97
+ size: "100% 40px",
98
+ attachment: "local"
99
+ };
100
+ var leftShadowGradient = {
101
+ background: "\n linear-gradient(\n 90deg,\n ".concat(shadowColor, ",\n rgba(0, 0, 0, 0)\n ) left center"),
102
+ size: "14px 100%",
103
+ attachment: "scroll"
104
+ };
105
+ var topShadowGradient = {
106
+ background: "\n linear-gradient(\n 0deg,\n rgba(0, 0, 0, 0),\n ".concat(shadowColorLight, "\n ) 0 52px"),
107
+ size: "100% 14px",
108
+ attachment: "scroll"
109
+ };
110
+ var rightShadowGradient = {
111
+ background: "\n linear-gradient(\n 90deg,\n rgba(0, 0, 0, 0),\n ".concat(shadowColor, "\n ) right center"),
112
+ size: "14px 100%",
113
+ attachment: "scroll"
114
+ };
115
+ var bottomShadowGradient = {
116
+ background: "\n linear-gradient(\n 0deg,\n ".concat(shadowColorLight, ",\n rgba(0, 0, 0, 0)\n ) bottom center"),
117
+ size: "100% 10px",
118
+ attachment: "scroll"
119
+ };
120
+ var shadows = [leftWhiteOverrideGradient, leftShadowGradient, rightWhiteOverrideGradient, rightShadowGradient, topWhiteOverrideGradient, topShadowGradient, bottomWhiteOverride, bottomShadowGradient];
121
+ var scrollableContainerShadowsCssComponents = exports.scrollableContainerShadowsCssComponents = {
122
+ background: shadows.map(function (_ref) {
123
+ var background = _ref.background;
124
+ return background;
125
+ }).join(','),
126
+ backgroundRepeat: 'no-repeat',
127
+ backgroundSize: shadows.map(function (_ref2) {
128
+ var size = _ref2.size;
129
+ return size;
130
+ }).join(','),
131
+ backgroundAttachment: shadows.map(function (_ref3) {
132
+ var attachment = _ref3.attachment;
133
+ return attachment;
134
+ }).join(',')
135
+ };
65
136
  var scrollableContainerStyles = (0, _react2.css)({
66
137
  overflow: 'auto',
67
- boxSizing: 'border-box'
138
+ boxSizing: 'border-box',
139
+ background: scrollableContainerShadowsCssComponents.background,
140
+ backgroundRepeat: scrollableContainerShadowsCssComponents.backgroundRepeat,
141
+ backgroundSize: scrollableContainerShadowsCssComponents.backgroundSize,
142
+ backgroundAttachment: scrollableContainerShadowsCssComponents.backgroundAttachment
68
143
  });
69
144
  var tableStyles = (0, _react2.css)({
70
145
  // These styles are needed to prevent thead bottom border from scrolling away.
@@ -100,11 +175,11 @@ var BASE_WIDTH = 8;
100
175
  var DEFAULT_WIDTH = BASE_WIDTH * 22;
101
176
  var COLUMN_MIN_WIDTH = exports.COLUMN_MIN_WIDTH = BASE_WIDTH * 3;
102
177
  var keyBasedWidthMap = {
103
- priority: BASE_WIDTH * 4,
178
+ priority: BASE_WIDTH * 5,
104
179
  status: BASE_WIDTH * 18,
105
180
  summary: BASE_WIDTH * 45,
106
181
  description: BASE_WIDTH * 31.25,
107
- type: BASE_WIDTH * 4,
182
+ type: BASE_WIDTH * 5,
108
183
  key: BASE_WIDTH * 13
109
184
  };
110
185
  function getDefaultColumnWidth(key, type) {
@@ -116,28 +191,28 @@ function getDefaultColumnWidth(key, type) {
116
191
  case 'date':
117
192
  return BASE_WIDTH * 14;
118
193
  case 'icon':
119
- return BASE_WIDTH * 4;
194
+ return BASE_WIDTH * 5;
120
195
  default:
121
196
  return DEFAULT_WIDTH;
122
197
  }
123
198
  }
124
- var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLikeDataTableView(_ref) {
125
- var testId = _ref.testId,
126
- onNextPage = _ref.onNextPage,
127
- onLoadDatasourceDetails = _ref.onLoadDatasourceDetails,
128
- items = _ref.items,
129
- columns = _ref.columns,
130
- _ref$renderItem = _ref.renderItem,
131
- renderItem = _ref$renderItem === void 0 ? _renderType.fallbackRenderType : _ref$renderItem,
132
- visibleColumnKeys = _ref.visibleColumnKeys,
133
- onVisibleColumnKeysChange = _ref.onVisibleColumnKeysChange,
134
- columnCustomSizes = _ref.columnCustomSizes,
135
- onColumnResize = _ref.onColumnResize,
136
- status = _ref.status,
137
- hasNextPage = _ref.hasNextPage,
138
- scrollableContainerHeight = _ref.scrollableContainerHeight,
139
- parentContainerRenderInstanceId = _ref.parentContainerRenderInstanceId,
140
- extensionKey = _ref.extensionKey;
199
+ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLikeDataTableView(_ref4) {
200
+ var testId = _ref4.testId,
201
+ onNextPage = _ref4.onNextPage,
202
+ onLoadDatasourceDetails = _ref4.onLoadDatasourceDetails,
203
+ items = _ref4.items,
204
+ columns = _ref4.columns,
205
+ _ref4$renderItem = _ref4.renderItem,
206
+ renderItem = _ref4$renderItem === void 0 ? _renderType.fallbackRenderType : _ref4$renderItem,
207
+ visibleColumnKeys = _ref4.visibleColumnKeys,
208
+ onVisibleColumnKeysChange = _ref4.onVisibleColumnKeysChange,
209
+ columnCustomSizes = _ref4.columnCustomSizes,
210
+ onColumnResize = _ref4.onColumnResize,
211
+ status = _ref4.status,
212
+ hasNextPage = _ref4.hasNextPage,
213
+ scrollableContainerHeight = _ref4.scrollableContainerHeight,
214
+ parentContainerRenderInstanceId = _ref4.parentContainerRenderInstanceId,
215
+ extensionKey = _ref4.extensionKey;
141
216
  var tableId = (0, _react.useMemo)(function () {
142
217
  return Symbol('unique-id');
143
218
  }, []);
@@ -172,8 +247,8 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
172
247
  }, [parentContainerRenderInstanceId, status]);
173
248
  var visibleSortedColumns = (0, _react.useMemo)(function () {
174
249
  return visibleColumnKeys.map(function (visibleKey) {
175
- return orderedColumns.find(function (_ref2) {
176
- var key = _ref2.key;
250
+ return orderedColumns.find(function (_ref5) {
251
+ var key = _ref5.key;
177
252
  return visibleKey === key;
178
253
  });
179
254
  }).filter(Boolean);
@@ -188,10 +263,10 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
188
263
  return (columnCustomSizes === null || columnCustomSizes === void 0 ? void 0 : columnCustomSizes[key]) || getDefaultColumnWidth(key, type);
189
264
  }, [columnCustomSizes]);
190
265
  var headerColumns = (0, _react.useMemo)(function () {
191
- return visibleSortedColumns.map(function (_ref3) {
192
- var key = _ref3.key,
193
- title = _ref3.title,
194
- type = _ref3.type;
266
+ return visibleSortedColumns.map(function (_ref6) {
267
+ var key = _ref6.key,
268
+ title = _ref6.title,
269
+ type = _ref6.type;
195
270
  return {
196
271
  key: key,
197
272
  content: title,
@@ -233,9 +308,9 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
233
308
  return;
234
309
  }
235
310
  return (0, _combine.combine)((0, _element.monitorForElements)({
236
- onDragStart: function onDragStart(_ref4) {
237
- var location = _ref4.location,
238
- source = _ref4.source;
311
+ onDragStart: function onDragStart(_ref7) {
312
+ var location = _ref7.location,
313
+ source = _ref7.source;
239
314
  initialAutoScrollerClientY.current = location.current.input.clientY;
240
315
  if (source.data.type === 'table-header') {
241
316
  var _containerRef$current;
@@ -251,9 +326,9 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
251
326
  });
252
327
  }
253
328
  },
254
- onDrag: function onDrag(_ref5) {
255
- var location = _ref5.location,
256
- source = _ref5.source;
329
+ onDrag: function onDrag(_ref8) {
330
+ var location = _ref8.location,
331
+ source = _ref8.source;
257
332
  if (source.data.type === 'table-header') {
258
333
  var _containerRef$current2;
259
334
  _pragmaticDragAndDropReactBeautifulDndAutoscroll.autoScroller.updateInput({
@@ -263,9 +338,9 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
263
338
  });
264
339
  }
265
340
  },
266
- onDrop: function onDrop(_ref6) {
267
- var source = _ref6.source,
268
- location = _ref6.location;
341
+ onDrop: function onDrop(_ref9) {
342
+ var source = _ref9.source,
343
+ location = _ref9.location;
269
344
  _pragmaticDragAndDropReactBeautifulDndAutoscroll.autoScroller.stop();
270
345
  if (location.current.dropTargets.length === 0) {
271
346
  return;
@@ -300,10 +375,10 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
300
375
  return items.map(function (newRowData, rowIndex) {
301
376
  return {
302
377
  key: "".concat(identityColumnKey && newRowData[identityColumnKey] && newRowData[identityColumnKey].data || rowIndex),
303
- cells: visibleSortedColumns.map(function (_ref7) {
378
+ cells: visibleSortedColumns.map(function (_ref10) {
304
379
  var _newRowData$key;
305
- var key = _ref7.key,
306
- type = _ref7.type;
380
+ var key = _ref10.key,
381
+ type = _ref10.type;
307
382
  var value = ((_newRowData$key = newRowData[key]) === null || _newRowData$key === void 0 ? void 0 : _newRowData$key.data) || newRowData[key];
308
383
  var values = Array.isArray(value) ? value : [value];
309
384
  var content = values.map(function (value) {
@@ -404,10 +479,10 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
404
479
  css: [noDefaultBorderStyles, tableHeadStyles]
405
480
  }, (0, _react2.jsx)("tr", {
406
481
  ref: tableHeaderRowRef
407
- }, headerColumns.map(function (_ref9, cellIndex) {
408
- var key = _ref9.key,
409
- content = _ref9.content,
410
- width = _ref9.width;
482
+ }, headerColumns.map(function (_ref12, cellIndex) {
483
+ var key = _ref12.key,
484
+ content = _ref12.content,
485
+ width = _ref12.width;
411
486
  var heading = (0, _react2.jsx)(_tooltip.default, {
412
487
  content: content,
413
488
  tag: "span",
@@ -418,10 +493,10 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
418
493
  }, content));
419
494
  if (onVisibleColumnKeysChange && hasData) {
420
495
  var _containerRef$current3;
421
- var previewRows = tableRows.map(function (_ref10) {
422
- var cells = _ref10.cells;
423
- var cell = cells.find(function (_ref11) {
424
- var cellKey = _ref11.key;
496
+ var previewRows = tableRows.map(function (_ref13) {
497
+ var cells = _ref13.cells;
498
+ var cell = cells.find(function (_ref14) {
499
+ var cellKey = _ref14.key;
425
500
  return cellKey === key;
426
501
  });
427
502
  if (cell) {
@@ -463,18 +538,18 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
463
538
  })))), (0, _react2.jsx)("tbody", {
464
539
  css: noDefaultBorderStyles,
465
540
  "data-testid": testId && "".concat(testId, "--body")
466
- }, rows.map(function (_ref12) {
467
- var key = _ref12.key,
468
- cells = _ref12.cells,
469
- ref = _ref12.ref;
541
+ }, rows.map(function (_ref15) {
542
+ var key = _ref15.key,
543
+ cells = _ref15.cells,
544
+ ref = _ref15.ref;
470
545
  return (0, _react2.jsx)("tr", {
471
546
  key: key,
472
547
  "data-testid": testId && "".concat(testId, "--row-").concat(key),
473
548
  ref: ref
474
- }, cells.map(function (_ref13, cellIndex) {
475
- var cellKey = _ref13.key,
476
- content = _ref13.content,
477
- width = _ref13.width;
549
+ }, cells.map(function (_ref16, cellIndex) {
550
+ var cellKey = _ref16.key,
551
+ content = _ref16.content,
552
+ width = _ref16.width;
478
553
  var loadingRowStyle = shouldUseWidth ? {
479
554
  width: width
480
555
  } : {
@@ -483,7 +558,7 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
483
558
  // extra padding is required around skeleton loader to avoid vertical jumps when data loads
484
559
  if (key !== null && key !== void 0 && key.includes('loading')) {
485
560
  loadingRowStyle = _objectSpread(_objectSpread({}, loadingRowStyle), {}, {
486
- paddingBlock: "var(--ds-space-100, 12px)"
561
+ paddingBlock: "var(--ds-space-100, 8px)"
487
562
  });
488
563
  }
489
564
  return (0, _react2.jsx)("td", {
@@ -12,4 +12,6 @@ var _templateObject, _templateObject2;
12
12
  var ScrollableContainerHeight = exports.ScrollableContainerHeight = 590;
13
13
  var FieldTextFontSize = exports.FieldTextFontSize = '14px';
14
14
  var Table = exports.Table = _styled.default.table(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n"])));
15
- var TableHeading = exports.TableHeading = _styled.default.th(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n position: relative;\n line-height: ", ";\n border-right: 0.5px solid ", ";\n border-bottom: 2px solid ", ";\n height: calc(52px - ", " * 2 - 2px);\n vertical-align: bottom;\n\n &.has-column-picker:nth-last-of-type(2) {\n border-right: 0;\n }\n\n &:first-child {\n padding-left: ", ";\n }\n\n &:last-child {\n border-right: 0;\n }\n\n & [data-testid='datasource-header-content--container'] {\n width: 100%;\n padding: ", " ", ";\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n overflow: hidden;\n max-height: 2.5rem;\n word-wrap: break-word;\n\n &:hover {\n background: ", ";\n border-radius: 3px;\n }\n }\n"])), "var(--ds-font-lineHeight-300, 16px)", "var(--ds-border, ".concat(_colors.N40, ")"), "var(--ds-border, ".concat(_colors.N40, ")"), "var(--ds-space-050, 4px)", "var(--ds-space-100, 4px)", "var(--ds-space-100, 4px)", "var(--ds-space-050, 2px)", "var(--ds-background-input-hovered, #F7F8F9)");
15
+ var lineHeight = "var(--ds-font-lineHeight-300, 24px)";
16
+ var verticalPadding = "var(--ds-space-025, 2px)";
17
+ var TableHeading = exports.TableHeading = _styled.default.th(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n position: relative;\n line-height: ", ";\n padding: ", " ", ";\n border-right: 0.5px solid ", ";\n border-bottom: 2px solid ", ";\n height: calc(", " * 2 + ", " * 2);\n vertical-align: bottom;\n\n &.has-column-picker:nth-last-of-type(2) {\n border-right: 0;\n }\n\n &:first-child {\n padding-left: ", ";\n }\n\n &:last-child {\n border-right: 0;\n }\n\n & [data-testid='datasource-header-content--container'] {\n width: 100%;\n padding: ", " ", ";\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n overflow: hidden;\n word-wrap: break-word;\n\n &:hover {\n background: ", ";\n border-radius: 3px;\n }\n }\n"])), lineHeight, verticalPadding, "var(--ds-space-050, 4px)", "var(--ds-border, ".concat(_colors.N40, ")"), "var(--ds-border, ".concat(_colors.N40, ")"), lineHeight, verticalPadding, "var(--ds-space-050, 4px)", verticalPadding, "var(--ds-space-050, 4px)", "var(--ds-background-input-hovered, #F7F8F9)");
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.filterOptionMessages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var filterOptionMessages = exports.filterOptionMessages = (0, _reactIntlNext.defineMessages)({
9
+ assigneeUnassignedFilterOption: {
10
+ id: 'linkDataSource.basic-filter.dropdown.select.assignee.unassigned',
11
+ description: 'Text to display for Unassigned assignee filter option.',
12
+ defaultMessage: 'Unassigned'
13
+ }
14
+ });
@@ -4,17 +4,28 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.useFilterOptions = void 0;
7
+ exports.useFilterOptions = exports.getAssigneeUnassignedFilterOption = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _react = require("react");
13
+ var _reactIntlNext = require("react-intl-next");
13
14
  var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
14
15
  var _transformers = require("../utils/transformers");
16
+ var _messages = require("./messages");
17
+ var getAssigneeUnassignedFilterOption = exports.getAssigneeUnassignedFilterOption = function getAssigneeUnassignedFilterOption(formatMessage) {
18
+ return {
19
+ label: formatMessage(_messages.filterOptionMessages.assigneeUnassignedFilterOption),
20
+ optionType: 'avatarLabel',
21
+ value: 'empty'
22
+ };
23
+ };
15
24
  var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref) {
16
25
  var filterType = _ref.filterType,
17
26
  cloudId = _ref.cloudId;
27
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
28
+ formatMessage = _useIntl.formatMessage;
18
29
  var _useState = (0, _react.useState)([]),
19
30
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
20
31
  filterOptions = _useState2[0],
@@ -46,6 +57,8 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
46
57
  isRequestLikeInitialSearch,
47
58
  initialResponseData,
48
59
  response,
60
+ mappedResponse,
61
+ mappedTotalCount,
49
62
  _args = arguments;
50
63
  return _regenerator.default.wrap(function _callee$(_context) {
51
64
  while (1) switch (_context.prev = _context.next) {
@@ -84,34 +97,45 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
84
97
  setErrors(response.errors);
85
98
  return _context.abrupt("return");
86
99
  case 18:
100
+ mappedResponse = (0, _transformers.mapFieldValuesToFilterOptions)(response);
101
+ mappedTotalCount = (0, _transformers.mapFieldValuesToTotalCount)(response);
87
102
  if (isNewSearch) {
88
- setFilterOptions((0, _transformers.mapFieldValuesToFilterOptions)(response));
89
103
  if (isRequestLikeInitialSearch) {
90
104
  /**
91
105
  * The initial dataset is used in couple of paths, eg: when a user searches and clears the search text.
92
106
  * During these times, we dont want to fetch data again and again, hence a mini cache setup to store and provide the initial dataset
93
107
  */
94
108
  initialData.current = response;
109
+
110
+ /**
111
+ * For assignee filter option, we want `Unassigned` as an option.
112
+ * Since `Unassigned/EMPTY` is not returned by the API, we add it manually, but only for the initial list
113
+ */
114
+ if (filterType === 'assignee') {
115
+ mappedResponse.unshift(getAssigneeUnassignedFilterOption(formatMessage));
116
+ mappedTotalCount += 1;
117
+ }
95
118
  }
119
+ setFilterOptions(mappedResponse);
96
120
  } else {
97
- setFilterOptions([].concat((0, _toConsumableArray2.default)(filterOptions), (0, _toConsumableArray2.default)((0, _transformers.mapFieldValuesToFilterOptions)(response))));
121
+ setFilterOptions([].concat((0, _toConsumableArray2.default)(filterOptions), (0, _toConsumableArray2.default)(mappedResponse)));
98
122
  }
99
- setTotalCount((0, _transformers.mapFieldValuesToTotalCount)(response));
123
+ setTotalCount(mappedTotalCount);
100
124
  setNextPageCursor((0, _transformers.mapFieldValuesToPageCursor)(response));
101
125
  setStatus('resolved');
102
- _context.next = 28;
126
+ _context.next = 30;
103
127
  break;
104
- case 24:
105
- _context.prev = 24;
128
+ case 26:
129
+ _context.prev = 26;
106
130
  _context.t1 = _context["catch"](5);
107
131
  setStatus('rejected');
108
132
  setErrors([_context.t1]);
109
- case 28:
133
+ case 30:
110
134
  case "end":
111
135
  return _context.stop();
112
136
  }
113
- }, _callee, null, [[5, 24]]);
114
- })), [cloudId, filterOptions, filterType, getFieldValues]);
137
+ }, _callee, null, [[5, 26]]);
138
+ })), [cloudId, filterOptions, filterType, formatMessage, getFieldValues]);
115
139
  (0, _react.useEffect)(function () {
116
140
  if (status !== 'rejected' && errors.length !== 0) {
117
141
  setErrors([]);
@@ -6,14 +6,20 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.useHydrateJqlQuery = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
14
  var _react = require("react");
15
+ var _reactIntlNext = require("react-intl-next");
16
+ var _jqlAst = require("@atlaskit/jql-ast");
13
17
  var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
14
18
  var _extractValuesFromNonComplexJQL = require("../utils/extractValuesFromNonComplexJQL");
15
19
  var _isClauseTooComplex = require("../utils/isClauseTooComplex");
16
20
  var _transformers = require("../utils/transformers");
21
+ var _useFilterOptions = require("./useFilterOptions");
22
+ var _excluded = ["assignee"];
17
23
  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; }
18
24
  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) { (0, _defineProperty2.default)(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; }
19
25
  var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
@@ -21,6 +27,8 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
21
27
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
22
28
  hydratedOptions = _useState2[0],
23
29
  setHydratedOptions = _useState2[1];
30
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
31
+ formatMessage = _useIntl.formatMessage;
24
32
  var _useState3 = (0, _react.useState)('empty'),
25
33
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
26
34
  status = _useState4[0],
@@ -32,7 +40,7 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
32
40
  var _useBasicFilterAGG = (0, _useBasicFilterAGG2.useBasicFilterAGG)(),
33
41
  getHydratedJQL = _useBasicFilterAGG.getHydratedJQL;
34
42
  var fetchHydratedJqlOptions = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
35
- var response, _extractValuesFromNon, text, summary, key, _ref2, _ref3, textFieldValue, mappedValues;
43
+ var response, _mapHydrateResponseDa, mappedHydratedAssigneeValue, restOfMappedHydratedResponse, _extractValuesFromNon, text, summary, key, extractedAssigneeValue, _ref2, _ref3, textFieldValue, mappedValues;
36
44
  return _regenerator.default.wrap(function _callee$(_context) {
37
45
  while (1) switch (_context.prev = _context.next) {
38
46
  case 0:
@@ -50,29 +58,36 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
50
58
  setErrors(response.errors);
51
59
  return _context.abrupt("return");
52
60
  case 9:
61
+ _mapHydrateResponseDa = (0, _transformers.mapHydrateResponseData)(response), mappedHydratedAssigneeValue = _mapHydrateResponseDa.assignee, restOfMappedHydratedResponse = (0, _objectWithoutProperties2.default)(_mapHydrateResponseDa, _excluded);
53
62
  /**
54
63
  * Hydrate logic does not return text field, hence we parse and extract value from jql
55
64
  */
56
- _extractValuesFromNon = (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key;
65
+ _extractValuesFromNon = (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key, extractedAssigneeValue = _extractValuesFromNon.assignee;
57
66
  _ref2 = text || summary || key || [], _ref3 = (0, _slicedToArray2.default)(_ref2, 1), textFieldValue = _ref3[0];
58
- mappedValues = _objectSpread(_objectSpread({}, (0, _transformers.mapHydrateResponseData)(response)), textFieldValue ? {
67
+ mappedValues = _objectSpread(_objectSpread({}, restOfMappedHydratedResponse), {}, {
68
+ /**
69
+ * Special handling for assignee as we need to inject Unassigned value if JQL contains EMPTY keyword for assignee
70
+ */
71
+ assignee: [].concat((0, _toConsumableArray2.default)(mappedHydratedAssigneeValue || []), (0, _toConsumableArray2.default)(extractedAssigneeValue !== null && extractedAssigneeValue !== void 0 && extractedAssigneeValue.includes(_jqlAst.OPERAND_EMPTY) // checks and adds EMPTY filter option if extracted assignee values from jql contains EMPTY
72
+ ? [(0, _useFilterOptions.getAssigneeUnassignedFilterOption)(formatMessage)] : []))
73
+ }, textFieldValue ? {
59
74
  basicInputTextValue: (0, _isClauseTooComplex.removeFuzzyCharacter)(textFieldValue)
60
75
  } : {});
61
76
  setHydratedOptions(mappedValues);
62
77
  setStatus('resolved');
63
- _context.next = 20;
78
+ _context.next = 21;
64
79
  break;
65
- case 16:
66
- _context.prev = 16;
80
+ case 17:
81
+ _context.prev = 17;
67
82
  _context.t0 = _context["catch"](0);
68
83
  setErrors([_context.t0]);
69
84
  setStatus('rejected');
70
- case 20:
85
+ case 21:
71
86
  case "end":
72
87
  return _context.stop();
73
88
  }
74
- }, _callee, null, [[0, 16]]);
75
- })), [cloudId, getHydratedJQL, jql]);
89
+ }, _callee, null, [[0, 17]]);
90
+ })), [cloudId, formatMessage, getHydratedJQL, jql]);
76
91
  (0, _react.useEffect)(function () {
77
92
  if (status !== 'rejected' && errors.length !== 0) {
78
93
  setErrors([]);
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.asyncPopupSelectMessages = void 0;
7
- var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = {
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = (0, _reactIntlNext.defineMessages)({
8
9
  selectPlaceholder: {
9
10
  id: 'linkDataSource.basic-filter.dropdown.select.placeholder',
10
11
  description: 'Placeholder text to be displayed for the search input box.',
@@ -40,4 +41,4 @@ var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = {
40
41
  defaultMessage: 'Show more',
41
42
  description: 'The text to show more options in dropdown'
42
43
  }
43
- };
44
+ });
@@ -4,7 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.asyncPopupSelectMessages = void 0;
7
- var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = {
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = (0, _reactIntlNext.defineMessages)({
8
9
  loadingMessage: {
9
10
  id: 'linkDataSource.basic-filter.loading-message',
10
11
  defaultMessage: 'Loading...',
@@ -20,4 +21,4 @@ var asyncPopupSelectMessages = exports.asyncPopupSelectMessages = {
20
21
  defaultMessage: 'Something went wrong',
21
22
  description: 'The text for when an error occurs when loading options'
22
23
  }
23
- };
24
+ });