@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +2 -2
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/transformers.js +7 -0
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/buildJQL.js +16 -7
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +18 -8
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +6 -2
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +3 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/transformers.js +7 -0
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/buildJQL.js +8 -3
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +16 -7
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +5 -1
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +2 -2
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/transformers.js +7 -0
- package/dist/esm/ui/jira-issues-modal/jira-search-container/buildJQL.js +16 -7
- package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +16 -7
- package/dist/esm/ui/jira-issues-modal/modal/index.js +6 -2
- package/dist/types/analytics/generated/analytics.types.d.ts +5 -2
- package/dist/types/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
- package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +5 -2
- package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
- 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
|
|
@@ -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
|
|
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 (
|
|
50
|
-
Object.entries(filterValues).forEach(function (
|
|
51
|
-
var
|
|
52
|
-
key =
|
|
53
|
-
filterFieldValues =
|
|
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 && !
|
|
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; }
|
|
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
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
});
|
|
@@ -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
|
-
|
|
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
|
|
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 (
|
|
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 && !
|
|
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
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
} : {})
|
|
@@ -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
|
|
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 (
|
|
43
|
-
Object.entries(filterValues).forEach(function (
|
|
44
|
-
var
|
|
45
|
-
key =
|
|
46
|
-
filterFieldValues =
|
|
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 && !
|
|
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
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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::
|
|
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::
|
|
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
|
+
"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.
|
|
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",
|