@atlaskit/link-datasource 1.19.17 → 1.19.18

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.19.18
4
+
5
+ ### Patch Changes
6
+
7
+ - [#57736](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57736) [`d8193e501bcc`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/d8193e501bcc) - [ux] Changes behavior of datasource modal to persist query changes on insert without needing to click search.
8
+
3
9
  ## 1.19.17
4
10
 
5
11
  ### 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.17"
10
+ packageVersion: "1.19.18"
11
11
  };
@@ -98,13 +98,20 @@ var useDatasourceTableState = exports.useDatasourceTableState = function useData
98
98
  _yield$getDatasourceD = _context.sent;
99
99
  access = _yield$getDatasourceD.meta.access;
100
100
  schema = _yield$getDatasourceD.data.schema;
101
- if (!(access === 'forbidden' || access === 'unauthorized')) {
101
+ if (!(access === 'unauthorized')) {
102
102
  _context.next = 11;
103
103
  break;
104
104
  }
105
105
  setStatus('unauthorized');
106
106
  return _context.abrupt("return");
107
107
  case 11:
108
+ if (!(access === 'forbidden')) {
109
+ _context.next = 14;
110
+ break;
111
+ }
112
+ setStatus('forbidden');
113
+ return _context.abrupt("return");
114
+ case 14:
108
115
  isColumnNotPresentInCurrentColumnsList = function isColumnNotPresentInCurrentColumnsList(col) {
109
116
  return !columns.find(function (column) {
110
117
  return column.key === col.key;
@@ -113,25 +120,32 @@ var useDatasourceTableState = exports.useDatasourceTableState = function useData
113
120
  allColumns = schema.properties;
114
121
  newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
115
122
  newColumns.length > 0 && setColumns([].concat((0, _toConsumableArray2.default)(columns), (0, _toConsumableArray2.default)(newColumns)));
116
- _context.next = 24;
123
+ _context.next = 30;
117
124
  break;
118
- case 17:
119
- _context.prev = 17;
125
+ case 20:
126
+ _context.prev = 20;
120
127
  _context.t0 = _context["catch"](2);
121
128
  captureError('loadDatasourceDetails', _context.t0);
122
- if (!(_context.t0 instanceof Response && (_context.t0.status === 401 || _context.t0.status === 403))) {
123
- _context.next = 23;
129
+ if (!(_context.t0 instanceof Response && _context.t0.status === 401)) {
130
+ _context.next = 26;
124
131
  break;
125
132
  }
126
133
  setStatus('unauthorized');
127
134
  return _context.abrupt("return");
128
- case 23:
135
+ case 26:
136
+ if (!(_context.t0 instanceof Response && _context.t0.status === 403)) {
137
+ _context.next = 29;
138
+ break;
139
+ }
140
+ setStatus('forbidden');
141
+ return _context.abrupt("return");
142
+ case 29:
129
143
  setStatus('rejected');
130
- case 24:
144
+ case 30:
131
145
  case "end":
132
146
  return _context.stop();
133
147
  }
134
- }, _callee, null, [[2, 17]]);
148
+ }, _callee, null, [[2, 20]]);
135
149
  })), [captureError, columns, datasourceId, getDatasourceDetails, parameters]);
136
150
  var applySchemaProperties = (0, _react.useCallback)(function (schema, fieldKeys) {
137
151
  var properties = schema.properties,
@@ -225,13 +239,20 @@ var useDatasourceTableState = exports.useDatasourceTableState = function useData
225
239
  nextPageCursor = _yield$getDatasourceD4.nextPageCursor;
226
240
  _totalCount = _yield$getDatasourceD4.totalCount;
227
241
  schema = _yield$getDatasourceD4.schema;
228
- if (!(access === 'forbidden' || access === 'unauthorized')) {
242
+ if (!(access === 'unauthorized')) {
229
243
  _context2.next = 23;
230
244
  break;
231
245
  }
232
246
  setStatus('unauthorized');
233
247
  return _context2.abrupt("return");
234
248
  case 23:
249
+ if (!(access === 'forbidden')) {
250
+ _context2.next = 26;
251
+ break;
252
+ }
253
+ setStatus('forbidden');
254
+ return _context2.abrupt("return");
255
+ case 26:
235
256
  setExtensionKey(_extensionKey);
236
257
  setDestinationObjectTypes(_destinationObjectTypes);
237
258
  setTotalCount(_totalCount);
@@ -260,25 +281,32 @@ var useDatasourceTableState = exports.useDatasourceTableState = function useData
260
281
  });
261
282
  }
262
283
  setStatus('resolved');
263
- _context2.next = 43;
284
+ _context2.next = 49;
264
285
  break;
265
- case 36:
266
- _context2.prev = 36;
286
+ case 39:
287
+ _context2.prev = 39;
267
288
  _context2.t0 = _context2["catch"](7);
268
289
  captureError('onNextPage', _context2.t0);
269
- if (!(_context2.t0 instanceof Response && (_context2.t0.status === 401 || _context2.t0.status === 403))) {
270
- _context2.next = 42;
290
+ if (!(_context2.t0 instanceof Response && _context2.t0.status === 401)) {
291
+ _context2.next = 45;
271
292
  break;
272
293
  }
273
294
  setStatus('unauthorized');
274
295
  return _context2.abrupt("return");
275
- case 42:
296
+ case 45:
297
+ if (!(_context2.t0 instanceof Response && _context2.t0.status === 403)) {
298
+ _context2.next = 48;
299
+ break;
300
+ }
301
+ setStatus('forbidden');
302
+ return _context2.abrupt("return");
303
+ case 48:
276
304
  setStatus('rejected');
277
- case 43:
305
+ case 49:
278
306
  case "end":
279
307
  return _context2.stop();
280
308
  }
281
- }, _callee2, null, [[7, 36]]);
309
+ }, _callee2, null, [[7, 39]]);
282
310
  })), [captureError, parameters, fieldKeys, nextCursor, getDatasourceData, datasourceId, responseItems === null || responseItems === void 0 ? void 0 : responseItems.length, applySchemaProperties, fireEvent, fullSchema]);
283
311
  var reset = (0, _react.useCallback)(function (options) {
284
312
  setStatus('empty');
@@ -113,7 +113,7 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
113
113
  shouldForceRequest: true
114
114
  });
115
115
  }, [destinationObjectTypes, extensionKey, fireEvent, reset]);
116
- if (status === 'resolved' && !responseItems.length) {
116
+ if (status === 'resolved' && !responseItems.length || status === 'forbidden') {
117
117
  return (0, _react2.jsx)(_noResults.NoResults, {
118
118
  onRefresh: reset
119
119
  });
@@ -45,10 +45,12 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
45
45
  parameters = props.parameters,
46
46
  onSearch = props.onSearch,
47
47
  onSearchMethodChangeCallback = props.onSearchMethodChange,
48
- initialSearchMethod = props.initialSearchMethod;
48
+ initialSearchMethod = props.initialSearchMethod,
49
+ setSearchBarJql = props.setSearchBarJql,
50
+ _props$searchBarJql = props.searchBarJql,
51
+ searchBarJql = _props$searchBarJql === void 0 ? DEFAULT_JQL_QUERY : _props$searchBarJql;
49
52
  var _ref = parameters || {},
50
- currentCloudId = _ref.cloudId,
51
- initialJql = _ref.jql;
53
+ currentCloudId = _ref.cloudId;
52
54
  var _useIntl = (0, _reactIntlNext.useIntl)(),
53
55
  formatMessage = _useIntl.formatMessage;
54
56
  var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
@@ -61,37 +63,33 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
61
63
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
62
64
  currentSearchMethod = _useState4[0],
63
65
  setCurrentSearchMethod = _useState4[1];
64
- var _useState5 = (0, _react.useState)(initialJql || DEFAULT_JQL_QUERY),
66
+ var _useState5 = (0, _react.useState)(currentCloudId),
65
67
  _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
66
- jql = _useState6[0],
67
- setJql = _useState6[1];
68
- var _useState7 = (0, _react.useState)(currentCloudId),
68
+ cloudId = _useState6[0],
69
+ setCloudId = _useState6[1];
70
+ var _useState7 = (0, _react.useState)(false),
69
71
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
70
- cloudId = _useState8[0],
71
- setCloudId = _useState8[1];
72
- var _useState9 = (0, _react.useState)(false),
72
+ isComplexQuery = _useState8[0],
73
+ setIsComplexQuery = _useState8[1];
74
+ var _useState9 = (0, _react.useState)(),
73
75
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
74
- isComplexQuery = _useState10[0],
75
- setIsComplexQuery = _useState10[1];
76
+ orderKey = _useState10[0],
77
+ setOrderKey = _useState10[1];
76
78
  var _useState11 = (0, _react.useState)(),
77
79
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
78
- orderKey = _useState12[0],
79
- setOrderKey = _useState12[1];
80
- var _useState13 = (0, _react.useState)(),
80
+ orderDirection = _useState12[0],
81
+ setOrderDirection = _useState12[1];
82
+ var _useState13 = (0, _react.useState)({}),
81
83
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
82
- orderDirection = _useState14[0],
83
- setOrderDirection = _useState14[1];
84
- var _useState15 = (0, _react.useState)({}),
85
- _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
86
- filterSelections = _useState16[0],
87
- setFilterSelections = _useState16[1];
84
+ filterSelections = _useState14[0],
85
+ setFilterSelections = _useState14[1];
88
86
  var showBasicFilters = (0, _react.useMemo)(function () {
89
87
  if ((0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.datasource.show-jlol-basic-filters')) {
90
88
  return true;
91
89
  }
92
90
  return false;
93
91
  }, []);
94
- var _useHydrateJqlQuery = (0, _useHydrateJqlQuery2.useHydrateJqlQuery)(cloudId || '', jql),
92
+ var _useHydrateJqlQuery = (0, _useHydrateJqlQuery2.useHydrateJqlQuery)(cloudId || '', searchBarJql),
95
93
  hydratedOptions = _useHydrateJqlQuery.hydratedOptions,
96
94
  fetchHydratedJqlOptions = _useHydrateJqlQuery.fetchHydratedJqlOptions,
97
95
  basicFilterHydrationStatus = _useHydrateJqlQuery.status;
@@ -102,13 +100,13 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
102
100
  var handleBasicSearchChange = (0, _react.useCallback)(function (e) {
103
101
  var rawSearch = e.currentTarget.value;
104
102
  setBasicSearchTerm(rawSearch);
105
- setJql((0, _buildJQL.buildJQL)({
103
+ setSearchBarJql((0, _buildJQL.buildJQL)({
106
104
  rawSearch: rawSearch,
107
105
  filterValues: filterSelections,
108
106
  orderDirection: orderDirection,
109
107
  orderKey: orderKey
110
108
  }));
111
- }, [filterSelections, orderDirection, orderKey]);
109
+ }, [setSearchBarJql, filterSelections, orderDirection, orderKey]);
112
110
  var onQueryChange = (0, _react.useCallback)(function (query) {
113
111
  var _query$split$map$filt, _fragments$at, _fragments$at2, _fragments$at3;
114
112
  // determine if order keys have been set so they can be saved and persisted when changes occur in basic search
@@ -124,12 +122,12 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
124
122
  setOrderKey(key);
125
123
  setOrderDirection(order);
126
124
  }
127
- setJql(query);
128
- }, []);
125
+ setSearchBarJql(query);
126
+ }, [setSearchBarJql]);
129
127
  var handleSearch = (0, _react.useCallback)(function () {
130
- var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(jql);
128
+ var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(searchBarJql);
131
129
  onSearch({
132
- jql: jql
130
+ jql: searchBarJql
133
131
  }, {
134
132
  searchMethod: currentSearchMethod,
135
133
  basicFilterSelections: filterSelections,
@@ -146,7 +144,7 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
146
144
  fetchHydratedJqlOptions();
147
145
  }
148
146
  }
149
- }, [currentSearchMethod, fetchHydratedJqlOptions, filterSelections, fireEvent, jql, onSearch, showBasicFilters]);
147
+ }, [currentSearchMethod, fetchHydratedJqlOptions, filterSelections, fireEvent, searchBarJql, onSearch, showBasicFilters]);
150
148
  var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function (filterValues) {
151
149
  var jqlWithFilterValues = (0, _buildJQL.buildJQL)({
152
150
  rawSearch: basicSearchTerm,
@@ -154,7 +152,7 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
154
152
  orderDirection: orderDirection,
155
153
  orderKey: orderKey
156
154
  });
157
- setJql(jqlWithFilterValues);
155
+ setSearchBarJql(jqlWithFilterValues);
158
156
  var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(jqlWithFilterValues);
159
157
  onSearch({
160
158
  jql: jqlWithFilterValues
@@ -172,9 +170,9 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
172
170
  debouncedBasicFilterSelectionChange(updatedSelection);
173
171
  }, [debouncedBasicFilterSelectionChange, filterSelections]);
174
172
  (0, _react.useEffect)(function () {
175
- var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(jql);
173
+ var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(searchBarJql);
176
174
  setIsComplexQuery(isCurrentQueryComplex);
177
- if (showBasicFilters && !isCurrentQueryComplex && jql !== DEFAULT_JQL_QUERY) {
175
+ if (showBasicFilters && !isCurrentQueryComplex && searchBarJql !== DEFAULT_JQL_QUERY) {
178
176
  fetchHydratedJqlOptions();
179
177
  }
180
178
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -192,14 +190,14 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
192
190
  (0, _react.useEffect)(function () {
193
191
  if (currentCloudId !== cloudId) {
194
192
  setBasicSearchTerm('');
195
- setJql(DEFAULT_JQL_QUERY);
193
+ setSearchBarJql(DEFAULT_JQL_QUERY);
196
194
  setIsComplexQuery(false);
197
195
  setOrderKey(undefined);
198
196
  setOrderDirection(undefined);
199
197
  setFilterSelections({});
200
198
  setCloudId(currentCloudId);
201
199
  }
202
- }, [currentCloudId, cloudId]);
200
+ }, [currentCloudId, cloudId, setSearchBarJql]);
203
201
  return (0, _react2.jsx)("div", {
204
202
  css: inputContainerStyles,
205
203
  "data-testid": "jira-search-container"
@@ -212,7 +210,7 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
212
210
  onSearch: handleSearch,
213
211
  searchTerm: basicSearchTerm
214
212
  }), showBasicFilters && (0, _react2.jsx)(_basicFilters.BasicFilters, {
215
- jql: jql,
213
+ jql: searchBarJql,
216
214
  cloudId: cloudId || '',
217
215
  onChange: handleBasicFilterSelectionChange,
218
216
  selections: filterSelections,
@@ -222,7 +220,7 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
222
220
  isSearching: isSearching,
223
221
  onChange: onQueryChange,
224
222
  onSearch: handleSearch,
225
- query: jql
223
+ query: searchBarJql
226
224
  }), (0, _react2.jsx)(_modeSwitcher.ModeSwitcher, {
227
225
  onOptionValueChange: onSearchMethodChange,
228
226
  selectedOptionValue: currentSearchMethod,
@@ -133,19 +133,23 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
133
133
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
134
134
  jql = _useState8[0],
135
135
  setJql = _useState8[1];
136
- var _useState9 = (0, _react.useState)(initialVisibleColumnKeys),
136
+ var _useState9 = (0, _react.useState)(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql),
137
137
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
138
- visibleColumnKeys = _useState10[0],
139
- setVisibleColumnKeys = _useState10[1];
138
+ searchBarJql = _useState10[0],
139
+ setSearchBarJql = _useState10[1];
140
+ var _useState11 = (0, _react.useState)(initialVisibleColumnKeys),
141
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
142
+ visibleColumnKeys = _useState12[0],
143
+ setVisibleColumnKeys = _useState12[1];
140
144
 
141
145
  // analytics related parameters
142
146
  var searchCount = (0, _react.useRef)(0);
143
147
  var userInteractionActions = (0, _react.useRef)(new Set());
144
148
  var initialSearchMethod = (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.datasource.show-jlol-basic-filters') && !(0, _isQueryTooComplex.isQueryTooComplex)((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql) || '') ? 'basic' : 'jql';
145
- var _useState11 = (0, _react.useState)(initialSearchMethod),
146
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
147
- currentSearchMethod = _useState12[0],
148
- setCurrentSearchMethod = _useState12[1];
149
+ var _useState13 = (0, _react.useState)(initialSearchMethod),
150
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
151
+ currentSearchMethod = _useState14[0],
152
+ setCurrentSearchMethod = _useState14[1];
149
153
  var searchMethodSearchedWith = (0, _react.useRef)(null);
150
154
  var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
151
155
  var basicFilterSelectionsSearchedWith = (0, _react.useRef)({});
@@ -157,10 +161,10 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
157
161
  } : undefined;
158
162
  }, [cloudId, jql]);
159
163
  var isParametersSet = !!(jql && cloudId);
160
- var _useState13 = (0, _react.useState)(initialColumnCustomSizes),
161
- _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
162
- columnCustomSizes = _useState14[0],
163
- setColumnCustomSizes = _useState14[1];
164
+ var _useState15 = (0, _react.useState)(initialColumnCustomSizes),
165
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
166
+ columnCustomSizes = _useState16[0],
167
+ setColumnCustomSizes = _useState16[1];
164
168
  var onColumnResize = (0, _react.useCallback)(function (key, width) {
165
169
  setColumnCustomSizes(_objectSpread(_objectSpread({}, columnCustomSizes), {}, (0, _defineProperty2.default)({}, key, width)));
166
170
  }, [columnCustomSizes]);
@@ -361,6 +365,11 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
361
365
  if (!isParametersSet || !jql || !selectedJiraSite) {
362
366
  return;
363
367
  }
368
+
369
+ // During insertion, we want the JQL of the datasource to be whatever is in the search bar,
370
+ // even if the user didn't previously click search
371
+ var upToDateJql = searchBarJql !== null && searchBarJql !== void 0 ? searchBarJql : jql;
372
+ var upToDateJqlUrl = selectedJiraSite && jql && "".concat(selectedJiraSite.url, "/issues/?jql=").concat(encodeURI(upToDateJql));
364
373
  var filterSelectionCount = _ui.availableBasicFilterTypes.reduce(function (current, filter) {
365
374
  var _basicFilterSelection;
366
375
  return _objectSpread(_objectSpread({}, current), {}, (0, _defineProperty2.default)({}, "".concat(filter, "BasicFilterSelectionCount"), ((_basicFilterSelection = basicFilterSelectionsSearchedWith.current[filter]) === null || _basicFilterSelection === void 0 ? void 0 : _basicFilterSelection.length) || 0));
@@ -403,7 +412,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
403
412
  onInsert({
404
413
  type: 'inlineCard',
405
414
  attrs: {
406
- url: jqlUrl
415
+ url: upToDateJqlUrl
407
416
  }
408
417
  }, consumerEvent);
409
418
  } else if (responseItems.length === 1 && firstIssueUrl) {
@@ -418,12 +427,12 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
418
427
  onInsert({
419
428
  type: 'blockCard',
420
429
  attrs: {
421
- url: jqlUrl,
430
+ url: upToDateJqlUrl,
422
431
  datasource: {
423
432
  id: datasourceId,
424
433
  parameters: {
425
434
  cloudId: cloudId,
426
- jql: jql // TODO support non JQL type
435
+ jql: upToDateJql // TODO support non JQL type
427
436
  },
428
437
 
429
438
  views: [{
@@ -441,7 +450,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
441
450
  }
442
451
  }, consumerEvent);
443
452
  }
444
- }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId, columnCustomSizes]);
453
+ }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, cloudId, columnCustomSizes, searchBarJql]);
445
454
  var handleViewModeChange = function handleViewModeChange(selectedMode) {
446
455
  userInteractionActions.current.add(_types.DatasourceAction.DISPLAY_VIEW_CHANGED);
447
456
  setCurrentViewMode(selectedMode);
@@ -509,7 +518,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
509
518
  return (0, _react2.jsx)(_accessRequired.AccessRequired, {
510
519
  url: selectedJiraSiteUrl || urlBeingEdited
511
520
  });
512
- } else if (resolvedWithNoResults) {
521
+ } else if (resolvedWithNoResults || status === 'forbidden') {
513
522
  return (0, _react2.jsx)(_noResults.NoResults, null);
514
523
  } else if (status === 'empty' || !columns.length) {
515
524
  // persist the empty state when making the initial /data request which contains the columns
@@ -555,6 +564,8 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
555
564
  onOptionValueChange: handleViewModeChange,
556
565
  selectedOptionValue: currentViewMode
557
566
  })), (0, _react2.jsx)(_modalDialog.ModalBody, null, !hasNoJiraSites ? (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_jiraSearchContainer.JiraSearchContainer, {
567
+ setSearchBarJql: setSearchBarJql,
568
+ searchBarJql: searchBarJql,
558
569
  isSearching: status === 'loading',
559
570
  parameters: parameters,
560
571
  onSearch: onSearch,
@@ -1,5 +1,5 @@
1
1
  export const EVENT_CHANNEL = 'media';
2
2
  export const packageMetaData = {
3
3
  packageName: "@atlaskit/link-datasource",
4
- packageVersion: "1.19.17"
4
+ packageVersion: "1.19.18"
5
5
  };
@@ -49,20 +49,28 @@ export const useDatasourceTableState = ({
49
49
  } = await getDatasourceDetails(datasourceId, {
50
50
  parameters
51
51
  });
52
- if (access === 'forbidden' || access === 'unauthorized') {
52
+ if (access === 'unauthorized') {
53
53
  setStatus('unauthorized');
54
54
  return;
55
55
  }
56
+ if (access === 'forbidden') {
57
+ setStatus('forbidden');
58
+ return;
59
+ }
56
60
  const isColumnNotPresentInCurrentColumnsList = col => !columns.find(column => column.key === col.key);
57
61
  const allColumns = schema.properties;
58
62
  const newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
59
63
  newColumns.length > 0 && setColumns([...columns, ...newColumns]);
60
64
  } catch (e) {
61
65
  captureError('loadDatasourceDetails', e);
62
- if (e instanceof Response && (e.status === 401 || e.status === 403)) {
66
+ if (e instanceof Response && e.status === 401) {
63
67
  setStatus('unauthorized');
64
68
  return;
65
69
  }
70
+ if (e instanceof Response && e.status === 403) {
71
+ setStatus('forbidden');
72
+ return;
73
+ }
66
74
  setStatus('rejected');
67
75
  }
68
76
  }, [captureError, columns, datasourceId, getDatasourceDetails, parameters]);
@@ -132,10 +140,14 @@ export const useDatasourceTableState = ({
132
140
  schema
133
141
  }
134
142
  } = await getDatasourceData(datasourceId, datasourceDataRequest, shouldForceRequest);
135
- if (access === 'forbidden' || access === 'unauthorized') {
143
+ if (access === 'unauthorized') {
136
144
  setStatus('unauthorized');
137
145
  return;
138
146
  }
147
+ if (access === 'forbidden') {
148
+ setStatus('forbidden');
149
+ return;
150
+ }
139
151
  setExtensionKey(extensionKey);
140
152
  setDestinationObjectTypes(destinationObjectTypes);
141
153
  setTotalCount(totalCount);
@@ -166,10 +178,14 @@ export const useDatasourceTableState = ({
166
178
  setStatus('resolved');
167
179
  } catch (e) {
168
180
  captureError('onNextPage', e);
169
- if (e instanceof Response && (e.status === 401 || e.status === 403)) {
181
+ if (e instanceof Response && e.status === 401) {
170
182
  setStatus('unauthorized');
171
183
  return;
172
184
  }
185
+ if (e instanceof Response && e.status === 403) {
186
+ setStatus('forbidden');
187
+ return;
188
+ }
173
189
  setStatus('rejected');
174
190
  }
175
191
  }, [captureError, parameters, fieldKeys, nextCursor, getDatasourceData, datasourceId, responseItems === null || responseItems === void 0 ? void 0 : responseItems.length, applySchemaProperties, fireEvent, fullSchema]);
@@ -108,7 +108,7 @@ const DatasourceTableViewWithoutAnalytics = ({
108
108
  shouldForceRequest: true
109
109
  });
110
110
  }, [destinationObjectTypes, extensionKey, fireEvent, reset]);
111
- if (status === 'resolved' && !responseItems.length) {
111
+ if (status === 'resolved' && !responseItems.length || status === 'forbidden') {
112
112
  return jsx(NoResults, {
113
113
  onRefresh: reset
114
114
  });
@@ -31,11 +31,12 @@ export const JiraSearchContainer = props => {
31
31
  parameters,
32
32
  onSearch,
33
33
  onSearchMethodChange: onSearchMethodChangeCallback,
34
- initialSearchMethod
34
+ initialSearchMethod,
35
+ setSearchBarJql,
36
+ searchBarJql = DEFAULT_JQL_QUERY
35
37
  } = props;
36
38
  const {
37
- cloudId: currentCloudId,
38
- jql: initialJql
39
+ cloudId: currentCloudId
39
40
  } = parameters || {};
40
41
  const {
41
42
  formatMessage
@@ -45,7 +46,6 @@ export const JiraSearchContainer = props => {
45
46
  } = useDatasourceAnalyticsEvents();
46
47
  const [basicSearchTerm, setBasicSearchTerm] = useState('');
47
48
  const [currentSearchMethod, setCurrentSearchMethod] = useState(initialSearchMethod);
48
- const [jql, setJql] = useState(initialJql || DEFAULT_JQL_QUERY);
49
49
  const [cloudId, setCloudId] = useState(currentCloudId);
50
50
  const [isComplexQuery, setIsComplexQuery] = useState(false);
51
51
  const [orderKey, setOrderKey] = useState();
@@ -61,7 +61,7 @@ export const JiraSearchContainer = props => {
61
61
  hydratedOptions,
62
62
  fetchHydratedJqlOptions,
63
63
  status: basicFilterHydrationStatus
64
- } = useHydrateJqlQuery(cloudId || '', jql);
64
+ } = useHydrateJqlQuery(cloudId || '', searchBarJql);
65
65
  const onSearchMethodChange = useCallback(searchMethod => {
66
66
  onSearchMethodChangeCallback(searchMethod);
67
67
  setCurrentSearchMethod(searchMethod);
@@ -69,13 +69,13 @@ export const JiraSearchContainer = props => {
69
69
  const handleBasicSearchChange = useCallback(e => {
70
70
  const rawSearch = e.currentTarget.value;
71
71
  setBasicSearchTerm(rawSearch);
72
- setJql(buildJQL({
72
+ setSearchBarJql(buildJQL({
73
73
  rawSearch,
74
74
  filterValues: filterSelections,
75
75
  orderDirection,
76
76
  orderKey
77
77
  }));
78
- }, [filterSelections, orderDirection, orderKey]);
78
+ }, [setSearchBarJql, filterSelections, orderDirection, orderKey]);
79
79
  const onQueryChange = useCallback(query => {
80
80
  var _query$split$map$filt, _fragments$at, _fragments$at2, _fragments$at3;
81
81
  // determine if order keys have been set so they can be saved and persisted when changes occur in basic search
@@ -89,12 +89,12 @@ export const JiraSearchContainer = props => {
89
89
  setOrderKey(key);
90
90
  setOrderDirection(order);
91
91
  }
92
- setJql(query);
93
- }, []);
92
+ setSearchBarJql(query);
93
+ }, [setSearchBarJql]);
94
94
  const handleSearch = useCallback(() => {
95
- const isCurrentQueryComplex = isQueryTooComplex(jql);
95
+ const isCurrentQueryComplex = isQueryTooComplex(searchBarJql);
96
96
  onSearch({
97
- jql
97
+ jql: searchBarJql
98
98
  }, {
99
99
  searchMethod: currentSearchMethod,
100
100
  basicFilterSelections: filterSelections,
@@ -111,7 +111,7 @@ export const JiraSearchContainer = props => {
111
111
  fetchHydratedJqlOptions();
112
112
  }
113
113
  }
114
- }, [currentSearchMethod, fetchHydratedJqlOptions, filterSelections, fireEvent, jql, onSearch, showBasicFilters]);
114
+ }, [currentSearchMethod, fetchHydratedJqlOptions, filterSelections, fireEvent, searchBarJql, onSearch, showBasicFilters]);
115
115
  const [debouncedBasicFilterSelectionChange] = useDebouncedCallback(filterValues => {
116
116
  const jqlWithFilterValues = buildJQL({
117
117
  rawSearch: basicSearchTerm,
@@ -119,7 +119,7 @@ export const JiraSearchContainer = props => {
119
119
  orderDirection,
120
120
  orderKey
121
121
  });
122
- setJql(jqlWithFilterValues);
122
+ setSearchBarJql(jqlWithFilterValues);
123
123
  const isCurrentQueryComplex = isQueryTooComplex(jqlWithFilterValues);
124
124
  onSearch({
125
125
  jql: jqlWithFilterValues
@@ -138,9 +138,9 @@ export const JiraSearchContainer = props => {
138
138
  debouncedBasicFilterSelectionChange(updatedSelection);
139
139
  }, [debouncedBasicFilterSelectionChange, filterSelections]);
140
140
  useEffect(() => {
141
- const isCurrentQueryComplex = isQueryTooComplex(jql);
141
+ const isCurrentQueryComplex = isQueryTooComplex(searchBarJql);
142
142
  setIsComplexQuery(isCurrentQueryComplex);
143
- if (showBasicFilters && !isCurrentQueryComplex && jql !== DEFAULT_JQL_QUERY) {
143
+ if (showBasicFilters && !isCurrentQueryComplex && searchBarJql !== DEFAULT_JQL_QUERY) {
144
144
  fetchHydratedJqlOptions();
145
145
  }
146
146
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -160,14 +160,14 @@ export const JiraSearchContainer = props => {
160
160
  useEffect(() => {
161
161
  if (currentCloudId !== cloudId) {
162
162
  setBasicSearchTerm('');
163
- setJql(DEFAULT_JQL_QUERY);
163
+ setSearchBarJql(DEFAULT_JQL_QUERY);
164
164
  setIsComplexQuery(false);
165
165
  setOrderKey(undefined);
166
166
  setOrderDirection(undefined);
167
167
  setFilterSelections({});
168
168
  setCloudId(currentCloudId);
169
169
  }
170
- }, [currentCloudId, cloudId]);
170
+ }, [currentCloudId, cloudId, setSearchBarJql]);
171
171
  return jsx("div", {
172
172
  css: inputContainerStyles,
173
173
  "data-testid": "jira-search-container"
@@ -180,7 +180,7 @@ export const JiraSearchContainer = props => {
180
180
  onSearch: handleSearch,
181
181
  searchTerm: basicSearchTerm
182
182
  }), showBasicFilters && jsx(BasicFilters, {
183
- jql: jql,
183
+ jql: searchBarJql,
184
184
  cloudId: cloudId || '',
185
185
  onChange: handleBasicFilterSelectionChange,
186
186
  selections: filterSelections,
@@ -190,7 +190,7 @@ export const JiraSearchContainer = props => {
190
190
  isSearching: isSearching,
191
191
  onChange: onQueryChange,
192
192
  onSearch: handleSearch,
193
- query: jql
193
+ query: searchBarJql
194
194
  }), jsx(ModeSwitcher, {
195
195
  onOptionValueChange: onSearchMethodChange,
196
196
  selectedOptionValue: currentSearchMethod,
@@ -106,6 +106,7 @@ export const PlainJiraIssuesConfigModal = props => {
106
106
  const [currentViewMode, setCurrentViewMode] = useState(viewMode);
107
107
  const [cloudId, setCloudId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.cloudId);
108
108
  const [jql, setJql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql);
109
+ const [searchBarJql, setSearchBarJql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql);
109
110
  const [visibleColumnKeys, setVisibleColumnKeys] = useState(initialVisibleColumnKeys);
110
111
 
111
112
  // analytics related parameters
@@ -310,6 +311,11 @@ export const PlainJiraIssuesConfigModal = props => {
310
311
  if (!isParametersSet || !jql || !selectedJiraSite) {
311
312
  return;
312
313
  }
314
+
315
+ // During insertion, we want the JQL of the datasource to be whatever is in the search bar,
316
+ // even if the user didn't previously click search
317
+ const upToDateJql = searchBarJql !== null && searchBarJql !== void 0 ? searchBarJql : jql;
318
+ const upToDateJqlUrl = selectedJiraSite && jql && `${selectedJiraSite.url}/issues/?jql=${encodeURI(upToDateJql)}`;
313
319
  const filterSelectionCount = availableBasicFilterTypes.reduce((current, filter) => {
314
320
  var _basicFilterSelection;
315
321
  return {
@@ -360,7 +366,7 @@ export const PlainJiraIssuesConfigModal = props => {
360
366
  onInsert({
361
367
  type: 'inlineCard',
362
368
  attrs: {
363
- url: jqlUrl
369
+ url: upToDateJqlUrl
364
370
  }
365
371
  }, consumerEvent);
366
372
  } else if (responseItems.length === 1 && firstIssueUrl) {
@@ -375,12 +381,12 @@ export const PlainJiraIssuesConfigModal = props => {
375
381
  onInsert({
376
382
  type: 'blockCard',
377
383
  attrs: {
378
- url: jqlUrl,
384
+ url: upToDateJqlUrl,
379
385
  datasource: {
380
386
  id: datasourceId,
381
387
  parameters: {
382
388
  cloudId,
383
- jql // TODO support non JQL type
389
+ jql: upToDateJql // TODO support non JQL type
384
390
  },
385
391
 
386
392
  views: [{
@@ -396,7 +402,7 @@ export const PlainJiraIssuesConfigModal = props => {
396
402
  }
397
403
  }, consumerEvent);
398
404
  }
399
- }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId, columnCustomSizes]);
405
+ }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, cloudId, columnCustomSizes, searchBarJql]);
400
406
  const handleViewModeChange = selectedMode => {
401
407
  userInteractionActions.current.add(DatasourceAction.DISPLAY_VIEW_CHANGED);
402
408
  setCurrentViewMode(selectedMode);
@@ -460,7 +466,7 @@ export const PlainJiraIssuesConfigModal = props => {
460
466
  return jsx(AccessRequired, {
461
467
  url: selectedJiraSiteUrl || urlBeingEdited
462
468
  });
463
- } else if (resolvedWithNoResults) {
469
+ } else if (resolvedWithNoResults || status === 'forbidden') {
464
470
  return jsx(NoResults, null);
465
471
  } else if (status === 'empty' || !columns.length) {
466
472
  // persist the empty state when making the initial /data request which contains the columns
@@ -506,6 +512,8 @@ export const PlainJiraIssuesConfigModal = props => {
506
512
  onOptionValueChange: handleViewModeChange,
507
513
  selectedOptionValue: currentViewMode
508
514
  })), jsx(ModalBody, null, !hasNoJiraSites ? jsx(Fragment, null, jsx(JiraSearchContainer, {
515
+ setSearchBarJql: setSearchBarJql,
516
+ searchBarJql: searchBarJql,
509
517
  isSearching: status === 'loading',
510
518
  parameters: parameters,
511
519
  onSearch: onSearch,
@@ -1,5 +1,5 @@
1
1
  export var EVENT_CHANNEL = 'media';
2
2
  export var packageMetaData = {
3
3
  packageName: "@atlaskit/link-datasource",
4
- packageVersion: "1.19.17"
4
+ packageVersion: "1.19.18"
5
5
  };
@@ -91,13 +91,20 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
91
91
  _yield$getDatasourceD = _context.sent;
92
92
  access = _yield$getDatasourceD.meta.access;
93
93
  schema = _yield$getDatasourceD.data.schema;
94
- if (!(access === 'forbidden' || access === 'unauthorized')) {
94
+ if (!(access === 'unauthorized')) {
95
95
  _context.next = 11;
96
96
  break;
97
97
  }
98
98
  setStatus('unauthorized');
99
99
  return _context.abrupt("return");
100
100
  case 11:
101
+ if (!(access === 'forbidden')) {
102
+ _context.next = 14;
103
+ break;
104
+ }
105
+ setStatus('forbidden');
106
+ return _context.abrupt("return");
107
+ case 14:
101
108
  isColumnNotPresentInCurrentColumnsList = function isColumnNotPresentInCurrentColumnsList(col) {
102
109
  return !columns.find(function (column) {
103
110
  return column.key === col.key;
@@ -106,25 +113,32 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
106
113
  allColumns = schema.properties;
107
114
  newColumns = allColumns.filter(isColumnNotPresentInCurrentColumnsList);
108
115
  newColumns.length > 0 && setColumns([].concat(_toConsumableArray(columns), _toConsumableArray(newColumns)));
109
- _context.next = 24;
116
+ _context.next = 30;
110
117
  break;
111
- case 17:
112
- _context.prev = 17;
118
+ case 20:
119
+ _context.prev = 20;
113
120
  _context.t0 = _context["catch"](2);
114
121
  captureError('loadDatasourceDetails', _context.t0);
115
- if (!(_context.t0 instanceof Response && (_context.t0.status === 401 || _context.t0.status === 403))) {
116
- _context.next = 23;
122
+ if (!(_context.t0 instanceof Response && _context.t0.status === 401)) {
123
+ _context.next = 26;
117
124
  break;
118
125
  }
119
126
  setStatus('unauthorized');
120
127
  return _context.abrupt("return");
121
- case 23:
128
+ case 26:
129
+ if (!(_context.t0 instanceof Response && _context.t0.status === 403)) {
130
+ _context.next = 29;
131
+ break;
132
+ }
133
+ setStatus('forbidden');
134
+ return _context.abrupt("return");
135
+ case 29:
122
136
  setStatus('rejected');
123
- case 24:
137
+ case 30:
124
138
  case "end":
125
139
  return _context.stop();
126
140
  }
127
- }, _callee, null, [[2, 17]]);
141
+ }, _callee, null, [[2, 20]]);
128
142
  })), [captureError, columns, datasourceId, getDatasourceDetails, parameters]);
129
143
  var applySchemaProperties = useCallback(function (schema, fieldKeys) {
130
144
  var properties = schema.properties,
@@ -218,13 +232,20 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
218
232
  nextPageCursor = _yield$getDatasourceD4.nextPageCursor;
219
233
  _totalCount = _yield$getDatasourceD4.totalCount;
220
234
  schema = _yield$getDatasourceD4.schema;
221
- if (!(access === 'forbidden' || access === 'unauthorized')) {
235
+ if (!(access === 'unauthorized')) {
222
236
  _context2.next = 23;
223
237
  break;
224
238
  }
225
239
  setStatus('unauthorized');
226
240
  return _context2.abrupt("return");
227
241
  case 23:
242
+ if (!(access === 'forbidden')) {
243
+ _context2.next = 26;
244
+ break;
245
+ }
246
+ setStatus('forbidden');
247
+ return _context2.abrupt("return");
248
+ case 26:
228
249
  setExtensionKey(_extensionKey);
229
250
  setDestinationObjectTypes(_destinationObjectTypes);
230
251
  setTotalCount(_totalCount);
@@ -253,25 +274,32 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
253
274
  });
254
275
  }
255
276
  setStatus('resolved');
256
- _context2.next = 43;
277
+ _context2.next = 49;
257
278
  break;
258
- case 36:
259
- _context2.prev = 36;
279
+ case 39:
280
+ _context2.prev = 39;
260
281
  _context2.t0 = _context2["catch"](7);
261
282
  captureError('onNextPage', _context2.t0);
262
- if (!(_context2.t0 instanceof Response && (_context2.t0.status === 401 || _context2.t0.status === 403))) {
263
- _context2.next = 42;
283
+ if (!(_context2.t0 instanceof Response && _context2.t0.status === 401)) {
284
+ _context2.next = 45;
264
285
  break;
265
286
  }
266
287
  setStatus('unauthorized');
267
288
  return _context2.abrupt("return");
268
- case 42:
289
+ case 45:
290
+ if (!(_context2.t0 instanceof Response && _context2.t0.status === 403)) {
291
+ _context2.next = 48;
292
+ break;
293
+ }
294
+ setStatus('forbidden');
295
+ return _context2.abrupt("return");
296
+ case 48:
269
297
  setStatus('rejected');
270
- case 43:
298
+ case 49:
271
299
  case "end":
272
300
  return _context2.stop();
273
301
  }
274
- }, _callee2, null, [[7, 36]]);
302
+ }, _callee2, null, [[7, 39]]);
275
303
  })), [captureError, parameters, fieldKeys, nextCursor, getDatasourceData, datasourceId, responseItems === null || responseItems === void 0 ? void 0 : responseItems.length, applySchemaProperties, fireEvent, fullSchema]);
276
304
  var reset = useCallback(function (options) {
277
305
  setStatus('empty');
@@ -105,7 +105,7 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
105
105
  shouldForceRequest: true
106
106
  });
107
107
  }, [destinationObjectTypes, extensionKey, fireEvent, reset]);
108
- if (status === 'resolved' && !responseItems.length) {
108
+ if (status === 'resolved' && !responseItems.length || status === 'forbidden') {
109
109
  return jsx(NoResults, {
110
110
  onRefresh: reset
111
111
  });
@@ -36,10 +36,12 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
36
36
  parameters = props.parameters,
37
37
  onSearch = props.onSearch,
38
38
  onSearchMethodChangeCallback = props.onSearchMethodChange,
39
- initialSearchMethod = props.initialSearchMethod;
39
+ initialSearchMethod = props.initialSearchMethod,
40
+ setSearchBarJql = props.setSearchBarJql,
41
+ _props$searchBarJql = props.searchBarJql,
42
+ searchBarJql = _props$searchBarJql === void 0 ? DEFAULT_JQL_QUERY : _props$searchBarJql;
40
43
  var _ref = parameters || {},
41
- currentCloudId = _ref.cloudId,
42
- initialJql = _ref.jql;
44
+ currentCloudId = _ref.cloudId;
43
45
  var _useIntl = useIntl(),
44
46
  formatMessage = _useIntl.formatMessage;
45
47
  var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
@@ -52,37 +54,33 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
52
54
  _useState4 = _slicedToArray(_useState3, 2),
53
55
  currentSearchMethod = _useState4[0],
54
56
  setCurrentSearchMethod = _useState4[1];
55
- var _useState5 = useState(initialJql || DEFAULT_JQL_QUERY),
57
+ var _useState5 = useState(currentCloudId),
56
58
  _useState6 = _slicedToArray(_useState5, 2),
57
- jql = _useState6[0],
58
- setJql = _useState6[1];
59
- var _useState7 = useState(currentCloudId),
59
+ cloudId = _useState6[0],
60
+ setCloudId = _useState6[1];
61
+ var _useState7 = useState(false),
60
62
  _useState8 = _slicedToArray(_useState7, 2),
61
- cloudId = _useState8[0],
62
- setCloudId = _useState8[1];
63
- var _useState9 = useState(false),
63
+ isComplexQuery = _useState8[0],
64
+ setIsComplexQuery = _useState8[1];
65
+ var _useState9 = useState(),
64
66
  _useState10 = _slicedToArray(_useState9, 2),
65
- isComplexQuery = _useState10[0],
66
- setIsComplexQuery = _useState10[1];
67
+ orderKey = _useState10[0],
68
+ setOrderKey = _useState10[1];
67
69
  var _useState11 = useState(),
68
70
  _useState12 = _slicedToArray(_useState11, 2),
69
- orderKey = _useState12[0],
70
- setOrderKey = _useState12[1];
71
- var _useState13 = useState(),
71
+ orderDirection = _useState12[0],
72
+ setOrderDirection = _useState12[1];
73
+ var _useState13 = useState({}),
72
74
  _useState14 = _slicedToArray(_useState13, 2),
73
- orderDirection = _useState14[0],
74
- setOrderDirection = _useState14[1];
75
- var _useState15 = useState({}),
76
- _useState16 = _slicedToArray(_useState15, 2),
77
- filterSelections = _useState16[0],
78
- setFilterSelections = _useState16[1];
75
+ filterSelections = _useState14[0],
76
+ setFilterSelections = _useState14[1];
79
77
  var showBasicFilters = useMemo(function () {
80
78
  if (getBooleanFF('platform.linking-platform.datasource.show-jlol-basic-filters')) {
81
79
  return true;
82
80
  }
83
81
  return false;
84
82
  }, []);
85
- var _useHydrateJqlQuery = useHydrateJqlQuery(cloudId || '', jql),
83
+ var _useHydrateJqlQuery = useHydrateJqlQuery(cloudId || '', searchBarJql),
86
84
  hydratedOptions = _useHydrateJqlQuery.hydratedOptions,
87
85
  fetchHydratedJqlOptions = _useHydrateJqlQuery.fetchHydratedJqlOptions,
88
86
  basicFilterHydrationStatus = _useHydrateJqlQuery.status;
@@ -93,13 +91,13 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
93
91
  var handleBasicSearchChange = useCallback(function (e) {
94
92
  var rawSearch = e.currentTarget.value;
95
93
  setBasicSearchTerm(rawSearch);
96
- setJql(buildJQL({
94
+ setSearchBarJql(buildJQL({
97
95
  rawSearch: rawSearch,
98
96
  filterValues: filterSelections,
99
97
  orderDirection: orderDirection,
100
98
  orderKey: orderKey
101
99
  }));
102
- }, [filterSelections, orderDirection, orderKey]);
100
+ }, [setSearchBarJql, filterSelections, orderDirection, orderKey]);
103
101
  var onQueryChange = useCallback(function (query) {
104
102
  var _query$split$map$filt, _fragments$at, _fragments$at2, _fragments$at3;
105
103
  // determine if order keys have been set so they can be saved and persisted when changes occur in basic search
@@ -115,12 +113,12 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
115
113
  setOrderKey(key);
116
114
  setOrderDirection(order);
117
115
  }
118
- setJql(query);
119
- }, []);
116
+ setSearchBarJql(query);
117
+ }, [setSearchBarJql]);
120
118
  var handleSearch = useCallback(function () {
121
- var isCurrentQueryComplex = isQueryTooComplex(jql);
119
+ var isCurrentQueryComplex = isQueryTooComplex(searchBarJql);
122
120
  onSearch({
123
- jql: jql
121
+ jql: searchBarJql
124
122
  }, {
125
123
  searchMethod: currentSearchMethod,
126
124
  basicFilterSelections: filterSelections,
@@ -137,7 +135,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
137
135
  fetchHydratedJqlOptions();
138
136
  }
139
137
  }
140
- }, [currentSearchMethod, fetchHydratedJqlOptions, filterSelections, fireEvent, jql, onSearch, showBasicFilters]);
138
+ }, [currentSearchMethod, fetchHydratedJqlOptions, filterSelections, fireEvent, searchBarJql, onSearch, showBasicFilters]);
141
139
  var _useDebouncedCallback = useDebouncedCallback(function (filterValues) {
142
140
  var jqlWithFilterValues = buildJQL({
143
141
  rawSearch: basicSearchTerm,
@@ -145,7 +143,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
145
143
  orderDirection: orderDirection,
146
144
  orderKey: orderKey
147
145
  });
148
- setJql(jqlWithFilterValues);
146
+ setSearchBarJql(jqlWithFilterValues);
149
147
  var isCurrentQueryComplex = isQueryTooComplex(jqlWithFilterValues);
150
148
  onSearch({
151
149
  jql: jqlWithFilterValues
@@ -163,9 +161,9 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
163
161
  debouncedBasicFilterSelectionChange(updatedSelection);
164
162
  }, [debouncedBasicFilterSelectionChange, filterSelections]);
165
163
  useEffect(function () {
166
- var isCurrentQueryComplex = isQueryTooComplex(jql);
164
+ var isCurrentQueryComplex = isQueryTooComplex(searchBarJql);
167
165
  setIsComplexQuery(isCurrentQueryComplex);
168
- if (showBasicFilters && !isCurrentQueryComplex && jql !== DEFAULT_JQL_QUERY) {
166
+ if (showBasicFilters && !isCurrentQueryComplex && searchBarJql !== DEFAULT_JQL_QUERY) {
169
167
  fetchHydratedJqlOptions();
170
168
  }
171
169
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -183,14 +181,14 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
183
181
  useEffect(function () {
184
182
  if (currentCloudId !== cloudId) {
185
183
  setBasicSearchTerm('');
186
- setJql(DEFAULT_JQL_QUERY);
184
+ setSearchBarJql(DEFAULT_JQL_QUERY);
187
185
  setIsComplexQuery(false);
188
186
  setOrderKey(undefined);
189
187
  setOrderDirection(undefined);
190
188
  setFilterSelections({});
191
189
  setCloudId(currentCloudId);
192
190
  }
193
- }, [currentCloudId, cloudId]);
191
+ }, [currentCloudId, cloudId, setSearchBarJql]);
194
192
  return jsx("div", {
195
193
  css: inputContainerStyles,
196
194
  "data-testid": "jira-search-container"
@@ -203,7 +201,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
203
201
  onSearch: handleSearch,
204
202
  searchTerm: basicSearchTerm
205
203
  }), showBasicFilters && jsx(BasicFilters, {
206
- jql: jql,
204
+ jql: searchBarJql,
207
205
  cloudId: cloudId || '',
208
206
  onChange: handleBasicFilterSelectionChange,
209
207
  selections: filterSelections,
@@ -213,7 +211,7 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
213
211
  isSearching: isSearching,
214
212
  onChange: onQueryChange,
215
213
  onSearch: handleSearch,
216
- query: jql
214
+ query: searchBarJql
217
215
  }), jsx(ModeSwitcher, {
218
216
  onOptionValueChange: onSearchMethodChange,
219
217
  selectedOptionValue: currentSearchMethod,
@@ -124,19 +124,23 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
124
124
  _useState8 = _slicedToArray(_useState7, 2),
125
125
  jql = _useState8[0],
126
126
  setJql = _useState8[1];
127
- var _useState9 = useState(initialVisibleColumnKeys),
127
+ var _useState9 = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql),
128
128
  _useState10 = _slicedToArray(_useState9, 2),
129
- visibleColumnKeys = _useState10[0],
130
- setVisibleColumnKeys = _useState10[1];
129
+ searchBarJql = _useState10[0],
130
+ setSearchBarJql = _useState10[1];
131
+ var _useState11 = useState(initialVisibleColumnKeys),
132
+ _useState12 = _slicedToArray(_useState11, 2),
133
+ visibleColumnKeys = _useState12[0],
134
+ setVisibleColumnKeys = _useState12[1];
131
135
 
132
136
  // analytics related parameters
133
137
  var searchCount = useRef(0);
134
138
  var userInteractionActions = useRef(new Set());
135
139
  var initialSearchMethod = getBooleanFF('platform.linking-platform.datasource.show-jlol-basic-filters') && !isQueryTooComplex((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql) || '') ? 'basic' : 'jql';
136
- var _useState11 = useState(initialSearchMethod),
137
- _useState12 = _slicedToArray(_useState11, 2),
138
- currentSearchMethod = _useState12[0],
139
- setCurrentSearchMethod = _useState12[1];
140
+ var _useState13 = useState(initialSearchMethod),
141
+ _useState14 = _slicedToArray(_useState13, 2),
142
+ currentSearchMethod = _useState14[0],
143
+ setCurrentSearchMethod = _useState14[1];
140
144
  var searchMethodSearchedWith = useRef(null);
141
145
  var visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
142
146
  var basicFilterSelectionsSearchedWith = useRef({});
@@ -148,10 +152,10 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
148
152
  } : undefined;
149
153
  }, [cloudId, jql]);
150
154
  var isParametersSet = !!(jql && cloudId);
151
- var _useState13 = useState(initialColumnCustomSizes),
152
- _useState14 = _slicedToArray(_useState13, 2),
153
- columnCustomSizes = _useState14[0],
154
- setColumnCustomSizes = _useState14[1];
155
+ var _useState15 = useState(initialColumnCustomSizes),
156
+ _useState16 = _slicedToArray(_useState15, 2),
157
+ columnCustomSizes = _useState16[0],
158
+ setColumnCustomSizes = _useState16[1];
155
159
  var onColumnResize = useCallback(function (key, width) {
156
160
  setColumnCustomSizes(_objectSpread(_objectSpread({}, columnCustomSizes), {}, _defineProperty({}, key, width)));
157
161
  }, [columnCustomSizes]);
@@ -352,6 +356,11 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
352
356
  if (!isParametersSet || !jql || !selectedJiraSite) {
353
357
  return;
354
358
  }
359
+
360
+ // During insertion, we want the JQL of the datasource to be whatever is in the search bar,
361
+ // even if the user didn't previously click search
362
+ var upToDateJql = searchBarJql !== null && searchBarJql !== void 0 ? searchBarJql : jql;
363
+ var upToDateJqlUrl = selectedJiraSite && jql && "".concat(selectedJiraSite.url, "/issues/?jql=").concat(encodeURI(upToDateJql));
355
364
  var filterSelectionCount = availableBasicFilterTypes.reduce(function (current, filter) {
356
365
  var _basicFilterSelection;
357
366
  return _objectSpread(_objectSpread({}, current), {}, _defineProperty({}, "".concat(filter, "BasicFilterSelectionCount"), ((_basicFilterSelection = basicFilterSelectionsSearchedWith.current[filter]) === null || _basicFilterSelection === void 0 ? void 0 : _basicFilterSelection.length) || 0));
@@ -394,7 +403,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
394
403
  onInsert({
395
404
  type: 'inlineCard',
396
405
  attrs: {
397
- url: jqlUrl
406
+ url: upToDateJqlUrl
398
407
  }
399
408
  }, consumerEvent);
400
409
  } else if (responseItems.length === 1 && firstIssueUrl) {
@@ -409,12 +418,12 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
409
418
  onInsert({
410
419
  type: 'blockCard',
411
420
  attrs: {
412
- url: jqlUrl,
421
+ url: upToDateJqlUrl,
413
422
  datasource: {
414
423
  id: datasourceId,
415
424
  parameters: {
416
425
  cloudId: cloudId,
417
- jql: jql // TODO support non JQL type
426
+ jql: upToDateJql // TODO support non JQL type
418
427
  },
419
428
 
420
429
  views: [{
@@ -432,7 +441,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
432
441
  }
433
442
  }, consumerEvent);
434
443
  }
435
- }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, jqlUrl, datasourceId, cloudId, columnCustomSizes]);
444
+ }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, visibleColumnKeys, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, cloudId, columnCustomSizes, searchBarJql]);
436
445
  var handleViewModeChange = function handleViewModeChange(selectedMode) {
437
446
  userInteractionActions.current.add(DatasourceAction.DISPLAY_VIEW_CHANGED);
438
447
  setCurrentViewMode(selectedMode);
@@ -500,7 +509,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
500
509
  return jsx(AccessRequired, {
501
510
  url: selectedJiraSiteUrl || urlBeingEdited
502
511
  });
503
- } else if (resolvedWithNoResults) {
512
+ } else if (resolvedWithNoResults || status === 'forbidden') {
504
513
  return jsx(NoResults, null);
505
514
  } else if (status === 'empty' || !columns.length) {
506
515
  // persist the empty state when making the initial /data request which contains the columns
@@ -546,6 +555,8 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
546
555
  onOptionValueChange: handleViewModeChange,
547
556
  selectedOptionValue: currentViewMode
548
557
  })), jsx(ModalBody, null, !hasNoJiraSites ? jsx(Fragment, null, jsx(JiraSearchContainer, {
558
+ setSearchBarJql: setSearchBarJql,
559
+ searchBarJql: searchBarJql,
549
560
  isSearching: status === 'loading',
550
561
  parameters: parameters,
551
562
  onSearch: onSearch,
@@ -15,5 +15,7 @@ export interface SearchContainerProps {
15
15
  initialSearchMethod: JiraSearchMethod;
16
16
  onSearchMethodChange: (searchMethod: JiraSearchMethod) => void;
17
17
  parameters?: JiraIssueDatasourceParameters;
18
+ searchBarJql?: string;
19
+ setSearchBarJql: (jql: string) => void;
18
20
  }
19
21
  export declare const JiraSearchContainer: (props: SearchContainerProps) => jsx.JSX.Element;
@@ -15,5 +15,7 @@ export interface SearchContainerProps {
15
15
  initialSearchMethod: JiraSearchMethod;
16
16
  onSearchMethodChange: (searchMethod: JiraSearchMethod) => void;
17
17
  parameters?: JiraIssueDatasourceParameters;
18
+ searchBarJql?: string;
19
+ setSearchBarJql: (jql: string) => void;
18
20
  }
19
21
  export declare const JiraSearchContainer: (props: SearchContainerProps) => jsx.JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "1.19.17",
3
+ "version": "1.19.18",
4
4
  "description": "UI Components to support linking platform dataset feature",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"