@atlaskit/link-datasource 1.17.0 → 1.17.2
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/hooks/useAssetsClient.js +7 -4
- package/dist/cjs/hooks/useValidateAqlText.js +5 -2
- package/dist/cjs/services/cmdbService.js +50 -35
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +8 -0
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +59 -34
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/index.js +18 -6
- package/dist/cjs/ui/jira-issues-modal/basic-filters/utils/index.js +2 -1
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/hooks/useAssetsClient.js +8 -4
- package/dist/es2019/hooks/useValidateAqlText.js +6 -2
- package/dist/es2019/services/cmdbService.js +27 -12
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +8 -0
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +57 -27
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/index.js +16 -6
- package/dist/es2019/ui/jira-issues-modal/basic-filters/utils/index.js +2 -1
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/hooks/useAssetsClient.js +7 -4
- package/dist/esm/hooks/useValidateAqlText.js +5 -2
- package/dist/esm/services/cmdbService.js +50 -35
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +8 -0
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +60 -35
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/index.js +18 -6
- package/dist/esm/ui/jira-issues-modal/basic-filters/utils/index.js +2 -1
- package/dist/types/analytics/generated/analytics.types.d.ts +41 -1
- package/dist/types/services/cmdbService.d.ts +8 -4
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +1 -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 +1 -1
- package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +41 -1
- package/dist/types-ts4.5/services/cmdbService.d.ts +8 -4
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +1 -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 +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.17.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#43143](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43143) [`de7541cc6ab`](https://bitbucket.org/atlassian/atlassian-frontend/commits/de7541cc6ab) - Reset filter selection when site selection changes and fixes a bug when selecting filter values.
|
|
8
|
+
|
|
9
|
+
## 1.17.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#43132](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43132) [`3e2792d125e`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3e2792d125e) - added operational events for Assets Config Modal
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
3
16
|
## 1.17.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
|
@@ -9,6 +9,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
9
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _react = require("react");
|
|
12
|
+
var _analytics = require("../analytics");
|
|
12
13
|
var _cmdbService = require("../services/cmdbService");
|
|
13
14
|
var handleAssetsClientErrors = function handleAssetsClientErrors(errorSetter, error) {
|
|
14
15
|
if (error instanceof Error) {
|
|
@@ -50,6 +51,8 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
50
51
|
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
51
52
|
objectSchemasError = _useState16[0],
|
|
52
53
|
setObjectSchemasError = _useState16[1];
|
|
54
|
+
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
55
|
+
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
53
56
|
|
|
54
57
|
/*
|
|
55
58
|
* We wrap this in nested try/catch blocks because we want to handle
|
|
@@ -66,7 +69,7 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
66
69
|
setWorkspaceError(undefined);
|
|
67
70
|
_context.prev = 2;
|
|
68
71
|
_context.next = 5;
|
|
69
|
-
return (0, _cmdbService.getWorkspaceId)();
|
|
72
|
+
return (0, _cmdbService.getWorkspaceId)(fireEvent);
|
|
70
73
|
case 5:
|
|
71
74
|
_workspaceId = _context.sent;
|
|
72
75
|
setWorkspaceId(_workspaceId);
|
|
@@ -77,7 +80,7 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
77
80
|
}
|
|
78
81
|
_context.prev = 8;
|
|
79
82
|
_context.next = 11;
|
|
80
|
-
return (0, _cmdbService.fetchObjectSchema)(_workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
|
|
83
|
+
return (0, _cmdbService.fetchObjectSchema)(_workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId, fireEvent);
|
|
81
84
|
case 11:
|
|
82
85
|
fetchedObjectSchema = _context.sent;
|
|
83
86
|
setExistingObjectSchema(fetchedObjectSchema);
|
|
@@ -90,7 +93,7 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
90
93
|
case 18:
|
|
91
94
|
_context.prev = 18;
|
|
92
95
|
_context.next = 21;
|
|
93
|
-
return (0, _cmdbService.fetchObjectSchemas)(_workspaceId);
|
|
96
|
+
return (0, _cmdbService.fetchObjectSchemas)(_workspaceId, undefined, fireEvent);
|
|
94
97
|
case 21:
|
|
95
98
|
fetchedObjectSchemasResponse = _context.sent;
|
|
96
99
|
setObjectSchemas(fetchedObjectSchemasResponse.values);
|
|
@@ -118,7 +121,7 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
118
121
|
}
|
|
119
122
|
}, _callee, null, [[2, 31, 34, 37], [8, 15], [18, 26]]);
|
|
120
123
|
}))();
|
|
121
|
-
}, [initialParameters]);
|
|
124
|
+
}, [initialParameters, fireEvent]);
|
|
122
125
|
return {
|
|
123
126
|
workspaceId: workspaceId,
|
|
124
127
|
workspaceError: workspaceError,
|
|
@@ -9,6 +9,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
9
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _react = require("react");
|
|
12
|
+
var _analytics = require("../analytics");
|
|
12
13
|
var _cmdbService = require("../services/cmdbService");
|
|
13
14
|
var useValidateAqlText = exports.useValidateAqlText = function useValidateAqlText(workspaceId) {
|
|
14
15
|
var _useState = (0, _react.useState)(false),
|
|
@@ -23,6 +24,8 @@ var useValidateAqlText = exports.useValidateAqlText = function useValidateAqlTex
|
|
|
23
24
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
24
25
|
error = _useState6[0],
|
|
25
26
|
setError = _useState6[1];
|
|
27
|
+
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
28
|
+
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
26
29
|
var validateAqlText = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
27
30
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(aql) {
|
|
28
31
|
var isValid, message, _validateAqlResponse$, validateAqlResponse;
|
|
@@ -37,7 +40,7 @@ var useValidateAqlText = exports.useValidateAqlText = function useValidateAqlTex
|
|
|
37
40
|
_context.next = 7;
|
|
38
41
|
return (0, _cmdbService.validateAql)(workspaceId, {
|
|
39
42
|
qlQuery: aql
|
|
40
|
-
});
|
|
43
|
+
}, fireEvent);
|
|
41
44
|
case 7:
|
|
42
45
|
validateAqlResponse = _context.sent;
|
|
43
46
|
setIsValidAqlText(validateAqlResponse.isValid);
|
|
@@ -71,7 +74,7 @@ var useValidateAqlText = exports.useValidateAqlText = function useValidateAqlTex
|
|
|
71
74
|
return function (_x) {
|
|
72
75
|
return _ref.apply(this, arguments);
|
|
73
76
|
};
|
|
74
|
-
}(), [workspaceId]);
|
|
77
|
+
}(), [workspaceId, fireEvent]);
|
|
75
78
|
return {
|
|
76
79
|
isValidAqlText: isValidAqlText,
|
|
77
80
|
validateAqlText: validateAqlText,
|
|
@@ -10,7 +10,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
10
10
|
var _linkingCommon = require("@atlaskit/linking-common");
|
|
11
11
|
var _cmdbService = require("./cmdbService.utils");
|
|
12
12
|
var getWorkspaceId = exports.getWorkspaceId = /*#__PURE__*/function () {
|
|
13
|
-
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
13
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(fireEvent) {
|
|
14
14
|
var url, _workspaceDetailsResp, workspaceDetailsResponse, error;
|
|
15
15
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
16
16
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -27,32 +27,35 @@ var getWorkspaceId = exports.getWorkspaceId = /*#__PURE__*/function () {
|
|
|
27
27
|
}
|
|
28
28
|
throw new _cmdbService.PermissionError('No workspace results found');
|
|
29
29
|
case 7:
|
|
30
|
+
fireEvent && fireEvent('operational.getWorkspaceId.success', {});
|
|
30
31
|
return _context.abrupt("return", workspaceDetailsResponse.results[0].id);
|
|
31
|
-
case
|
|
32
|
-
_context.prev =
|
|
32
|
+
case 11:
|
|
33
|
+
_context.prev = 11;
|
|
33
34
|
_context.t0 = _context["catch"](1);
|
|
34
35
|
error = (0, _cmdbService.mapFetchErrors)(_context.t0);
|
|
35
36
|
if (error instanceof _cmdbService.FetchError) {
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
fireEvent && fireEvent('operational.getWorkspaceId.failed', {
|
|
38
|
+
statusCodeGroup: (0, _cmdbService.getStatusCodeGroup)(error)
|
|
39
|
+
});
|
|
40
|
+
// Only 429 and5xx errors will be treated as FetchErrors otherwise PermissionError
|
|
38
41
|
if ((0, _cmdbService.getStatusCodeGroup)(error) !== '5xx' && error.statusCode !== 429) {
|
|
39
42
|
error = new _cmdbService.PermissionError('Failed to fetch workspace');
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
throw error;
|
|
43
|
-
case
|
|
46
|
+
case 16:
|
|
44
47
|
case "end":
|
|
45
48
|
return _context.stop();
|
|
46
49
|
}
|
|
47
|
-
}, _callee, null, [[1,
|
|
50
|
+
}, _callee, null, [[1, 11]]);
|
|
48
51
|
}));
|
|
49
|
-
return function getWorkspaceId() {
|
|
52
|
+
return function getWorkspaceId(_x) {
|
|
50
53
|
return _ref.apply(this, arguments);
|
|
51
54
|
};
|
|
52
55
|
}();
|
|
53
56
|
var validateAql = exports.validateAql = /*#__PURE__*/function () {
|
|
54
|
-
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(workspaceId, data) {
|
|
55
|
-
var url, error;
|
|
57
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(workspaceId, data, fireEvent) {
|
|
58
|
+
var url, response, error;
|
|
56
59
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
57
60
|
while (1) switch (_context2.prev = _context2.next) {
|
|
58
61
|
case 0:
|
|
@@ -64,31 +67,35 @@ var validateAql = exports.validateAql = /*#__PURE__*/function () {
|
|
|
64
67
|
context: 'SMART_LINKS'
|
|
65
68
|
}, undefined, [200, 201, 202, 203, 204]);
|
|
66
69
|
case 4:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
_context2.
|
|
70
|
+
response = _context2.sent;
|
|
71
|
+
fireEvent && fireEvent('operational.validateAql.success', {});
|
|
72
|
+
return _context2.abrupt("return", response);
|
|
73
|
+
case 9:
|
|
74
|
+
_context2.prev = 9;
|
|
70
75
|
_context2.t0 = _context2["catch"](1);
|
|
71
76
|
error = (0, _cmdbService.mapFetchErrors)(_context2.t0);
|
|
72
77
|
if (error instanceof _cmdbService.FetchError) {
|
|
73
|
-
|
|
78
|
+
fireEvent && fireEvent('operational.validateAql.failed', {
|
|
79
|
+
statusCodeGroup: (0, _cmdbService.getStatusCodeGroup)(error)
|
|
80
|
+
});
|
|
74
81
|
if (error.statusCode === 401 || error.statusCode === 403) {
|
|
75
82
|
error = new _cmdbService.PermissionError('Failed to fetch object schemas');
|
|
76
83
|
}
|
|
77
84
|
}
|
|
78
85
|
throw error;
|
|
79
|
-
case
|
|
86
|
+
case 14:
|
|
80
87
|
case "end":
|
|
81
88
|
return _context2.stop();
|
|
82
89
|
}
|
|
83
|
-
}, _callee2, null, [[1,
|
|
90
|
+
}, _callee2, null, [[1, 9]]);
|
|
84
91
|
}));
|
|
85
|
-
return function validateAql(
|
|
92
|
+
return function validateAql(_x2, _x3, _x4) {
|
|
86
93
|
return _ref2.apply(this, arguments);
|
|
87
94
|
};
|
|
88
95
|
}();
|
|
89
96
|
var fetchObjectSchema = exports.fetchObjectSchema = /*#__PURE__*/function () {
|
|
90
|
-
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workspaceId, schemaId) {
|
|
91
|
-
var url, error;
|
|
97
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workspaceId, schemaId, fireEvent) {
|
|
98
|
+
var url, response, error;
|
|
92
99
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
93
100
|
while (1) switch (_context3.prev = _context3.next) {
|
|
94
101
|
case 0:
|
|
@@ -97,31 +104,35 @@ var fetchObjectSchema = exports.fetchObjectSchema = /*#__PURE__*/function () {
|
|
|
97
104
|
_context3.next = 4;
|
|
98
105
|
return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
99
106
|
case 4:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
_context3.
|
|
107
|
+
response = _context3.sent;
|
|
108
|
+
fireEvent && fireEvent('operational.objectSchema.success', {});
|
|
109
|
+
return _context3.abrupt("return", response);
|
|
110
|
+
case 9:
|
|
111
|
+
_context3.prev = 9;
|
|
103
112
|
_context3.t0 = _context3["catch"](1);
|
|
104
113
|
error = (0, _cmdbService.mapFetchErrors)(_context3.t0);
|
|
105
114
|
if (error instanceof _cmdbService.FetchError) {
|
|
106
|
-
|
|
115
|
+
fireEvent && fireEvent('operational.objectSchema.failed', {
|
|
116
|
+
statusCodeGroup: (0, _cmdbService.getStatusCodeGroup)(error)
|
|
117
|
+
});
|
|
107
118
|
if (error.statusCode === 401 || error.statusCode === 403) {
|
|
108
119
|
error = new _cmdbService.PermissionError('Failed to fetch object schemas');
|
|
109
120
|
}
|
|
110
121
|
}
|
|
111
122
|
throw error;
|
|
112
|
-
case
|
|
123
|
+
case 14:
|
|
113
124
|
case "end":
|
|
114
125
|
return _context3.stop();
|
|
115
126
|
}
|
|
116
|
-
}, _callee3, null, [[1,
|
|
127
|
+
}, _callee3, null, [[1, 9]]);
|
|
117
128
|
}));
|
|
118
|
-
return function fetchObjectSchema(
|
|
129
|
+
return function fetchObjectSchema(_x5, _x6, _x7) {
|
|
119
130
|
return _ref3.apply(this, arguments);
|
|
120
131
|
};
|
|
121
132
|
}();
|
|
122
133
|
var fetchObjectSchemas = exports.fetchObjectSchemas = /*#__PURE__*/function () {
|
|
123
|
-
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(workspaceId, query) {
|
|
124
|
-
var queryParams, url, error;
|
|
134
|
+
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(workspaceId, query, fireEvent) {
|
|
135
|
+
var queryParams, url, response, error;
|
|
125
136
|
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
126
137
|
while (1) switch (_context4.prev = _context4.next) {
|
|
127
138
|
case 0:
|
|
@@ -134,25 +145,29 @@ var fetchObjectSchemas = exports.fetchObjectSchemas = /*#__PURE__*/function () {
|
|
|
134
145
|
_context4.next = 8;
|
|
135
146
|
return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
136
147
|
case 8:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
_context4.
|
|
148
|
+
response = _context4.sent;
|
|
149
|
+
fireEvent && fireEvent('operational.objectSchemas.success', {});
|
|
150
|
+
return _context4.abrupt("return", response);
|
|
151
|
+
case 13:
|
|
152
|
+
_context4.prev = 13;
|
|
140
153
|
_context4.t0 = _context4["catch"](5);
|
|
141
154
|
error = (0, _cmdbService.mapFetchErrors)(_context4.t0);
|
|
142
155
|
if (error instanceof _cmdbService.FetchError) {
|
|
143
|
-
|
|
156
|
+
fireEvent && fireEvent('operational.objectSchemas.failed', {
|
|
157
|
+
statusCodeGroup: (0, _cmdbService.getStatusCodeGroup)(error)
|
|
158
|
+
});
|
|
144
159
|
if (error.statusCode === 401 || error.statusCode === 403) {
|
|
145
160
|
error = new _cmdbService.PermissionError('Failed to fetch object schemas');
|
|
146
161
|
}
|
|
147
162
|
}
|
|
148
163
|
throw error;
|
|
149
|
-
case
|
|
164
|
+
case 18:
|
|
150
165
|
case "end":
|
|
151
166
|
return _context4.stop();
|
|
152
167
|
}
|
|
153
|
-
}, _callee4, null, [[5,
|
|
168
|
+
}, _callee4, null, [[5, 13]]);
|
|
154
169
|
}));
|
|
155
|
-
return function fetchObjectSchemas(
|
|
170
|
+
return function fetchObjectSchemas(_x8, _x9, _x10) {
|
|
156
171
|
return _ref4.apply(this, arguments);
|
|
157
172
|
};
|
|
158
173
|
}();
|
|
@@ -112,12 +112,20 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
|
|
|
112
112
|
}
|
|
113
113
|
}, _callee, null, [[5, 24]]);
|
|
114
114
|
})), [cloudId, filterOptions, filterType, getFieldValues]);
|
|
115
|
+
var reset = (0, _react.useCallback)(function () {
|
|
116
|
+
setStatus('empty');
|
|
117
|
+
setFilterOptions([]);
|
|
118
|
+
setTotalCount(0);
|
|
119
|
+
setNextPageCursor(undefined);
|
|
120
|
+
initialData.current = undefined;
|
|
121
|
+
}, []);
|
|
115
122
|
return {
|
|
116
123
|
filterOptions: filterOptions,
|
|
117
124
|
fetchFilterOptions: fetchFilterOptions,
|
|
118
125
|
totalCount: totalCount,
|
|
119
126
|
pageCursor: nextPageCursor,
|
|
120
127
|
status: status,
|
|
128
|
+
reset: reset,
|
|
121
129
|
errors: status === 'rejected' ? errors : []
|
|
122
130
|
};
|
|
123
131
|
};
|
|
@@ -13,6 +13,7 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
|
13
13
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
14
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
15
|
var _react = _interopRequireWildcard(require("react"));
|
|
16
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
16
17
|
var _reactIntlNext = require("react-intl-next");
|
|
17
18
|
var _useDebounce = require("use-debounce");
|
|
18
19
|
var _select = require("@atlaskit/select");
|
|
@@ -38,6 +39,8 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
38
39
|
selection = _ref.selection,
|
|
39
40
|
_ref$onSelectionChang = _ref.onSelectionChange,
|
|
40
41
|
onSelectionChange = _ref$onSelectionChang === void 0 ? function () {} : _ref$onSelectionChang,
|
|
42
|
+
_ref$onReset = _ref.onReset,
|
|
43
|
+
resetSelection = _ref$onReset === void 0 ? function () {} : _ref$onReset,
|
|
41
44
|
_ref$isDisabled = _ref.isDisabled,
|
|
42
45
|
isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled;
|
|
43
46
|
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
@@ -50,10 +53,13 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
50
53
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
51
54
|
selectedOptions = _useState4[0],
|
|
52
55
|
setSelectedOptions = _useState4[1];
|
|
53
|
-
var _useState5 = (0, _react.useState)(
|
|
56
|
+
var _useState5 = (0, _react.useState)([]),
|
|
54
57
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
55
58
|
sortedOptions = _useState6[0],
|
|
56
59
|
setSortedOptions = _useState6[1];
|
|
60
|
+
var currentSiteCloudId = (0, _react.useRef)(cloudId);
|
|
61
|
+
var sortPaginatedResults = (0, _react.useRef)(false); // this is to track pagination for sorting purpose
|
|
62
|
+
|
|
57
63
|
var _useFilterOptions = (0, _useFilterOptions2.useFilterOptions)({
|
|
58
64
|
filterType: filterType,
|
|
59
65
|
cloudId: cloudId
|
|
@@ -63,6 +69,7 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
63
69
|
totalCount = _useFilterOptions.totalCount,
|
|
64
70
|
status = _useFilterOptions.status,
|
|
65
71
|
pageCursor = _useFilterOptions.pageCursor,
|
|
72
|
+
resetHook = _useFilterOptions.reset,
|
|
66
73
|
errors = _useFilterOptions.errors;
|
|
67
74
|
var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function (searchString) {
|
|
68
75
|
fetchFilterOptions({
|
|
@@ -90,14 +97,12 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
90
97
|
return _ref2.apply(this, arguments);
|
|
91
98
|
};
|
|
92
99
|
}(), [handleDebouncedFetchFilterOptions, searchTerm]);
|
|
93
|
-
var handleOptionSelection = function
|
|
94
|
-
setSelectedOptions(newValue);
|
|
100
|
+
var handleOptionSelection = (0, _react.useCallback)(function (newValue) {
|
|
95
101
|
onSelectionChange(newValue);
|
|
96
|
-
};
|
|
102
|
+
}, [onSelectionChange]);
|
|
97
103
|
var sortOptionsOnPopupOpen = (0, _react.useCallback)(function () {
|
|
98
104
|
if (selectedOptions.length === 0) {
|
|
99
|
-
setSortedOptions(filterOptions);
|
|
100
|
-
return;
|
|
105
|
+
return setSortedOptions(filterOptions);
|
|
101
106
|
}
|
|
102
107
|
var nonSelectedOptions = filterOptions.filter(function (option) {
|
|
103
108
|
return !selectedOptions.find(function (selectedOption) {
|
|
@@ -105,37 +110,41 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
105
110
|
});
|
|
106
111
|
});
|
|
107
112
|
var newOptions = [].concat((0, _toConsumableArray2.default)(selectedOptions), (0, _toConsumableArray2.default)(nonSelectedOptions));
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
if (!(0, _isEqual.default)(newOptions, sortedOptions)) {
|
|
114
|
+
setSortedOptions(newOptions);
|
|
115
|
+
}
|
|
116
|
+
}, [selectedOptions, filterOptions, sortedOptions]);
|
|
110
117
|
var sortOptionsOnResolve = (0, _react.useCallback)(function () {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
sortedOptions.forEach(function (sortedOption) {
|
|
121
|
-
if (!filterOptions.some(function (filterOption) {
|
|
122
|
-
return filterOption.value === sortedOption.value;
|
|
123
|
-
})) {
|
|
124
|
-
shouldSetSortOptions = true;
|
|
125
|
-
}
|
|
126
|
-
});
|
|
118
|
+
// sortedOptions is empty initially, this will take care of setting the initial value and bring the selected items to the top
|
|
119
|
+
if (sortedOptions.length === 0) {
|
|
120
|
+
return sortOptionsOnPopupOpen();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// when the user is searching, we want the search result to be displayed as it is, and the select component will take care of marking the selected items
|
|
124
|
+
if (searchTerm) {
|
|
125
|
+
sortPaginatedResults.current = false; // set to false to indicate pagination resolve action is completed from the sorting perspective
|
|
126
|
+
return setSortedOptions(filterOptions);
|
|
127
127
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
|
|
129
|
+
// this block handles the pagination, where on pagination, we will just append newOptions to the current list
|
|
130
|
+
if (sortPaginatedResults.current) {
|
|
131
|
+
var newOptions = filterOptions.filter(function (option) {
|
|
132
|
+
return !sortedOptions.find(function (sortedOption) {
|
|
133
|
+
return sortedOption.value === option.value;
|
|
132
134
|
});
|
|
133
135
|
});
|
|
134
|
-
|
|
136
|
+
if (newOptions.length > 0) {
|
|
137
|
+
setSortedOptions([].concat((0, _toConsumableArray2.default)(sortedOptions), (0, _toConsumableArray2.default)(newOptions)));
|
|
138
|
+
}
|
|
139
|
+
sortPaginatedResults.current = false; // set to false to indicate pagination resolve action is completed from the sorting perspective
|
|
140
|
+
return;
|
|
135
141
|
}
|
|
136
|
-
|
|
142
|
+
sortPaginatedResults.current = false; // set to false to indicate pagination resolve action is completed from the sorting perspective
|
|
143
|
+
sortOptionsOnPopupOpen();
|
|
144
|
+
}, [filterOptions, searchTerm, sortOptionsOnPopupOpen, sortedOptions]);
|
|
137
145
|
var handleShowMore = (0, _react.useCallback)(function () {
|
|
138
146
|
if (pageCursor) {
|
|
147
|
+
sortPaginatedResults.current = true;
|
|
139
148
|
fetchFilterOptions({
|
|
140
149
|
pageCursor: pageCursor,
|
|
141
150
|
searchString: searchTerm
|
|
@@ -156,15 +165,31 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
156
165
|
if (status === 'resolved') {
|
|
157
166
|
sortOptionsOnResolve();
|
|
158
167
|
}
|
|
159
|
-
|
|
168
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
169
|
+
}, [status]); // we only want the sortOptionsOnResolve to run when there is a status change
|
|
170
|
+
|
|
171
|
+
(0, _react.useEffect)(function () {
|
|
172
|
+
if (currentSiteCloudId.current !== cloudId) {
|
|
173
|
+
currentSiteCloudId.current = cloudId;
|
|
174
|
+
setSortedOptions([]);
|
|
175
|
+
setSearchTerm('');
|
|
176
|
+
resetHook();
|
|
177
|
+
resetSelection();
|
|
178
|
+
}
|
|
179
|
+
}, [cloudId, resetHook, resetSelection]);
|
|
180
|
+
(0, _react.useEffect)(function () {
|
|
181
|
+
if (!(0, _isEqual.default)(selection, selectedOptions)) {
|
|
182
|
+
setSelectedOptions(selection);
|
|
183
|
+
}
|
|
184
|
+
}, [selectedOptions, selection]);
|
|
160
185
|
var filterOptionsLength = filterOptions.length;
|
|
161
186
|
var isError = status === 'rejected';
|
|
162
187
|
var isLoading = status === 'loading' || status === 'empty';
|
|
163
188
|
var isLoadingMore = status === 'loadingMore';
|
|
164
189
|
var isEmpty = status === 'resolved' && filterOptionsLength === 0;
|
|
165
190
|
var popupSelectOptions = isLoading || isError ? [] : sortedOptions; // if not set to [], then on loading, no loading UI will be shown
|
|
166
|
-
var areAllResultsLoaded =
|
|
167
|
-
var shouldShowFooter = (status === 'resolved' || isLoadingMore) &&
|
|
191
|
+
var areAllResultsLoaded = filterOptionsLength === totalCount;
|
|
192
|
+
var shouldShowFooter = (status === 'resolved' || isLoadingMore) && filterOptionsLength > 0; // footer should not disappear when there is an inline spinner for loading more data
|
|
168
193
|
var shouldDisplayShowMoreButton = status === 'resolved' && !!pageCursor && !areAllResultsLoaded;
|
|
169
194
|
return /*#__PURE__*/_react.default.createElement(_select.PopupSelect, {
|
|
170
195
|
isMulti: true,
|
|
@@ -223,7 +248,7 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
223
248
|
}));
|
|
224
249
|
},
|
|
225
250
|
footer: shouldShowFooter && /*#__PURE__*/_react.default.createElement(_footer.default, {
|
|
226
|
-
currentDisplayCount:
|
|
251
|
+
currentDisplayCount: popupSelectOptions.length,
|
|
227
252
|
totalCount: totalCount
|
|
228
253
|
})
|
|
229
254
|
});
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
12
|
var _primitives = require("@atlaskit/primitives");
|
|
@@ -13,6 +14,8 @@ var _utils = require("../utils");
|
|
|
13
14
|
var _asyncPopupSelect = _interopRequireDefault(require("./async-popup-select"));
|
|
14
15
|
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); }
|
|
15
16
|
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; }
|
|
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; }
|
|
16
19
|
var availableBasicFilterTypes = ['project', 'issuetype', 'status', 'assignee'];
|
|
17
20
|
var basicFilterContainerStyles = (0, _primitives.xcss)({
|
|
18
21
|
paddingLeft: "var(--ds-space-100, 8px)"
|
|
@@ -20,7 +23,7 @@ var basicFilterContainerStyles = (0, _primitives.xcss)({
|
|
|
20
23
|
var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
21
24
|
var jql = _ref.jql,
|
|
22
25
|
cloudId = _ref.cloudId;
|
|
23
|
-
var _useState = (0, _react.useState)(
|
|
26
|
+
var _useState = (0, _react.useState)({}),
|
|
24
27
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
25
28
|
selection = _useState2[0],
|
|
26
29
|
setSelection = _useState2[1];
|
|
@@ -29,9 +32,15 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
|
29
32
|
// hydrate hook call goes in here
|
|
30
33
|
}
|
|
31
34
|
}, [jql]);
|
|
32
|
-
var handleSelectionChange = (0, _react.useCallback)(function (options) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
var handleSelectionChange = (0, _react.useCallback)(function (options, filter) {
|
|
36
|
+
var updatedSelection = _objectSpread(_objectSpread({}, selection), {}, (0, _defineProperty2.default)({}, filter, options));
|
|
37
|
+
setSelection(updatedSelection);
|
|
38
|
+
}, [selection]);
|
|
39
|
+
var handleReset = (0, _react.useCallback)(function () {
|
|
40
|
+
if (Object.keys(selection).length > 0) {
|
|
41
|
+
setSelection({});
|
|
42
|
+
}
|
|
43
|
+
}, [selection]);
|
|
35
44
|
return /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
|
|
36
45
|
xcss: basicFilterContainerStyles,
|
|
37
46
|
gap: "space.100",
|
|
@@ -41,9 +50,12 @@ var BasicFilterContainer = function BasicFilterContainer(_ref) {
|
|
|
41
50
|
cloudId: cloudId,
|
|
42
51
|
filterType: filter,
|
|
43
52
|
key: filter,
|
|
44
|
-
selection: selection,
|
|
53
|
+
selection: selection[filter] || [],
|
|
45
54
|
isDisabled: !cloudId,
|
|
46
|
-
onSelectionChange:
|
|
55
|
+
onSelectionChange: function onSelectionChange(options) {
|
|
56
|
+
return handleSelectionChange(options, filter);
|
|
57
|
+
},
|
|
58
|
+
onReset: handleReset
|
|
47
59
|
});
|
|
48
60
|
}));
|
|
49
61
|
};
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.isValidJql = void 0;
|
|
7
7
|
var _jqlAst = require("@atlaskit/jql-ast");
|
|
8
8
|
var isValidJql = exports.isValidJql = function isValidJql(jql) {
|
|
9
|
+
var _jast$errors;
|
|
9
10
|
var jast = new _jqlAst.JastBuilder().build(jql);
|
|
10
|
-
return jast.errors.length === 0;
|
|
11
|
+
return (jast === null || jast === void 0 || (_jast$errors = jast.errors) === null || _jast$errors === void 0 ? void 0 : _jast$errors.length) === 0;
|
|
11
12
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
+
import { useDatasourceAnalyticsEvents } from '../analytics';
|
|
2
3
|
import { fetchObjectSchema, fetchObjectSchemas, getWorkspaceId } from '../services/cmdbService';
|
|
3
4
|
const handleAssetsClientErrors = (errorSetter, error) => {
|
|
4
5
|
if (error instanceof Error) {
|
|
@@ -16,6 +17,9 @@ export const useAssetsClient = initialParameters => {
|
|
|
16
17
|
const [objectSchemas, setObjectSchemas] = useState();
|
|
17
18
|
const [totalObjectSchemas, setTotalObjectSchemas] = useState();
|
|
18
19
|
const [objectSchemasError, setObjectSchemasError] = useState();
|
|
20
|
+
const {
|
|
21
|
+
fireEvent
|
|
22
|
+
} = useDatasourceAnalyticsEvents();
|
|
19
23
|
|
|
20
24
|
/*
|
|
21
25
|
* We wrap this in nested try/catch blocks because we want to handle
|
|
@@ -27,19 +31,19 @@ export const useAssetsClient = initialParameters => {
|
|
|
27
31
|
setLoading(true);
|
|
28
32
|
setWorkspaceError(undefined);
|
|
29
33
|
try {
|
|
30
|
-
const workspaceId = await getWorkspaceId();
|
|
34
|
+
const workspaceId = await getWorkspaceId(fireEvent);
|
|
31
35
|
setWorkspaceId(workspaceId);
|
|
32
36
|
// Check schema from initial parameters still exists and fetch name/permissions for schema select
|
|
33
37
|
if (initialParameters !== null && initialParameters !== void 0 && initialParameters.schemaId) {
|
|
34
38
|
try {
|
|
35
|
-
const fetchedObjectSchema = await fetchObjectSchema(workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
|
|
39
|
+
const fetchedObjectSchema = await fetchObjectSchema(workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId, fireEvent);
|
|
36
40
|
setExistingObjectSchema(fetchedObjectSchema);
|
|
37
41
|
} catch (fetchObjectSchemaError) {
|
|
38
42
|
handleAssetsClientErrors(setExistingObjectSchemaError, fetchObjectSchemaError);
|
|
39
43
|
}
|
|
40
44
|
}
|
|
41
45
|
try {
|
|
42
|
-
const fetchedObjectSchemasResponse = await fetchObjectSchemas(workspaceId);
|
|
46
|
+
const fetchedObjectSchemasResponse = await fetchObjectSchemas(workspaceId, undefined, fireEvent);
|
|
43
47
|
setObjectSchemas(fetchedObjectSchemasResponse.values);
|
|
44
48
|
setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
|
|
45
49
|
} catch (fetchObjectSchemasError) {
|
|
@@ -51,7 +55,7 @@ export const useAssetsClient = initialParameters => {
|
|
|
51
55
|
setLoading(false);
|
|
52
56
|
}
|
|
53
57
|
})();
|
|
54
|
-
}, [initialParameters]);
|
|
58
|
+
}, [initialParameters, fireEvent]);
|
|
55
59
|
return {
|
|
56
60
|
workspaceId,
|
|
57
61
|
workspaceError,
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { useCallback, useState } from 'react';
|
|
2
|
+
import { useDatasourceAnalyticsEvents } from '../analytics';
|
|
2
3
|
import { validateAql } from '../services/cmdbService';
|
|
3
4
|
export const useValidateAqlText = workspaceId => {
|
|
4
5
|
const [loading, setLoading] = useState(false);
|
|
5
6
|
const [isValidAqlText, setIsValidAqlText] = useState(false);
|
|
6
7
|
const [error, setError] = useState();
|
|
8
|
+
const {
|
|
9
|
+
fireEvent
|
|
10
|
+
} = useDatasourceAnalyticsEvents();
|
|
7
11
|
const validateAqlText = useCallback(async aql => {
|
|
8
12
|
setLoading(true);
|
|
9
13
|
setError(undefined);
|
|
@@ -13,7 +17,7 @@ export const useValidateAqlText = workspaceId => {
|
|
|
13
17
|
var _validateAqlResponse$;
|
|
14
18
|
const validateAqlResponse = await validateAql(workspaceId, {
|
|
15
19
|
qlQuery: aql
|
|
16
|
-
});
|
|
20
|
+
}, fireEvent);
|
|
17
21
|
setIsValidAqlText(validateAqlResponse.isValid);
|
|
18
22
|
isValid = validateAqlResponse.isValid;
|
|
19
23
|
message = ((_validateAqlResponse$ = validateAqlResponse.errors) === null || _validateAqlResponse$ === void 0 ? void 0 : _validateAqlResponse$.iql) || null;
|
|
@@ -30,7 +34,7 @@ export const useValidateAqlText = workspaceId => {
|
|
|
30
34
|
isValid,
|
|
31
35
|
message
|
|
32
36
|
};
|
|
33
|
-
}, [workspaceId]);
|
|
37
|
+
}, [workspaceId, fireEvent]);
|
|
34
38
|
return {
|
|
35
39
|
isValidAqlText,
|
|
36
40
|
validateAqlText,
|