@atlaskit/link-datasource 1.15.3 → 1.15.4
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 +6 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/hooks/useAssetsClient.js +71 -27
- package/dist/cjs/services/cmdbService.js +128 -28
- package/dist/cjs/services/cmdbService.utils.js +64 -0
- package/dist/cjs/ui/assets-modal/modal/index.js +73 -9
- package/dist/cjs/ui/assets-modal/modal/render-assets-content/index.js +25 -12
- package/dist/cjs/ui/assets-modal/search-container/index.js +2 -1
- package/dist/cjs/ui/assets-modal/search-container/object-schema-select/index.js +21 -63
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/hooks/useAssetsClient.js +39 -15
- package/dist/es2019/services/cmdbService.js +60 -14
- package/dist/es2019/services/cmdbService.utils.js +39 -0
- package/dist/es2019/ui/assets-modal/modal/index.js +70 -9
- package/dist/es2019/ui/assets-modal/modal/render-assets-content/index.js +24 -9
- package/dist/es2019/ui/assets-modal/search-container/index.js +2 -1
- package/dist/es2019/ui/assets-modal/search-container/object-schema-select/index.js +2 -25
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/hooks/useAssetsClient.js +72 -28
- package/dist/esm/services/cmdbService.js +128 -28
- package/dist/esm/services/cmdbService.utils.js +57 -0
- package/dist/esm/ui/assets-modal/modal/index.js +73 -9
- package/dist/esm/ui/assets-modal/modal/render-assets-content/index.js +24 -9
- package/dist/esm/ui/assets-modal/search-container/index.js +2 -1
- package/dist/esm/ui/assets-modal/search-container/object-schema-select/index.js +18 -60
- package/dist/types/hooks/useAssetsClient.d.ts +5 -1
- package/dist/types/services/cmdbService.utils.d.ts +9 -0
- package/dist/types/ui/assets-modal/modal/render-assets-content/index.d.ts +3 -2
- package/dist/types/ui/assets-modal/search-container/index.d.ts +1 -0
- package/dist/types/ui/assets-modal/search-container/object-schema-select/index.d.ts +2 -1
- package/dist/types-ts4.5/hooks/useAssetsClient.d.ts +5 -1
- package/dist/types-ts4.5/services/cmdbService.utils.d.ts +9 -0
- package/dist/types-ts4.5/ui/assets-modal/modal/render-assets-content/index.d.ts +3 -2
- package/dist/types-ts4.5/ui/assets-modal/search-container/index.d.ts +1 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/object-schema-select/index.d.ts +2 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.15.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#42840](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42840) [`0358055bfaa`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0358055bfaa) - [ux] Permission error states are now shown in the Assets Config Modal.
|
|
8
|
+
|
|
3
9
|
## 1.15.3
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -10,6 +10,13 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
|
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _react = require("react");
|
|
12
12
|
var _cmdbService = require("../services/cmdbService");
|
|
13
|
+
var handleAssetsClientErrors = function handleAssetsClientErrors(errorSetter, error) {
|
|
14
|
+
if (error instanceof Error) {
|
|
15
|
+
errorSetter(error);
|
|
16
|
+
} else {
|
|
17
|
+
errorSetter(new Error('Unexpected error occured'));
|
|
18
|
+
}
|
|
19
|
+
};
|
|
13
20
|
var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initialParameters) {
|
|
14
21
|
var _useState = (0, _react.useState)(false),
|
|
15
22
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -21,29 +28,51 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
21
28
|
setWorkspaceId = _useState4[1];
|
|
22
29
|
var _useState5 = (0, _react.useState)(),
|
|
23
30
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
workspaceError = _useState6[0],
|
|
32
|
+
setWorkspaceError = _useState6[1];
|
|
26
33
|
var _useState7 = (0, _react.useState)(),
|
|
27
34
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
existingObjectSchema = _useState8[0],
|
|
36
|
+
setExistingObjectSchema = _useState8[1];
|
|
37
|
+
var _useState9 = (0, _react.useState)(),
|
|
38
|
+
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
39
|
+
existingObjectSchemaError = _useState10[0],
|
|
40
|
+
setExistingObjectSchemaError = _useState10[1];
|
|
41
|
+
var _useState11 = (0, _react.useState)(),
|
|
42
|
+
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
43
|
+
objectSchemas = _useState12[0],
|
|
44
|
+
setObjectSchemas = _useState12[1];
|
|
45
|
+
var _useState13 = (0, _react.useState)(),
|
|
46
|
+
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
47
|
+
totalObjectSchemas = _useState14[0],
|
|
48
|
+
setTotalObjectSchemas = _useState14[1];
|
|
49
|
+
var _useState15 = (0, _react.useState)(),
|
|
50
|
+
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
51
|
+
objectSchemasError = _useState16[0],
|
|
52
|
+
setObjectSchemasError = _useState16[1];
|
|
53
|
+
|
|
54
|
+
/*
|
|
55
|
+
* We wrap this in nested try/catch blocks because we want to handle
|
|
56
|
+
* workspaceError/existingObjectSchemaError/objectSchemasError differently
|
|
57
|
+
* if we need to implement more initial data fetching/errors we should look at a store
|
|
58
|
+
*/
|
|
30
59
|
(0, _react.useEffect)(function () {
|
|
31
60
|
(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
32
|
-
var _workspaceId, fetchedObjectSchema;
|
|
61
|
+
var _workspaceId, fetchedObjectSchema, fetchedObjectSchemasResponse;
|
|
33
62
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
34
63
|
while (1) switch (_context.prev = _context.next) {
|
|
35
64
|
case 0:
|
|
36
65
|
setLoading(true);
|
|
37
|
-
|
|
66
|
+
setWorkspaceError(undefined);
|
|
38
67
|
_context.prev = 2;
|
|
39
68
|
_context.next = 5;
|
|
40
69
|
return (0, _cmdbService.getWorkspaceId)();
|
|
41
70
|
case 5:
|
|
42
71
|
_workspaceId = _context.sent;
|
|
43
72
|
setWorkspaceId(_workspaceId);
|
|
44
|
-
// Check schema from initial parameters still exists and fetch name for schema select
|
|
73
|
+
// Check schema from initial parameters still exists and fetch name/permissions for schema select
|
|
45
74
|
if (!(initialParameters !== null && initialParameters !== void 0 && initialParameters.schemaId)) {
|
|
46
|
-
_context.next =
|
|
75
|
+
_context.next = 18;
|
|
47
76
|
break;
|
|
48
77
|
}
|
|
49
78
|
_context.prev = 8;
|
|
@@ -51,38 +80,53 @@ var useAssetsClient = exports.useAssetsClient = function useAssetsClient(initial
|
|
|
51
80
|
return (0, _cmdbService.fetchObjectSchema)(_workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
|
|
52
81
|
case 11:
|
|
53
82
|
fetchedObjectSchema = _context.sent;
|
|
54
|
-
|
|
55
|
-
_context.next =
|
|
83
|
+
setExistingObjectSchema(fetchedObjectSchema);
|
|
84
|
+
_context.next = 18;
|
|
56
85
|
break;
|
|
57
86
|
case 15:
|
|
58
87
|
_context.prev = 15;
|
|
59
88
|
_context.t0 = _context["catch"](8);
|
|
60
|
-
|
|
61
|
-
|
|
89
|
+
handleAssetsClientErrors(setExistingObjectSchemaError, _context.t0);
|
|
90
|
+
case 18:
|
|
91
|
+
_context.prev = 18;
|
|
92
|
+
_context.next = 21;
|
|
93
|
+
return (0, _cmdbService.fetchObjectSchemas)(_workspaceId);
|
|
94
|
+
case 21:
|
|
95
|
+
fetchedObjectSchemasResponse = _context.sent;
|
|
96
|
+
setObjectSchemas(fetchedObjectSchemasResponse.values);
|
|
97
|
+
setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
|
|
98
|
+
_context.next = 29;
|
|
62
99
|
break;
|
|
63
|
-
case
|
|
64
|
-
_context.prev =
|
|
65
|
-
_context.t1 = _context["catch"](
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
_context.
|
|
100
|
+
case 26:
|
|
101
|
+
_context.prev = 26;
|
|
102
|
+
_context.t1 = _context["catch"](18);
|
|
103
|
+
handleAssetsClientErrors(setObjectSchemasError, _context.t1);
|
|
104
|
+
case 29:
|
|
105
|
+
_context.next = 34;
|
|
106
|
+
break;
|
|
107
|
+
case 31:
|
|
108
|
+
_context.prev = 31;
|
|
109
|
+
_context.t2 = _context["catch"](2);
|
|
110
|
+
handleAssetsClientErrors(setWorkspaceError, _context.t2);
|
|
111
|
+
case 34:
|
|
112
|
+
_context.prev = 34;
|
|
73
113
|
setLoading(false);
|
|
74
|
-
return _context.finish(
|
|
75
|
-
case
|
|
114
|
+
return _context.finish(34);
|
|
115
|
+
case 37:
|
|
76
116
|
case "end":
|
|
77
117
|
return _context.stop();
|
|
78
118
|
}
|
|
79
|
-
}, _callee, null, [[2,
|
|
119
|
+
}, _callee, null, [[2, 31, 34, 37], [8, 15], [18, 26]]);
|
|
80
120
|
}))();
|
|
81
121
|
}, [initialParameters]);
|
|
82
122
|
return {
|
|
83
123
|
workspaceId: workspaceId,
|
|
84
|
-
workspaceError:
|
|
85
|
-
|
|
124
|
+
workspaceError: workspaceError,
|
|
125
|
+
existingObjectSchema: existingObjectSchema,
|
|
126
|
+
existingObjectSchemaError: existingObjectSchemaError,
|
|
127
|
+
objectSchemas: objectSchemas,
|
|
128
|
+
totalObjectSchemas: totalObjectSchemas,
|
|
129
|
+
objectSchemasError: objectSchemasError,
|
|
86
130
|
assetsClientLoading: loading
|
|
87
131
|
};
|
|
88
132
|
};
|
|
@@ -8,51 +8,151 @@ exports.validateAql = exports.getWorkspaceId = exports.fetchObjectSchemas = expo
|
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
10
|
var _linkingCommon = require("@atlaskit/linking-common");
|
|
11
|
+
var _cmdbService = require("./cmdbService.utils");
|
|
11
12
|
var getWorkspaceId = exports.getWorkspaceId = /*#__PURE__*/function () {
|
|
12
13
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
13
|
-
var _workspaceDetailsResp;
|
|
14
|
-
var url, workspaceDetailsResponse;
|
|
14
|
+
var url, _workspaceDetailsResp, workspaceDetailsResponse, error;
|
|
15
15
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
16
16
|
while (1) switch (_context.prev = _context.next) {
|
|
17
17
|
case 0:
|
|
18
18
|
url = '/rest/servicedesk/cmdb/latest/workspace';
|
|
19
|
-
_context.
|
|
19
|
+
_context.prev = 1;
|
|
20
|
+
_context.next = 4;
|
|
20
21
|
return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
21
|
-
case
|
|
22
|
+
case 4:
|
|
22
23
|
workspaceDetailsResponse = _context.sent;
|
|
23
24
|
if ((_workspaceDetailsResp = workspaceDetailsResponse.results) !== null && _workspaceDetailsResp !== void 0 && _workspaceDetailsResp.length) {
|
|
24
|
-
_context.next =
|
|
25
|
+
_context.next = 7;
|
|
25
26
|
break;
|
|
26
27
|
}
|
|
27
|
-
throw new
|
|
28
|
-
case 6:
|
|
29
|
-
return _context.abrupt("return", workspaceDetailsResponse.results[0].id);
|
|
28
|
+
throw new _cmdbService.PermissionError('No workspace results found');
|
|
30
29
|
case 7:
|
|
30
|
+
return _context.abrupt("return", workspaceDetailsResponse.results[0].id);
|
|
31
|
+
case 10:
|
|
32
|
+
_context.prev = 10;
|
|
33
|
+
_context.t0 = _context["catch"](1);
|
|
34
|
+
error = (0, _cmdbService.mapFetchErrors)(_context.t0);
|
|
35
|
+
if (error instanceof _cmdbService.FetchError) {
|
|
36
|
+
// TODO Fire error operational event for workspace here before remapping to PermissionError
|
|
37
|
+
// Only 429 and 5xx errors will be treated as FetchErrors otherwise PermissionError
|
|
38
|
+
if ((0, _cmdbService.getStatusCodeGroup)(error) !== '5xx' && error.statusCode !== 429) {
|
|
39
|
+
error = new _cmdbService.PermissionError('Failed to fetch workspace');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
case 15:
|
|
31
44
|
case "end":
|
|
32
45
|
return _context.stop();
|
|
33
46
|
}
|
|
34
|
-
}, _callee);
|
|
47
|
+
}, _callee, null, [[1, 10]]);
|
|
35
48
|
}));
|
|
36
49
|
return function getWorkspaceId() {
|
|
37
50
|
return _ref.apply(this, arguments);
|
|
38
51
|
};
|
|
39
52
|
}();
|
|
40
|
-
var validateAql = exports.validateAql = function
|
|
41
|
-
var
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
var validateAql = exports.validateAql = /*#__PURE__*/function () {
|
|
54
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(workspaceId, data) {
|
|
55
|
+
var url, error;
|
|
56
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
57
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
58
|
+
case 0:
|
|
59
|
+
url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/aql/validate");
|
|
60
|
+
_context2.prev = 1;
|
|
61
|
+
_context2.next = 4;
|
|
62
|
+
return (0, _linkingCommon.request)('post', url, {
|
|
63
|
+
qlQuery: data.qlQuery,
|
|
64
|
+
context: 'SMART_LINKS'
|
|
65
|
+
}, undefined, [200, 201, 202, 203, 204]);
|
|
66
|
+
case 4:
|
|
67
|
+
return _context2.abrupt("return", _context2.sent);
|
|
68
|
+
case 7:
|
|
69
|
+
_context2.prev = 7;
|
|
70
|
+
_context2.t0 = _context2["catch"](1);
|
|
71
|
+
error = (0, _cmdbService.mapFetchErrors)(_context2.t0);
|
|
72
|
+
if (error instanceof _cmdbService.FetchError) {
|
|
73
|
+
// TODO Fire error operational event for aql here before remapping to PermissionError
|
|
74
|
+
if (error.statusCode === 401 || error.statusCode === 403) {
|
|
75
|
+
error = new _cmdbService.PermissionError('Failed to fetch object schemas');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
case 12:
|
|
80
|
+
case "end":
|
|
81
|
+
return _context2.stop();
|
|
82
|
+
}
|
|
83
|
+
}, _callee2, null, [[1, 7]]);
|
|
84
|
+
}));
|
|
85
|
+
return function validateAql(_x, _x2) {
|
|
86
|
+
return _ref2.apply(this, arguments);
|
|
87
|
+
};
|
|
88
|
+
}();
|
|
89
|
+
var fetchObjectSchema = exports.fetchObjectSchema = /*#__PURE__*/function () {
|
|
90
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(workspaceId, schemaId) {
|
|
91
|
+
var url, error;
|
|
92
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
93
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
94
|
+
case 0:
|
|
95
|
+
url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/").concat(schemaId);
|
|
96
|
+
_context3.prev = 1;
|
|
97
|
+
_context3.next = 4;
|
|
98
|
+
return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
99
|
+
case 4:
|
|
100
|
+
return _context3.abrupt("return", _context3.sent);
|
|
101
|
+
case 7:
|
|
102
|
+
_context3.prev = 7;
|
|
103
|
+
_context3.t0 = _context3["catch"](1);
|
|
104
|
+
error = (0, _cmdbService.mapFetchErrors)(_context3.t0);
|
|
105
|
+
if (error instanceof _cmdbService.FetchError) {
|
|
106
|
+
// TODO Fire error operational event for object schema here before remapping to PermissionError
|
|
107
|
+
if (error.statusCode === 401 || error.statusCode === 403) {
|
|
108
|
+
error = new _cmdbService.PermissionError('Failed to fetch object schemas');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
throw error;
|
|
112
|
+
case 12:
|
|
113
|
+
case "end":
|
|
114
|
+
return _context3.stop();
|
|
115
|
+
}
|
|
116
|
+
}, _callee3, null, [[1, 7]]);
|
|
117
|
+
}));
|
|
118
|
+
return function fetchObjectSchema(_x3, _x4) {
|
|
119
|
+
return _ref3.apply(this, arguments);
|
|
120
|
+
};
|
|
121
|
+
}();
|
|
122
|
+
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;
|
|
125
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
126
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
127
|
+
case 0:
|
|
128
|
+
queryParams = new URLSearchParams();
|
|
129
|
+
queryParams.set('maxResults', '20');
|
|
130
|
+
queryParams.set('includeCounts', 'false');
|
|
131
|
+
query && queryParams.set('query', query);
|
|
132
|
+
url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/list?").concat(queryParams);
|
|
133
|
+
_context4.prev = 5;
|
|
134
|
+
_context4.next = 8;
|
|
135
|
+
return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
136
|
+
case 8:
|
|
137
|
+
return _context4.abrupt("return", _context4.sent);
|
|
138
|
+
case 11:
|
|
139
|
+
_context4.prev = 11;
|
|
140
|
+
_context4.t0 = _context4["catch"](5);
|
|
141
|
+
error = (0, _cmdbService.mapFetchErrors)(_context4.t0);
|
|
142
|
+
if (error instanceof _cmdbService.FetchError) {
|
|
143
|
+
// TODO Fire error operational event for object schemas here before remapping to PermissionError
|
|
144
|
+
if (error.statusCode === 401 || error.statusCode === 403) {
|
|
145
|
+
error = new _cmdbService.PermissionError('Failed to fetch object schemas');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
throw error;
|
|
149
|
+
case 16:
|
|
150
|
+
case "end":
|
|
151
|
+
return _context4.stop();
|
|
152
|
+
}
|
|
153
|
+
}, _callee4, null, [[5, 11]]);
|
|
154
|
+
}));
|
|
155
|
+
return function fetchObjectSchemas(_x5, _x6) {
|
|
156
|
+
return _ref4.apply(this, arguments);
|
|
157
|
+
};
|
|
158
|
+
}();
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.mapFetchErrors = exports.getStatusCodeGroup = exports.PermissionError = exports.FetchError = void 0;
|
|
8
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
11
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
12
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
13
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
14
|
+
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); }; }
|
|
15
|
+
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; } }
|
|
16
|
+
var mapFetchErrors = exports.mapFetchErrors = function mapFetchErrors(error) {
|
|
17
|
+
if (error instanceof Response && !error.ok) {
|
|
18
|
+
return new FetchError(error.status, "Error server response: ".concat(error.status));
|
|
19
|
+
}
|
|
20
|
+
return error;
|
|
21
|
+
};
|
|
22
|
+
var getStatusCodeGroup = exports.getStatusCodeGroup = function getStatusCodeGroup(error) {
|
|
23
|
+
if (error instanceof FetchError) {
|
|
24
|
+
var statusCode = error.statusCode;
|
|
25
|
+
if (statusCode >= 100 && statusCode < 200) {
|
|
26
|
+
return '1xx';
|
|
27
|
+
}
|
|
28
|
+
if (statusCode >= 300 && statusCode < 400) {
|
|
29
|
+
return '3xx';
|
|
30
|
+
}
|
|
31
|
+
if (statusCode >= 400 && statusCode < 500) {
|
|
32
|
+
return '4xx';
|
|
33
|
+
}
|
|
34
|
+
if (statusCode >= 500 && statusCode < 600) {
|
|
35
|
+
return '5xx';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return 'unknown';
|
|
39
|
+
};
|
|
40
|
+
var PermissionError = exports.PermissionError = /*#__PURE__*/function (_Error) {
|
|
41
|
+
(0, _inherits2.default)(PermissionError, _Error);
|
|
42
|
+
var _super = _createSuper(PermissionError);
|
|
43
|
+
function PermissionError(message) {
|
|
44
|
+
var _this;
|
|
45
|
+
(0, _classCallCheck2.default)(this, PermissionError);
|
|
46
|
+
_this = _super.call(this, message);
|
|
47
|
+
_this.name = 'PermissionError';
|
|
48
|
+
return _this;
|
|
49
|
+
}
|
|
50
|
+
return (0, _createClass2.default)(PermissionError);
|
|
51
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
|
|
52
|
+
var FetchError = exports.FetchError = /*#__PURE__*/function (_Error2) {
|
|
53
|
+
(0, _inherits2.default)(FetchError, _Error2);
|
|
54
|
+
var _super2 = _createSuper(FetchError);
|
|
55
|
+
function FetchError(statusCode, message) {
|
|
56
|
+
var _this2;
|
|
57
|
+
(0, _classCallCheck2.default)(this, FetchError);
|
|
58
|
+
_this2 = _super2.call(this, message || "Fetch call failed with status code: ".concat(statusCode));
|
|
59
|
+
_this2.name = 'FetchError';
|
|
60
|
+
_this2.statusCode = statusCode;
|
|
61
|
+
return _this2;
|
|
62
|
+
}
|
|
63
|
+
return (0, _createClass2.default)(FetchError);
|
|
64
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
|
|
@@ -29,6 +29,8 @@ var _fetchMessagesForLocale = require("../../../common/utils/locale/fetch-messag
|
|
|
29
29
|
var _useAssetsClient2 = require("../../../hooks/useAssetsClient");
|
|
30
30
|
var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
|
|
31
31
|
var _en = _interopRequireDefault(require("../../../i18n/en"));
|
|
32
|
+
var _cmdbService = require("../../../services/cmdbService.utils");
|
|
33
|
+
var _accessRequired = require("../../../ui/common/error-state/access-required");
|
|
32
34
|
var _modalLoadingError = require("../../common/error-state/modal-loading-error");
|
|
33
35
|
var _searchContainer = require("../search-container");
|
|
34
36
|
var _loadingState = require("../search-container/loading-state");
|
|
@@ -43,6 +45,9 @@ var modalBodyWrapperStyles = (0, _react2.css)({
|
|
|
43
45
|
height: '420px',
|
|
44
46
|
overflow: 'auto'
|
|
45
47
|
});
|
|
48
|
+
var modalBodyErrorWrapperStyles = (0, _react2.css)({
|
|
49
|
+
alignItems: 'center'
|
|
50
|
+
});
|
|
46
51
|
var AssetsModalTitle = (0, _react2.jsx)(_modalDialog.ModalTitle, null, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertObjectsTitle));
|
|
47
52
|
var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
48
53
|
var datasourceId = props.datasourceId,
|
|
@@ -66,17 +71,53 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
66
71
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
67
72
|
isNewSearch = _useState8[0],
|
|
68
73
|
setIsNewSearch = _useState8[1];
|
|
74
|
+
var _useState9 = (0, _react.useState)(),
|
|
75
|
+
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
76
|
+
errorState = _useState10[0],
|
|
77
|
+
setErrorState = _useState10[1];
|
|
69
78
|
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
70
79
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
71
80
|
var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
|
|
72
81
|
modalRenderInstanceId = _useRef.current;
|
|
73
|
-
|
|
74
|
-
// If a workspaceError occurs this is a critical error
|
|
75
82
|
var _useAssetsClient = (0, _useAssetsClient2.useAssetsClient)(initialParameters),
|
|
76
83
|
workspaceId = _useAssetsClient.workspaceId,
|
|
77
84
|
workspaceError = _useAssetsClient.workspaceError,
|
|
78
|
-
|
|
85
|
+
existingObjectSchema = _useAssetsClient.existingObjectSchema,
|
|
86
|
+
existingObjectSchemaError = _useAssetsClient.existingObjectSchemaError,
|
|
87
|
+
objectSchemas = _useAssetsClient.objectSchemas,
|
|
88
|
+
objectSchemasError = _useAssetsClient.objectSchemasError,
|
|
89
|
+
totalObjectSchemas = _useAssetsClient.totalObjectSchemas,
|
|
79
90
|
assetsClientLoading = _useAssetsClient.assetsClientLoading;
|
|
91
|
+
|
|
92
|
+
/* ------------------------------ PERMISSIONS ------------------------------ */
|
|
93
|
+
(0, _react.useEffect)(function () {
|
|
94
|
+
if (workspaceError) {
|
|
95
|
+
// If a workspaceError occurs this is a critical error
|
|
96
|
+
if (workspaceError instanceof _cmdbService.PermissionError) {
|
|
97
|
+
setErrorState('permission');
|
|
98
|
+
} else {
|
|
99
|
+
setErrorState('network');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}, [workspaceError]);
|
|
103
|
+
(0, _react.useEffect)(function () {
|
|
104
|
+
if (objectSchemasError) {
|
|
105
|
+
// We only care about permission errors for objectSchemas fetching as the user can retry this action
|
|
106
|
+
if (objectSchemasError instanceof _cmdbService.PermissionError) {
|
|
107
|
+
setErrorState('permission');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}, [objectSchemasError]);
|
|
111
|
+
(0, _react.useEffect)(function () {
|
|
112
|
+
if (existingObjectSchemaError) {
|
|
113
|
+
// We only care about permission errors for existingObjectSchema fetching as the user can retry this action
|
|
114
|
+
if (existingObjectSchemaError instanceof _cmdbService.PermissionError) {
|
|
115
|
+
setErrorState('permission');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}, [existingObjectSchemaError]);
|
|
119
|
+
/* ------------------------------ END PERMISSIONS ------------------------------ */
|
|
120
|
+
|
|
80
121
|
var parameters = (0, _react.useMemo)(function () {
|
|
81
122
|
return {
|
|
82
123
|
aql: aql || '',
|
|
@@ -114,6 +155,15 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
114
155
|
destinationObjectTypes: destinationObjectTypes
|
|
115
156
|
};
|
|
116
157
|
}, [destinationObjectTypes, extensionKey]);
|
|
158
|
+
(0, _react.useEffect)(function () {
|
|
159
|
+
// We only want to send modal ready event once after we've fetched the schema count
|
|
160
|
+
if (totalObjectSchemas !== undefined) {
|
|
161
|
+
fireEvent('ui.modal.ready.datasource', {
|
|
162
|
+
schemasCount: totalObjectSchemas,
|
|
163
|
+
instancesCount: null
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}, [fireEvent, totalObjectSchemas]);
|
|
117
167
|
(0, _react.useEffect)(function () {
|
|
118
168
|
fireEvent('screen.datasourceModalDialog.viewed', {});
|
|
119
169
|
}, [fireEvent]);
|
|
@@ -167,7 +217,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
167
217
|
setVisibleColumnKeys(defaultVisibleColumnKeys);
|
|
168
218
|
}
|
|
169
219
|
}, [defaultVisibleColumnKeys, isNewSearch]);
|
|
170
|
-
var isDisabled = !!
|
|
220
|
+
var isDisabled = !!errorState || status !== 'resolved' || assetsClientLoading || !aql || !schemaId;
|
|
171
221
|
var retrieveUrlForSmartCardRender = (0, _react.useCallback)(function () {
|
|
172
222
|
var _data$key;
|
|
173
223
|
var _responseItems = (0, _slicedToArray2.default)(responseItems, 1),
|
|
@@ -269,8 +319,20 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
269
319
|
return _ref.apply(this, arguments);
|
|
270
320
|
};
|
|
271
321
|
}(), [aql, reset, schemaId, status]);
|
|
322
|
+
var renderErrorState = (0, _react.useCallback)(function () {
|
|
323
|
+
if (errorState) {
|
|
324
|
+
switch (errorState) {
|
|
325
|
+
case 'permission':
|
|
326
|
+
return (0, _react2.jsx)(_accessRequired.AccessRequired, null);
|
|
327
|
+
case 'network':
|
|
328
|
+
return (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, null);
|
|
329
|
+
default:
|
|
330
|
+
return (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, null);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}, [errorState]);
|
|
272
334
|
var renderModalTitleContent = (0, _react.useCallback)(function () {
|
|
273
|
-
if (
|
|
335
|
+
if (errorState) {
|
|
274
336
|
return undefined;
|
|
275
337
|
} else {
|
|
276
338
|
if (!workspaceId || assetsClientLoading) {
|
|
@@ -282,14 +344,15 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
282
344
|
workspaceId: workspaceId,
|
|
283
345
|
initialSearchData: {
|
|
284
346
|
aql: aql,
|
|
285
|
-
objectSchema:
|
|
347
|
+
objectSchema: existingObjectSchema,
|
|
348
|
+
objectSchemas: objectSchemas
|
|
286
349
|
},
|
|
287
350
|
onSearch: handleOnSearch,
|
|
288
351
|
modalTitle: AssetsModalTitle,
|
|
289
352
|
isSearching: status === 'loading'
|
|
290
353
|
});
|
|
291
354
|
}
|
|
292
|
-
}, [
|
|
355
|
+
}, [errorState, workspaceId, assetsClientLoading, aql, existingObjectSchema, objectSchemas, handleOnSearch, status]);
|
|
293
356
|
return (0, _react2.jsx)(_intlMessagesProvider.IntlMessagesProvider, {
|
|
294
357
|
defaultMessages: _en.default,
|
|
295
358
|
loaderFn: _fetchMessagesForLocale.fetchMessagesForLocale
|
|
@@ -300,8 +363,9 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
300
363
|
shouldScrollInViewport: true,
|
|
301
364
|
shouldCloseOnOverlayClick: false
|
|
302
365
|
}, (0, _react2.jsx)(_modalDialog.ModalHeader, null, renderModalTitleContent()), (0, _react2.jsx)(_modalDialog.ModalBody, null, (0, _react2.jsx)("div", {
|
|
303
|
-
css: modalBodyWrapperStyles
|
|
304
|
-
},
|
|
366
|
+
css: [modalBodyWrapperStyles, errorState && modalBodyErrorWrapperStyles]
|
|
367
|
+
}, errorState ? renderErrorState() : (0, _react2.jsx)(_renderAssetsContent.RenderAssetsContent, {
|
|
368
|
+
isFetchingInitialData: assetsClientLoading,
|
|
305
369
|
status: status,
|
|
306
370
|
responseItems: responseItems,
|
|
307
371
|
visibleColumnKeys: visibleColumnKeys,
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.RenderAssetsContent = void 0;
|
|
8
|
-
var _react =
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _react2 = require("@emotion/react");
|
|
9
9
|
var _accessRequired = require("../../../common/error-state/access-required");
|
|
10
10
|
var _modalLoadingError = require("../../../common/error-state/modal-loading-error");
|
|
11
11
|
var _noResults = require("../../../common/error-state/no-results");
|
|
12
12
|
var _issueLikeTable = require("../../../issue-like-table");
|
|
13
13
|
var _initialStateView = require("./initial-state-view");
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
/** @jsx jsx */
|
|
15
|
+
|
|
16
|
+
// This is to prevent y scrollbar when initially fetching data
|
|
17
|
+
var emptyStateOverrideStyles = (0, _react2.css)({
|
|
18
|
+
height: '420px',
|
|
19
|
+
overflow: 'hidden'
|
|
20
|
+
});
|
|
16
21
|
var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsContent(props) {
|
|
17
22
|
var status = props.status,
|
|
18
23
|
responseItems = props.responseItems,
|
|
@@ -23,10 +28,11 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
|
|
|
23
28
|
columns = props.columns,
|
|
24
29
|
defaultVisibleColumnKeys = props.defaultVisibleColumnKeys,
|
|
25
30
|
onVisibleColumnKeysChange = props.onVisibleColumnKeysChange,
|
|
26
|
-
modalRenderInstanceId = props.modalRenderInstanceId
|
|
31
|
+
modalRenderInstanceId = props.modalRenderInstanceId,
|
|
32
|
+
isFetchingInitialData = props.isFetchingInitialData;
|
|
27
33
|
var resolvedWithNoResults = status === 'resolved' && !responseItems.length;
|
|
28
34
|
var issueLikeDataTableView = (0, _react.useMemo)(function () {
|
|
29
|
-
return
|
|
35
|
+
return (0, _react2.jsx)(_issueLikeTable.IssueLikeDataTableView, {
|
|
30
36
|
testId: "asset-datasource-table",
|
|
31
37
|
status: status,
|
|
32
38
|
columns: columns,
|
|
@@ -39,16 +45,23 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
|
|
|
39
45
|
parentContainerRenderInstanceId: modalRenderInstanceId
|
|
40
46
|
});
|
|
41
47
|
}, [columns, defaultVisibleColumnKeys, hasNextPage, loadDatasourceDetails, onNextPage, onVisibleColumnKeysChange, responseItems, status, visibleColumnKeys, modalRenderInstanceId]);
|
|
42
|
-
if (
|
|
43
|
-
|
|
48
|
+
if (isFetchingInitialData) {
|
|
49
|
+
// Placing this check first as it's a priority before all others
|
|
50
|
+
return (0, _react2.jsx)("div", {
|
|
51
|
+
css: emptyStateOverrideStyles
|
|
52
|
+
}, (0, _react2.jsx)(_issueLikeTable.EmptyState, {
|
|
53
|
+
testId: "assets-aql-datasource-modal--loading-state"
|
|
54
|
+
}));
|
|
55
|
+
} else if (status === 'rejected') {
|
|
56
|
+
return (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, null);
|
|
44
57
|
} else if (status === 'unauthorized') {
|
|
45
|
-
return
|
|
58
|
+
return (0, _react2.jsx)(_accessRequired.AccessRequired, null);
|
|
46
59
|
} else if (status === 'empty') {
|
|
47
|
-
return
|
|
60
|
+
return (0, _react2.jsx)(_initialStateView.InitialStateView, null);
|
|
48
61
|
} else if (resolvedWithNoResults) {
|
|
49
|
-
return
|
|
62
|
+
return (0, _react2.jsx)(_noResults.NoResults, null);
|
|
50
63
|
} else if (status === 'loading' && !columns.length) {
|
|
51
|
-
return
|
|
64
|
+
return (0, _react2.jsx)(_issueLikeTable.EmptyState, {
|
|
52
65
|
testId: "assets-aql-datasource-modal--loading-state"
|
|
53
66
|
});
|
|
54
67
|
}
|
|
@@ -36,7 +36,7 @@ var AssetsSearchContainer = exports.AssetsSearchContainer = function AssetsSearc
|
|
|
36
36
|
return (0, _react.jsx)(_form.default, {
|
|
37
37
|
onSubmit: onFormSubmit
|
|
38
38
|
}, function (_ref) {
|
|
39
|
-
var _initialSearchData$ob, _initialSearchData$aq;
|
|
39
|
+
var _initialSearchData$ob, _initialSearchData$ob2, _initialSearchData$aq;
|
|
40
40
|
var formProps = _ref.formProps;
|
|
41
41
|
return (0, _react.jsx)(_styled.FormContainer, (0, _extends2.default)({}, formProps, {
|
|
42
42
|
id: SEARCH_FORM_ID
|
|
@@ -45,6 +45,7 @@ var AssetsSearchContainer = exports.AssetsSearchContainer = function AssetsSearc
|
|
|
45
45
|
}, modalTitle, (0, _react.jsx)(_styled.SchemaSelectContainer, null, (0, _react.jsx)(_objectSchemaSelect.AssetsObjectSchemaSelect, {
|
|
46
46
|
value: (_initialSearchData$ob = initialSearchData.objectSchema) !== null && _initialSearchData$ob !== void 0 ? _initialSearchData$ob : undefined,
|
|
47
47
|
workspaceId: workspaceId,
|
|
48
|
+
initialObjectSchemas: (_initialSearchData$ob2 = initialSearchData.objectSchemas) !== null && _initialSearchData$ob2 !== void 0 ? _initialSearchData$ob2 : undefined,
|
|
48
49
|
classNamePrefix: "assets-datasource-modal--object-schema-select"
|
|
49
50
|
}))), (0, _react.jsx)(_styled.FormRowContainer, null, (0, _react.jsx)(_aqlSearchInput.AqlSearchInput, {
|
|
50
51
|
value: (_initialSearchData$aq = initialSearchData.aql) !== null && _initialSearchData$aq !== void 0 ? _initialSearchData$aq : DEFAULT_AQL_QUERY,
|