@atlaskit/link-datasource 0.19.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/hooks/useDatasourceTableState.js +138 -58
  3. package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +8 -2
  4. package/dist/cjs/ui/issue-like-table/column-picker/index.js +17 -7
  5. package/dist/cjs/ui/issue-like-table/column-picker/messages.js +15 -0
  6. package/dist/cjs/ui/issue-like-table/index.js +65 -24
  7. package/dist/cjs/ui/issue-like-table/styled.js +1 -1
  8. package/dist/cjs/ui/jira-issues-modal/modal/index.js +14 -13
  9. package/dist/cjs/version.json +1 -1
  10. package/dist/es2019/hooks/useDatasourceTableState.js +84 -19
  11. package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +8 -2
  12. package/dist/es2019/ui/issue-like-table/column-picker/index.js +16 -6
  13. package/dist/es2019/ui/issue-like-table/column-picker/messages.js +8 -0
  14. package/dist/es2019/ui/issue-like-table/index.js +28 -8
  15. package/dist/es2019/ui/issue-like-table/styled.js +1 -1
  16. package/dist/es2019/ui/jira-issues-modal/modal/index.js +11 -10
  17. package/dist/es2019/version.json +1 -1
  18. package/dist/esm/hooks/useDatasourceTableState.js +138 -58
  19. package/dist/esm/ui/datasource-table-view/datasourceTableView.js +8 -2
  20. package/dist/esm/ui/issue-like-table/column-picker/index.js +17 -7
  21. package/dist/esm/ui/issue-like-table/column-picker/messages.js +8 -0
  22. package/dist/esm/ui/issue-like-table/index.js +65 -24
  23. package/dist/esm/ui/issue-like-table/styled.js +1 -1
  24. package/dist/esm/ui/jira-issues-modal/modal/index.js +14 -13
  25. package/dist/esm/version.json +1 -1
  26. package/dist/types/hooks/useDatasourceTableState.d.ts +14 -3
  27. package/dist/types/ui/issue-like-table/column-picker/index.d.ts +1 -1
  28. package/dist/types/ui/issue-like-table/column-picker/messages.d.ts +7 -0
  29. package/dist/types/ui/issue-like-table/column-picker/types.d.ts +2 -0
  30. package/dist/types/ui/issue-like-table/index.d.ts +1 -1
  31. package/dist/types/ui/issue-like-table/types.d.ts +3 -1
  32. package/dist/types-ts4.5/hooks/useDatasourceTableState.d.ts +14 -3
  33. package/dist/types-ts4.5/ui/issue-like-table/column-picker/index.d.ts +1 -1
  34. package/dist/types-ts4.5/ui/issue-like-table/column-picker/messages.d.ts +7 -0
  35. package/dist/types-ts4.5/ui/issue-like-table/column-picker/types.d.ts +2 -0
  36. package/dist/types-ts4.5/ui/issue-like-table/index.d.ts +1 -1
  37. package/dist/types-ts4.5/ui/issue-like-table/types.d.ts +3 -1
  38. package/examples-helpers/buildIssueLikeTable.tsx +11 -3
  39. package/examples-helpers/buildJiraIssuesTable.tsx +7 -2
  40. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 0.21.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`0b68480a270`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0b68480a270) - Update logic to call `/details` only when full schema is required and added field list, includeSchema flag to `/data` call
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+
13
+ ## 0.20.0
14
+
15
+ ### Minor Changes
16
+
17
+ - [`0407e628d5b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0407e628d5b) - [ux] Fix some table bugs
18
+
3
19
  ## 0.19.1
4
20
 
5
21
  ### Patch Changes
@@ -11,116 +11,196 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _react = require("react");
13
13
  var _linkClientExtension = require("@atlaskit/link-client-extension");
14
- var useDatasourceTableState = function useDatasourceTableState(datasourceId, parameters, fields) {
14
+ var useDatasourceTableState = function useDatasourceTableState(_ref) {
15
+ var datasourceId = _ref.datasourceId,
16
+ parameters = _ref.parameters,
17
+ _ref$fieldKeys = _ref.fieldKeys,
18
+ fieldKeys = _ref$fieldKeys === void 0 ? [] : _ref$fieldKeys;
15
19
  var _useState = (0, _react.useState)([]),
16
20
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
17
21
  defaultVisibleColumnKeys = _useState2[0],
18
22
  setDefaultVisibleColumnKeys = _useState2[1];
19
- var _useState3 = (0, _react.useState)('empty'),
23
+ var _useState3 = (0, _react.useState)([]),
20
24
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
21
- status = _useState4[0],
22
- setStatus = _useState4[1];
23
- var _useState5 = (0, _react.useState)([]),
25
+ lastRequestedFieldKeys = _useState4[0],
26
+ setLastRequestedFieldKeys = _useState4[1];
27
+ var _useState5 = (0, _react.useState)('empty'),
24
28
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
25
- responseItems = _useState6[0],
26
- setResponseItems = _useState6[1];
27
- var _useState7 = (0, _react.useState)(true),
29
+ status = _useState6[0],
30
+ setStatus = _useState6[1];
31
+ var _useState7 = (0, _react.useState)([]),
28
32
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
29
- hasNextPage = _useState8[0],
30
- setHasNextPage = _useState8[1];
31
- var _useState9 = (0, _react.useState)(undefined),
33
+ responseItems = _useState8[0],
34
+ setResponseItems = _useState8[1];
35
+ var _useState9 = (0, _react.useState)(true),
32
36
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
33
- nextCursor = _useState10[0],
34
- setNextCursor = _useState10[1];
35
- var _useState11 = (0, _react.useState)([]),
37
+ hasNextPage = _useState10[0],
38
+ setHasNextPage = _useState10[1];
39
+ var _useState11 = (0, _react.useState)(undefined),
36
40
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
37
- columns = _useState12[0],
38
- setColumns = _useState12[1];
39
- var _useState13 = (0, _react.useState)(undefined),
41
+ nextCursor = _useState12[0],
42
+ setNextCursor = _useState12[1];
43
+ var _useState13 = (0, _react.useState)([]),
40
44
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
41
- totalIssueCount = _useState14[0],
42
- setTotalIssueCount = _useState14[1];
45
+ columns = _useState14[0],
46
+ setColumns = _useState14[1];
47
+ var _useState15 = (0, _react.useState)(undefined),
48
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
49
+ totalIssueCount = _useState16[0],
50
+ setTotalIssueCount = _useState16[1];
43
51
  var _useDatasourceClientE = (0, _linkClientExtension.useDatasourceClientExtension)(),
44
52
  getDatasourceData = _useDatasourceClientE.getDatasourceData,
45
53
  getDatasourceDetails = _useDatasourceClientE.getDatasourceDetails;
46
- var loadDatasourceDetails = (0, _react.useCallback)( /*#__PURE__*/function () {
47
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(parameters) {
48
- var result;
49
- return _regenerator.default.wrap(function _callee$(_context) {
50
- while (1) switch (_context.prev = _context.next) {
51
- case 0:
54
+ var loadDatasourceDetails = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
55
+ var result, isColumnNotPresentInCurrentColumnsList, allColumns, newColumns;
56
+ return _regenerator.default.wrap(function _callee$(_context) {
57
+ while (1) switch (_context.prev = _context.next) {
58
+ case 0:
59
+ if (parameters) {
52
60
  _context.next = 2;
53
- return getDatasourceDetails(datasourceId, {
54
- parameters: parameters
61
+ break;
62
+ }
63
+ return _context.abrupt("return");
64
+ case 2:
65
+ _context.next = 4;
66
+ return getDatasourceDetails(datasourceId, {
67
+ parameters: parameters
68
+ });
69
+ case 4:
70
+ result = _context.sent;
71
+ isColumnNotPresentInCurrentColumnsList = function isColumnNotPresentInCurrentColumnsList(col) {
72
+ return !columns.find(function (column) {
73
+ return column.key === col.key;
55
74
  });
56
- case 2:
57
- result = _context.sent;
58
- setColumns(result.schema.properties);
59
- setDefaultVisibleColumnKeys(result.schema.defaultProperties);
60
- case 5:
61
- case "end":
62
- return _context.stop();
63
- }
64
- }, _callee);
65
- }));
66
- return function (_x) {
67
- return _ref.apply(this, arguments);
68
- };
69
- }(), [datasourceId, getDatasourceDetails]);
70
- (0, _react.useEffect)(function () {
71
- if (parameters) {
72
- void loadDatasourceDetails(parameters);
75
+ };
76
+ allColumns = result.schema.properties;
77
+ newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
78
+ newColumns.length > 0 && setColumns([].concat((0, _toConsumableArray2.default)(columns), (0, _toConsumableArray2.default)(newColumns)));
79
+ case 9:
80
+ case "end":
81
+ return _context.stop();
82
+ }
83
+ }, _callee);
84
+ })), [columns, datasourceId, getDatasourceDetails, parameters]);
85
+ var applySchemaProperties = (0, _react.useCallback)(function (properties) {
86
+ if (columns.length === 0) {
87
+ setColumns(properties);
88
+ }
89
+ var defaultProperties = properties.map(function (prop) {
90
+ return prop.key;
91
+ });
92
+
93
+ // when loading for the first time, we will need to set default visible props as /data does not give you that info
94
+ // also, since we dont pass any fields, we will need to set this info as lastRequestedFieldKeys
95
+ if (defaultVisibleColumnKeys.length === 0) {
96
+ setDefaultVisibleColumnKeys(defaultProperties);
97
+ }
98
+ if (lastRequestedFieldKeys.length === 0) {
99
+ setLastRequestedFieldKeys(defaultProperties);
73
100
  }
74
- }, [loadDatasourceDetails, parameters]);
101
+ }, [columns.length, defaultVisibleColumnKeys.length, lastRequestedFieldKeys === null || lastRequestedFieldKeys === void 0 ? void 0 : lastRequestedFieldKeys.length]);
75
102
  var onNextPage = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
76
- var _yield$getDatasourceD, data, nextPageCursor, totalIssues;
103
+ var requestInfo,
104
+ _requestInfo$isSchema,
105
+ isSchemaFromData,
106
+ shouldRequestFirstPage,
107
+ datasourceDataRequest,
108
+ _yield$getDatasourceD,
109
+ data,
110
+ nextPageCursor,
111
+ totalIssues,
112
+ schema,
113
+ _args2 = arguments;
77
114
  return _regenerator.default.wrap(function _callee2$(_context2) {
78
115
  while (1) switch (_context2.prev = _context2.next) {
79
116
  case 0:
117
+ requestInfo = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};
80
118
  if (parameters) {
81
- _context2.next = 2;
119
+ _context2.next = 3;
82
120
  break;
83
121
  }
84
122
  return _context2.abrupt("return");
85
- case 2:
86
- setStatus('loading');
87
- _context2.next = 5;
88
- return getDatasourceData(datasourceId, {
123
+ case 3:
124
+ _requestInfo$isSchema = requestInfo.isSchemaFromData, isSchemaFromData = _requestInfo$isSchema === void 0 ? true : _requestInfo$isSchema, shouldRequestFirstPage = requestInfo.shouldRequestFirstPage;
125
+ datasourceDataRequest = {
89
126
  parameters: parameters,
90
- pageSize: 10,
91
- pageCursor: nextCursor,
92
- fields: fields
93
- });
94
- case 5:
127
+ pageSize: 20,
128
+ pageCursor: shouldRequestFirstPage ? undefined : nextCursor,
129
+ fields: fieldKeys,
130
+ includeSchema: isSchemaFromData
131
+ };
132
+ setStatus('loading');
133
+ _context2.next = 8;
134
+ return getDatasourceData(datasourceId, datasourceDataRequest);
135
+ case 8:
95
136
  _yield$getDatasourceD = _context2.sent;
96
137
  data = _yield$getDatasourceD.data;
97
138
  nextPageCursor = _yield$getDatasourceD.nextPageCursor;
98
139
  totalIssues = _yield$getDatasourceD.totalIssues;
140
+ schema = _yield$getDatasourceD.schema;
99
141
  setTotalIssueCount(totalIssues);
100
142
  setNextCursor(nextPageCursor);
101
143
  setResponseItems(function (currentResponseItems) {
144
+ if (shouldRequestFirstPage) {
145
+ return data;
146
+ }
102
147
  return [].concat((0, _toConsumableArray2.default)(currentResponseItems), (0, _toConsumableArray2.default)(data));
103
148
  });
104
149
  setStatus('resolved');
105
150
  setHasNextPage(Boolean(nextPageCursor));
106
- case 14:
151
+ if (fieldKeys.length > 0) {
152
+ setLastRequestedFieldKeys(fieldKeys);
153
+ }
154
+ if (isSchemaFromData && schema) {
155
+ applySchemaProperties(schema.properties);
156
+ }
157
+ case 20:
107
158
  case "end":
108
159
  return _context2.stop();
109
160
  }
110
161
  }, _callee2);
111
- })), [parameters, getDatasourceData, datasourceId, nextCursor, fields]);
162
+ })), [parameters, fieldKeys, getDatasourceData, datasourceId, nextCursor, applySchemaProperties]);
112
163
  var reset = (0, _react.useCallback)(function () {
113
164
  setStatus('empty');
114
165
  setResponseItems([]);
115
166
  setHasNextPage(true);
116
167
  setNextCursor(undefined);
117
168
  setTotalIssueCount(undefined);
169
+ setLastRequestedFieldKeys([]);
118
170
  }, []);
171
+
172
+ // this takes care of requesting /data initally
173
+ (0, _react.useEffect)(function () {
174
+ var isEmptyState = Object.keys(parameters || {}).length > 0 && lastRequestedFieldKeys.length === 0 && status === 'empty';
175
+ if (isEmptyState) {
176
+ void onNextPage();
177
+ }
178
+ }, [lastRequestedFieldKeys, loadDatasourceDetails, onNextPage, parameters, status]);
179
+
180
+ // this takes care of requesting /data when user selects/unselects a column
181
+ (0, _react.useEffect)(function () {
182
+ var canHaveNewColumns = fieldKeys.length > 0 && lastRequestedFieldKeys.length > 0;
183
+ if (canHaveNewColumns) {
184
+ var hasNewColumns = fieldKeys.some(function (key) {
185
+ return !lastRequestedFieldKeys.includes(key);
186
+ });
187
+ if (!hasNewColumns) {
188
+ return;
189
+ }
190
+ reset();
191
+ void onNextPage({
192
+ isSchemaFromData: false,
193
+ // since this is not inital load, we will already have schema
194
+ shouldRequestFirstPage: true
195
+ });
196
+ }
197
+ }, [fieldKeys, lastRequestedFieldKeys, onNextPage, reset]);
119
198
  return {
120
199
  status: status,
121
200
  onNextPage: onNextPage,
122
201
  responseItems: responseItems,
123
202
  reset: reset,
203
+ loadDatasourceDetails: loadDatasourceDetails,
124
204
  hasNextPage: hasNextPage,
125
205
  columns: columns,
126
206
  defaultVisibleColumnKeys: defaultVisibleColumnKeys,
@@ -28,7 +28,11 @@ var DatasourceTableView = function DatasourceTableView(_ref) {
28
28
  parameters = _ref.parameters,
29
29
  visibleColumnKeys = _ref.visibleColumnKeys,
30
30
  onVisibleColumnKeysChange = _ref.onVisibleColumnKeysChange;
31
- var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)(datasourceId, parameters),
31
+ var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)({
32
+ datasourceId: datasourceId,
33
+ parameters: parameters,
34
+ fieldKeys: visibleColumnKeys
35
+ }),
32
36
  reset = _useDatasourceTableSt.reset,
33
37
  status = _useDatasourceTableSt.status,
34
38
  onNextPage = _useDatasourceTableSt.onNextPage,
@@ -36,7 +40,8 @@ var DatasourceTableView = function DatasourceTableView(_ref) {
36
40
  hasNextPage = _useDatasourceTableSt.hasNextPage,
37
41
  columns = _useDatasourceTableSt.columns,
38
42
  defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
39
- totalIssueCount = _useDatasourceTableSt.totalIssueCount;
43
+ totalIssueCount = _useDatasourceTableSt.totalIssueCount,
44
+ loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails;
40
45
  (0, _react.useEffect)(function () {
41
46
  if (onVisibleColumnKeysChange && (visibleColumnKeys || []).length === 0 && defaultVisibleColumnKeys.length > 0) {
42
47
  onVisibleColumnKeysChange(defaultVisibleColumnKeys);
@@ -49,6 +54,7 @@ var DatasourceTableView = function DatasourceTableView(_ref) {
49
54
  hasNextPage: hasNextPage,
50
55
  items: responseItems,
51
56
  onNextPage: onNextPage,
57
+ onLoadDatasourceDetails: loadDatasourceDetails,
52
58
  status: status,
53
59
  columns: columns,
54
60
  visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
@@ -11,16 +11,21 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _react = require("react");
13
13
  var _react2 = require("@emotion/react");
14
+ var _reactIntlNext = require("react-intl-next");
14
15
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
15
16
  var _board = _interopRequireDefault(require("@atlaskit/icon/glyph/board"));
16
17
  var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-down"));
17
18
  var _select = require("@atlaskit/select");
19
+ var _messages = require("./messages");
18
20
  var _excluded = ["isOpen"];
19
21
  /** @jsx jsx */
20
22
  var ColumnPicker = function ColumnPicker(_ref) {
21
- var columns = _ref.columns,
23
+ var isDatasourceLoading = _ref.isDatasourceLoading,
24
+ columns = _ref.columns,
22
25
  selectedColumnKeys = _ref.selectedColumnKeys,
23
- onSelectedColumnKeysChange = _ref.onSelectedColumnKeysChange;
26
+ onSelectedColumnKeysChange = _ref.onSelectedColumnKeysChange,
27
+ onOpen = _ref.onOpen;
28
+ var intl = (0, _reactIntlNext.useIntl)();
24
29
  var _useState = (0, _react.useState)([]),
25
30
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
26
31
  allOptions = _useState2[0],
@@ -61,7 +66,7 @@ var ColumnPicker = function ColumnPicker(_ref) {
61
66
  });
62
67
  onSelectedColumnKeysChange(selectedValues);
63
68
  }, [columns, onSelectedColumnKeysChange]);
64
- var onPopupOpen = (0, _react.useCallback)(function () {
69
+ var sortSelectedColumnsTop = (0, _react.useCallback)(function () {
65
70
  if (!allOptions.length) {
66
71
  return;
67
72
  }
@@ -73,6 +78,10 @@ var ColumnPicker = function ColumnPicker(_ref) {
73
78
  var sortedOptions = [].concat((0, _toConsumableArray2.default)(selectedOptions), (0, _toConsumableArray2.default)(nonSelectedOptions));
74
79
  sortedOptions.length > 0 && setAllOptions(sortedOptions);
75
80
  }, [allOptions, selectedOptions]);
81
+ var handleOpen = (0, _react.useCallback)(function () {
82
+ onOpen && void onOpen();
83
+ void sortSelectedColumnsTop();
84
+ }, [onOpen, sortSelectedColumnsTop]);
76
85
  return (0, _react2.jsx)(_select.PopupSelect, {
77
86
  classNamePrefix: 'column-picker-popup',
78
87
  testId: 'column-picker-popup',
@@ -81,14 +90,14 @@ var ColumnPicker = function ColumnPicker(_ref) {
81
90
  },
82
91
  options: allOptions,
83
92
  value: selectedOptions,
84
- onOpen: onPopupOpen,
93
+ onOpen: handleOpen,
85
94
  closeMenuOnSelect: false,
86
95
  hideSelectedOptions: false,
87
96
  isMulti: true,
88
- placeholder: "Search for fields" // TODO Translate
89
- ,
97
+ placeholder: intl.formatMessage(_messages.columnPickerMessages.search),
90
98
  "aria-label": "Search for fields",
91
99
  onChange: handleChange,
100
+ isLoading: allOptions.length === 0,
92
101
  target: function target(_ref8) {
93
102
  var isOpen = _ref8.isOpen,
94
103
  triggerProps = (0, _objectWithoutProperties2.default)(_ref8, _excluded);
@@ -103,7 +112,8 @@ var ColumnPicker = function ColumnPicker(_ref) {
103
112
  })),
104
113
  spacing: "compact",
105
114
  appearance: "subtle",
106
- testId: "column-picker-trigger-button"
115
+ testId: "column-picker-trigger-button",
116
+ isDisabled: isDatasourceLoading
107
117
  }));
108
118
  }
109
119
  });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.columnPickerMessages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var columnPickerMessages = (0, _reactIntlNext.defineMessages)({
9
+ search: {
10
+ id: 'linkDataSource.column-picker.search',
11
+ description: 'Search bar message to look for more fields',
12
+ defaultMessage: 'Search for fields'
13
+ }
14
+ });
15
+ exports.columnPickerMessages = columnPickerMessages;
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.IssueLikeDataTableView = exports.EmptyState = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
@@ -87,12 +89,13 @@ function getColumnWidth(key, type) {
87
89
  case 'string':
88
90
  return BASE_WIDTH * 22;
89
91
  default:
90
- undefined;
92
+ return undefined;
91
93
  }
92
94
  }
93
95
  var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
94
96
  var testId = _ref2.testId,
95
97
  onNextPage = _ref2.onNextPage,
98
+ onLoadDatasourceDetails = _ref2.onLoadDatasourceDetails,
96
99
  items = _ref2.items,
97
100
  columns = _ref2.columns,
98
101
  _ref2$renderItem = _ref2.renderItem,
@@ -112,14 +115,21 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
112
115
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
113
116
  isDragPreview = _useState4[0],
114
117
  setIsDragPreview = _useState4[1];
118
+ var _useState5 = (0, _react.useState)(false),
119
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
120
+ hasFullSchema = _useState6[0],
121
+ setHasFullSchema = _useState6[1];
115
122
  var isBottomOfTableVisibleRaw = (0, _useIsOnScreen.useIsOnScreen)(lastRowElement);
116
123
  var containerRef = (0, _react.useRef)(null);
117
- var _useState5 = (0, _react.useState)(function () {
124
+ var _useState7 = (0, _react.useState)(function () {
118
125
  return orderColumns((0, _toConsumableArray2.default)(columns), (0, _toConsumableArray2.default)(visibleColumnKeys));
119
126
  }),
120
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
121
- orderedColumns = _useState6[0],
122
- setOrderedColumns = _useState6[1];
127
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
128
+ orderedColumns = _useState8[0],
129
+ setOrderedColumns = _useState8[1];
130
+ (0, _react.useEffect)(function () {
131
+ setOrderedColumns(orderColumns((0, _toConsumableArray2.default)(columns), (0, _toConsumableArray2.default)(visibleColumnKeys)));
132
+ }, [columns, visibleColumnKeys]);
123
133
  var visibleSortedColumns = (0, _react.useMemo)(function () {
124
134
  return visibleColumnKeys.map(function (visibleKey) {
125
135
  return orderedColumns.find(function (_ref3) {
@@ -129,7 +139,7 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
129
139
  }).filter(Boolean);
130
140
  }, [orderedColumns, visibleColumnKeys]);
131
141
 
132
- // TODO seems like this component can't handle some combination of incremental data retreaval.
142
+ // TODO seems like this component can't handle some combination of incremental data retrieval.
133
143
  // If data comes first, then columns and then visibleColumnKeys it blows up,
134
144
  // or some other combination.
135
145
 
@@ -163,8 +173,10 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
163
173
  };
164
174
  });
165
175
  (0, _react.useEffect)(function () {
166
- if (status === 'empty' || isBottomOfTableVisibleRaw && hasNextPage && status !== 'loading') {
167
- void onNextPage();
176
+ if (isBottomOfTableVisibleRaw && hasNextPage && status === 'resolved') {
177
+ void onNextPage({
178
+ isSchemaFromData: false
179
+ });
168
180
  }
169
181
  }, [isBottomOfTableVisibleRaw, status, hasNextPage, onNextPage]);
170
182
  var dndPreviewHeight = 0;
@@ -270,6 +282,33 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
270
282
  var onSelectedColumnKeysChange = (0, _react.useCallback)(function (newSelectedColumnKeys) {
271
283
  onVisibleColumnKeysChange === null || onVisibleColumnKeysChange === void 0 ? void 0 : onVisibleColumnKeysChange(newSelectedColumnKeys);
272
284
  }, [onVisibleColumnKeysChange]);
285
+ var handlePickerOpen = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
286
+ return _regenerator.default.wrap(function _callee$(_context) {
287
+ while (1) switch (_context.prev = _context.next) {
288
+ case 0:
289
+ if (!hasFullSchema) {
290
+ _context.next = 2;
291
+ break;
292
+ }
293
+ return _context.abrupt("return");
294
+ case 2:
295
+ _context.prev = 2;
296
+ _context.next = 5;
297
+ return onLoadDatasourceDetails();
298
+ case 5:
299
+ setHasFullSchema(true);
300
+ _context.next = 11;
301
+ break;
302
+ case 8:
303
+ _context.prev = 8;
304
+ _context.t0 = _context["catch"](2);
305
+ setHasFullSchema(false);
306
+ case 11:
307
+ case "end":
308
+ return _context.stop();
309
+ }
310
+ }, _callee, null, [[2, 8]]);
311
+ })), [hasFullSchema, onLoadDatasourceDetails]);
273
312
  return (0, _react2.jsx)("div", {
274
313
  ref: containerRef,
275
314
  css: isDragPreview ? containerDragPreviewStyles : null
@@ -279,16 +318,16 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
279
318
  }, (0, _react2.jsx)("thead", {
280
319
  "data-testid": testId && "".concat(testId, "--head"),
281
320
  css: tableHeadStyles
282
- }, (0, _react2.jsx)("tr", null, headColumns.map(function (_ref10, cellIndex) {
283
- var key = _ref10.key,
284
- content = _ref10.content,
285
- maxWidth = _ref10.maxWidth;
321
+ }, (0, _react2.jsx)("tr", null, headColumns.map(function (_ref11, cellIndex) {
322
+ var key = _ref11.key,
323
+ content = _ref11.content,
324
+ maxWidth = _ref11.maxWidth;
286
325
  var TruncatedContent = function TruncatedContent() {
287
326
  return (0, _react2.jsx)("div", {
288
327
  css: truncatedCellStyles
289
328
  }, content);
290
329
  };
291
- if (onVisibleColumnKeysChange) {
330
+ if (onVisibleColumnKeysChange && status !== 'loading') {
292
331
  return (0, _react2.jsx)(_draggableTableHeading.DraggableTableHeading, {
293
332
  tableId: tableId,
294
333
  key: key,
@@ -311,23 +350,25 @@ var IssueLikeDataTableView = function IssueLikeDataTableView(_ref2) {
311
350
  }), onVisibleColumnKeysChange && (0, _react2.jsx)("th", {
312
351
  css: columnPickerHeaderStyles
313
352
  }, (0, _react2.jsx)(_columnPicker.ColumnPicker, {
314
- columns: orderedColumns,
315
- selectedColumnKeys: visibleColumnKeys,
316
- onSelectedColumnKeysChange: onSelectedColumnKeysChange
353
+ columns: hasFullSchema ? orderedColumns : [],
354
+ selectedColumnKeys: hasFullSchema ? visibleColumnKeys : [],
355
+ isDatasourceLoading: status === 'loading',
356
+ onSelectedColumnKeysChange: onSelectedColumnKeysChange,
357
+ onOpen: handlePickerOpen
317
358
  })))), (0, _react2.jsx)("tbody", {
318
359
  "data-testid": testId && "".concat(testId, "--body")
319
- }, rows.map(function (_ref11) {
320
- var key = _ref11.key,
321
- cells = _ref11.cells,
322
- ref = _ref11.ref;
360
+ }, rows.map(function (_ref12) {
361
+ var key = _ref12.key,
362
+ cells = _ref12.cells,
363
+ ref = _ref12.ref;
323
364
  return (0, _react2.jsx)("tr", {
324
365
  key: key,
325
366
  "data-testid": testId && "".concat(testId, "--row-").concat(key),
326
367
  ref: ref
327
- }, cells.map(function (_ref12, cellIndex) {
328
- var key = _ref12.key,
329
- content = _ref12.content,
330
- maxWidth = _ref12.maxWidth;
368
+ }, cells.map(function (_ref13, cellIndex) {
369
+ var key = _ref13.key,
370
+ content = _ref13.content,
371
+ maxWidth = _ref13.maxWidth;
331
372
  return (0, _react2.jsx)("td", {
332
373
  key: key,
333
374
  "data-testid": testId && "".concat(testId, "--cell-").concat(cellIndex),
@@ -8,7 +8,7 @@ exports.TableHeading = exports.Table = void 0;
8
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
9
  var _styled = _interopRequireDefault(require("@emotion/styled"));
10
10
  var _templateObject, _templateObject2;
11
- var Table = _styled.default.table(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: auto;\n"])));
11
+ var Table = _styled.default.table(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n"])));
12
12
  exports.Table = Table;
13
13
  var TableHeading = _styled.default.th(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n position: relative;\n padding-block: ", ";\n line-height: ", ";\n"])), "var(--ds-space-100, 8px)", "var(--ds-font-lineHeight-300, 24px)");
14
14
  exports.TableHeading = TableHeading;
@@ -72,18 +72,23 @@ var JiraIssuesConfigModal = function JiraIssuesConfigModal(props) {
72
72
  jql: jql || ''
73
73
  } : undefined;
74
74
  }, [cloudId, jql]);
75
- var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)(datasourceId, parameters),
75
+ var _useState9 = (0, _react.useState)(initialVisibleColumnKeys),
76
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
77
+ visibleColumnKeys = _useState10[0],
78
+ setVisibleColumnKeys = _useState10[1];
79
+ var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)({
80
+ datasourceId: datasourceId,
81
+ parameters: isParametersSet ? parameters : undefined,
82
+ fieldKeys: visibleColumnKeys
83
+ }),
76
84
  reset = _useDatasourceTableSt.reset,
77
85
  status = _useDatasourceTableSt.status,
78
86
  onNextPage = _useDatasourceTableSt.onNextPage,
79
87
  responseItems = _useDatasourceTableSt.responseItems,
80
88
  hasNextPage = _useDatasourceTableSt.hasNextPage,
81
89
  columns = _useDatasourceTableSt.columns,
82
- defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys;
83
- var _useState9 = (0, _react.useState)(initialVisibleColumnKeys || defaultVisibleColumnKeys),
84
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
85
- visibleColumnKeys = _useState10[0],
86
- setVisibleColumnKeys = _useState10[1];
90
+ defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
91
+ loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails;
87
92
  (0, _react.useEffect)(function () {
88
93
  var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
89
94
  setVisibleColumnKeys(newVisibleColumnKeys);
@@ -183,11 +188,6 @@ var JiraIssuesConfigModal = function JiraIssuesConfigModal(props) {
183
188
  var handleViewModeChange = function handleViewModeChange(selectedMode) {
184
189
  setCurrentViewMode(selectedMode);
185
190
  };
186
- (0, _react.useEffect)(function () {
187
- if (status === 'empty' && isParametersSet) {
188
- void onNextPage();
189
- }
190
- }, [status, isParametersSet, onNextPage, reset]);
191
191
  var issueLikeDataTableView = (0, _react.useMemo)(function () {
192
192
  return (0, _react2.jsx)(_issueLikeTable.IssueLikeDataTableView, {
193
193
  testId: "jira-jql-datasource-table",
@@ -197,9 +197,10 @@ var JiraIssuesConfigModal = function JiraIssuesConfigModal(props) {
197
197
  hasNextPage: hasNextPage,
198
198
  visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
199
199
  onNextPage: onNextPage,
200
+ onLoadDatasourceDetails: loadDatasourceDetails,
200
201
  onVisibleColumnKeysChange: setVisibleColumnKeys
201
202
  });
202
- }, [columns, defaultVisibleColumnKeys, hasNextPage, onNextPage, responseItems, status, visibleColumnKeys]);
203
+ }, [columns, defaultVisibleColumnKeys, hasNextPage, loadDatasourceDetails, onNextPage, responseItems, status, visibleColumnKeys]);
203
204
  var renderCountModeContent = (0, _react.useCallback)(function () {
204
205
  var url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
205
206
  if (status === 'empty' || !jql || !url) {
@@ -268,7 +269,7 @@ var JiraIssuesConfigModal = function JiraIssuesConfigModal(props) {
268
269
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.cancelButtonText)), (0, _react2.jsx)(_standardButton.default, {
269
270
  appearance: "primary",
270
271
  onClick: onInsertPressed,
271
- isDisabled: !isParametersSet,
272
+ isDisabled: !isParametersSet || status === 'loading',
272
273
  testId: 'jira-jql-datasource-modal--insert-button'
273
274
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesButtonText))))));
274
275
  };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.19.1",
3
+ "version": "0.21.0",
4
4
  "sideEffects": false
5
5
  }