@atlaskit/link-datasource 1.19.2 → 1.19.3
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 +7 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +20 -7
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +93 -0
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +2 -2
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +3 -0
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +17 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +64 -0
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +1 -1
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +3 -0
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.js +20 -7
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js +87 -0
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +1 -1
- package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +3 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.d.ts +3 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.d.ts +4 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useHydrateJqlQuery.d.ts +3 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.d.ts +4 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.d.ts +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.19.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#43787](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43787) [`a9738b4c894`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a9738b4c894) - Logic to parse text value from JQL and pre-populate input box in basic mode.
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
|
|
3
10
|
## 1.19.2
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -6,11 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.useHydrateJqlQuery = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
12
|
var _react = require("react");
|
|
12
13
|
var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
|
|
14
|
+
var _extractValuesFromNonComplexJQL = require("../utils/extractValuesFromNonComplexJQL");
|
|
15
|
+
var _isClauseTooComplex = require("../utils/isClauseTooComplex");
|
|
13
16
|
var _transformers = require("../utils/transformers");
|
|
17
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
|
+
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; }
|
|
14
19
|
var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
|
|
15
20
|
var _useState = (0, _react.useState)({}),
|
|
16
21
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -27,7 +32,7 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
|
|
|
27
32
|
var _useBasicFilterAGG = (0, _useBasicFilterAGG2.useBasicFilterAGG)(),
|
|
28
33
|
getHydratedJQL = _useBasicFilterAGG.getHydratedJQL;
|
|
29
34
|
var fetchHydratedJqlOptions = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
30
|
-
var response;
|
|
35
|
+
var response, _extractValuesFromNon, text, summary, key, _ref2, _ref3, textFieldValue, mappedValues;
|
|
31
36
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
32
37
|
while (1) switch (_context.prev = _context.next) {
|
|
33
38
|
case 0:
|
|
@@ -45,20 +50,28 @@ var useHydrateJqlQuery = exports.useHydrateJqlQuery = function useHydrateJqlQuer
|
|
|
45
50
|
setErrors(response.errors);
|
|
46
51
|
return _context.abrupt("return");
|
|
47
52
|
case 9:
|
|
48
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Hydrate logic does not return text field, hence we parse and extract value from jql
|
|
55
|
+
*/
|
|
56
|
+
_extractValuesFromNon = (0, _extractValuesFromNonComplexJQL.extractValuesFromNonComplexJQL)(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key;
|
|
57
|
+
_ref2 = text || summary || key || [], _ref3 = (0, _slicedToArray2.default)(_ref2, 1), textFieldValue = _ref3[0];
|
|
58
|
+
mappedValues = _objectSpread(_objectSpread({}, (0, _transformers.mapHydrateResponseData)(response)), {}, {
|
|
59
|
+
basicInputTextValue: (0, _isClauseTooComplex.removeFuzzyCharacter)(textFieldValue)
|
|
60
|
+
});
|
|
61
|
+
setHydratedOptions(mappedValues);
|
|
49
62
|
setStatus('resolved');
|
|
50
|
-
_context.next =
|
|
63
|
+
_context.next = 20;
|
|
51
64
|
break;
|
|
52
|
-
case
|
|
53
|
-
_context.prev =
|
|
65
|
+
case 16:
|
|
66
|
+
_context.prev = 16;
|
|
54
67
|
_context.t0 = _context["catch"](0);
|
|
55
68
|
setErrors([_context.t0]);
|
|
56
69
|
setStatus('rejected');
|
|
57
|
-
case
|
|
70
|
+
case 20:
|
|
58
71
|
case "end":
|
|
59
72
|
return _context.stop();
|
|
60
73
|
}
|
|
61
|
-
}, _callee, null, [[0,
|
|
74
|
+
}, _callee, null, [[0, 16]]);
|
|
62
75
|
})), [cloudId, getHydratedJQL, jql]);
|
|
63
76
|
(0, _react.useEffect)(function () {
|
|
64
77
|
if (status !== 'rejected' && errors.length !== 0) {
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.extractValuesFromNonComplexJQL = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
11
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
var _mergeWith = _interopRequireDefault(require("lodash/mergeWith"));
|
|
16
|
+
var _jqlAst = require("@atlaskit/jql-ast");
|
|
17
|
+
var _isQueryTooComplex = require("./isQueryTooComplex");
|
|
18
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
19
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
20
|
+
// Map of field keys to their respective clauses in the Jast
|
|
21
|
+
|
|
22
|
+
var getFieldValues = function getFieldValues(operand) {
|
|
23
|
+
switch (operand.operandType) {
|
|
24
|
+
case _jqlAst.OPERAND_TYPE_LIST:
|
|
25
|
+
return operand.values.map(function (value) {
|
|
26
|
+
return value.operandType === _jqlAst.OPERAND_TYPE_VALUE && value.value || undefined;
|
|
27
|
+
}).filter(function (value) {
|
|
28
|
+
return !!value;
|
|
29
|
+
});
|
|
30
|
+
case _jqlAst.OPERAND_TYPE_VALUE:
|
|
31
|
+
return operand.value ? [operand.value] : [];
|
|
32
|
+
case _jqlAst.OPERAND_TYPE_KEYWORD:
|
|
33
|
+
return operand.value === _jqlAst.OPERAND_EMPTY ? [operand.value] : [];
|
|
34
|
+
default:
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Rather than having to navigate the entire tree structure ourself, we extend AbstractJastVisitor
|
|
41
|
+
* class and implement visitField to walk through each field and value.
|
|
42
|
+
* */
|
|
43
|
+
var JqlClauseCollectingVisitor = /*#__PURE__*/function (_AbstractJastVisitor) {
|
|
44
|
+
(0, _inherits2.default)(JqlClauseCollectingVisitor, _AbstractJastVisitor);
|
|
45
|
+
var _super = _createSuper(JqlClauseCollectingVisitor);
|
|
46
|
+
function JqlClauseCollectingVisitor() {
|
|
47
|
+
var _this;
|
|
48
|
+
(0, _classCallCheck2.default)(this, JqlClauseCollectingVisitor);
|
|
49
|
+
_this = _super.call(this);
|
|
50
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "visitField", function (field) {
|
|
51
|
+
var _field$value;
|
|
52
|
+
var fieldName = (_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.toLowerCase();
|
|
53
|
+
var fieldParent = field.parent;
|
|
54
|
+
if (!fieldParent) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// we do not want to parse and store the order by field+value
|
|
59
|
+
var fieldGrandParent = fieldParent.parent;
|
|
60
|
+
if (fieldGrandParent.type === _jqlAst.NODE_TYPE_ORDER_BY) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
var operand = fieldParent.operand;
|
|
64
|
+
var fieldValues = operand && getFieldValues(operand) || [];
|
|
65
|
+
return (0, _defineProperty2.default)({}, fieldName, fieldValues);
|
|
66
|
+
});
|
|
67
|
+
return _this;
|
|
68
|
+
}
|
|
69
|
+
(0, _createClass2.default)(JqlClauseCollectingVisitor, [{
|
|
70
|
+
key: "aggregateResult",
|
|
71
|
+
value: function aggregateResult(aggregate, nextResult) {
|
|
72
|
+
return (0, _mergeWith.default)(aggregate, nextResult, function (destValue, srcValue) {
|
|
73
|
+
return srcValue.concat(destValue !== null && destValue !== void 0 ? destValue : []);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}, {
|
|
77
|
+
key: "defaultResult",
|
|
78
|
+
value: function defaultResult() {
|
|
79
|
+
return {};
|
|
80
|
+
}
|
|
81
|
+
}]);
|
|
82
|
+
return JqlClauseCollectingVisitor;
|
|
83
|
+
}(_jqlAst.AbstractJastVisitor);
|
|
84
|
+
var extractValuesFromNonComplexJQL = exports.extractValuesFromNonComplexJQL = function extractValuesFromNonComplexJQL(jql) {
|
|
85
|
+
if ((0, _isQueryTooComplex.isQueryTooComplex)(jql)) {
|
|
86
|
+
return {};
|
|
87
|
+
}
|
|
88
|
+
var jast = new _jqlAst.JastBuilder().build(jql);
|
|
89
|
+
var jqlClauseCollectingVisitor = new JqlClauseCollectingVisitor();
|
|
90
|
+
var mappedValues = jast.query ? jast.query.accept(jqlClauseCollectingVisitor) || {} : {}; // jast.query is defined as void | Query, hence the fallback
|
|
91
|
+
|
|
92
|
+
return mappedValues;
|
|
93
|
+
};
|
|
@@ -4,11 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.isClauseTooComplex = void 0;
|
|
7
|
+
exports.removeFuzzyCharacter = exports.isClauseTooComplex = void 0;
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _jqlAst = require("@atlaskit/jql-ast");
|
|
10
10
|
var _buildJQL = require("../../jira-search-container/buildJQL");
|
|
11
|
-
var removeFuzzyCharacter = function removeFuzzyCharacter(value) {
|
|
11
|
+
var removeFuzzyCharacter = exports.removeFuzzyCharacter = function removeFuzzyCharacter(value) {
|
|
12
12
|
if (value !== null && value !== void 0 && value.endsWith(_buildJQL.fuzzyCharacter)) {
|
|
13
13
|
return value.slice(0, -1);
|
|
14
14
|
}
|
|
@@ -171,6 +171,9 @@ var JiraSearchContainer = exports.JiraSearchContainer = function JiraSearchConta
|
|
|
171
171
|
(0, _react.useEffect)(function () {
|
|
172
172
|
if (basicFilterHydrationStatus === 'resolved') {
|
|
173
173
|
setFilterSelections(hydratedOptions);
|
|
174
|
+
if (hydratedOptions.basicInputTextValue) {
|
|
175
|
+
setBasicSearchTerm(hydratedOptions.basicInputTextValue);
|
|
176
|
+
}
|
|
174
177
|
}
|
|
175
178
|
}, [hydratedOptions, basicFilterHydrationStatus]);
|
|
176
179
|
var handleSelectionChange = (0, _react.useCallback)(function (filterType, options) {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { useBasicFilterAGG } from '../../../../services/useBasicFilterAGG';
|
|
3
|
+
import { extractValuesFromNonComplexJQL } from '../utils/extractValuesFromNonComplexJQL';
|
|
4
|
+
import { removeFuzzyCharacter } from '../utils/isClauseTooComplex';
|
|
3
5
|
import { mapHydrateResponseData } from '../utils/transformers';
|
|
4
6
|
export const useHydrateJqlQuery = (cloudId, jql) => {
|
|
5
7
|
const [hydratedOptions, setHydratedOptions] = useState({});
|
|
@@ -17,7 +19,21 @@ export const useHydrateJqlQuery = (cloudId, jql) => {
|
|
|
17
19
|
setErrors(response.errors);
|
|
18
20
|
return;
|
|
19
21
|
}
|
|
20
|
-
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Hydrate logic does not return text field, hence we parse and extract value from jql
|
|
25
|
+
*/
|
|
26
|
+
const {
|
|
27
|
+
text,
|
|
28
|
+
summary,
|
|
29
|
+
key
|
|
30
|
+
} = extractValuesFromNonComplexJQL(jql);
|
|
31
|
+
const [textFieldValue] = text || summary || key || [];
|
|
32
|
+
const mappedValues = {
|
|
33
|
+
...mapHydrateResponseData(response),
|
|
34
|
+
basicInputTextValue: removeFuzzyCharacter(textFieldValue)
|
|
35
|
+
};
|
|
36
|
+
setHydratedOptions(mappedValues);
|
|
21
37
|
setStatus('resolved');
|
|
22
38
|
} catch (error) {
|
|
23
39
|
setErrors([error]);
|
package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/extractValuesFromNonComplexJQL.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import mergeWith from 'lodash/mergeWith';
|
|
3
|
+
import { AbstractJastVisitor, JastBuilder, NODE_TYPE_ORDER_BY, OPERAND_EMPTY, OPERAND_TYPE_KEYWORD, OPERAND_TYPE_LIST, OPERAND_TYPE_VALUE } from '@atlaskit/jql-ast';
|
|
4
|
+
import { isQueryTooComplex } from './isQueryTooComplex';
|
|
5
|
+
|
|
6
|
+
// Map of field keys to their respective clauses in the Jast
|
|
7
|
+
|
|
8
|
+
const getFieldValues = operand => {
|
|
9
|
+
switch (operand.operandType) {
|
|
10
|
+
case OPERAND_TYPE_LIST:
|
|
11
|
+
return operand.values.map(value => value.operandType === OPERAND_TYPE_VALUE && value.value || undefined).filter(value => !!value);
|
|
12
|
+
case OPERAND_TYPE_VALUE:
|
|
13
|
+
return operand.value ? [operand.value] : [];
|
|
14
|
+
case OPERAND_TYPE_KEYWORD:
|
|
15
|
+
return operand.value === OPERAND_EMPTY ? [operand.value] : [];
|
|
16
|
+
default:
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Rather than having to navigate the entire tree structure ourself, we extend AbstractJastVisitor
|
|
23
|
+
* class and implement visitField to walk through each field and value.
|
|
24
|
+
* */
|
|
25
|
+
class JqlClauseCollectingVisitor extends AbstractJastVisitor {
|
|
26
|
+
constructor() {
|
|
27
|
+
super();
|
|
28
|
+
_defineProperty(this, "visitField", field => {
|
|
29
|
+
var _field$value;
|
|
30
|
+
const fieldName = (_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.toLowerCase();
|
|
31
|
+
const fieldParent = field.parent;
|
|
32
|
+
if (!fieldParent) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// we do not want to parse and store the order by field+value
|
|
37
|
+
const fieldGrandParent = fieldParent.parent;
|
|
38
|
+
if (fieldGrandParent.type === NODE_TYPE_ORDER_BY) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const operand = fieldParent.operand;
|
|
42
|
+
const fieldValues = operand && getFieldValues(operand) || [];
|
|
43
|
+
return {
|
|
44
|
+
[fieldName]: fieldValues
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
aggregateResult(aggregate, nextResult) {
|
|
49
|
+
return mergeWith(aggregate, nextResult, (destValue, srcValue) => srcValue.concat(destValue !== null && destValue !== void 0 ? destValue : []));
|
|
50
|
+
}
|
|
51
|
+
defaultResult() {
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export const extractValuesFromNonComplexJQL = jql => {
|
|
56
|
+
if (isQueryTooComplex(jql)) {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
const jast = new JastBuilder().build(jql);
|
|
60
|
+
const jqlClauseCollectingVisitor = new JqlClauseCollectingVisitor();
|
|
61
|
+
const mappedValues = jast.query ? jast.query.accept(jqlClauseCollectingVisitor) || {} : {}; // jast.query is defined as void | Query, hence the fallback
|
|
62
|
+
|
|
63
|
+
return mappedValues;
|
|
64
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CLAUSE_TYPE_COMPOUND, CLAUSE_TYPE_TERMINAL, OPERAND_TYPE_VALUE } from '@atlaskit/jql-ast';
|
|
2
2
|
import { fuzzyCharacter } from '../../jira-search-container/buildJQL';
|
|
3
|
-
const removeFuzzyCharacter = value => {
|
|
3
|
+
export const removeFuzzyCharacter = value => {
|
|
4
4
|
if (value !== null && value !== void 0 && value.endsWith(fuzzyCharacter)) {
|
|
5
5
|
return value.slice(0, -1);
|
|
6
6
|
}
|
|
@@ -139,6 +139,9 @@ export const JiraSearchContainer = props => {
|
|
|
139
139
|
useEffect(() => {
|
|
140
140
|
if (basicFilterHydrationStatus === 'resolved') {
|
|
141
141
|
setFilterSelections(hydratedOptions);
|
|
142
|
+
if (hydratedOptions.basicInputTextValue) {
|
|
143
|
+
setBasicSearchTerm(hydratedOptions.basicInputTextValue);
|
|
144
|
+
}
|
|
142
145
|
}
|
|
143
146
|
}, [hydratedOptions, basicFilterHydrationStatus]);
|
|
144
147
|
const handleSelectionChange = useCallback((filterType, options) => {
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
4
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
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; }
|
|
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; }
|
|
4
7
|
import { useCallback, useEffect, useState } from 'react';
|
|
5
8
|
import { useBasicFilterAGG } from '../../../../services/useBasicFilterAGG';
|
|
9
|
+
import { extractValuesFromNonComplexJQL } from '../utils/extractValuesFromNonComplexJQL';
|
|
10
|
+
import { removeFuzzyCharacter } from '../utils/isClauseTooComplex';
|
|
6
11
|
import { mapHydrateResponseData } from '../utils/transformers';
|
|
7
12
|
export var useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
|
|
8
13
|
var _useState = useState({}),
|
|
@@ -20,7 +25,7 @@ export var useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
|
|
|
20
25
|
var _useBasicFilterAGG = useBasicFilterAGG(),
|
|
21
26
|
getHydratedJQL = _useBasicFilterAGG.getHydratedJQL;
|
|
22
27
|
var fetchHydratedJqlOptions = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
23
|
-
var response;
|
|
28
|
+
var response, _extractValuesFromNon, text, summary, key, _ref2, _ref3, textFieldValue, mappedValues;
|
|
24
29
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
25
30
|
while (1) switch (_context.prev = _context.next) {
|
|
26
31
|
case 0:
|
|
@@ -38,20 +43,28 @@ export var useHydrateJqlQuery = function useHydrateJqlQuery(cloudId, jql) {
|
|
|
38
43
|
setErrors(response.errors);
|
|
39
44
|
return _context.abrupt("return");
|
|
40
45
|
case 9:
|
|
41
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Hydrate logic does not return text field, hence we parse and extract value from jql
|
|
48
|
+
*/
|
|
49
|
+
_extractValuesFromNon = extractValuesFromNonComplexJQL(jql), text = _extractValuesFromNon.text, summary = _extractValuesFromNon.summary, key = _extractValuesFromNon.key;
|
|
50
|
+
_ref2 = text || summary || key || [], _ref3 = _slicedToArray(_ref2, 1), textFieldValue = _ref3[0];
|
|
51
|
+
mappedValues = _objectSpread(_objectSpread({}, mapHydrateResponseData(response)), {}, {
|
|
52
|
+
basicInputTextValue: removeFuzzyCharacter(textFieldValue)
|
|
53
|
+
});
|
|
54
|
+
setHydratedOptions(mappedValues);
|
|
42
55
|
setStatus('resolved');
|
|
43
|
-
_context.next =
|
|
56
|
+
_context.next = 20;
|
|
44
57
|
break;
|
|
45
|
-
case
|
|
46
|
-
_context.prev =
|
|
58
|
+
case 16:
|
|
59
|
+
_context.prev = 16;
|
|
47
60
|
_context.t0 = _context["catch"](0);
|
|
48
61
|
setErrors([_context.t0]);
|
|
49
62
|
setStatus('rejected');
|
|
50
|
-
case
|
|
63
|
+
case 20:
|
|
51
64
|
case "end":
|
|
52
65
|
return _context.stop();
|
|
53
66
|
}
|
|
54
|
-
}, _callee, null, [[0,
|
|
67
|
+
}, _callee, null, [[0, 16]]);
|
|
55
68
|
})), [cloudId, getHydratedJQL, jql]);
|
|
56
69
|
useEffect(function () {
|
|
57
70
|
if (status !== 'rejected' && errors.length !== 0) {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
+
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
|
|
4
|
+
import _inherits from "@babel/runtime/helpers/inherits";
|
|
5
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
6
|
+
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
7
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
8
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
9
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
10
|
+
import mergeWith from 'lodash/mergeWith';
|
|
11
|
+
import { AbstractJastVisitor, JastBuilder, NODE_TYPE_ORDER_BY, OPERAND_EMPTY, OPERAND_TYPE_KEYWORD, OPERAND_TYPE_LIST, OPERAND_TYPE_VALUE } from '@atlaskit/jql-ast';
|
|
12
|
+
import { isQueryTooComplex } from './isQueryTooComplex';
|
|
13
|
+
|
|
14
|
+
// Map of field keys to their respective clauses in the Jast
|
|
15
|
+
|
|
16
|
+
var getFieldValues = function getFieldValues(operand) {
|
|
17
|
+
switch (operand.operandType) {
|
|
18
|
+
case OPERAND_TYPE_LIST:
|
|
19
|
+
return operand.values.map(function (value) {
|
|
20
|
+
return value.operandType === OPERAND_TYPE_VALUE && value.value || undefined;
|
|
21
|
+
}).filter(function (value) {
|
|
22
|
+
return !!value;
|
|
23
|
+
});
|
|
24
|
+
case OPERAND_TYPE_VALUE:
|
|
25
|
+
return operand.value ? [operand.value] : [];
|
|
26
|
+
case OPERAND_TYPE_KEYWORD:
|
|
27
|
+
return operand.value === OPERAND_EMPTY ? [operand.value] : [];
|
|
28
|
+
default:
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Rather than having to navigate the entire tree structure ourself, we extend AbstractJastVisitor
|
|
35
|
+
* class and implement visitField to walk through each field and value.
|
|
36
|
+
* */
|
|
37
|
+
var JqlClauseCollectingVisitor = /*#__PURE__*/function (_AbstractJastVisitor) {
|
|
38
|
+
_inherits(JqlClauseCollectingVisitor, _AbstractJastVisitor);
|
|
39
|
+
var _super = _createSuper(JqlClauseCollectingVisitor);
|
|
40
|
+
function JqlClauseCollectingVisitor() {
|
|
41
|
+
var _this;
|
|
42
|
+
_classCallCheck(this, JqlClauseCollectingVisitor);
|
|
43
|
+
_this = _super.call(this);
|
|
44
|
+
_defineProperty(_assertThisInitialized(_this), "visitField", function (field) {
|
|
45
|
+
var _field$value;
|
|
46
|
+
var fieldName = (_field$value = field.value) === null || _field$value === void 0 ? void 0 : _field$value.toLowerCase();
|
|
47
|
+
var fieldParent = field.parent;
|
|
48
|
+
if (!fieldParent) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// we do not want to parse and store the order by field+value
|
|
53
|
+
var fieldGrandParent = fieldParent.parent;
|
|
54
|
+
if (fieldGrandParent.type === NODE_TYPE_ORDER_BY) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
var operand = fieldParent.operand;
|
|
58
|
+
var fieldValues = operand && getFieldValues(operand) || [];
|
|
59
|
+
return _defineProperty({}, fieldName, fieldValues);
|
|
60
|
+
});
|
|
61
|
+
return _this;
|
|
62
|
+
}
|
|
63
|
+
_createClass(JqlClauseCollectingVisitor, [{
|
|
64
|
+
key: "aggregateResult",
|
|
65
|
+
value: function aggregateResult(aggregate, nextResult) {
|
|
66
|
+
return mergeWith(aggregate, nextResult, function (destValue, srcValue) {
|
|
67
|
+
return srcValue.concat(destValue !== null && destValue !== void 0 ? destValue : []);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}, {
|
|
71
|
+
key: "defaultResult",
|
|
72
|
+
value: function defaultResult() {
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
}]);
|
|
76
|
+
return JqlClauseCollectingVisitor;
|
|
77
|
+
}(AbstractJastVisitor);
|
|
78
|
+
export var extractValuesFromNonComplexJQL = function extractValuesFromNonComplexJQL(jql) {
|
|
79
|
+
if (isQueryTooComplex(jql)) {
|
|
80
|
+
return {};
|
|
81
|
+
}
|
|
82
|
+
var jast = new JastBuilder().build(jql);
|
|
83
|
+
var jqlClauseCollectingVisitor = new JqlClauseCollectingVisitor();
|
|
84
|
+
var mappedValues = jast.query ? jast.query.accept(jqlClauseCollectingVisitor) || {} : {}; // jast.query is defined as void | Query, hence the fallback
|
|
85
|
+
|
|
86
|
+
return mappedValues;
|
|
87
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import { CLAUSE_TYPE_COMPOUND, CLAUSE_TYPE_TERMINAL, OPERAND_TYPE_VALUE } from '@atlaskit/jql-ast';
|
|
3
3
|
import { fuzzyCharacter } from '../../jira-search-container/buildJQL';
|
|
4
|
-
var removeFuzzyCharacter = function removeFuzzyCharacter(value) {
|
|
4
|
+
export var removeFuzzyCharacter = function removeFuzzyCharacter(value) {
|
|
5
5
|
if (value !== null && value !== void 0 && value.endsWith(fuzzyCharacter)) {
|
|
6
6
|
return value.slice(0, -1);
|
|
7
7
|
}
|
|
@@ -162,6 +162,9 @@ export var JiraSearchContainer = function JiraSearchContainer(props) {
|
|
|
162
162
|
useEffect(function () {
|
|
163
163
|
if (basicFilterHydrationStatus === 'resolved') {
|
|
164
164
|
setFilterSelections(hydratedOptions);
|
|
165
|
+
if (hydratedOptions.basicInputTextValue) {
|
|
166
|
+
setBasicSearchTerm(hydratedOptions.basicInputTextValue);
|
|
167
|
+
}
|
|
165
168
|
}
|
|
166
169
|
}, [hydratedOptions, basicFilterHydrationStatus]);
|
|
167
170
|
var handleSelectionChange = useCallback(function (filterType, options) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SelectedOptionsMap } from '../types';
|
|
2
2
|
export interface HydrateJqlState {
|
|
3
|
-
hydratedOptions: SelectedOptionsMap
|
|
3
|
+
hydratedOptions: SelectedOptionsMap & {
|
|
4
|
+
basicInputTextValue?: string;
|
|
5
|
+
};
|
|
4
6
|
fetchHydratedJqlOptions: () => Promise<void>;
|
|
5
7
|
status: 'empty' | 'loading' | 'resolved' | 'rejected';
|
|
6
8
|
errors: unknown[];
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SelectedOptionsMap } from '../types';
|
|
2
2
|
export interface HydrateJqlState {
|
|
3
|
-
hydratedOptions: SelectedOptionsMap
|
|
3
|
+
hydratedOptions: SelectedOptionsMap & {
|
|
4
|
+
basicInputTextValue?: string;
|
|
5
|
+
};
|
|
4
6
|
fetchHydratedJqlOptions: () => Promise<void>;
|
|
5
7
|
status: 'empty' | 'loading' | 'resolved' | 'rejected';
|
|
6
8
|
errors: unknown[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/link-datasource",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.3",
|
|
4
4
|
"description": "UI Components to support linking platform dataset feature",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@atlaskit/linking-common": "^4.20.0",
|
|
50
50
|
"@atlaskit/linking-types": "^8.5.0",
|
|
51
51
|
"@atlaskit/lozenge": "^11.4.0",
|
|
52
|
-
"@atlaskit/modal-dialog": "^12.
|
|
52
|
+
"@atlaskit/modal-dialog": "^12.9.0",
|
|
53
53
|
"@atlaskit/platform-feature-flags": "^0.2.4",
|
|
54
54
|
"@atlaskit/pragmatic-drag-and-drop": "^0.24.0",
|
|
55
55
|
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^0.12.0",
|