@atlaskit/link-datasource 1.19.3 → 1.19.5

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 (24) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +2 -2
  4. package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/transformers.js +7 -0
  5. package/dist/cjs/ui/jira-issues-modal/jira-search-container/buildJQL.js +16 -7
  6. package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +18 -8
  7. package/dist/cjs/ui/jira-issues-modal/modal/index.js +6 -2
  8. package/dist/es2019/analytics/constants.js +1 -1
  9. package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +3 -1
  10. package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/transformers.js +7 -0
  11. package/dist/es2019/ui/jira-issues-modal/jira-search-container/buildJQL.js +8 -3
  12. package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +16 -7
  13. package/dist/es2019/ui/jira-issues-modal/modal/index.js +5 -1
  14. package/dist/esm/analytics/constants.js +1 -1
  15. package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +2 -2
  16. package/dist/esm/ui/jira-issues-modal/basic-filters/utils/transformers.js +7 -0
  17. package/dist/esm/ui/jira-issues-modal/jira-search-container/buildJQL.js +16 -7
  18. package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +16 -7
  19. package/dist/esm/ui/jira-issues-modal/modal/index.js +6 -2
  20. package/dist/types/analytics/generated/analytics.types.d.ts +5 -2
  21. package/dist/types/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
  22. package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +5 -2
  23. package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
  24. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.19.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [#43878](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43878) [`0eaf28a90c3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0eaf28a90c3) - Fix an issue where undefined value for basicInputTextValue was breaking build JQL logic.
8
+
9
+ ## 1.19.4
10
+
11
+ ### Patch Changes
12
+
13
+ - [#43869](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43869) [`a46528b1133`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a46528b1133) - Update jql searched and insert click analytics events with isQueryComplex attribute.
14
+
3
15
  ## 1.19.3
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.3"
10
+ packageVersion: "1.19.5"
11
11
  };
@@ -55,9 +55,9 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
55
55
  */
56
56
  _extractValuesFromNon = (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key;
57
57
  _ref2 = text || summary || key || [], _ref3 = (0, _slicedToArray2.default)(_ref2, 1), textFieldValue = _ref3[0];
58
- mappedValues = _objectSpread(_objectSpread({}, (0, _transformers.mapHydrateResponseData)(response)), {}, {
58
+ mappedValues = _objectSpread(_objectSpread({}, (0, _transformers.mapHydrateResponseData)(response)), textFieldValue ? {
59
59
  basicInputTextValue: (0, _isClauseTooComplex.removeFuzzyCharacter)(textFieldValue)
60
- });
60
+ } : {});
61
61
  setHydratedOptions(mappedValues);
62
62
  setStatus('resolved');
63
63
  _context.next = 20;
@@ -84,6 +84,13 @@ function mapHydrateResponseData(_ref2) {
84
84
  var jqlTerm = _ref3.jqlTerm,
85
85
  _ref3$values = _ref3.values,
86
86
  values = _ref3$values === void 0 ? [] : _ref3$values;
87
+ /**
88
+ * Currently, the hydrate query does not support text field in JQL and returns as {} object.
89
+ * Hence we check if a valid jqlTerm is available
90
+ */
91
+ if (!jqlTerm) {
92
+ return;
93
+ }
87
94
  var options = values.map(function (_ref4) {
88
95
  var values = _ref4.values;
89
96
  return values && values[0] ? mapNodeToOption(values[0]) : null;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.fuzzyCharacter = exports.buildJQL = void 0;
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _jqlAst = require("@atlaskit/jql-ast");
10
+ var _ui = require("../basic-filters/ui");
10
11
  var fuzzySearchRegExp = /^"(.+)"$/;
11
12
  var jiraIssueKeyRegExp = /[A-Z]+-\d+/;
12
13
  var fuzzyCharacter = exports.fuzzyCharacter = '*';
@@ -27,7 +28,15 @@ var buildJQL = exports.buildJQL = function buildJQL(input) {
27
28
  orderKey = _input$orderKey === void 0 ? 'created' : _input$orderKey,
28
29
  filterValues = input.filterValues;
29
30
  var trimmedRawSearch = rawSearch.trim();
30
- var hasFilterSelectionValues = filterValues && Object.values(filterValues).some(function (value) {
31
+ var hasValidFilterSelectionAndValues = filterValues &&
32
+ // checks if filterValues have only valid keys
33
+ Object.entries(filterValues).every(function (_ref) {
34
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 1),
35
+ key = _ref2[0];
36
+ return _ui.availableBasicFilterTypes.includes(key);
37
+ }) &&
38
+ // checks if atleast one fitler value has some selection object
39
+ Object.values(filterValues).some(function (value) {
31
40
  return value.length > 0;
32
41
  });
33
42
  if (!query) {
@@ -46,11 +55,11 @@ var buildJQL = exports.buildJQL = function buildJQL(input) {
46
55
  var orClause = _jqlAst.creators.compoundClause(_jqlAst.creators.compoundOperator(_jqlAst.COMPOUND_OPERATOR_OR), orClauseFields);
47
56
  query.appendClause(orClause, _jqlAst.COMPOUND_OPERATOR_AND);
48
57
  }
49
- if (hasFilterSelectionValues) {
50
- Object.entries(filterValues).forEach(function (_ref) {
51
- var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
52
- key = _ref2[0],
53
- filterFieldValues = _ref2[1];
58
+ if (hasValidFilterSelectionAndValues) {
59
+ Object.entries(filterValues).forEach(function (_ref3) {
60
+ var _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
61
+ key = _ref4[0],
62
+ filterFieldValues = _ref4[1];
54
63
  if (filterFieldValues.length === 0) {
55
64
  return;
56
65
  }
@@ -60,7 +69,7 @@ var buildJQL = exports.buildJQL = function buildJQL(input) {
60
69
  query.appendClause(filterInClause, _jqlAst.COMPOUND_OPERATOR_AND);
61
70
  });
62
71
  }
63
- if (!trimmedRawSearch && !hasFilterSelectionValues) {
72
+ if (!trimmedRawSearch && !hasValidFilterSelectionAndValues) {
64
73
  var created = constructTerminalClause('created', _jqlAst.OPERATOR_GT_EQUALS, '-30d');
65
74
  query.appendClause(created, _jqlAst.COMPOUND_OPERATOR_AND);
66
75
  }
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.JiraSearchContainer = exports.ALLOWED_ORDER_BY_KEYS = void 0;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
12
  var _react = _interopRequireWildcard(require("react"));
12
13
  var _react2 = require("@emotion/react");
@@ -24,10 +25,12 @@ var _jqlEditor = require("../jql-editor");
24
25
  var _modeSwitcher = require("../mode-switcher");
25
26
  var _buildJQL = require("./buildJQL");
26
27
  var _messages = require("./messages");
28
+ var _excluded = ["basicInputTextValue"];
29
+ /** @jsx jsx */
27
30
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
31
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
32
  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; }
30
- 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; } /** @jsx jsx */
33
+ 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; }
31
34
  var inputContainerStyles = (0, _react2.css)({
32
35
  alignItems: 'baseline',
33
36
  display: 'flex',
@@ -122,17 +125,20 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
122
125
  setJql(query);
123
126
  }, []);
124
127
  var handleSearch = (0, _react.useCallback)(function () {
128
+ var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(jql);
125
129
  onSearch({
126
130
  jql: jql
127
131
  }, {
128
132
  searchMethod: currentSearchMethod,
129
- basicFilterSelections: filterSelections
133
+ basicFilterSelections: filterSelections,
134
+ isQueryComplex: isCurrentQueryComplex
130
135
  });
131
136
  if (currentSearchMethod === 'basic') {
132
137
  fireEvent('ui.form.submitted.basicSearch', {});
133
138
  } else if (currentSearchMethod === 'jql') {
134
- fireEvent('ui.jqlEditor.searched', {});
135
- var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(jql);
139
+ fireEvent('ui.jqlEditor.searched', {
140
+ isQueryComplex: isCurrentQueryComplex
141
+ });
136
142
  setIsComplexQuery(isCurrentQueryComplex);
137
143
  if (showBasicFilters && !isCurrentQueryComplex) {
138
144
  fetchHydratedJqlOptions();
@@ -147,11 +153,13 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
147
153
  orderKey: orderKey
148
154
  });
149
155
  setJql(jqlWithFilterValues);
156
+ var isCurrentQueryComplex = (0, _isQueryTooComplex.isQueryTooComplex)(jqlWithFilterValues);
150
157
  onSearch({
151
158
  jql: jqlWithFilterValues
152
159
  }, {
153
160
  searchMethod: currentSearchMethod,
154
- basicFilterSelections: filterSelections
161
+ basicFilterSelections: filterSelections,
162
+ isQueryComplex: isCurrentQueryComplex
155
163
  });
156
164
  }, _asyncPopupSelect.SEARCH_DEBOUNCE_MS),
157
165
  _useDebouncedCallback2 = (0, _slicedToArray2.default)(_useDebouncedCallback, 1),
@@ -170,9 +178,11 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
170
178
  }, []);
171
179
  (0, _react.useEffect)(function () {
172
180
  if (basicFilterHydrationStatus === 'resolved') {
173
- setFilterSelections(hydratedOptions);
174
- if (hydratedOptions.basicInputTextValue) {
175
- setBasicSearchTerm(hydratedOptions.basicInputTextValue);
181
+ var basicInputTextValue = hydratedOptions.basicInputTextValue,
182
+ hydratedFilterOptions = (0, _objectWithoutProperties2.default)(hydratedOptions, _excluded);
183
+ setFilterSelections(hydratedFilterOptions);
184
+ if (basicInputTextValue) {
185
+ setBasicSearchTerm(basicInputTextValue);
176
186
  }
177
187
  }
178
188
  }, [hydratedOptions, basicFilterHydrationStatus]);
@@ -142,6 +142,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
142
142
  var searchMethodSearchedWith = (0, _react.useRef)(null);
143
143
  var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
144
144
  var basicFilterSelectionsSearchedWith = (0, _react.useRef)({});
145
+ var isSearchedWithComplexQuery = (0, _react.useRef)(false);
145
146
  var parameters = (0, _react.useMemo)(function () {
146
147
  return !!cloudId ? {
147
148
  cloudId: cloudId,
@@ -308,10 +309,12 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
308
309
  (0, _useColumnPickerRenderedFailedUfoExperience.useColumnPickerRenderedFailedUfoExperience)(status, modalRenderInstanceId);
309
310
  var onSearch = (0, _react.useCallback)(function (newParameters, _ref2) {
310
311
  var searchMethod = _ref2.searchMethod,
311
- basicFilterSelections = _ref2.basicFilterSelections;
312
+ basicFilterSelections = _ref2.basicFilterSelections,
313
+ isQueryComplex = _ref2.isQueryComplex;
312
314
  searchCount.current++;
313
315
  searchMethodSearchedWith.current = searchMethod;
314
316
  basicFilterSelectionsSearchedWith.current = basicFilterSelections;
317
+ isSearchedWithComplexQuery.current = isQueryComplex;
315
318
  if (jql !== newParameters.jql) {
316
319
  userInteractionActions.current.add(_types.DatasourceAction.QUERY_UPDATED);
317
320
  }
@@ -362,7 +365,8 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
362
365
  display: getDisplayValue(currentViewMode, totalCount || 0),
363
366
  searchCount: searchCount.current,
364
367
  searchMethod: (0, _utils.mapSearchMethod)(searchMethodSearchedWith.current),
365
- actions: Array.from(userInteractionActions.current)
368
+ actions: Array.from(userInteractionActions.current),
369
+ isQueryComplex: isSearchedWithComplexQuery.current
366
370
  }, searchMethodSearchedWith.current === 'basic' ? _objectSpread({}, filterSelectionCount) : {}),
367
371
  eventType: 'ui'
368
372
  });
@@ -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.3"
4
+ packageVersion: "1.19.5"
5
5
  };
@@ -31,7 +31,9 @@ export const useHydrateJqlQuery = (cloudId, jql) => {
31
31
  const [textFieldValue] = text || summary || key || [];
32
32
  const mappedValues = {
33
33
  ...mapHydrateResponseData(response),
34
- basicInputTextValue: removeFuzzyCharacter(textFieldValue)
34
+ ...(textFieldValue ? {
35
+ basicInputTextValue: removeFuzzyCharacter(textFieldValue)
36
+ } : {})
35
37
  };
36
38
  setHydratedOptions(mappedValues);
37
39
  setStatus('resolved');
@@ -78,6 +78,13 @@ export function mapHydrateResponseData({
78
78
  jqlTerm,
79
79
  values = []
80
80
  }) => {
81
+ /**
82
+ * Currently, the hydrate query does not support text field in JQL and returns as {} object.
83
+ * Hence we check if a valid jqlTerm is available
84
+ */
85
+ if (!jqlTerm) {
86
+ return;
87
+ }
81
88
  const options = values.map(({
82
89
  values
83
90
  }) => values && values[0] ? mapNodeToOption(values[0]) : null).filter(isNonNullSelectOption) || [];
@@ -1,4 +1,5 @@
1
1
  import { COMPOUND_OPERATOR_AND, COMPOUND_OPERATOR_OR, creators, JastBuilder, OPERATOR_EQUALS, OPERATOR_GT_EQUALS, OPERATOR_IN, OPERATOR_LIKE, ORDER_BY_DIRECTION_ASC, ORDER_BY_DIRECTION_DESC, print } from '@atlaskit/jql-ast';
2
+ import { availableBasicFilterTypes } from '../basic-filters/ui';
2
3
  const fuzzySearchRegExp = /^"(.+)"$/;
3
4
  const jiraIssueKeyRegExp = /[A-Z]+-\d+/;
4
5
  export const fuzzyCharacter = '*';
@@ -19,7 +20,11 @@ export const buildJQL = input => {
19
20
  filterValues
20
21
  } = input;
21
22
  const trimmedRawSearch = rawSearch.trim();
22
- const hasFilterSelectionValues = filterValues && Object.values(filterValues).some(value => value.length > 0);
23
+ const hasValidFilterSelectionAndValues = filterValues &&
24
+ // checks if filterValues have only valid keys
25
+ Object.entries(filterValues).every(([key]) => availableBasicFilterTypes.includes(key)) &&
26
+ // checks if atleast one fitler value has some selection object
27
+ Object.values(filterValues).some(value => value.length > 0);
23
28
  if (!query) {
24
29
  return '';
25
30
  }
@@ -36,7 +41,7 @@ export const buildJQL = input => {
36
41
  const orClause = creators.compoundClause(creators.compoundOperator(COMPOUND_OPERATOR_OR), orClauseFields);
37
42
  query.appendClause(orClause, COMPOUND_OPERATOR_AND);
38
43
  }
39
- if (hasFilterSelectionValues) {
44
+ if (hasValidFilterSelectionAndValues) {
40
45
  Object.entries(filterValues).forEach(([key, filterFieldValues]) => {
41
46
  if (filterFieldValues.length === 0) {
42
47
  return;
@@ -45,7 +50,7 @@ export const buildJQL = input => {
45
50
  query.appendClause(filterInClause, COMPOUND_OPERATOR_AND);
46
51
  });
47
52
  }
48
- if (!trimmedRawSearch && !hasFilterSelectionValues) {
53
+ if (!trimmedRawSearch && !hasValidFilterSelectionAndValues) {
49
54
  const created = constructTerminalClause('created', OPERATOR_GT_EQUALS, '-30d');
50
55
  query.appendClause(created, COMPOUND_OPERATOR_AND);
51
56
  }
@@ -92,17 +92,20 @@ export const JiraSearchContainer = props => {
92
92
  setJql(query);
93
93
  }, []);
94
94
  const handleSearch = useCallback(() => {
95
+ const isCurrentQueryComplex = isQueryTooComplex(jql);
95
96
  onSearch({
96
97
  jql
97
98
  }, {
98
99
  searchMethod: currentSearchMethod,
99
- basicFilterSelections: filterSelections
100
+ basicFilterSelections: filterSelections,
101
+ isQueryComplex: isCurrentQueryComplex
100
102
  });
101
103
  if (currentSearchMethod === 'basic') {
102
104
  fireEvent('ui.form.submitted.basicSearch', {});
103
105
  } else if (currentSearchMethod === 'jql') {
104
- fireEvent('ui.jqlEditor.searched', {});
105
- const isCurrentQueryComplex = isQueryTooComplex(jql);
106
+ fireEvent('ui.jqlEditor.searched', {
107
+ isQueryComplex: isCurrentQueryComplex
108
+ });
106
109
  setIsComplexQuery(isCurrentQueryComplex);
107
110
  if (showBasicFilters && !isCurrentQueryComplex) {
108
111
  fetchHydratedJqlOptions();
@@ -117,11 +120,13 @@ export const JiraSearchContainer = props => {
117
120
  orderKey
118
121
  });
119
122
  setJql(jqlWithFilterValues);
123
+ const isCurrentQueryComplex = isQueryTooComplex(jqlWithFilterValues);
120
124
  onSearch({
121
125
  jql: jqlWithFilterValues
122
126
  }, {
123
127
  searchMethod: currentSearchMethod,
124
- basicFilterSelections: filterSelections
128
+ basicFilterSelections: filterSelections,
129
+ isQueryComplex: isCurrentQueryComplex
125
130
  });
126
131
  }, SEARCH_DEBOUNCE_MS);
127
132
  const handleBasicFilterSelectionChange = useCallback(filterValues => {
@@ -138,9 +143,13 @@ export const JiraSearchContainer = props => {
138
143
  }, []);
139
144
  useEffect(() => {
140
145
  if (basicFilterHydrationStatus === 'resolved') {
141
- setFilterSelections(hydratedOptions);
142
- if (hydratedOptions.basicInputTextValue) {
143
- setBasicSearchTerm(hydratedOptions.basicInputTextValue);
146
+ const {
147
+ basicInputTextValue,
148
+ ...hydratedFilterOptions
149
+ } = hydratedOptions;
150
+ setFilterSelections(hydratedFilterOptions);
151
+ if (basicInputTextValue) {
152
+ setBasicSearchTerm(basicInputTextValue);
144
153
  }
145
154
  }
146
155
  }, [hydratedOptions, basicFilterHydrationStatus]);
@@ -109,6 +109,7 @@ export const PlainJiraIssuesConfigModal = props => {
109
109
  const searchMethodSearchedWith = useRef(null);
110
110
  const visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
111
111
  const basicFilterSelectionsSearchedWith = useRef({});
112
+ const isSearchedWithComplexQuery = useRef(false);
112
113
  const parameters = useMemo(() => !!cloudId ? {
113
114
  cloudId,
114
115
  jql: jql || ''
@@ -256,11 +257,13 @@ export const PlainJiraIssuesConfigModal = props => {
256
257
  useColumnPickerRenderedFailedUfoExperience(status, modalRenderInstanceId);
257
258
  const onSearch = useCallback((newParameters, {
258
259
  searchMethod,
259
- basicFilterSelections
260
+ basicFilterSelections,
261
+ isQueryComplex
260
262
  }) => {
261
263
  searchCount.current++;
262
264
  searchMethodSearchedWith.current = searchMethod;
263
265
  basicFilterSelectionsSearchedWith.current = basicFilterSelections;
266
+ isSearchedWithComplexQuery.current = isQueryComplex;
264
267
  if (jql !== newParameters.jql) {
265
268
  userInteractionActions.current.add(DatasourceAction.QUERY_UPDATED);
266
269
  }
@@ -316,6 +319,7 @@ export const PlainJiraIssuesConfigModal = props => {
316
319
  searchCount: searchCount.current,
317
320
  searchMethod: mapSearchMethod(searchMethodSearchedWith.current),
318
321
  actions: Array.from(userInteractionActions.current),
322
+ isQueryComplex: isSearchedWithComplexQuery.current,
319
323
  ...(searchMethodSearchedWith.current === 'basic' ? {
320
324
  ...filterSelectionCount
321
325
  } : {})
@@ -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.3"
4
+ packageVersion: "1.19.5"
5
5
  };
@@ -48,9 +48,9 @@ export var useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
48
48
  */
49
49
  _extractValuesFromNon = extractValuesFromNonComplexJQL(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key;
50
50
  _ref2 = text || summary || key || [], _ref3 = _slicedToArray(_ref2, 1), textFieldValue = _ref3[0];
51
- mappedValues = _objectSpread(_objectSpread({}, mapHydrateResponseData(response)), {}, {
51
+ mappedValues = _objectSpread(_objectSpread({}, mapHydrateResponseData(response)), textFieldValue ? {
52
52
  basicInputTextValue: removeFuzzyCharacter(textFieldValue)
53
- });
53
+ } : {});
54
54
  setHydratedOptions(mappedValues);
55
55
  setStatus('resolved');
56
56
  _context.next = 20;
@@ -74,6 +74,13 @@ export function mapHydrateResponseData(_ref2) {
74
74
  var jqlTerm = _ref3.jqlTerm,
75
75
  _ref3$values = _ref3.values,
76
76
  values = _ref3$values === void 0 ? [] : _ref3$values;
77
+ /**
78
+ * Currently, the hydrate query does not support text field in JQL and returns as {} object.
79
+ * Hence we check if a valid jqlTerm is available
80
+ */
81
+ if (!jqlTerm) {
82
+ return;
83
+ }
77
84
  var options = values.map(function (_ref4) {
78
85
  var values = _ref4.values;
79
86
  return values && values[0] ? mapNodeToOption(values[0]) : null;
@@ -1,5 +1,6 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { COMPOUND_OPERATOR_AND, COMPOUND_OPERATOR_OR, creators, JastBuilder, OPERATOR_EQUALS, OPERATOR_GT_EQUALS, OPERATOR_IN, OPERATOR_LIKE, ORDER_BY_DIRECTION_ASC, ORDER_BY_DIRECTION_DESC, print } from '@atlaskit/jql-ast';
3
+ import { availableBasicFilterTypes } from '../basic-filters/ui';
3
4
  var fuzzySearchRegExp = /^"(.+)"$/;
4
5
  var jiraIssueKeyRegExp = /[A-Z]+-\d+/;
5
6
  export var fuzzyCharacter = '*';
@@ -20,7 +21,15 @@ export var buildJQL = function buildJQL(input) {
20
21
  orderKey = _input$orderKey === void 0 ? 'created' : _input$orderKey,
21
22
  filterValues = input.filterValues;
22
23
  var trimmedRawSearch = rawSearch.trim();
23
- var hasFilterSelectionValues = filterValues && Object.values(filterValues).some(function (value) {
24
+ var hasValidFilterSelectionAndValues = filterValues &&
25
+ // checks if filterValues have only valid keys
26
+ Object.entries(filterValues).every(function (_ref) {
27
+ var _ref2 = _slicedToArray(_ref, 1),
28
+ key = _ref2[0];
29
+ return availableBasicFilterTypes.includes(key);
30
+ }) &&
31
+ // checks if atleast one fitler value has some selection object
32
+ Object.values(filterValues).some(function (value) {
24
33
  return value.length > 0;
25
34
  });
26
35
  if (!query) {
@@ -39,11 +48,11 @@ export var buildJQL = function buildJQL(input) {
39
48
  var orClause = creators.compoundClause(creators.compoundOperator(COMPOUND_OPERATOR_OR), orClauseFields);
40
49
  query.appendClause(orClause, COMPOUND_OPERATOR_AND);
41
50
  }
42
- if (hasFilterSelectionValues) {
43
- Object.entries(filterValues).forEach(function (_ref) {
44
- var _ref2 = _slicedToArray(_ref, 2),
45
- key = _ref2[0],
46
- filterFieldValues = _ref2[1];
51
+ if (hasValidFilterSelectionAndValues) {
52
+ Object.entries(filterValues).forEach(function (_ref3) {
53
+ var _ref4 = _slicedToArray(_ref3, 2),
54
+ key = _ref4[0],
55
+ filterFieldValues = _ref4[1];
47
56
  if (filterFieldValues.length === 0) {
48
57
  return;
49
58
  }
@@ -53,7 +62,7 @@ export var buildJQL = function buildJQL(input) {
53
62
  query.appendClause(filterInClause, COMPOUND_OPERATOR_AND);
54
63
  });
55
64
  }
56
- if (!trimmedRawSearch && !hasFilterSelectionValues) {
65
+ if (!trimmedRawSearch && !hasValidFilterSelectionAndValues) {
57
66
  var created = constructTerminalClause('created', OPERATOR_GT_EQUALS, '-30d');
58
67
  query.appendClause(created, COMPOUND_OPERATOR_AND);
59
68
  }
@@ -1,5 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ var _excluded = ["basicInputTextValue"];
3
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
7
  /** @jsx jsx */
@@ -113,17 +115,20 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
113
115
  setJql(query);
114
116
  }, []);
115
117
  var handleSearch = useCallback(function () {
118
+ var isCurrentQueryComplex = isQueryTooComplex(jql);
116
119
  onSearch({
117
120
  jql: jql
118
121
  }, {
119
122
  searchMethod: currentSearchMethod,
120
- basicFilterSelections: filterSelections
123
+ basicFilterSelections: filterSelections,
124
+ isQueryComplex: isCurrentQueryComplex
121
125
  });
122
126
  if (currentSearchMethod === 'basic') {
123
127
  fireEvent('ui.form.submitted.basicSearch', {});
124
128
  } else if (currentSearchMethod === 'jql') {
125
- fireEvent('ui.jqlEditor.searched', {});
126
- var isCurrentQueryComplex = isQueryTooComplex(jql);
129
+ fireEvent('ui.jqlEditor.searched', {
130
+ isQueryComplex: isCurrentQueryComplex
131
+ });
127
132
  setIsComplexQuery(isCurrentQueryComplex);
128
133
  if (showBasicFilters && !isCurrentQueryComplex) {
129
134
  fetchHydratedJqlOptions();
@@ -138,11 +143,13 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
138
143
  orderKey: orderKey
139
144
  });
140
145
  setJql(jqlWithFilterValues);
146
+ var isCurrentQueryComplex = isQueryTooComplex(jqlWithFilterValues);
141
147
  onSearch({
142
148
  jql: jqlWithFilterValues
143
149
  }, {
144
150
  searchMethod: currentSearchMethod,
145
- basicFilterSelections: filterSelections
151
+ basicFilterSelections: filterSelections,
152
+ isQueryComplex: isCurrentQueryComplex
146
153
  });
147
154
  }, SEARCH_DEBOUNCE_MS),
148
155
  _useDebouncedCallback2 = _slicedToArray(_useDebouncedCallback, 1),
@@ -161,9 +168,11 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
161
168
  }, []);
162
169
  useEffect(function () {
163
170
  if (basicFilterHydrationStatus === 'resolved') {
164
- setFilterSelections(hydratedOptions);
165
- if (hydratedOptions.basicInputTextValue) {
166
- setBasicSearchTerm(hydratedOptions.basicInputTextValue);
171
+ var basicInputTextValue = hydratedOptions.basicInputTextValue,
172
+ hydratedFilterOptions = _objectWithoutProperties(hydratedOptions, _excluded);
173
+ setFilterSelections(hydratedFilterOptions);
174
+ if (basicInputTextValue) {
175
+ setBasicSearchTerm(basicInputTextValue);
167
176
  }
168
177
  }
169
178
  }, [hydratedOptions, basicFilterHydrationStatus]);
@@ -133,6 +133,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
133
133
  var searchMethodSearchedWith = useRef(null);
134
134
  var visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
135
135
  var basicFilterSelectionsSearchedWith = useRef({});
136
+ var isSearchedWithComplexQuery = useRef(false);
136
137
  var parameters = useMemo(function () {
137
138
  return !!cloudId ? {
138
139
  cloudId: cloudId,
@@ -299,10 +300,12 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
299
300
  useColumnPickerRenderedFailedUfoExperience(status, modalRenderInstanceId);
300
301
  var onSearch = useCallback(function (newParameters, _ref2) {
301
302
  var searchMethod = _ref2.searchMethod,
302
- basicFilterSelections = _ref2.basicFilterSelections;
303
+ basicFilterSelections = _ref2.basicFilterSelections,
304
+ isQueryComplex = _ref2.isQueryComplex;
303
305
  searchCount.current++;
304
306
  searchMethodSearchedWith.current = searchMethod;
305
307
  basicFilterSelectionsSearchedWith.current = basicFilterSelections;
308
+ isSearchedWithComplexQuery.current = isQueryComplex;
306
309
  if (jql !== newParameters.jql) {
307
310
  userInteractionActions.current.add(DatasourceAction.QUERY_UPDATED);
308
311
  }
@@ -353,7 +356,8 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
353
356
  display: getDisplayValue(currentViewMode, totalCount || 0),
354
357
  searchCount: searchCount.current,
355
358
  searchMethod: mapSearchMethod(searchMethodSearchedWith.current),
356
- actions: Array.from(userInteractionActions.current)
359
+ actions: Array.from(userInteractionActions.current),
360
+ isQueryComplex: isSearchedWithComplexQuery.current
357
361
  }, searchMethodSearchedWith.current === 'basic' ? _objectSpread({}, filterSelectionCount) : {}),
358
362
  eventType: 'ui'
359
363
  });
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::650bd05729c6d9d8eb143f643a8c34c2>>
6
+ * @codegen <<SignedSource::32dd97482f811937fcb07590b84179dd>>
7
7
  * @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen link-datasource
8
8
  */
9
9
  export type PackageMetaDataType = {
@@ -21,7 +21,9 @@ export type ModalReadyDatasourceAttributesType = {
21
21
  instancesCount: number | null;
22
22
  schemasCount: number | null;
23
23
  };
24
- export type JqlEditorSearchedAttributesType = {};
24
+ export type JqlEditorSearchedAttributesType = {
25
+ isQueryComplex: boolean;
26
+ };
25
27
  export type FormSubmittedBasicSearchAttributesType = {};
26
28
  export type EmptyResultShownDatasourceAttributesType = {};
27
29
  export type ErrorShownAttributesType = {
@@ -40,6 +42,7 @@ export type ButtonClickedInsertAttributesType = {
40
42
  searchMethod: 'datasource_search_query' | 'datasource_basic_filter' | 'datasource_saved_filter' | null;
41
43
  extensionKey: string | null;
42
44
  actions: unknown[];
45
+ isQueryComplex: boolean;
43
46
  };
44
47
  export type ButtonClickedCancelAttributesType = {
45
48
  searchCount: number;
@@ -8,6 +8,7 @@ export interface SearchContainerProps {
8
8
  onSearch: (query: JiraIssueDatasourceParametersQuery, { searchMethod, basicFilterSelections, }: {
9
9
  searchMethod: JiraSearchMethod;
10
10
  basicFilterSelections: SelectedOptionsMap;
11
+ isQueryComplex: boolean;
11
12
  }) => void;
12
13
  initialSearchMethod: JiraSearchMethod;
13
14
  onSearchMethodChange: (searchMethod: JiraSearchMethod) => void;
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::650bd05729c6d9d8eb143f643a8c34c2>>
6
+ * @codegen <<SignedSource::32dd97482f811937fcb07590b84179dd>>
7
7
  * @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen link-datasource
8
8
  */
9
9
  export type PackageMetaDataType = {
@@ -21,7 +21,9 @@ export type ModalReadyDatasourceAttributesType = {
21
21
  instancesCount: number | null;
22
22
  schemasCount: number | null;
23
23
  };
24
- export type JqlEditorSearchedAttributesType = {};
24
+ export type JqlEditorSearchedAttributesType = {
25
+ isQueryComplex: boolean;
26
+ };
25
27
  export type FormSubmittedBasicSearchAttributesType = {};
26
28
  export type EmptyResultShownDatasourceAttributesType = {};
27
29
  export type ErrorShownAttributesType = {
@@ -40,6 +42,7 @@ export type ButtonClickedInsertAttributesType = {
40
42
  searchMethod: 'datasource_search_query' | 'datasource_basic_filter' | 'datasource_saved_filter' | null;
41
43
  extensionKey: string | null;
42
44
  actions: unknown[];
45
+ isQueryComplex: boolean;
43
46
  };
44
47
  export type ButtonClickedCancelAttributesType = {
45
48
  searchCount: number;
@@ -8,6 +8,7 @@ export interface SearchContainerProps {
8
8
  onSearch: (query: JiraIssueDatasourceParametersQuery, { searchMethod, basicFilterSelections, }: {
9
9
  searchMethod: JiraSearchMethod;
10
10
  basicFilterSelections: SelectedOptionsMap;
11
+ isQueryComplex: boolean;
11
12
  }) => void;
12
13
  initialSearchMethod: JiraSearchMethod;
13
14
  onSearchMethodChange: (searchMethod: JiraSearchMethod) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "1.19.3",
3
+ "version": "1.19.5",
4
4
  "description": "UI Components to support linking platform dataset feature",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -46,7 +46,7 @@
46
46
  "@atlaskit/jql-ast": "^3.0.0",
47
47
  "@atlaskit/jql-editor-autocomplete-rest": "^2.0.0",
48
48
  "@atlaskit/link-client-extension": "^1.8.0",
49
- "@atlaskit/linking-common": "^4.20.0",
49
+ "@atlaskit/linking-common": "^4.21.0",
50
50
  "@atlaskit/linking-types": "^8.5.0",
51
51
  "@atlaskit/lozenge": "^11.4.0",
52
52
  "@atlaskit/modal-dialog": "^12.9.0",