@atlaskit/link-datasource 0.29.4 → 0.29.5
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 +7 -0
- package/dist/cjs/hooks/useAssetsClient.js +50 -31
- package/dist/cjs/hooks/useObjectSchemas.js +74 -0
- package/dist/cjs/hooks/useValidateAqlText.js +42 -13
- package/dist/cjs/services/cmdbService.js +17 -8
- package/dist/cjs/types/assets/types.js +7 -1
- package/dist/cjs/ui/assets-modal/modal/index.js +46 -10
- package/dist/cjs/ui/assets-modal/modal/messages.js +5 -0
- package/dist/cjs/ui/assets-modal/modal/styled.js +1 -1
- package/dist/cjs/ui/assets-modal/search-container/aql-search-input/index.js +161 -0
- package/dist/cjs/ui/assets-modal/search-container/aql-search-input/loading-state.js +18 -0
- package/dist/cjs/ui/assets-modal/search-container/aql-search-input/messages.js +15 -0
- package/dist/cjs/ui/assets-modal/search-container/index.js +50 -0
- package/dist/cjs/ui/assets-modal/search-container/loading-state.js +21 -0
- package/dist/cjs/ui/assets-modal/search-container/object-schema-select/index.js +103 -0
- package/dist/cjs/ui/assets-modal/search-container/object-schema-select/loading-state.js +18 -0
- package/dist/cjs/ui/assets-modal/search-container/object-schema-select/messages.js +25 -0
- package/dist/cjs/ui/assets-modal/search-container/object-schema-select/utils.js +13 -0
- package/dist/cjs/ui/assets-modal/search-container/styled.js +22 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/hooks/useAssetsClient.js +22 -13
- package/dist/es2019/hooks/useObjectSchemas.js +32 -0
- package/dist/es2019/hooks/useValidateAqlText.js +26 -9
- package/dist/es2019/services/cmdbService.js +14 -6
- package/dist/es2019/types/assets/types.js +3 -1
- package/dist/es2019/ui/assets-modal/modal/index.js +42 -8
- package/dist/es2019/ui/assets-modal/modal/messages.js +5 -0
- package/dist/es2019/ui/assets-modal/modal/styled.js +3 -3
- package/dist/es2019/ui/assets-modal/search-container/aql-search-input/index.js +129 -0
- package/dist/es2019/ui/assets-modal/search-container/aql-search-input/loading-state.js +8 -0
- package/dist/es2019/ui/assets-modal/search-container/aql-search-input/messages.js +8 -0
- package/dist/es2019/ui/assets-modal/search-container/index.js +46 -0
- package/dist/es2019/ui/assets-modal/search-container/loading-state.js +14 -0
- package/dist/es2019/ui/assets-modal/search-container/object-schema-select/index.js +65 -0
- package/dist/es2019/ui/assets-modal/search-container/object-schema-select/loading-state.js +8 -0
- package/dist/es2019/ui/assets-modal/search-container/object-schema-select/messages.js +18 -0
- package/dist/es2019/ui/assets-modal/search-container/object-schema-select/utils.js +4 -0
- package/dist/es2019/ui/assets-modal/search-container/styled.js +22 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/hooks/useAssetsClient.js +51 -32
- package/dist/esm/hooks/useObjectSchemas.js +66 -0
- package/dist/esm/hooks/useValidateAqlText.js +42 -13
- package/dist/esm/services/cmdbService.js +15 -7
- package/dist/esm/types/assets/types.js +3 -1
- package/dist/esm/ui/assets-modal/modal/index.js +46 -10
- package/dist/esm/ui/assets-modal/modal/messages.js +5 -0
- package/dist/esm/ui/assets-modal/modal/styled.js +1 -1
- package/dist/esm/ui/assets-modal/search-container/aql-search-input/index.js +152 -0
- package/dist/esm/ui/assets-modal/search-container/aql-search-input/loading-state.js +10 -0
- package/dist/esm/ui/assets-modal/search-container/aql-search-input/messages.js +8 -0
- package/dist/esm/ui/assets-modal/search-container/index.js +41 -0
- package/dist/esm/ui/assets-modal/search-container/loading-state.js +13 -0
- package/dist/esm/ui/assets-modal/search-container/object-schema-select/index.js +94 -0
- package/dist/esm/ui/assets-modal/search-container/object-schema-select/loading-state.js +10 -0
- package/dist/esm/ui/assets-modal/search-container/object-schema-select/messages.js +18 -0
- package/dist/esm/ui/assets-modal/search-container/object-schema-select/utils.js +6 -0
- package/dist/esm/ui/assets-modal/search-container/styled.js +11 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/hooks/useAssetsClient.d.ts +8 -6
- package/dist/types/hooks/useObjectSchemas.d.ts +8 -0
- package/dist/types/hooks/useValidateAqlText.d.ts +5 -2
- package/dist/types/services/cmdbService.d.ts +4 -3
- package/dist/types/types/assets/types.d.ts +21 -10
- package/dist/types/ui/assets-modal/modal/messages.d.ts +5 -0
- package/dist/types/ui/assets-modal/search-container/aql-search-input/index.d.ts +8 -0
- package/dist/types/ui/assets-modal/search-container/aql-search-input/loading-state.d.ts +3 -0
- package/dist/types/ui/assets-modal/search-container/aql-search-input/messages.d.ts +7 -0
- package/dist/types/ui/assets-modal/search-container/index.d.ts +16 -0
- package/dist/types/ui/assets-modal/search-container/loading-state.d.ts +8 -0
- package/dist/types/ui/assets-modal/search-container/object-schema-select/index.d.ts +10 -0
- package/dist/types/ui/assets-modal/search-container/object-schema-select/loading-state.d.ts +3 -0
- package/dist/types/ui/assets-modal/search-container/object-schema-select/messages.d.ts +17 -0
- package/dist/types/ui/assets-modal/search-container/object-schema-select/utils.d.ts +2 -0
- package/dist/types/ui/assets-modal/search-container/styled.d.ts +19 -0
- package/dist/types-ts4.5/hooks/useAssetsClient.d.ts +8 -6
- package/dist/types-ts4.5/hooks/useObjectSchemas.d.ts +8 -0
- package/dist/types-ts4.5/hooks/useValidateAqlText.d.ts +5 -2
- package/dist/types-ts4.5/services/cmdbService.d.ts +4 -3
- package/dist/types-ts4.5/types/assets/types.d.ts +21 -10
- package/dist/types-ts4.5/ui/assets-modal/modal/messages.d.ts +5 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/aql-search-input/index.d.ts +8 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/aql-search-input/loading-state.d.ts +3 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/aql-search-input/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/index.d.ts +16 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/loading-state.d.ts +8 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/object-schema-select/index.d.ts +10 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/object-schema-select/loading-state.d.ts +3 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/object-schema-select/messages.d.ts +17 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/object-schema-select/utils.d.ts +2 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/styled.d.ts +19 -0
- package/package.json +4 -2
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.searchInputMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var searchInputMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
placeholder: {
|
|
10
|
+
id: 'linkDataSource.assets.configModal.aqlSearchInput.placeholder',
|
|
11
|
+
description: 'Display text for AQL search button',
|
|
12
|
+
defaultMessage: 'Search via AQL'
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
exports.searchInputMessages = searchInputMessages;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AssetsSearchContainer = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _react = require("@emotion/react");
|
|
10
|
+
var _form = _interopRequireDefault(require("@atlaskit/form"));
|
|
11
|
+
var _aqlSearchInput = require("./aql-search-input");
|
|
12
|
+
var _objectSchemaSelect = require("./object-schema-select");
|
|
13
|
+
var _styled = require("./styled");
|
|
14
|
+
/** @jsx jsx */
|
|
15
|
+
|
|
16
|
+
var DEFAULT_AQL_QUERY = '';
|
|
17
|
+
var SEARCH_FORM_ID = 'linkDataSource.assets.configModal.searchContainer-form';
|
|
18
|
+
var AssetsSearchContainer = function AssetsSearchContainer(props) {
|
|
19
|
+
var onSearch = props.onSearch,
|
|
20
|
+
workspaceId = props.workspaceId,
|
|
21
|
+
initialSearchData = props.initialSearchData,
|
|
22
|
+
modalTitle = props.modalTitle;
|
|
23
|
+
var onFormSubmit = function onFormSubmit(searchFormValues) {
|
|
24
|
+
var aql = searchFormValues.aql,
|
|
25
|
+
objectSchema = searchFormValues.objectSchema;
|
|
26
|
+
if (objectSchema) {
|
|
27
|
+
// Pass the validated aql and object schema back to modal
|
|
28
|
+
onSearch(aql, objectSchema.value);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return (0, _react.jsx)(_form.default, {
|
|
32
|
+
onSubmit: onFormSubmit
|
|
33
|
+
}, function (_ref) {
|
|
34
|
+
var _initialSearchData$ob, _initialSearchData$aq;
|
|
35
|
+
var formProps = _ref.formProps;
|
|
36
|
+
return (0, _react.jsx)(_styled.FormContainer, (0, _extends2.default)({}, formProps, {
|
|
37
|
+
id: SEARCH_FORM_ID
|
|
38
|
+
}), (0, _react.jsx)(_styled.FormRowContainer, {
|
|
39
|
+
isNarrowGap: true
|
|
40
|
+
}, modalTitle, (0, _react.jsx)(_styled.SchemaSelectContainer, null, (0, _react.jsx)(_objectSchemaSelect.AssetsObjectSchemaSelect, {
|
|
41
|
+
value: (_initialSearchData$ob = initialSearchData.objectSchema) !== null && _initialSearchData$ob !== void 0 ? _initialSearchData$ob : undefined,
|
|
42
|
+
workspaceId: workspaceId,
|
|
43
|
+
classNamePrefix: "assets-datasource-modal--object-schema-select"
|
|
44
|
+
}))), (0, _react.jsx)(_styled.FormRowContainer, null, (0, _react.jsx)(_aqlSearchInput.AqlSearchInput, {
|
|
45
|
+
value: (_initialSearchData$aq = initialSearchData.aql) !== null && _initialSearchData$aq !== void 0 ? _initialSearchData$aq : DEFAULT_AQL_QUERY,
|
|
46
|
+
workspaceId: workspaceId
|
|
47
|
+
})));
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
exports.AssetsSearchContainer = AssetsSearchContainer;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AssetsSearchContainerLoading = void 0;
|
|
7
|
+
var _react = require("@emotion/react");
|
|
8
|
+
var _loadingState = require("./aql-search-input/loading-state");
|
|
9
|
+
var _loadingState2 = require("./object-schema-select/loading-state");
|
|
10
|
+
var _styled = require("./styled");
|
|
11
|
+
/** @jsx jsx */
|
|
12
|
+
|
|
13
|
+
var AssetsSearchContainerLoading = function AssetsSearchContainerLoading(_ref) {
|
|
14
|
+
var modalTitle = _ref.modalTitle;
|
|
15
|
+
return (0, _react.jsx)(_styled.FormContainer, {
|
|
16
|
+
"data-testid": "assets-datasource-modal--search-container-skeleton"
|
|
17
|
+
}, (0, _react.jsx)(_styled.FormRowContainer, {
|
|
18
|
+
isNarrowGap: true
|
|
19
|
+
}, modalTitle, (0, _react.jsx)(_styled.SchemaSelectContainer, null, (0, _react.jsx)(_loadingState2.AssetsObjectSchemaSelectSkeleton, null))), (0, _react.jsx)(_styled.FormRowContainer, null, (0, _react.jsx)(_loadingState.AssetsAqlSearchInputSkeleton, null)));
|
|
20
|
+
};
|
|
21
|
+
exports.AssetsSearchContainerLoading = AssetsSearchContainerLoading;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SEARCH_DEBOUNCE_MS = exports.AssetsObjectSchemaSelect = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
var _react = require("react");
|
|
14
|
+
var _react2 = require("@emotion/react");
|
|
15
|
+
var _debouncePromise = _interopRequireDefault(require("debounce-promise"));
|
|
16
|
+
var _reactIntlNext = require("react-intl-next");
|
|
17
|
+
var _form = require("@atlaskit/form");
|
|
18
|
+
var _select = require("@atlaskit/select");
|
|
19
|
+
var _useObjectSchemas2 = require("../../../../hooks/useObjectSchemas");
|
|
20
|
+
var _types = require("../../../../types/assets/types");
|
|
21
|
+
var _styled = require("../styled");
|
|
22
|
+
var _messages = require("./messages");
|
|
23
|
+
var _utils = require("./utils");
|
|
24
|
+
var _excluded = ["onChange", "onFocus"];
|
|
25
|
+
/** @jsx jsx */
|
|
26
|
+
var SEARCH_DEBOUNCE_MS = 350;
|
|
27
|
+
exports.SEARCH_DEBOUNCE_MS = SEARCH_DEBOUNCE_MS;
|
|
28
|
+
var AssetsObjectSchemaSelect = function AssetsObjectSchemaSelect(_ref) {
|
|
29
|
+
var value = _ref.value,
|
|
30
|
+
workspaceId = _ref.workspaceId,
|
|
31
|
+
_ref$classNamePrefix = _ref.classNamePrefix,
|
|
32
|
+
classNamePrefix = _ref$classNamePrefix === void 0 ? 'assets-datasource-modal--object-schema-select' : _ref$classNamePrefix;
|
|
33
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
34
|
+
formatMessage = _useIntl.formatMessage;
|
|
35
|
+
var _useObjectSchemas = (0, _useObjectSchemas2.useObjectSchemas)(workspaceId),
|
|
36
|
+
fetchObjectSchemas = _useObjectSchemas.fetchObjectSchemas,
|
|
37
|
+
objectSchemasLoading = _useObjectSchemas.objectSchemasLoading;
|
|
38
|
+
var _useState = (0, _react.useState)(undefined),
|
|
39
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
40
|
+
defaultOptions = _useState2[0],
|
|
41
|
+
setDefaultOptions = _useState2[1];
|
|
42
|
+
var selectedObjectSchema = value ? (0, _utils.objectSchemaToSelectOption)(value) : undefined;
|
|
43
|
+
var loadOptions = /*#__PURE__*/function () {
|
|
44
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(inputValue) {
|
|
45
|
+
var objectSchemas, options;
|
|
46
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
47
|
+
while (1) switch (_context.prev = _context.next) {
|
|
48
|
+
case 0:
|
|
49
|
+
_context.next = 2;
|
|
50
|
+
return fetchObjectSchemas(inputValue);
|
|
51
|
+
case 2:
|
|
52
|
+
objectSchemas = _context.sent;
|
|
53
|
+
options = objectSchemas ? objectSchemas.map(function (objectSchema) {
|
|
54
|
+
return (0, _utils.objectSchemaToSelectOption)(objectSchema);
|
|
55
|
+
}) : [];
|
|
56
|
+
return _context.abrupt("return", options);
|
|
57
|
+
case 5:
|
|
58
|
+
case "end":
|
|
59
|
+
return _context.stop();
|
|
60
|
+
}
|
|
61
|
+
}, _callee);
|
|
62
|
+
}));
|
|
63
|
+
return function loadOptions(_x) {
|
|
64
|
+
return _ref2.apply(this, arguments);
|
|
65
|
+
};
|
|
66
|
+
}();
|
|
67
|
+
var debouncedLoadOptions = (0, _debouncePromise.default)(loadOptions, SEARCH_DEBOUNCE_MS);
|
|
68
|
+
var validateSchema = function validateSchema(value) {
|
|
69
|
+
if (!value || !value.value) {
|
|
70
|
+
return formatMessage(_messages.objectSchemaSelectMessages.schemaRequired);
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
};
|
|
74
|
+
return (0, _react2.jsx)(_styled.FieldContainer, null, (0, _react2.jsx)(_form.Field, {
|
|
75
|
+
name: _types.objectSchemaKey,
|
|
76
|
+
defaultValue: selectedObjectSchema,
|
|
77
|
+
validate: function validate(value) {
|
|
78
|
+
return validateSchema(value);
|
|
79
|
+
}
|
|
80
|
+
}, function (_ref3) {
|
|
81
|
+
var _ref3$fieldProps = _ref3.fieldProps,
|
|
82
|
+
_onChange = _ref3$fieldProps.onChange,
|
|
83
|
+
onFocus = _ref3$fieldProps.onFocus,
|
|
84
|
+
restFieldProps = (0, _objectWithoutProperties2.default)(_ref3$fieldProps, _excluded);
|
|
85
|
+
return (0, _react2.jsx)(_select.AsyncSelect, (0, _extends2.default)({
|
|
86
|
+
classNamePrefix: classNamePrefix,
|
|
87
|
+
isLoading: objectSchemasLoading,
|
|
88
|
+
defaultOptions: defaultOptions || [],
|
|
89
|
+
isSearchable: true,
|
|
90
|
+
loadOptions: debouncedLoadOptions,
|
|
91
|
+
placeholder: formatMessage(_messages.objectSchemaSelectMessages.placeholder),
|
|
92
|
+
onChange: function onChange(newOption) {
|
|
93
|
+
return newOption && _onChange(newOption);
|
|
94
|
+
},
|
|
95
|
+
onFocus: function onFocus() {
|
|
96
|
+
if (!defaultOptions) {
|
|
97
|
+
loadOptions('').then(setDefaultOptions);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}, restFieldProps));
|
|
101
|
+
}));
|
|
102
|
+
};
|
|
103
|
+
exports.AssetsObjectSchemaSelect = AssetsObjectSchemaSelect;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AssetsObjectSchemaSelectSkeleton = void 0;
|
|
7
|
+
var _react = require("@emotion/react");
|
|
8
|
+
var _linkingCommon = require("@atlaskit/linking-common");
|
|
9
|
+
/** @jsx jsx */
|
|
10
|
+
|
|
11
|
+
var AssetsObjectSchemaSelectSkeleton = function AssetsObjectSchemaSelectSkeleton() {
|
|
12
|
+
return (0, _react.jsx)(_linkingCommon.Skeleton, {
|
|
13
|
+
width: "100%",
|
|
14
|
+
height: "40px",
|
|
15
|
+
testId: "assets-datasource-modal--object-schema-select-skeleton"
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
exports.AssetsObjectSchemaSelectSkeleton = AssetsObjectSchemaSelectSkeleton;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.objectSchemaSelectMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var objectSchemaSelectMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
label: {
|
|
10
|
+
id: 'linkDataSource.assets.configModal.objectSchemaSelect.label',
|
|
11
|
+
description: 'Label text for a select input where users can choose an Assets object schema to use',
|
|
12
|
+
defaultMessage: 'Select schema'
|
|
13
|
+
},
|
|
14
|
+
placeholder: {
|
|
15
|
+
id: 'linkDataSource.assets.configModal.objectSchemaSelect.placeholder',
|
|
16
|
+
description: 'Placeholder text for a select input where users can choose an Assets object schema to use',
|
|
17
|
+
defaultMessage: 'Select schema'
|
|
18
|
+
},
|
|
19
|
+
schemaRequired: {
|
|
20
|
+
id: 'linkDataSource.assets.configModal.objectSchemaSelect.schemaRequired',
|
|
21
|
+
description: 'Validation message displayed to the user when the select is blank',
|
|
22
|
+
defaultMessage: 'Schema is required'
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
exports.objectSchemaSelectMessages = objectSchemaSelectMessages;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.objectSchemaToSelectOption = void 0;
|
|
7
|
+
var objectSchemaToSelectOption = function objectSchemaToSelectOption(objectSchema) {
|
|
8
|
+
return {
|
|
9
|
+
label: objectSchema.name,
|
|
10
|
+
value: objectSchema.id
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.objectSchemaToSelectOption = objectSchemaToSelectOption;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SchemaSelectContainer = exports.FormRowContainer = exports.FormContainer = exports.FieldContainer = void 0;
|
|
8
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
11
|
+
var FormRowContainer = _styled.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n align-items: center;\n display: flex;\n gap: ", ";\n flex-grow: 1;\n width: 100%;\n"])), function (props) {
|
|
12
|
+
return props.isNarrowGap ? "var(--ds-space-100, 8px)" : "var(--ds-space-200, 16px)";
|
|
13
|
+
});
|
|
14
|
+
exports.FormRowContainer = FormRowContainer;
|
|
15
|
+
var FormContainer = _styled.default.form(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n display: grid;\n row-gap: ", ";\n width: 100%;\n"])), "var(--ds-space-200, 16px)");
|
|
16
|
+
|
|
17
|
+
// Override the top margin of fields
|
|
18
|
+
exports.FormContainer = FormContainer;
|
|
19
|
+
var FieldContainer = _styled.default.div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n flex: 1;\n margin-top: calc(-1 * ", ");\n"])), "var(--ds-space-100, 8px)");
|
|
20
|
+
exports.FieldContainer = FieldContainer;
|
|
21
|
+
var SchemaSelectContainer = _styled.default.div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n width: 200px;\n"])));
|
|
22
|
+
exports.SchemaSelectContainer = SchemaSelectContainer;
|
package/dist/cjs/version.json
CHANGED
|
@@ -1,32 +1,41 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export const useAssetsClient = hostname => {
|
|
6
|
-
const [objectSchemas, setObjectSchemas] = useState();
|
|
2
|
+
import { fetchObjectSchema, getWorkspaceId } from '../services/cmdbService';
|
|
3
|
+
export const useAssetsClient = initialParameters => {
|
|
4
|
+
const [loading, setLoading] = useState(false);
|
|
7
5
|
const [workspaceId, setWorkspaceId] = useState();
|
|
6
|
+
const [objectSchema, setObjectSchema] = useState();
|
|
8
7
|
const [error, setError] = useState();
|
|
9
8
|
useEffect(() => {
|
|
10
9
|
(async () => {
|
|
10
|
+
setLoading(true);
|
|
11
|
+
setError(undefined);
|
|
11
12
|
try {
|
|
12
|
-
const workspaceId = await getWorkspaceId(
|
|
13
|
-
const objectSchemasResponse = await fetchObjectSchemas(workspaceId, hostname);
|
|
13
|
+
const workspaceId = await getWorkspaceId();
|
|
14
14
|
setWorkspaceId(workspaceId);
|
|
15
|
-
|
|
15
|
+
// Check schema from initial parameters still exists and fetch name for schema select
|
|
16
|
+
if (initialParameters !== null && initialParameters !== void 0 && initialParameters.schemaId) {
|
|
17
|
+
try {
|
|
18
|
+
const fetchedObjectSchema = await fetchObjectSchema(workspaceId, initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
|
|
19
|
+
setObjectSchema(fetchedObjectSchema);
|
|
20
|
+
} catch {
|
|
21
|
+
// Could update this to check if status is 404 and set objectSchemaError
|
|
22
|
+
}
|
|
23
|
+
}
|
|
16
24
|
} catch (err) {
|
|
17
25
|
if (err instanceof Error) {
|
|
18
26
|
setError(err);
|
|
19
27
|
} else {
|
|
20
28
|
setError(new Error('Unexpected error occured'));
|
|
21
|
-
// eslint-disable-next-line no-console
|
|
22
|
-
console.error(err);
|
|
23
29
|
}
|
|
30
|
+
} finally {
|
|
31
|
+
setLoading(false);
|
|
24
32
|
}
|
|
25
33
|
})();
|
|
26
|
-
}, [
|
|
34
|
+
}, [initialParameters]);
|
|
27
35
|
return {
|
|
28
36
|
workspaceId,
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
workspaceError: error,
|
|
38
|
+
objectSchema,
|
|
39
|
+
assetsClientLoading: loading
|
|
31
40
|
};
|
|
32
41
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
import { fetchObjectSchemas } from '../services/cmdbService';
|
|
3
|
+
export const useObjectSchemas = workspaceId => {
|
|
4
|
+
const [loading, setLoading] = useState(false);
|
|
5
|
+
const [objectSchemas, setObjectSchemas] = useState();
|
|
6
|
+
const [error, setError] = useState();
|
|
7
|
+
const request = useCallback(async query => {
|
|
8
|
+
setLoading(true);
|
|
9
|
+
setError(undefined);
|
|
10
|
+
let fetchedObjectSchemas;
|
|
11
|
+
try {
|
|
12
|
+
const fetchedObjectSchemasResponse = await fetchObjectSchemas(workspaceId, query);
|
|
13
|
+
setObjectSchemas(fetchedObjectSchemasResponse.values);
|
|
14
|
+
fetchedObjectSchemas = fetchedObjectSchemasResponse.values;
|
|
15
|
+
} catch (err) {
|
|
16
|
+
if (err instanceof Error) {
|
|
17
|
+
setError(err);
|
|
18
|
+
} else {
|
|
19
|
+
setError(new Error('Unexpected error occured'));
|
|
20
|
+
}
|
|
21
|
+
} finally {
|
|
22
|
+
setLoading(false);
|
|
23
|
+
}
|
|
24
|
+
return fetchedObjectSchemas;
|
|
25
|
+
}, [workspaceId]);
|
|
26
|
+
return {
|
|
27
|
+
objectSchemasLoading: loading,
|
|
28
|
+
objectSchemasError: error,
|
|
29
|
+
objectSchemas,
|
|
30
|
+
fetchObjectSchemas: request
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
import { useCallback, useState } from 'react';
|
|
2
2
|
import { validateAql } from '../services/cmdbService';
|
|
3
3
|
export const useValidateAqlText = (workspaceId, hostname) => {
|
|
4
|
-
const [
|
|
4
|
+
const [loading, setLoading] = useState(false);
|
|
5
|
+
const [isValidAqlText, setIsValidAqlText] = useState(false);
|
|
6
|
+
const [error, setError] = useState();
|
|
5
7
|
const validateAqlText = useCallback(async aql => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
setLoading(true);
|
|
9
|
+
setError(undefined);
|
|
10
|
+
let isValid = false;
|
|
11
|
+
try {
|
|
12
|
+
const validateAqlResponse = await validateAql(workspaceId, {
|
|
13
|
+
qlQuery: aql
|
|
14
|
+
});
|
|
15
|
+
setIsValidAqlText(validateAqlResponse.isValid);
|
|
16
|
+
isValid = validateAqlResponse.isValid;
|
|
17
|
+
} catch (err) {
|
|
18
|
+
if (err instanceof Error) {
|
|
19
|
+
setError(err);
|
|
20
|
+
} else {
|
|
21
|
+
setError(new Error('Unexpected error occured'));
|
|
22
|
+
}
|
|
23
|
+
} finally {
|
|
24
|
+
setLoading(false);
|
|
25
|
+
}
|
|
26
|
+
return isValid;
|
|
27
|
+
}, [workspaceId]);
|
|
13
28
|
return {
|
|
29
|
+
isValidAqlText,
|
|
14
30
|
validateAqlText,
|
|
15
|
-
|
|
31
|
+
validateAqlTextLoading: loading,
|
|
32
|
+
validateAqlTextError: error
|
|
16
33
|
};
|
|
17
34
|
};
|
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
import { request } from '@atlaskit/linking-common';
|
|
2
|
-
export const getWorkspaceId = async
|
|
2
|
+
export const getWorkspaceId = async () => {
|
|
3
3
|
var _workspaceDetailsResp;
|
|
4
|
-
const url =
|
|
4
|
+
const url = '/rest/servicedesk/cmdb/latest/workspace';
|
|
5
5
|
const workspaceDetailsResponse = await request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
6
6
|
if (!((_workspaceDetailsResp = workspaceDetailsResponse.results) !== null && _workspaceDetailsResp !== void 0 && _workspaceDetailsResp.length)) {
|
|
7
7
|
throw new Error('No workspace results found');
|
|
8
8
|
}
|
|
9
9
|
return workspaceDetailsResponse.results[0].id;
|
|
10
10
|
};
|
|
11
|
-
export const validateAql = (workspaceId, data
|
|
12
|
-
const url =
|
|
11
|
+
export const validateAql = (workspaceId, data) => {
|
|
12
|
+
const url = `/gateway/api/jsm/assets/workspace/${workspaceId}/v1/aql/validate`;
|
|
13
13
|
return request('post', url, {
|
|
14
14
|
qlQuery: data.qlQuery,
|
|
15
15
|
context: 'SMART_LINKS'
|
|
16
16
|
}, undefined, [200, 201, 202, 203, 204]);
|
|
17
17
|
};
|
|
18
|
-
export const
|
|
19
|
-
const url =
|
|
18
|
+
export const fetchObjectSchema = (workspaceId, schemaId) => {
|
|
19
|
+
const url = `/gateway/api/jsm/assets/workspace/${workspaceId}/v1/objectschema/${schemaId}`;
|
|
20
|
+
return request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
21
|
+
};
|
|
22
|
+
export const fetchObjectSchemas = (workspaceId, query) => {
|
|
23
|
+
const queryParams = new URLSearchParams();
|
|
24
|
+
queryParams.set('maxResults', '20');
|
|
25
|
+
queryParams.set('includeCounts', 'false');
|
|
26
|
+
query && queryParams.set('query', query);
|
|
27
|
+
const url = `/gateway/api/jsm/assets/workspace/${workspaceId}/v1/objectschema/list?${queryParams}`;
|
|
20
28
|
return request('get', url, undefined, undefined, [200, 201, 202, 203, 204]);
|
|
21
29
|
};
|
|
@@ -6,9 +6,13 @@ import Button from '@atlaskit/button/standard-button';
|
|
|
6
6
|
import Modal, { ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
|
|
7
7
|
import { useAssetsClient } from '../../../hooks/useAssetsClient';
|
|
8
8
|
import { useDatasourceTableState } from '../../../hooks/useDatasourceTableState';
|
|
9
|
+
import { ModalLoadingError } from '../../common/error-state/modal-loading-error';
|
|
10
|
+
import { AssetsSearchContainer } from '../search-container';
|
|
11
|
+
import { AssetsSearchContainerLoading } from '../search-container/loading-state';
|
|
9
12
|
import { modalMessages } from './messages';
|
|
10
13
|
import { RenderAssetsContent } from './render-assets-content';
|
|
11
14
|
import { ModalContentContainer } from './styled';
|
|
15
|
+
const AssetsModalTitle = jsx(ModalTitle, null, jsx(FormattedMessage, modalMessages.insertObjectsTitle));
|
|
12
16
|
export const AssetsConfigModal = props => {
|
|
13
17
|
const {
|
|
14
18
|
datasourceId,
|
|
@@ -17,16 +21,22 @@ export const AssetsConfigModal = props => {
|
|
|
17
21
|
onInsert,
|
|
18
22
|
visibleColumnKeys: initialVisibleColumnKeys
|
|
19
23
|
} = props;
|
|
20
|
-
const [aql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql);
|
|
21
|
-
const [schemaId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
|
|
24
|
+
const [aql, setAql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.aql);
|
|
25
|
+
const [schemaId, setSchemaId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.schemaId);
|
|
22
26
|
const [visibleColumnKeys, setVisibleColumnKeys] = useState(initialVisibleColumnKeys);
|
|
27
|
+
|
|
28
|
+
// If a workspaceError occurs this is a critical error
|
|
23
29
|
const {
|
|
24
|
-
workspaceId
|
|
25
|
-
|
|
30
|
+
workspaceId,
|
|
31
|
+
workspaceError,
|
|
32
|
+
objectSchema,
|
|
33
|
+
assetsClientLoading
|
|
34
|
+
} = useAssetsClient(initialParameters);
|
|
26
35
|
const parameters = useMemo(() => ({
|
|
27
36
|
aql: aql || '',
|
|
28
37
|
schemaId: schemaId || '',
|
|
29
|
-
workspaceId: ''
|
|
38
|
+
workspaceId: '',
|
|
39
|
+
cloudId: ''
|
|
30
40
|
}), [aql, schemaId]);
|
|
31
41
|
const {
|
|
32
42
|
status,
|
|
@@ -40,7 +50,7 @@ export const AssetsConfigModal = props => {
|
|
|
40
50
|
const newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
|
|
41
51
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
42
52
|
}, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
|
|
43
|
-
const isDisabled = status === 'rejected' || status === 'loading' || status === 'empty' ||
|
|
53
|
+
const isDisabled = status === 'rejected' || status === 'loading' || status === 'empty' || !!workspaceError || assetsClientLoading || !aql || !schemaId;
|
|
44
54
|
const retrieveUrlForSmartCardRender = useCallback(() => {
|
|
45
55
|
var _data$key, _data$key$data;
|
|
46
56
|
const [data] = responseItems;
|
|
@@ -48,7 +58,7 @@ export const AssetsConfigModal = props => {
|
|
|
48
58
|
return data === null || data === void 0 ? void 0 : (_data$key = data.key) === null || _data$key === void 0 ? void 0 : (_data$key$data = _data$key.data) === null || _data$key$data === void 0 ? void 0 : _data$key$data.url;
|
|
49
59
|
}, [responseItems]);
|
|
50
60
|
const onInsertPressed = useCallback(() => {
|
|
51
|
-
if (!aql) {
|
|
61
|
+
if (!aql || !schemaId) {
|
|
52
62
|
return;
|
|
53
63
|
}
|
|
54
64
|
const firstAssetUrl = retrieveUrlForSmartCardRender();
|
|
@@ -84,12 +94,36 @@ export const AssetsConfigModal = props => {
|
|
|
84
94
|
});
|
|
85
95
|
}
|
|
86
96
|
}, [aql, datasourceId, onInsert, responseItems.length, retrieveUrlForSmartCardRender, schemaId, visibleColumnKeys]);
|
|
97
|
+
const handleOnSearch = useCallback((aql, schemaId) => {
|
|
98
|
+
setAql(aql);
|
|
99
|
+
setSchemaId(schemaId);
|
|
100
|
+
}, []);
|
|
101
|
+
const renderModalTitleContent = useCallback(() => {
|
|
102
|
+
if (workspaceError) {
|
|
103
|
+
return undefined;
|
|
104
|
+
} else {
|
|
105
|
+
if (!workspaceId || assetsClientLoading) {
|
|
106
|
+
return jsx(AssetsSearchContainerLoading, {
|
|
107
|
+
modalTitle: AssetsModalTitle
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return jsx(AssetsSearchContainer, {
|
|
111
|
+
workspaceId: workspaceId,
|
|
112
|
+
initialSearchData: {
|
|
113
|
+
aql,
|
|
114
|
+
objectSchema
|
|
115
|
+
},
|
|
116
|
+
onSearch: handleOnSearch,
|
|
117
|
+
modalTitle: AssetsModalTitle
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}, [aql, assetsClientLoading, handleOnSearch, objectSchema, workspaceError, workspaceId]);
|
|
87
121
|
return jsx(ModalTransition, null, jsx(Modal, {
|
|
88
122
|
testId: 'asset-datasource-modal',
|
|
89
123
|
onClose: onCancel,
|
|
90
124
|
width: "x-large",
|
|
91
125
|
shouldScrollInViewport: true
|
|
92
|
-
}, jsx(ModalHeader, null,
|
|
126
|
+
}, jsx(ModalHeader, null, renderModalTitleContent()), jsx(ModalBody, null, jsx(ModalContentContainer, null, workspaceError ? jsx(ModalLoadingError, null) : jsx(RenderAssetsContent, {
|
|
93
127
|
status: status,
|
|
94
128
|
responseItems: responseItems
|
|
95
129
|
}))), jsx(ModalFooter, null, jsx(Button, {
|
|
@@ -9,5 +9,10 @@ export const modalMessages = defineMessages({
|
|
|
9
9
|
id: 'linkDataSource.assets.configmodal.insertIssuesButtonText',
|
|
10
10
|
description: 'Button text to insert the displayed content',
|
|
11
11
|
defaultMessage: 'Insert objects'
|
|
12
|
+
},
|
|
13
|
+
insertObjectsTitle: {
|
|
14
|
+
id: 'linkDataSource.assets.configmodal.insertObjectsTitle',
|
|
15
|
+
description: 'Title for the Assets Objects Datasource config modal which prefixes a select picker',
|
|
16
|
+
defaultMessage: 'Insert objects from'
|
|
12
17
|
}
|
|
13
18
|
});
|