@atlaskit/link-datasource 0.27.3 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/hooks/useAssetsClient.js +70 -0
  3. package/dist/cjs/hooks/useValidateAqlText.js +48 -0
  4. package/dist/cjs/index.js +13 -0
  5. package/dist/cjs/services/cmdbService.js +53 -0
  6. package/dist/cjs/types/assets/types.js +5 -0
  7. package/dist/cjs/ui/assets-modal/index.js +31 -0
  8. package/dist/cjs/ui/assets-modal/modal/index.js +68 -0
  9. package/dist/cjs/ui/assets-modal/modal/messages.js +20 -0
  10. package/dist/cjs/ui/assets-modal/modal/render-assets-content/index.js +27 -0
  11. package/dist/cjs/ui/assets-modal/modal/styled.js +12 -0
  12. package/dist/cjs/ui/assets-modal/types.js +5 -0
  13. package/dist/cjs/ui/common/error-state/modal-loading-error.js +2 -2
  14. package/dist/cjs/version.json +1 -1
  15. package/dist/es2019/hooks/useAssetsClient.js +32 -0
  16. package/dist/es2019/hooks/useValidateAqlText.js +17 -0
  17. package/dist/es2019/index.js +3 -1
  18. package/dist/es2019/services/cmdbService.js +21 -0
  19. package/dist/es2019/types/assets/types.js +1 -0
  20. package/dist/es2019/ui/assets-modal/index.js +13 -0
  21. package/dist/es2019/ui/assets-modal/modal/index.js +52 -0
  22. package/dist/es2019/ui/assets-modal/modal/messages.js +13 -0
  23. package/dist/es2019/ui/assets-modal/modal/render-assets-content/index.js +21 -0
  24. package/dist/es2019/ui/assets-modal/modal/styled.js +6 -0
  25. package/dist/es2019/ui/assets-modal/types.js +1 -0
  26. package/dist/es2019/ui/common/error-state/modal-loading-error.js +2 -2
  27. package/dist/es2019/version.json +1 -1
  28. package/dist/esm/hooks/useAssetsClient.js +62 -0
  29. package/dist/esm/hooks/useValidateAqlText.js +40 -0
  30. package/dist/esm/index.js +3 -1
  31. package/dist/esm/services/cmdbService.js +43 -0
  32. package/dist/esm/types/assets/types.js +1 -0
  33. package/dist/esm/ui/assets-modal/index.js +17 -0
  34. package/dist/esm/ui/assets-modal/modal/index.js +56 -0
  35. package/dist/esm/ui/assets-modal/modal/messages.js +13 -0
  36. package/dist/esm/ui/assets-modal/modal/render-assets-content/index.js +19 -0
  37. package/dist/esm/ui/assets-modal/modal/styled.js +4 -0
  38. package/dist/esm/ui/assets-modal/types.js +1 -0
  39. package/dist/esm/ui/common/error-state/modal-loading-error.js +2 -2
  40. package/dist/esm/version.json +1 -1
  41. package/dist/types/hooks/useAssetsClient.d.ts +6 -0
  42. package/dist/types/hooks/useValidateAqlText.d.ts +4 -0
  43. package/dist/types/index.d.ts +3 -0
  44. package/dist/types/services/cmdbService.d.ts +6 -0
  45. package/dist/types/types/assets/types.d.ts +23 -0
  46. package/dist/types/ui/assets-modal/index.d.ts +5 -0
  47. package/dist/types/ui/assets-modal/modal/index.d.ts +3 -0
  48. package/dist/types/ui/assets-modal/modal/messages.d.ts +12 -0
  49. package/dist/types/ui/assets-modal/modal/render-assets-content/index.d.ts +8 -0
  50. package/dist/types/ui/assets-modal/modal/styled.d.ts +5 -0
  51. package/dist/types/ui/assets-modal/types.d.ts +23 -0
  52. package/dist/types/ui/common/error-state/modal-loading-error.d.ts +1 -1
  53. package/dist/types-ts4.5/hooks/useAssetsClient.d.ts +6 -0
  54. package/dist/types-ts4.5/hooks/useValidateAqlText.d.ts +4 -0
  55. package/dist/types-ts4.5/index.d.ts +3 -0
  56. package/dist/types-ts4.5/services/cmdbService.d.ts +6 -0
  57. package/dist/types-ts4.5/types/assets/types.d.ts +23 -0
  58. package/dist/types-ts4.5/ui/assets-modal/index.d.ts +5 -0
  59. package/dist/types-ts4.5/ui/assets-modal/modal/index.d.ts +3 -0
  60. package/dist/types-ts4.5/ui/assets-modal/modal/messages.d.ts +12 -0
  61. package/dist/types-ts4.5/ui/assets-modal/modal/render-assets-content/index.d.ts +8 -0
  62. package/dist/types-ts4.5/ui/assets-modal/modal/styled.d.ts +5 -0
  63. package/dist/types-ts4.5/ui/assets-modal/types.d.ts +23 -0
  64. package/dist/types-ts4.5/ui/common/error-state/modal-loading-error.d.ts +1 -1
  65. package/package.json +3 -2
  66. package/report.api.md +46 -0
  67. package/tmp/api-report-tmp.d.ts +43 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 0.28.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`1c595c5a9d1`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1c595c5a9d1) - Added assets modal to link-datasource, which includes the following API additions:
8
+
9
+ - datasource ID for assets: `ASSETS_LIST_OF_LINKS_DATASOURCE_ID`
10
+ - new component: `JSMAssetsConfigModal`
11
+ - addition of 2 new types: `AssetsDatasourceAdf` and `AssetsDatasourceParameters`
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+
17
+ ## 0.27.4
18
+
19
+ ### Patch Changes
20
+
21
+ - [`45562e99798`](https://bitbucket.org/atlassian/atlassian-frontend/commits/45562e99798) - Added cmdbService, useAssetsClient hook and useValidateAqlText hook
22
+
3
23
  ## 0.27.3
4
24
 
5
25
  ### Patch Changes
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useAssetsClient = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = require("react");
12
+ var _cmdbService = require("../services/cmdbService");
13
+ // TODO: Pass in localhost:3000 for testing locally - remember to remove this code after
14
+ // You must also have a proxy server running to forward requests from http://localhost:3000 to a JSM premium url
15
+ var useAssetsClient = function useAssetsClient(hostname) {
16
+ var _useState = (0, _react.useState)(),
17
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
18
+ objectSchemas = _useState2[0],
19
+ setObjectSchemas = _useState2[1];
20
+ var _useState3 = (0, _react.useState)(),
21
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
22
+ workspaceId = _useState4[0],
23
+ setWorkspaceId = _useState4[1];
24
+ var _useState5 = (0, _react.useState)(),
25
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
26
+ error = _useState6[0],
27
+ setError = _useState6[1];
28
+ (0, _react.useEffect)(function () {
29
+ (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
30
+ var _workspaceId, objectSchemasResponse;
31
+ return _regenerator.default.wrap(function _callee$(_context) {
32
+ while (1) switch (_context.prev = _context.next) {
33
+ case 0:
34
+ _context.prev = 0;
35
+ _context.next = 3;
36
+ return (0, _cmdbService.getWorkspaceId)(hostname);
37
+ case 3:
38
+ _workspaceId = _context.sent;
39
+ _context.next = 6;
40
+ return (0, _cmdbService.fetchObjectSchemas)(_workspaceId, hostname);
41
+ case 6:
42
+ objectSchemasResponse = _context.sent;
43
+ setWorkspaceId(_workspaceId);
44
+ setObjectSchemas(objectSchemasResponse.values);
45
+ _context.next = 14;
46
+ break;
47
+ case 11:
48
+ _context.prev = 11;
49
+ _context.t0 = _context["catch"](0);
50
+ if (_context.t0 instanceof Error) {
51
+ setError(_context.t0);
52
+ } else {
53
+ setError(new Error('Unexpected error occured'));
54
+ // eslint-disable-next-line no-console
55
+ console.error(_context.t0);
56
+ }
57
+ case 14:
58
+ case "end":
59
+ return _context.stop();
60
+ }
61
+ }, _callee, null, [[0, 11]]);
62
+ }))();
63
+ }, [hostname]);
64
+ return {
65
+ workspaceId: workspaceId,
66
+ objectSchemas: objectSchemas,
67
+ error: error
68
+ };
69
+ };
70
+ exports.useAssetsClient = useAssetsClient;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useValidateAqlText = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _react = require("react");
12
+ var _cmdbService = require("../services/cmdbService");
13
+ var useValidateAqlText = function useValidateAqlText(workspaceId, hostname) {
14
+ var _useState = (0, _react.useState)(false),
15
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
16
+ isLoading = _useState2[0],
17
+ setIsLoading = _useState2[1];
18
+ var validateAqlText = (0, _react.useCallback)( /*#__PURE__*/function () {
19
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(aql) {
20
+ var validateAqlResponse;
21
+ return _regenerator.default.wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ setIsLoading(true);
25
+ _context.next = 3;
26
+ return (0, _cmdbService.validateAql)(workspaceId, {
27
+ qlQuery: aql
28
+ }, hostname);
29
+ case 3:
30
+ validateAqlResponse = _context.sent;
31
+ setIsLoading(false);
32
+ return _context.abrupt("return", validateAqlResponse.isValid);
33
+ case 6:
34
+ case "end":
35
+ return _context.stop();
36
+ }
37
+ }, _callee);
38
+ }));
39
+ return function (_x) {
40
+ return _ref.apply(this, arguments);
41
+ };
42
+ }(), [hostname, workspaceId]);
43
+ return {
44
+ validateAqlText: validateAqlText,
45
+ isLoading: isLoading
46
+ };
47
+ };
48
+ exports.useValidateAqlText = useValidateAqlText;
package/dist/cjs/index.js CHANGED
@@ -5,6 +5,12 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ Object.defineProperty(exports, "ASSETS_LIST_OF_LINKS_DATASOURCE_ID", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _assetsModal.ASSETS_LIST_OF_LINKS_DATASOURCE_ID;
12
+ }
13
+ });
8
14
  Object.defineProperty(exports, "DatasourceTableView", {
9
15
  enumerable: true,
10
16
  get: function get() {
@@ -17,6 +23,12 @@ Object.defineProperty(exports, "JIRA_LIST_OF_LINKS_DATASOURCE_ID", {
17
23
  return _jiraIssuesModal.JIRA_LIST_OF_LINKS_DATASOURCE_ID;
18
24
  }
19
25
  });
26
+ Object.defineProperty(exports, "JSMAssetsConfigModal", {
27
+ enumerable: true,
28
+ get: function get() {
29
+ return _assetsModal.default;
30
+ }
31
+ });
20
32
  Object.defineProperty(exports, "JiraIssuesConfigModal", {
21
33
  enumerable: true,
22
34
  get: function get() {
@@ -25,5 +37,6 @@ Object.defineProperty(exports, "JiraIssuesConfigModal", {
25
37
  });
26
38
  var _jiraIssuesModal = _interopRequireWildcard(require("./ui/jira-issues-modal"));
27
39
  var _datasourceTableView = _interopRequireDefault(require("./ui/datasource-table-view"));
40
+ var _assetsModal = _interopRequireWildcard(require("./ui/assets-modal"));
28
41
  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); }
29
42
  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; }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.validateAql = exports.getWorkspaceId = exports.fetchObjectSchemas = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _linkingCommon = require("@atlaskit/linking-common");
11
+ var getWorkspaceId = /*#__PURE__*/function () {
12
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(hostname) {
13
+ var _workspaceDetailsResp;
14
+ var url, workspaceDetailsResponse;
15
+ return _regenerator.default.wrap(function _callee$(_context) {
16
+ while (1) switch (_context.prev = _context.next) {
17
+ case 0:
18
+ url = "".concat(hostname || '', "/rest/servicedesk/cmdb/latest/workspace");
19
+ _context.next = 3;
20
+ return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
21
+ case 3:
22
+ workspaceDetailsResponse = _context.sent;
23
+ if ((_workspaceDetailsResp = workspaceDetailsResponse.results) !== null && _workspaceDetailsResp !== void 0 && _workspaceDetailsResp.length) {
24
+ _context.next = 6;
25
+ break;
26
+ }
27
+ throw new Error('No workspace results found');
28
+ case 6:
29
+ return _context.abrupt("return", workspaceDetailsResponse.results[0].id);
30
+ case 7:
31
+ case "end":
32
+ return _context.stop();
33
+ }
34
+ }, _callee);
35
+ }));
36
+ return function getWorkspaceId(_x) {
37
+ return _ref.apply(this, arguments);
38
+ };
39
+ }();
40
+ exports.getWorkspaceId = getWorkspaceId;
41
+ var validateAql = function validateAql(workspaceId, data, hostname) {
42
+ var url = "".concat(hostname || '', "/gateway/api/jsm/assets/workspace/").concat(workspaceId, "/v1/aql/validate");
43
+ return (0, _linkingCommon.request)('post', url, {
44
+ qlQuery: data.qlQuery,
45
+ context: 'SMART_LINKS'
46
+ }, undefined, [200, 201, 202, 203, 204]);
47
+ };
48
+ exports.validateAql = validateAql;
49
+ var fetchObjectSchemas = function fetchObjectSchemas(workspaceId, hostname) {
50
+ var url = "".concat(hostname || '', "/gateway/api/jsm/assets/workspace/").concat(workspaceId, "/v1/objectschema/list?maxResults=100");
51
+ return (0, _linkingCommon.request)('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
52
+ };
53
+ exports.fetchObjectSchemas = fetchObjectSchemas;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = exports.ASSETS_LIST_OF_LINKS_DATASOURCE_ID = void 0;
8
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ 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); }
11
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2.default)(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; }
12
+ var ASSETS_LIST_OF_LINKS_DATASOURCE_ID = '361d618a-3c04-40ad-9b27-3c8ea6927020';
13
+ exports.ASSETS_LIST_OF_LINKS_DATASOURCE_ID = ASSETS_LIST_OF_LINKS_DATASOURCE_ID;
14
+ var LazyAssetsConfigModal = /*#__PURE__*/(0, _react.lazy)(function () {
15
+ return Promise.resolve().then(function () {
16
+ return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_linkdatasource-assetsmodal" */'./modal'));
17
+ }).then(function (module) {
18
+ return {
19
+ default: module.AssetsConfigModal
20
+ };
21
+ });
22
+ });
23
+ var AssetsConfigModalWithWrappers = function AssetsConfigModalWithWrappers(props) {
24
+ return /*#__PURE__*/_react.default.createElement(_react.Suspense, {
25
+ fallback: /*#__PURE__*/_react.default.createElement("div", {
26
+ "data-testid": 'assets-aql-datasource-table-suspense'
27
+ })
28
+ }, /*#__PURE__*/_react.default.createElement(LazyAssetsConfigModal, props));
29
+ };
30
+ var _default = AssetsConfigModalWithWrappers;
31
+ exports.default = _default;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AssetsConfigModal = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _react2 = require("@emotion/react");
12
+ var _reactIntlNext = require("react-intl-next");
13
+ var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
14
+ var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
15
+ var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
16
+ var _messages = require("./messages");
17
+ var _renderAssetsContent = require("./render-assets-content");
18
+ var _styled = require("./styled");
19
+ 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); }
20
+ 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; }
21
+ /** @jsx jsx */
22
+
23
+ var AssetsConfigModal = function AssetsConfigModal(props) {
24
+ var datasourceId = props.datasourceId,
25
+ initialParameters = props.parameters,
26
+ onCancel = props.onCancel;
27
+ var _useState = (0, _react.useState)(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql),
28
+ _useState2 = (0, _slicedToArray2.default)(_useState, 1),
29
+ aql = _useState2[0];
30
+ var _useState3 = (0, _react.useState)(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId),
31
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 1),
32
+ schemaId = _useState4[0];
33
+ var parameters = (0, _react.useMemo)(function () {
34
+ return {
35
+ aql: aql || '',
36
+ schemaId: schemaId || '',
37
+ workspaceId: '' /* TODO FLY-1240: Add workspace Id */
38
+ };
39
+ }, [aql, schemaId]);
40
+ var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)({
41
+ datasourceId: datasourceId,
42
+ parameters: parameters
43
+ }),
44
+ status = _useDatasourceTableSt.status,
45
+ responseItems = _useDatasourceTableSt.responseItems;
46
+ var isDisabled = status === 'rejected' || status === 'loading' || status === 'empty' || status === 'resolved' && !responseItems.length;
47
+ var onInsertPressed = (0, _react.useCallback)(function () {
48
+ /* Placeholder for inserting of ADF, to do in FLY-1241 */
49
+ }, []);
50
+ return (0, _react2.jsx)(_modalDialog.ModalTransition, null, (0, _react2.jsx)(_modalDialog.default, {
51
+ testId: 'asset-datasource-modal',
52
+ onClose: onCancel,
53
+ width: "x-large",
54
+ shouldScrollInViewport: true
55
+ }, (0, _react2.jsx)(_modalDialog.ModalHeader, null, (0, _react2.jsx)(_modalDialog.ModalTitle, null)), (0, _react2.jsx)(_modalDialog.ModalBody, null, (0, _react2.jsx)(_styled.ModalContentContainer, null, (0, _react2.jsx)(_renderAssetsContent.RenderAssetsContent, {
56
+ status: status,
57
+ responseItems: responseItems
58
+ }))), (0, _react2.jsx)(_modalDialog.ModalFooter, null, (0, _react2.jsx)(_standardButton.default, {
59
+ appearance: "default",
60
+ onClick: onCancel
61
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.cancelButtonText)), (0, _react2.jsx)(_standardButton.default, {
62
+ appearance: "primary",
63
+ onClick: onInsertPressed,
64
+ isDisabled: isDisabled,
65
+ testId: 'asset-datasource-modal--insert-button'
66
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesButtonText)))));
67
+ };
68
+ exports.AssetsConfigModal = AssetsConfigModal;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.modalMessages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var modalMessages = (0, _reactIntlNext.defineMessages)({
9
+ cancelButtonText: {
10
+ id: 'linkDataSource.assets.configmodal.cancelButtonText',
11
+ description: 'Button text to close the modal with no changes being made',
12
+ defaultMessage: 'Cancel'
13
+ },
14
+ insertIssuesButtonText: {
15
+ id: 'linkDataSource.assets.configmodal.insertIssuesButtonText',
16
+ description: 'Button text to insert the displayed content',
17
+ defaultMessage: 'Insert objects'
18
+ }
19
+ });
20
+ exports.modalMessages = modalMessages;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RenderAssetsContent = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _modalLoadingError = require("../../../common/error-state/modal-loading-error");
10
+ var _noResults = require("../../../common/error-state/no-results");
11
+ var _issueLikeTable = require("../../../issue-like-table");
12
+ var RenderAssetsContent = function RenderAssetsContent(props) {
13
+ var status = props.status,
14
+ responseItems = props.responseItems;
15
+ var resolvedWithNoResults = status === 'resolved' && !responseItems.length;
16
+ if (status === 'rejected') {
17
+ return /*#__PURE__*/_react.default.createElement(_modalLoadingError.ModalLoadingError, null);
18
+ } else if (resolvedWithNoResults) {
19
+ return /*#__PURE__*/_react.default.createElement(_noResults.NoResults, null);
20
+ } else if (status === 'empty') {
21
+ return /*#__PURE__*/_react.default.createElement(_issueLikeTable.EmptyState, {
22
+ testId: "assets-aql-datasource-modal--empty-state"
23
+ });
24
+ }
25
+ return /*#__PURE__*/_react.default.createElement("p", null, "TODO add IssueLikeDataTableView component.");
26
+ };
27
+ exports.RenderAssetsContent = RenderAssetsContent;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ModalContentContainer = void 0;
8
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _templateObject;
11
+ var ModalContentContainer = _styled.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: 'grid';\n height: '420px';\n overflow: 'auto';\n"])));
12
+ exports.ModalContentContainer = ModalContentContainer;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -41,7 +41,7 @@ var ModalLoadingError = function ModalLoadingError(_ref) {
41
41
  css: errorMessageStyles
42
42
  }, (0, _react.jsx)(_reactIntlNext.FormattedMessage, _messages.loadingErrorMessages.unableToLoadResults)), (0, _react.jsx)("p", {
43
43
  css: errorDescriptionStyles
44
- }, (0, _react.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.loadingErrorMessages.checkConnectionWithSource, {
44
+ }, url ? (0, _react.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.loadingErrorMessages.checkConnectionWithSource, {
45
45
  values: {
46
46
  a: function a(chunk) {
47
47
  return (0, _react.jsx)("a", {
@@ -49,6 +49,6 @@ var ModalLoadingError = function ModalLoadingError(_ref) {
49
49
  }, chunk);
50
50
  }
51
51
  }
52
- })))));
52
+ })) : (0, _react.jsx)(_reactIntlNext.FormattedMessage, _messages.loadingErrorMessages.checkConnection))));
53
53
  };
54
54
  exports.ModalLoadingError = ModalLoadingError;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.27.3",
3
+ "version": "0.28.0",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1,32 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { fetchObjectSchemas, getWorkspaceId } from '../services/cmdbService';
3
+ // TODO: Pass in localhost:3000 for testing locally - remember to remove this code after
4
+ // You must also have a proxy server running to forward requests from http://localhost:3000 to a JSM premium url
5
+ export const useAssetsClient = hostname => {
6
+ const [objectSchemas, setObjectSchemas] = useState();
7
+ const [workspaceId, setWorkspaceId] = useState();
8
+ const [error, setError] = useState();
9
+ useEffect(() => {
10
+ (async () => {
11
+ try {
12
+ const workspaceId = await getWorkspaceId(hostname);
13
+ const objectSchemasResponse = await fetchObjectSchemas(workspaceId, hostname);
14
+ setWorkspaceId(workspaceId);
15
+ setObjectSchemas(objectSchemasResponse.values);
16
+ } catch (err) {
17
+ if (err instanceof Error) {
18
+ setError(err);
19
+ } else {
20
+ setError(new Error('Unexpected error occured'));
21
+ // eslint-disable-next-line no-console
22
+ console.error(err);
23
+ }
24
+ }
25
+ })();
26
+ }, [hostname]);
27
+ return {
28
+ workspaceId,
29
+ objectSchemas,
30
+ error
31
+ };
32
+ };
@@ -0,0 +1,17 @@
1
+ import { useCallback, useState } from 'react';
2
+ import { validateAql } from '../services/cmdbService';
3
+ export const useValidateAqlText = (workspaceId, hostname) => {
4
+ const [isLoading, setIsLoading] = useState(false);
5
+ const validateAqlText = useCallback(async aql => {
6
+ setIsLoading(true);
7
+ const validateAqlResponse = await validateAql(workspaceId, {
8
+ qlQuery: aql
9
+ }, hostname);
10
+ setIsLoading(false);
11
+ return validateAqlResponse.isValid;
12
+ }, [hostname, workspaceId]);
13
+ return {
14
+ validateAqlText,
15
+ isLoading
16
+ };
17
+ };
@@ -1,3 +1,5 @@
1
1
  export { default as JiraIssuesConfigModal } from './ui/jira-issues-modal';
2
2
  export { default as DatasourceTableView } from './ui/datasource-table-view';
3
- export { JIRA_LIST_OF_LINKS_DATASOURCE_ID } from './ui/jira-issues-modal';
3
+ export { default as JSMAssetsConfigModal } from './ui/assets-modal';
4
+ export { JIRA_LIST_OF_LINKS_DATASOURCE_ID } from './ui/jira-issues-modal';
5
+ export { ASSETS_LIST_OF_LINKS_DATASOURCE_ID } from './ui/assets-modal';
@@ -0,0 +1,21 @@
1
+ import { request } from '@atlaskit/linking-common';
2
+ export const getWorkspaceId = async hostname => {
3
+ var _workspaceDetailsResp;
4
+ const url = `${hostname || ''}/rest/servicedesk/cmdb/latest/workspace`;
5
+ const workspaceDetailsResponse = await request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
6
+ if (!((_workspaceDetailsResp = workspaceDetailsResponse.results) !== null && _workspaceDetailsResp !== void 0 && _workspaceDetailsResp.length)) {
7
+ throw new Error('No workspace results found');
8
+ }
9
+ return workspaceDetailsResponse.results[0].id;
10
+ };
11
+ export const validateAql = (workspaceId, data, hostname) => {
12
+ const url = `${hostname || ''}/gateway/api/jsm/assets/workspace/${workspaceId}/v1/aql/validate`;
13
+ return request('post', url, {
14
+ qlQuery: data.qlQuery,
15
+ context: 'SMART_LINKS'
16
+ }, undefined, [200, 201, 202, 203, 204]);
17
+ };
18
+ export const fetchObjectSchemas = (workspaceId, hostname) => {
19
+ const url = `${hostname || ''}/gateway/api/jsm/assets/workspace/${workspaceId}/v1/objectschema/list?maxResults=100`;
20
+ return request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
21
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import React, { lazy, Suspense } from 'react';
2
+ export const ASSETS_LIST_OF_LINKS_DATASOURCE_ID = '361d618a-3c04-40ad-9b27-3c8ea6927020';
3
+ const LazyAssetsConfigModal = /*#__PURE__*/lazy(() => import( /* webpackChunkName: "@atlaskit-internal_linkdatasource-assetsmodal" */'./modal').then(module => ({
4
+ default: module.AssetsConfigModal
5
+ })));
6
+ const AssetsConfigModalWithWrappers = props => {
7
+ return /*#__PURE__*/React.createElement(Suspense, {
8
+ fallback: /*#__PURE__*/React.createElement("div", {
9
+ "data-testid": 'assets-aql-datasource-table-suspense'
10
+ })
11
+ }, /*#__PURE__*/React.createElement(LazyAssetsConfigModal, props));
12
+ };
13
+ export default AssetsConfigModalWithWrappers;
@@ -0,0 +1,52 @@
1
+ /** @jsx jsx */
2
+ import { useCallback, useMemo, useState } from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import { FormattedMessage } from 'react-intl-next';
5
+ import Button from '@atlaskit/button/standard-button';
6
+ import Modal, { ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
7
+ import { useDatasourceTableState } from '../../../hooks/useDatasourceTableState';
8
+ import { modalMessages } from './messages';
9
+ import { RenderAssetsContent } from './render-assets-content';
10
+ import { ModalContentContainer } from './styled';
11
+ export const AssetsConfigModal = props => {
12
+ const {
13
+ datasourceId,
14
+ parameters: initialParameters,
15
+ onCancel
16
+ } = props;
17
+ const [aql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql);
18
+ const [schemaId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
19
+ const parameters = useMemo(() => ({
20
+ aql: aql || '',
21
+ schemaId: schemaId || '',
22
+ workspaceId: '' /* TODO FLY-1240: Add workspace Id */
23
+ }), [aql, schemaId]);
24
+ const {
25
+ status,
26
+ responseItems
27
+ } = useDatasourceTableState({
28
+ datasourceId,
29
+ parameters
30
+ });
31
+ const isDisabled = status === 'rejected' || status === 'loading' || status === 'empty' || status === 'resolved' && !responseItems.length;
32
+ const onInsertPressed = useCallback(() => {
33
+ /* Placeholder for inserting of ADF, to do in FLY-1241 */
34
+ }, []);
35
+ return jsx(ModalTransition, null, jsx(Modal, {
36
+ testId: 'asset-datasource-modal',
37
+ onClose: onCancel,
38
+ width: "x-large",
39
+ shouldScrollInViewport: true
40
+ }, jsx(ModalHeader, null, jsx(ModalTitle, null)), jsx(ModalBody, null, jsx(ModalContentContainer, null, jsx(RenderAssetsContent, {
41
+ status: status,
42
+ responseItems: responseItems
43
+ }))), jsx(ModalFooter, null, jsx(Button, {
44
+ appearance: "default",
45
+ onClick: onCancel
46
+ }, jsx(FormattedMessage, modalMessages.cancelButtonText)), jsx(Button, {
47
+ appearance: "primary",
48
+ onClick: onInsertPressed,
49
+ isDisabled: isDisabled,
50
+ testId: 'asset-datasource-modal--insert-button'
51
+ }, jsx(FormattedMessage, modalMessages.insertIssuesButtonText)))));
52
+ };
@@ -0,0 +1,13 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const modalMessages = defineMessages({
3
+ cancelButtonText: {
4
+ id: 'linkDataSource.assets.configmodal.cancelButtonText',
5
+ description: 'Button text to close the modal with no changes being made',
6
+ defaultMessage: 'Cancel'
7
+ },
8
+ insertIssuesButtonText: {
9
+ id: 'linkDataSource.assets.configmodal.insertIssuesButtonText',
10
+ description: 'Button text to insert the displayed content',
11
+ defaultMessage: 'Insert objects'
12
+ }
13
+ });
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { ModalLoadingError } from '../../../common/error-state/modal-loading-error';
3
+ import { NoResults } from '../../../common/error-state/no-results';
4
+ import { EmptyState } from '../../../issue-like-table';
5
+ export const RenderAssetsContent = props => {
6
+ const {
7
+ status,
8
+ responseItems
9
+ } = props;
10
+ const resolvedWithNoResults = status === 'resolved' && !responseItems.length;
11
+ if (status === 'rejected') {
12
+ return /*#__PURE__*/React.createElement(ModalLoadingError, null);
13
+ } else if (resolvedWithNoResults) {
14
+ return /*#__PURE__*/React.createElement(NoResults, null);
15
+ } else if (status === 'empty') {
16
+ return /*#__PURE__*/React.createElement(EmptyState, {
17
+ testId: "assets-aql-datasource-modal--empty-state"
18
+ });
19
+ }
20
+ return /*#__PURE__*/React.createElement("p", null, "TODO add IssueLikeDataTableView component.");
21
+ };
@@ -0,0 +1,6 @@
1
+ import styled from '@emotion/styled';
2
+ export const ModalContentContainer = styled.div`
3
+ display: 'grid';
4
+ height: '420px';
5
+ overflow: 'auto';
6
+ `;
@@ -0,0 +1 @@
1
+ export {};