@atlaskit/link-datasource 1.12.3 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/services/useBasicFilterAGG.js +40 -82
- package/dist/cjs/services/utils.js +1 -1
- package/dist/cjs/ui/issue-like-table/draggable-table-heading.js +0 -12
- package/dist/cjs/ui/issue-like-table/styled.js +1 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +94 -0
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +24 -13
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/index.js +3 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +93 -0
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.js +146 -0
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/transformers.js +15 -3
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/buildJQL.js +3 -2
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/index.js +23 -9
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/messages.js +5 -0
- package/dist/cjs/ui/jira-issues-modal/mode-switcher/index.js +28 -16
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/services/useBasicFilterAGG.js +30 -53
- package/dist/es2019/services/utils.js +1 -1
- package/dist/es2019/ui/issue-like-table/draggable-table-heading.js +0 -12
- package/dist/es2019/ui/issue-like-table/styled.js +16 -4
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +52 -0
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +15 -7
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/index.js +3 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +77 -0
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.js +105 -0
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/transformers.js +14 -2
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/buildJQL.js +2 -1
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/index.js +15 -4
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/messages.js +5 -0
- package/dist/es2019/ui/jira-issues-modal/mode-switcher/index.js +19 -9
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/services/useBasicFilterAGG.js +41 -83
- package/dist/esm/services/utils.js +1 -1
- package/dist/esm/ui/issue-like-table/draggable-table-heading.js +0 -12
- package/dist/esm/ui/issue-like-table/styled.js +1 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +87 -0
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +24 -13
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/index.js +3 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.js +86 -0
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.js +140 -0
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/transformers.js +12 -2
- package/dist/esm/ui/jira-issues-modal/jira-search-container/buildJQL.js +2 -1
- package/dist/esm/ui/jira-issues-modal/jira-search-container/index.js +23 -9
- package/dist/esm/ui/jira-issues-modal/jira-search-container/messages.js +5 -0
- package/dist/esm/ui/jira-issues-modal/mode-switcher/index.js +29 -17
- package/dist/types/services/useBasicFilterAGG.d.ts +9 -1
- package/dist/types/services/utils.d.ts +1 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +18 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +2 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/index.d.ts +2 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.d.ts +2 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.d.ts +1 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/utils/transformers.d.ts +3 -1
- package/dist/types/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +1 -0
- package/dist/types/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
- package/dist/types/ui/jira-issues-modal/jira-search-container/messages.d.ts +5 -0
- package/dist/types/ui/jira-issues-modal/mode-switcher/index.d.ts +2 -0
- package/dist/types-ts4.5/services/useBasicFilterAGG.d.ts +9 -1
- package/dist/types-ts4.5/services/utils.d.ts +1 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +18 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/isClauseTooComplex.d.ts +2 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/isQueryTooComplex.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/utils/transformers.d.ts +3 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/index.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/messages.d.ts +5 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/mode-switcher/index.d.ts +2 -0
- package/package.json +1 -2
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.js +0 -75
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.js +0 -12
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.js +0 -20
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.js +0 -155
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.js +0 -82
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.js +0 -87
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.js +0 -97
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.js +0 -18
- package/dist/cjs/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.js +0 -111
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.js +0 -39
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.js +0 -6
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.js +0 -14
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.js +0 -149
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.js +0 -76
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.js +0 -81
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.js +0 -91
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.js +0 -12
- package/dist/es2019/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.js +0 -105
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.js +0 -68
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.js +0 -6
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.js +0 -14
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.js +0 -149
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.js +0 -76
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.js +0 -81
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.js +0 -91
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.js +0 -12
- package/dist/esm/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.js +0 -105
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.d.ts +0 -12
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.d.ts +0 -3
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.d.ts +0 -3
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.d.ts +0 -17
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.d.ts +0 -8
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.d.ts +0 -8
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.d.ts +0 -8
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.d.ts +0 -3
- package/dist/types/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.d.ts +0 -29
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFieldValues.d.ts +0 -12
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useIsComplexQuery.d.ts +0 -3
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesEmptyResponse.d.ts +0 -3
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesExpectedResponseForAssignees.d.ts +0 -17
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForProjects.d.ts +0 -8
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForStatuses.d.ts +0 -8
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/fieldValuesStandardResponseForTypes.d.ts +0 -8
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlEmptyResponse.d.ts +0 -3
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/mocks/hydrateJqlStandardResponse.d.ts +0 -29
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.13.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#42523](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42523) [`8cf0628d658`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8cf0628d658) - Add logic to disable switching to Basic mode when the query is complex
|
|
8
|
+
|
|
9
|
+
## 1.12.4
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#42612](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42612) [`eb39b74b03b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/eb39b74b03b) - Adds hook to get field values from graphQL for basic filters.
|
|
14
|
+
- [#42598](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42598) [`6105d017042`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6105d017042) - [ux] Updated styles of the table header.
|
|
15
|
+
|
|
3
16
|
## 1.12.3
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -19,97 +19,55 @@ var useBasicFilterAGG = exports.useBasicFilterAGG = function useBasicFilterAGG()
|
|
|
19
19
|
var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
|
|
20
20
|
client = _useSmartLinkContext.connections.client;
|
|
21
21
|
var gatewayGraphqlUrl = getGraphqlUrl(client.envKey, client.baseUrlOverride);
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
'Content-Type': 'application/json',
|
|
25
|
-
'X-ExperimentalApi': 'JiraJqlBuilder'
|
|
26
|
-
});
|
|
27
|
-
}, []);
|
|
28
|
-
var getHydratedJQL = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
29
|
-
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(cloudId, jql) {
|
|
30
|
-
var body, request, response;
|
|
22
|
+
var requestCall = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
23
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(body) {
|
|
31
24
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
32
25
|
while (1) switch (_context.prev = _context.next) {
|
|
33
26
|
case 0:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
operationName: 'hydrate',
|
|
40
|
-
query: _utils.hydrateJQLQuery
|
|
41
|
-
});
|
|
42
|
-
request = new Request(gatewayGraphqlUrl, {
|
|
43
|
-
method: 'POST',
|
|
44
|
-
headers: aggHeaders,
|
|
45
|
-
body: body
|
|
46
|
-
});
|
|
47
|
-
_context.prev = 2;
|
|
48
|
-
_context.next = 5;
|
|
49
|
-
return fetch(request);
|
|
50
|
-
case 5:
|
|
51
|
-
response = _context.sent;
|
|
52
|
-
return _context.abrupt("return", response.json());
|
|
53
|
-
case 9:
|
|
54
|
-
_context.prev = 9;
|
|
55
|
-
_context.t0 = _context["catch"](2);
|
|
56
|
-
throw new Error(_context.t0);
|
|
57
|
-
case 12:
|
|
27
|
+
return _context.abrupt("return", (0, _linkingCommon.request)('post', gatewayGraphqlUrl, body, {
|
|
28
|
+
'X-ExperimentalApi': 'JiraJqlBuilder'
|
|
29
|
+
}, [200, 201, 202, 203, 204]));
|
|
30
|
+
case 1:
|
|
58
31
|
case "end":
|
|
59
32
|
return _context.stop();
|
|
60
33
|
}
|
|
61
|
-
}, _callee
|
|
34
|
+
}, _callee);
|
|
62
35
|
}));
|
|
63
|
-
return function (_x
|
|
36
|
+
return function (_x) {
|
|
64
37
|
return _ref.apply(this, arguments);
|
|
65
38
|
};
|
|
66
|
-
}(), [gatewayGraphqlUrl
|
|
67
|
-
var
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return _context2.abrupt("return", _context2.sent);
|
|
99
|
-
case 11:
|
|
100
|
-
_context2.prev = 11;
|
|
101
|
-
_context2.t0 = _context2["catch"](2);
|
|
102
|
-
throw new Error(_context2.t0);
|
|
103
|
-
case 14:
|
|
104
|
-
case "end":
|
|
105
|
-
return _context2.stop();
|
|
106
|
-
}
|
|
107
|
-
}, _callee2, null, [[2, 11]]);
|
|
108
|
-
}));
|
|
109
|
-
return function (_x3, _x4, _x5, _x6, _x7) {
|
|
110
|
-
return _ref2.apply(this, arguments);
|
|
111
|
-
};
|
|
112
|
-
}(), [gatewayGraphqlUrl, aggHeaders]);
|
|
39
|
+
}(), [gatewayGraphqlUrl]);
|
|
40
|
+
var getHydratedJQL = (0, _react.useCallback)(function (cloudId, jql) {
|
|
41
|
+
return requestCall({
|
|
42
|
+
variables: {
|
|
43
|
+
cloudId: cloudId,
|
|
44
|
+
jql: jql
|
|
45
|
+
},
|
|
46
|
+
operationName: 'hydrate',
|
|
47
|
+
query: _utils.hydrateJQLQuery
|
|
48
|
+
});
|
|
49
|
+
}, [requestCall]);
|
|
50
|
+
var getFieldValues = (0, _react.useCallback)(function (_ref2) {
|
|
51
|
+
var cloudId = _ref2.cloudId,
|
|
52
|
+
_ref2$jql = _ref2.jql,
|
|
53
|
+
jql = _ref2$jql === void 0 ? '' : _ref2$jql,
|
|
54
|
+
jqlTerm = _ref2.jqlTerm,
|
|
55
|
+
_ref2$searchString = _ref2.searchString,
|
|
56
|
+
searchString = _ref2$searchString === void 0 ? '' : _ref2$searchString,
|
|
57
|
+
pageCursor = _ref2.pageCursor;
|
|
58
|
+
return requestCall({
|
|
59
|
+
variables: {
|
|
60
|
+
cloudId: cloudId,
|
|
61
|
+
jql: jql,
|
|
62
|
+
first: 10,
|
|
63
|
+
jqlTerm: jqlTerm,
|
|
64
|
+
searchString: searchString,
|
|
65
|
+
after: pageCursor
|
|
66
|
+
},
|
|
67
|
+
operationName: 'fieldValues',
|
|
68
|
+
query: _utils.fieldValuesQuery
|
|
69
|
+
});
|
|
70
|
+
}, [requestCall]);
|
|
113
71
|
return (0, _react.useMemo)(function () {
|
|
114
72
|
return {
|
|
115
73
|
getHydratedJQL: getHydratedJQL,
|
|
@@ -5,4 +5,4 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.hydrateJQLQuery = exports.fieldValuesQuery = void 0;
|
|
7
7
|
var hydrateJQLQuery = exports.hydrateJQLQuery = "query hydrate($cloudId: ID!, $jql: String!) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n hydrateJqlQuery(query: $jql) {\n ... on JiraJqlHydratedQuery {\n fields {\n ... on JiraJqlQueryHydratedField {\n jqlTerm\n values {\n ... on JiraJqlQueryHydratedValue {\n values {\n ... on JiraJqlProjectFieldValue {\n jqlTerm\n displayName\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n jqlTerm\n displayName\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n jqlTerm\n displayName\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlUserFieldValue {\n jqlTerm\n displayName\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n jqlTerm\n displayName\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n}";
|
|
8
|
-
var fieldValuesQuery = exports.fieldValuesQuery = "query fieldValues($cloudId: ID!, $first: Int = 10, $jqlTerm: String!, $jql: String!, $searchString: String!, $after: String
|
|
8
|
+
var fieldValuesQuery = exports.fieldValuesQuery = "query fieldValues($cloudId: ID!, $first: Int = 10, $jqlTerm: String!, $jql: String!, $searchString: String!, $after: String) {\n jira {\n jqlBuilder(cloudId: $cloudId) {\n fieldValues(\n first: $first\n jqlTerm: $jqlTerm\n jqlContext: $jql\n searchString: $searchString\n after: $after\n ) {\n totalCount\n pageInfo {\n endCursor\n }\n edges {\n node {\n jqlTerm\n displayName\n ... on JiraJqlProjectFieldValue {\n project {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlIssueTypeFieldValue {\n issueTypes {\n avatar {\n small\n }\n }\n }\n ... on JiraJqlStatusFieldValue {\n statusCategory {\n colorName\n }\n }\n ... on JiraJqlUserFieldValue {\n user {\n picture\n }\n }\n ... on JiraJqlGroupFieldValue {\n group {\n name\n }\n }\n }\n }\n }\n }\n }\n}";
|
|
@@ -22,17 +22,6 @@ var _styled = require("./styled");
|
|
|
22
22
|
var _index = require("./index");
|
|
23
23
|
/** @jsx jsx */
|
|
24
24
|
|
|
25
|
-
var tableHeadingStatusStyles = {
|
|
26
|
-
idle: (0, _react2.css)({
|
|
27
|
-
':hover': {
|
|
28
|
-
background: "var(--ds-surface-hovered, #091E4224)"
|
|
29
|
-
}
|
|
30
|
-
}),
|
|
31
|
-
dragging: (0, _react2.css)({
|
|
32
|
-
background: "var(--ds-background-disabled, #091E4224)",
|
|
33
|
-
color: "var(--ds-text-disabled, #091E424F)"
|
|
34
|
-
})
|
|
35
|
-
};
|
|
36
25
|
var verticallyAlignedStyles = (0, _react2.css)({
|
|
37
26
|
display: 'flex',
|
|
38
27
|
alignItems: 'center',
|
|
@@ -275,7 +264,6 @@ var DraggableTableHeading = exports.DraggableTableHeading = function DraggableTa
|
|
|
275
264
|
}, [id, index, onWidthChange, state, tableId, width]);
|
|
276
265
|
return (0, _react2.jsx)(_styled.TableHeading, {
|
|
277
266
|
ref: mainHeaderCellRef,
|
|
278
|
-
css: [tableHeadingStatusStyles[state.type]],
|
|
279
267
|
"data-testid": "".concat(id, "-column-heading"),
|
|
280
268
|
style: {
|
|
281
269
|
width: width,
|
|
@@ -12,4 +12,4 @@ var _templateObject, _templateObject2;
|
|
|
12
12
|
var ScrollableContainerHeight = exports.ScrollableContainerHeight = 590;
|
|
13
13
|
var FieldTextFontSize = exports.FieldTextFontSize = '14px';
|
|
14
14
|
var Table = exports.Table = _styled.default.table(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n"])));
|
|
15
|
-
var TableHeading = exports.TableHeading = _styled.default.th(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n position: relative;\n
|
|
15
|
+
var TableHeading = exports.TableHeading = _styled.default.th(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n position: relative;\n line-height: ", ";\n border-bottom: 2px solid ", ";\n height: calc(52px - ", " * 2 - 2px);\n vertical-align: bottom;\n\n & [data-testid='datasource-header-content--container'] {\n width: 100%;\n padding: ", " ", ";\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n white-space: normal;\n overflow: hidden;\n max-height: 2.5rem;\n word-wrap: break-word;\n\n &:hover {\n background: ", ";\n border-radius: 3px;\n }\n }\n"])), "var(--ds-font-lineHeight-300, 16px)", "var(--ds-background-accent-gray-subtler, ".concat(_colors.N40, ")"), "var(--ds-space-050, 4px)", "var(--ds-space-100, 4px)", "var(--ds-space-050, 2px)", "var(--ds-background-input-hovered, #F7F8F9)");
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useFilterOptions = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
var _useBasicFilterAGG2 = require("../../../../services/useBasicFilterAGG");
|
|
14
|
+
var _transformers = require("../utils/transformers");
|
|
15
|
+
var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref) {
|
|
16
|
+
var filterType = _ref.filterType,
|
|
17
|
+
cloudId = _ref.cloudId;
|
|
18
|
+
var _useState = (0, _react.useState)([]),
|
|
19
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
20
|
+
filterOptions = _useState2[0],
|
|
21
|
+
setFilterOptions = _useState2[1];
|
|
22
|
+
var _useState3 = (0, _react.useState)(0),
|
|
23
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
24
|
+
totalCount = _useState4[0],
|
|
25
|
+
setTotalCount = _useState4[1];
|
|
26
|
+
var _useState5 = (0, _react.useState)('empty'),
|
|
27
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
28
|
+
status = _useState6[0],
|
|
29
|
+
setStatus = _useState6[1];
|
|
30
|
+
var _useState7 = (0, _react.useState)(undefined),
|
|
31
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
32
|
+
nextPageCursor = _useState8[0],
|
|
33
|
+
setNextPageCursor = _useState8[1];
|
|
34
|
+
var _useBasicFilterAGG = (0, _useBasicFilterAGG2.useBasicFilterAGG)(),
|
|
35
|
+
getFieldValues = _useBasicFilterAGG.getFieldValues;
|
|
36
|
+
var fetchFilterOptions = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
37
|
+
var _ref3,
|
|
38
|
+
pageCursor,
|
|
39
|
+
searchString,
|
|
40
|
+
response,
|
|
41
|
+
isNewSearch,
|
|
42
|
+
_args = arguments;
|
|
43
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
44
|
+
while (1) switch (_context.prev = _context.next) {
|
|
45
|
+
case 0:
|
|
46
|
+
_ref3 = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, pageCursor = _ref3.pageCursor, searchString = _ref3.searchString;
|
|
47
|
+
setStatus('loading');
|
|
48
|
+
_context.prev = 2;
|
|
49
|
+
_context.next = 5;
|
|
50
|
+
return getFieldValues({
|
|
51
|
+
cloudId: cloudId,
|
|
52
|
+
jql: '',
|
|
53
|
+
jqlTerm: filterType,
|
|
54
|
+
searchString: searchString,
|
|
55
|
+
pageCursor: pageCursor
|
|
56
|
+
});
|
|
57
|
+
case 5:
|
|
58
|
+
response = _context.sent;
|
|
59
|
+
if (!(response.errors && response.errors.length > 0)) {
|
|
60
|
+
_context.next = 9;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
setStatus('rejected');
|
|
64
|
+
return _context.abrupt("return");
|
|
65
|
+
case 9:
|
|
66
|
+
isNewSearch = !pageCursor;
|
|
67
|
+
if (isNewSearch) {
|
|
68
|
+
setFilterOptions((0, _transformers.mapFieldValuesToFilterOptions)(response));
|
|
69
|
+
} else {
|
|
70
|
+
setFilterOptions([].concat((0, _toConsumableArray2.default)(filterOptions), (0, _toConsumableArray2.default)((0, _transformers.mapFieldValuesToFilterOptions)(response))));
|
|
71
|
+
}
|
|
72
|
+
setTotalCount((0, _transformers.mapFieldValuesToTotalCount)(response));
|
|
73
|
+
setNextPageCursor((0, _transformers.mapFieldValuesToPageCursor)(response));
|
|
74
|
+
setStatus('resolved');
|
|
75
|
+
_context.next = 19;
|
|
76
|
+
break;
|
|
77
|
+
case 16:
|
|
78
|
+
_context.prev = 16;
|
|
79
|
+
_context.t0 = _context["catch"](2);
|
|
80
|
+
setStatus('rejected');
|
|
81
|
+
case 19:
|
|
82
|
+
case "end":
|
|
83
|
+
return _context.stop();
|
|
84
|
+
}
|
|
85
|
+
}, _callee, null, [[2, 16]]);
|
|
86
|
+
})), [cloudId, filterOptions, filterType, getFieldValues]);
|
|
87
|
+
return {
|
|
88
|
+
filterOptions: filterOptions,
|
|
89
|
+
fetchFilterOptions: fetchFilterOptions,
|
|
90
|
+
totalCount: totalCount,
|
|
91
|
+
pageCursor: nextPageCursor,
|
|
92
|
+
status: status
|
|
93
|
+
};
|
|
94
|
+
};
|
|
@@ -14,7 +14,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
var _reactIntlNext = require("react-intl-next");
|
|
16
16
|
var _select = require("@atlaskit/select");
|
|
17
|
-
var
|
|
17
|
+
var _useFilterOptions2 = require("../../hooks/useFilterOptions");
|
|
18
18
|
var _control = _interopRequireDefault(require("./control"));
|
|
19
19
|
var _footer = _interopRequireDefault(require("./footer"));
|
|
20
20
|
var _formatOptionLabel = _interopRequireDefault(require("./formatOptionLabel"));
|
|
@@ -29,6 +29,7 @@ var noFilterOptions = function noFilterOptions() {
|
|
|
29
29
|
};
|
|
30
30
|
var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
31
31
|
var filterType = _ref.filterType,
|
|
32
|
+
cloudId = _ref.cloudId,
|
|
32
33
|
selection = _ref.selection,
|
|
33
34
|
_ref$onSelectionChang = _ref.onSelectionChange,
|
|
34
35
|
onSelectionChange = _ref$onSelectionChang === void 0 ? function () {} : _ref$onSelectionChang;
|
|
@@ -43,13 +44,14 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
43
44
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
44
45
|
selectedOptions = _useState4[0],
|
|
45
46
|
setSelectedOptions = _useState4[1];
|
|
46
|
-
var
|
|
47
|
-
filterType: filterType
|
|
47
|
+
var _useFilterOptions = (0, _useFilterOptions2.useFilterOptions)({
|
|
48
|
+
filterType: filterType,
|
|
49
|
+
cloudId: cloudId
|
|
48
50
|
}),
|
|
49
|
-
filterOptions =
|
|
50
|
-
fetchFilterOptions =
|
|
51
|
-
totalCount =
|
|
52
|
-
status =
|
|
51
|
+
filterOptions = _useFilterOptions.filterOptions,
|
|
52
|
+
fetchFilterOptions = _useFilterOptions.fetchFilterOptions,
|
|
53
|
+
totalCount = _useFilterOptions.totalCount,
|
|
54
|
+
status = _useFilterOptions.status;
|
|
53
55
|
var handleInputChange = (0, _react.useCallback)(function (searchString, actionMeta) {
|
|
54
56
|
if (actionMeta.action === 'input-change' && searchString !== searchTerm) {
|
|
55
57
|
setSearchTerm(searchString);
|
|
@@ -63,10 +65,13 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
63
65
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
64
66
|
while (1) switch (_context.prev = _context.next) {
|
|
65
67
|
case 0:
|
|
66
|
-
if (status === 'empty') {
|
|
67
|
-
|
|
68
|
+
if (!(status === 'empty')) {
|
|
69
|
+
_context.next = 3;
|
|
70
|
+
break;
|
|
68
71
|
}
|
|
69
|
-
|
|
72
|
+
_context.next = 3;
|
|
73
|
+
return fetchFilterOptions();
|
|
74
|
+
case 3:
|
|
70
75
|
case "end":
|
|
71
76
|
return _context.stop();
|
|
72
77
|
}
|
|
@@ -79,18 +84,24 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
79
84
|
pickerRef === null || pickerRef === void 0 || (_pickerRef$current = pickerRef.current) === null || _pickerRef$current === void 0 || (_pickerRef$current = _pickerRef$current.selectRef) === null || _pickerRef$current === void 0 || (_pickerRef$current = _pickerRef$current.inputRef) === null || _pickerRef$current === void 0 || _pickerRef$current.focus();
|
|
80
85
|
}
|
|
81
86
|
}, [status]);
|
|
87
|
+
var isLoading = status === 'loading' || status === 'empty';
|
|
82
88
|
return /*#__PURE__*/_react.default.createElement(_select.PopupSelect, {
|
|
83
89
|
isMulti: true,
|
|
84
90
|
maxMenuWidth: 300,
|
|
85
91
|
minMenuWidth: 300,
|
|
86
92
|
ref: pickerRef,
|
|
87
93
|
testId: "jlol-basic-filter-popup-select",
|
|
88
|
-
inputId: "jlol-basic-filter-popup-select--input"
|
|
89
|
-
|
|
94
|
+
inputId: "jlol-basic-filter-popup-select--input"
|
|
95
|
+
/*
|
|
96
|
+
this threshold controls the display of the search control (input field for search)
|
|
97
|
+
if this threshold is less than 0, when typing a search string that returns no results it will not remove the search control
|
|
98
|
+
if this threshold is 0 or higher, it will remove the search control when there are no results, the user will be unable to clear the search to see more results
|
|
99
|
+
*/,
|
|
100
|
+
searchThreshold: -1,
|
|
90
101
|
inputValue: searchTerm,
|
|
91
102
|
closeMenuOnSelect: false,
|
|
92
103
|
hideSelectedOptions: false,
|
|
93
|
-
isLoading:
|
|
104
|
+
isLoading: isLoading,
|
|
94
105
|
placeholder: formatMessage(_messages.asyncPopupSelectMessages.selectPlaceholder),
|
|
95
106
|
components: {
|
|
96
107
|
/* @ts-expect-error - This component has stricter OptionType, hence a temp setup untill its made generic */
|
|
@@ -15,7 +15,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
15
15
|
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; }
|
|
16
16
|
var availableBasicFilterTypes = ['project', 'issuetype', 'status', 'assignee'];
|
|
17
17
|
var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
18
|
-
var jql = _ref.jql
|
|
18
|
+
var jql = _ref.jql,
|
|
19
|
+
cloudId = _ref.cloudId;
|
|
19
20
|
var _useState = (0, _react.useState)([]),
|
|
20
21
|
_useState2 = (0, _slicedToArray2.default)(_useState, 1),
|
|
21
22
|
selection = _useState2[0];
|
|
@@ -30,6 +31,7 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
|
30
31
|
testId: "jlol-basic-filter-container"
|
|
31
32
|
}, availableBasicFilterTypes.map(function (filter) {
|
|
32
33
|
return /*#__PURE__*/_react.default.createElement(_asyncPopupSelect.default, {
|
|
34
|
+
cloudId: cloudId,
|
|
33
35
|
filterType: filter,
|
|
34
36
|
key: filter,
|
|
35
37
|
selection: selection,
|
|
@@ -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.isClauseTooComplex = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _jqlAst = require("@atlaskit/jql-ast");
|
|
10
|
+
var _buildJQL = require("../../jira-search-container/buildJQL");
|
|
11
|
+
var removeFuzzyCharacter = function removeFuzzyCharacter(value) {
|
|
12
|
+
if (value !== null && value !== void 0 && value.endsWith(_buildJQL.fuzzyCharacter)) {
|
|
13
|
+
return value.slice(0, -1);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
};
|
|
17
|
+
var getValueFromTerminalClause = function getValueFromTerminalClause(clause) {
|
|
18
|
+
var operand = clause.operand;
|
|
19
|
+
return operand !== undefined && operand.operandType === _jqlAst.OPERAND_TYPE_VALUE && removeFuzzyCharacter(operand.value) || undefined;
|
|
20
|
+
};
|
|
21
|
+
var areClauseFieldValuesEqual = function areClauseFieldValuesEqual(clauseA, clauseB, clauseC) {
|
|
22
|
+
var valueA = clauseA && getValueFromTerminalClause(clauseA);
|
|
23
|
+
var valueB = clauseB && getValueFromTerminalClause(clauseB);
|
|
24
|
+
var valueC = clauseC && getValueFromTerminalClause(clauseC);
|
|
25
|
+
var values = [valueA, valueB, valueC].filter(Boolean);
|
|
26
|
+
|
|
27
|
+
// checks if valid fields, text, summary and key have the same value, if not, its a complex query and cannnot be recreated in basic mode
|
|
28
|
+
return values.length > 1 && values.every(function (value) {
|
|
29
|
+
return value === values[0];
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
var areClauseFieldKeysAllowed = function areClauseFieldKeysAllowed(clauseA, clauseB, clauseC) {
|
|
33
|
+
var fieldA = clauseA.field.value;
|
|
34
|
+
var fieldB = clauseB.field.value;
|
|
35
|
+
var fieldC = clauseC === null || clauseC === void 0 ? void 0 : clauseC.field.value; // clauseC only if jql with 3 OR clauses, 'text ~ "EDM-6023*" or summary ~ "EDM-6023*" or key = EDM-6023 ORDER BY created DESC',
|
|
36
|
+
|
|
37
|
+
return [fieldA, fieldB, fieldC].filter(Boolean).every(function (field) {
|
|
38
|
+
return ['summary', 'text', 'key'].includes(field);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
var doesCompoundClauseContainAllTerminalClauses = function doesCompoundClauseContainAllTerminalClauses(clauses) {
|
|
42
|
+
return clauses.every(function (clauses) {
|
|
43
|
+
return clauses.clauseType === _jqlAst.CLAUSE_TYPE_TERMINAL;
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
var isClauseTooComplex = exports.isClauseTooComplex = function isClauseTooComplex(clauses, key) {
|
|
47
|
+
if (key === 'text') {
|
|
48
|
+
var _clauses = (0, _slicedToArray2.default)(clauses, 1),
|
|
49
|
+
clause = _clauses[0];
|
|
50
|
+
if (clause.clauseType === _jqlAst.CLAUSE_TYPE_COMPOUND) {
|
|
51
|
+
var textClauses = clause.clauses;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* valid: text ~ "test*" or summary ~ "test*" ORDER BY created DESC
|
|
55
|
+
* valid: text ~ "EDM-6023*" or summary ~ "EDM-6023*" or key = EDM-6023 ORDER BY created DESC
|
|
56
|
+
* invalid: assignee = "me" or text ~ "EDM-6023*" or summary ~ "EDM-6023*" or key = EDM-6023 ORDER BY created DESC
|
|
57
|
+
*/
|
|
58
|
+
if (textClauses.length !== 2 && textClauses.length !== 3) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* valid: text ~ "test*" or summary ~ "test*"
|
|
64
|
+
* invalid: text ~ "test" or (summary ~ "test" or key = "test")
|
|
65
|
+
*/
|
|
66
|
+
if (!doesCompoundClauseContainAllTerminalClauses(textClauses)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
var _textClauses = (0, _slicedToArray2.default)(textClauses, 3),
|
|
70
|
+
clauseA = _textClauses[0],
|
|
71
|
+
clauseB = _textClauses[1],
|
|
72
|
+
clauseC = _textClauses[2];
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* valid: text ~ "EDM-6023*" or summary ~ "EDM-6023*" or key = EDM-6023 ORDER BY created DESC
|
|
76
|
+
* invalid: text ~ "EDM-6023*" or summary ~ "anotherValue" ORDER BY created DESC
|
|
77
|
+
* invalid: text ~ "EDM-6023*" or text ~ "anotherValue" ORDER BY created DESC
|
|
78
|
+
*/
|
|
79
|
+
if (!areClauseFieldValuesEqual(clauseA, clauseB, clauseC)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* valid: text ~ "EDM-6023*" ORDER BY created DESC
|
|
85
|
+
* invalid: resolution = 40134 ORDER BY created DESC
|
|
86
|
+
*/
|
|
87
|
+
if (!areClauseFieldKeysAllowed(clauseA, clauseB, clauseC)) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return clauses.length > 1;
|
|
93
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.isQueryTooComplex = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
17
|
+
var _mergeWith = _interopRequireDefault(require("lodash/mergeWith"));
|
|
18
|
+
var _jqlAst = require("@atlaskit/jql-ast");
|
|
19
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
20
|
+
var _jiraSearchContainer = require("../../jira-search-container");
|
|
21
|
+
var _isClauseTooComplex = require("./isClauseTooComplex");
|
|
22
|
+
var _index = require("./index");
|
|
23
|
+
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); }; }
|
|
24
|
+
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; } }
|
|
25
|
+
// Map of field keys to their respective clauses in the Jast
|
|
26
|
+
|
|
27
|
+
var allowedFields = [
|
|
28
|
+
// basic filter fields
|
|
29
|
+
'assignee', 'issuetype', 'project', 'status',
|
|
30
|
+
// search input fields
|
|
31
|
+
'text', 'summary', 'key',
|
|
32
|
+
// orderby field
|
|
33
|
+
'created'];
|
|
34
|
+
var fallbackOperators = [_jqlAst.OPERATOR_IN];
|
|
35
|
+
var fieldSpecificOperators = {
|
|
36
|
+
text: [_jqlAst.OPERATOR_LIKE, _jqlAst.OPERATOR_EQUALS],
|
|
37
|
+
summary: [_jqlAst.OPERATOR_LIKE, _jqlAst.OPERATOR_EQUALS],
|
|
38
|
+
key: [_jqlAst.OPERATOR_EQUALS],
|
|
39
|
+
created: [_jqlAst.OPERATOR_GT_EQUALS],
|
|
40
|
+
project: [_jqlAst.OPERATOR_IN, _jqlAst.OPERATOR_EQUALS],
|
|
41
|
+
issuetype: [_jqlAst.OPERATOR_IN, _jqlAst.OPERATOR_EQUALS],
|
|
42
|
+
status: [_jqlAst.OPERATOR_IN, _jqlAst.OPERATOR_EQUALS],
|
|
43
|
+
assignee: [_jqlAst.OPERATOR_IN, _jqlAst.OPERATOR_EQUALS]
|
|
44
|
+
};
|
|
45
|
+
var JqlClauseCollectingVisitorError = /*#__PURE__*/function (_Error) {
|
|
46
|
+
(0, _inherits2.default)(JqlClauseCollectingVisitorError, _Error);
|
|
47
|
+
var _super = _createSuper(JqlClauseCollectingVisitorError);
|
|
48
|
+
function JqlClauseCollectingVisitorError() {
|
|
49
|
+
(0, _classCallCheck2.default)(this, JqlClauseCollectingVisitorError);
|
|
50
|
+
return _super.apply(this, arguments);
|
|
51
|
+
}
|
|
52
|
+
return (0, _createClass2.default)(JqlClauseCollectingVisitorError);
|
|
53
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
|
|
54
|
+
/**
|
|
55
|
+
* Rather than having to navigate the entire tree structure ourself, we extend AbstractJastVisitor
|
|
56
|
+
* class and implement visitor functions for node types that we wish to process.
|
|
57
|
+
* A list of available visitor can be viewed in packages/jql/jql-ast/src/types/api/jast-visitor.ts
|
|
58
|
+
* more info - https://atlaskit.atlassian.com/packages/jql/jql-ast/docs/traversing-the-ast
|
|
59
|
+
* */
|
|
60
|
+
var JqlClauseCollectingVisitor = /*#__PURE__*/function (_AbstractJastVisitor) {
|
|
61
|
+
(0, _inherits2.default)(JqlClauseCollectingVisitor, _AbstractJastVisitor);
|
|
62
|
+
var _super2 = _createSuper(JqlClauseCollectingVisitor);
|
|
63
|
+
function JqlClauseCollectingVisitor() {
|
|
64
|
+
var _this;
|
|
65
|
+
(0, _classCallCheck2.default)(this, JqlClauseCollectingVisitor);
|
|
66
|
+
_this = _super2.call(this);
|
|
67
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "visitNotClause", function () {
|
|
68
|
+
throw new JqlClauseCollectingVisitorError('Visited an unsupported node while traversing the AST');
|
|
69
|
+
});
|
|
70
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "visitOrderByField", function (orderByField) {
|
|
71
|
+
var _orderByField$field$v;
|
|
72
|
+
var fieldValue = (_orderByField$field$v = orderByField.field.value) === null || _orderByField$field$v === void 0 ? void 0 : _orderByField$field$v.toLowerCase();
|
|
73
|
+
if (fieldValue && !_jiraSearchContainer.ALLOWED_ORDER_BY_KEYS.includes(fieldValue)) {
|
|
74
|
+
throw new JqlClauseCollectingVisitorError("query with order by field '".concat(fieldValue, "' is not supported"));
|
|
75
|
+
}
|
|
76
|
+
return {};
|
|
77
|
+
});
|
|
78
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "visitCompoundClause", function (compoundClause) {
|
|
79
|
+
var clauseMap = {};
|
|
80
|
+
var operator = compoundClause.operator.value;
|
|
81
|
+
if (operator === _jqlAst.COMPOUND_OPERATOR_AND) {
|
|
82
|
+
return compoundClause.clauses.reduce(function (result, clause) {
|
|
83
|
+
return _this.aggregateResult(clause.accept((0, _assertThisInitialized2.default)(_this)), result);
|
|
84
|
+
}, clauseMap);
|
|
85
|
+
}
|
|
86
|
+
if (operator === _jqlAst.COMPOUND_OPERATOR_OR) {
|
|
87
|
+
// this is delt with in isClauseTooComplex
|
|
88
|
+
return _this.aggregateResult({
|
|
89
|
+
text: [compoundClause]
|
|
90
|
+
}, clauseMap);
|
|
91
|
+
}
|
|
92
|
+
throw new JqlClauseCollectingVisitorError("Compound clauses using the operator '".concat(operator, "' is not supported"));
|
|
93
|
+
});
|
|
94
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "visitTerminalClause", function (terminalClause) {
|
|
95
|
+
var _terminalClause$opera;
|
|
96
|
+
var fieldName = terminalClause.field.value.toLowerCase();
|
|
97
|
+
if (!allowedFields.includes(fieldName)) {
|
|
98
|
+
throw new JqlClauseCollectingVisitorError("Field with name '".concat(fieldName, "' of type ").concat(terminalClause.clauseType, " is not supported"));
|
|
99
|
+
}
|
|
100
|
+
var operator = (_terminalClause$opera = terminalClause.operator) === null || _terminalClause$opera === void 0 ? void 0 : _terminalClause$opera.value;
|
|
101
|
+
var allowedOperators = fieldSpecificOperators[fieldName] || fallbackOperators;
|
|
102
|
+
if (operator && !allowedOperators.includes(operator.toLowerCase())) {
|
|
103
|
+
throw new JqlClauseCollectingVisitorError("Field with name '".concat(fieldName, "' using operator ").concat(operator, " is not supported"));
|
|
104
|
+
}
|
|
105
|
+
return (0, _defineProperty2.default)({}, terminalClause.field.value.toLowerCase(), [terminalClause]);
|
|
106
|
+
});
|
|
107
|
+
return _this;
|
|
108
|
+
}
|
|
109
|
+
(0, _createClass2.default)(JqlClauseCollectingVisitor, [{
|
|
110
|
+
key: "aggregateResult",
|
|
111
|
+
value: function aggregateResult(aggregate, nextResult) {
|
|
112
|
+
return (0, _mergeWith.default)(aggregate, nextResult, function (destValue, srcValue) {
|
|
113
|
+
return srcValue.concat(destValue !== null && destValue !== void 0 ? destValue : []);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}, {
|
|
117
|
+
key: "defaultResult",
|
|
118
|
+
value: function defaultResult() {
|
|
119
|
+
return {};
|
|
120
|
+
}
|
|
121
|
+
}]);
|
|
122
|
+
return JqlClauseCollectingVisitor;
|
|
123
|
+
}(_jqlAst.AbstractJastVisitor);
|
|
124
|
+
var isQueryTooComplex = exports.isQueryTooComplex = function isQueryTooComplex(jql) {
|
|
125
|
+
if (!(0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.datasource.show-jlol-basic-filters') || !jql) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (!(0, _index.isValidJql)(jql)) {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
var jast = new _jqlAst.JastBuilder().build(jql);
|
|
132
|
+
try {
|
|
133
|
+
var jqlClauseCollectingVisitor = new JqlClauseCollectingVisitor();
|
|
134
|
+
var clauseMap = jast.query ? jast.query.accept(jqlClauseCollectingVisitor) : {}; // jast.query is defined as void | Query, hence the fallback
|
|
135
|
+
|
|
136
|
+
var hasAnyKeyWithComplexClause = Object.entries(clauseMap).some(function (_ref2) {
|
|
137
|
+
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
|
|
138
|
+
key = _ref3[0],
|
|
139
|
+
clauses = _ref3[1];
|
|
140
|
+
return (0, _isClauseTooComplex.isClauseTooComplex)(clauses, key);
|
|
141
|
+
});
|
|
142
|
+
return hasAnyKeyWithComplexClause;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
};
|