@atlaskit/link-datasource 1.15.2 → 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.
Files changed (39) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/hooks/useAssetsClient.js +71 -27
  4. package/dist/cjs/services/cmdbService.js +128 -28
  5. package/dist/cjs/services/cmdbService.utils.js +64 -0
  6. package/dist/cjs/ui/assets-modal/modal/index.js +73 -9
  7. package/dist/cjs/ui/assets-modal/modal/render-assets-content/index.js +25 -12
  8. package/dist/cjs/ui/assets-modal/search-container/index.js +2 -1
  9. package/dist/cjs/ui/assets-modal/search-container/object-schema-select/index.js +21 -63
  10. package/dist/cjs/ui/issue-like-table/render-type/date-time/index.js +7 -1
  11. package/dist/es2019/analytics/constants.js +1 -1
  12. package/dist/es2019/hooks/useAssetsClient.js +39 -15
  13. package/dist/es2019/services/cmdbService.js +60 -14
  14. package/dist/es2019/services/cmdbService.utils.js +39 -0
  15. package/dist/es2019/ui/assets-modal/modal/index.js +70 -9
  16. package/dist/es2019/ui/assets-modal/modal/render-assets-content/index.js +24 -9
  17. package/dist/es2019/ui/assets-modal/search-container/index.js +2 -1
  18. package/dist/es2019/ui/assets-modal/search-container/object-schema-select/index.js +2 -25
  19. package/dist/es2019/ui/issue-like-table/render-type/date-time/index.js +7 -1
  20. package/dist/esm/analytics/constants.js +1 -1
  21. package/dist/esm/hooks/useAssetsClient.js +72 -28
  22. package/dist/esm/services/cmdbService.js +128 -28
  23. package/dist/esm/services/cmdbService.utils.js +57 -0
  24. package/dist/esm/ui/assets-modal/modal/index.js +73 -9
  25. package/dist/esm/ui/assets-modal/modal/render-assets-content/index.js +24 -9
  26. package/dist/esm/ui/assets-modal/search-container/index.js +2 -1
  27. package/dist/esm/ui/assets-modal/search-container/object-schema-select/index.js +18 -60
  28. package/dist/esm/ui/issue-like-table/render-type/date-time/index.js +7 -1
  29. package/dist/types/hooks/useAssetsClient.d.ts +5 -1
  30. package/dist/types/services/cmdbService.utils.d.ts +9 -0
  31. package/dist/types/ui/assets-modal/modal/render-assets-content/index.d.ts +3 -2
  32. package/dist/types/ui/assets-modal/search-container/index.d.ts +1 -0
  33. package/dist/types/ui/assets-modal/search-container/object-schema-select/index.d.ts +2 -1
  34. package/dist/types-ts4.5/hooks/useAssetsClient.d.ts +5 -1
  35. package/dist/types-ts4.5/services/cmdbService.utils.d.ts +9 -0
  36. package/dist/types-ts4.5/ui/assets-modal/modal/render-assets-content/index.d.ts +3 -2
  37. package/dist/types-ts4.5/ui/assets-modal/search-container/index.d.ts +1 -0
  38. package/dist/types-ts4.5/ui/assets-modal/search-container/object-schema-select/index.d.ts +2 -1
  39. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
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
+
9
+ ## 1.15.3
10
+
11
+ ### Patch Changes
12
+
13
+ - [#42661](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42661) [`c6abc68904d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c6abc68904d) - [ux] Fix date showing incorrectly and also update test data to check for the format it was failing for
14
+
3
15
  ## 1.15.2
4
16
 
5
17
  ### Patch Changes
@@ -7,5 +7,5 @@ exports.packageMetaData = exports.EVENT_CHANNEL = void 0;
7
7
  var EVENT_CHANNEL = exports.EVENT_CHANNEL = 'media';
8
8
  var packageMetaData = exports.packageMetaData = {
9
9
  packageName: "@atlaskit/link-datasource",
10
- packageVersion: "1.15.2"
10
+ packageVersion: "1.15.4"
11
11
  };
@@ -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
- objectSchema = _useState6[0],
25
- setObjectSchema = _useState6[1];
31
+ workspaceError = _useState6[0],
32
+ setWorkspaceError = _useState6[1];
26
33
  var _useState7 = (0, _react.useState)(),
27
34
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
28
- error = _useState8[0],
29
- setError = _useState8[1];
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
- setError(undefined);
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 = 17;
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
- setObjectSchema(fetchedObjectSchema);
55
- _context.next = 17;
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
- case 17:
61
- _context.next = 22;
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 19:
64
- _context.prev = 19;
65
- _context.t1 = _context["catch"](2);
66
- if (_context.t1 instanceof Error) {
67
- setError(_context.t1);
68
- } else {
69
- setError(new Error('Unexpected error occured'));
70
- }
71
- case 22:
72
- _context.prev = 22;
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(22);
75
- case 25:
114
+ return _context.finish(34);
115
+ case 37:
76
116
  case "end":
77
117
  return _context.stop();
78
118
  }
79
- }, _callee, null, [[2, 19, 22, 25], [8, 15]]);
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: error,
85
- objectSchema: objectSchema,
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.next = 3;
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 3:
22
+ case 4:
22
23
  workspaceDetailsResponse = _context.sent;
23
24
  if ((_workspaceDetailsResp = workspaceDetailsResponse.results) !== null && _workspaceDetailsResp !== void 0 && _workspaceDetailsResp.length) {
24
- _context.next = 6;
25
+ _context.next = 7;
25
26
  break;
26
27
  }
27
- throw new Error('No workspace results found');
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 validateAql(workspaceId, data) {
41
- var url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/aql/validate");
42
- return (0, _linkingCommon.request)('post', url, {
43
- qlQuery: data.qlQuery,
44
- context: 'SMART_LINKS'
45
- }, undefined, [200, 201, 202, 203, 204]);
46
- };
47
- var fetchObjectSchema = exports.fetchObjectSchema = function fetchObjectSchema(workspaceId, schemaId) {
48
- var url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/").concat(schemaId);
49
- return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
50
- };
51
- var fetchObjectSchemas = exports.fetchObjectSchemas = function fetchObjectSchemas(workspaceId, query) {
52
- var queryParams = new URLSearchParams();
53
- queryParams.set('maxResults', '20');
54
- queryParams.set('includeCounts', 'false');
55
- query && queryParams.set('query', query);
56
- var url = "/gateway/api/jsm/assets/workspace/".concat(workspaceId, "/v1/objectschema/list?").concat(queryParams);
57
- return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
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
- objectSchema = _useAssetsClient.objectSchema,
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 = !!workspaceError || status !== 'resolved' || assetsClientLoading || !aql || !schemaId;
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 (workspaceError) {
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: 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
- }, [aql, assetsClientLoading, handleOnSearch, objectSchema, status, workspaceError, workspaceId]);
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
- }, workspaceError ? (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, null) : (0, _react2.jsx)(_renderAssetsContent.RenderAssetsContent, {
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 = _interopRequireWildcard(require("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
- 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
- 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; }
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 /*#__PURE__*/_react.default.createElement(_issueLikeTable.IssueLikeDataTableView, {
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 (status === 'rejected') {
43
- return /*#__PURE__*/_react.default.createElement(_modalLoadingError.ModalLoadingError, null);
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 /*#__PURE__*/_react.default.createElement(_accessRequired.AccessRequired, null);
58
+ return (0, _react2.jsx)(_accessRequired.AccessRequired, null);
46
59
  } else if (status === 'empty') {
47
- return /*#__PURE__*/_react.default.createElement(_initialStateView.InitialStateView, null);
60
+ return (0, _react2.jsx)(_initialStateView.InitialStateView, null);
48
61
  } else if (resolvedWithNoResults) {
49
- return /*#__PURE__*/_react.default.createElement(_noResults.NoResults, null);
62
+ return (0, _react2.jsx)(_noResults.NoResults, null);
50
63
  } else if (status === 'loading' && !columns.length) {
51
- return /*#__PURE__*/_react.default.createElement(_issueLikeTable.EmptyState, {
64
+ return (0, _react2.jsx)(_issueLikeTable.EmptyState, {
52
65
  testId: "assets-aql-datasource-modal--loading-state"
53
66
  });
54
67
  }