@atlaskit/link-datasource 0.29.3 → 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 +13 -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/index.js +7 -1
- 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/index.js +1 -0
- 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/index.js +1 -0
- 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/index.d.ts +1 -0
- 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/index.d.ts +1 -0
- 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
- package/report.api.md +7 -5
- package/tmp/api-report-tmp.d.ts +5 -3
|
@@ -0,0 +1,161 @@
|
|
|
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.AqlSearchInput = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _react = require("react");
|
|
12
|
+
var _react2 = require("@emotion/react");
|
|
13
|
+
var _reactIntlNext = require("react-intl-next");
|
|
14
|
+
var _button = _interopRequireDefault(require("@atlaskit/button"));
|
|
15
|
+
var _form = require("@atlaskit/form");
|
|
16
|
+
var _checkCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/check-circle"));
|
|
17
|
+
var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/cross-circle"));
|
|
18
|
+
var _search = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/search"));
|
|
19
|
+
var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
|
|
20
|
+
var _textfield = _interopRequireDefault(require("@atlaskit/textfield"));
|
|
21
|
+
var _useValidateAqlText2 = require("../../../../hooks/useValidateAqlText");
|
|
22
|
+
var _types = require("../../../../types/assets/types");
|
|
23
|
+
var _styled = require("../styled");
|
|
24
|
+
var _messages = require("./messages");
|
|
25
|
+
/** @jsx jsx */
|
|
26
|
+
|
|
27
|
+
/* Meta isn't exported in @atlaskit/form
|
|
28
|
+
Taken from packages/design-system/form/src/field.tsx */
|
|
29
|
+
|
|
30
|
+
var searchButtonStyles = (0, _react2.css)({
|
|
31
|
+
marginRight: "var(--ds-space-075, 6px)"
|
|
32
|
+
});
|
|
33
|
+
var SEARCH_DEBOUNCE_MS = 350;
|
|
34
|
+
exports.SEARCH_DEBOUNCE_MS = SEARCH_DEBOUNCE_MS;
|
|
35
|
+
var renderValidatorIcon = function renderValidatorIcon(value, error, meta) {
|
|
36
|
+
if (value && meta !== null && meta !== void 0 && meta.validating) {
|
|
37
|
+
return (0, _react2.jsx)(_spinner.default, {
|
|
38
|
+
size: "medium",
|
|
39
|
+
testId: "assets-datasource-modal--aql-validating"
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (value && error) {
|
|
43
|
+
return (0, _react2.jsx)(_crossCircle.default, {
|
|
44
|
+
label: "label",
|
|
45
|
+
primaryColor: "red",
|
|
46
|
+
size: "medium",
|
|
47
|
+
testId: "assets-datasource-modal--aql-invalid"
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (value && meta.valid) {
|
|
51
|
+
return (0, _react2.jsx)(_checkCircle.default, {
|
|
52
|
+
label: "label",
|
|
53
|
+
primaryColor: "green",
|
|
54
|
+
size: "medium",
|
|
55
|
+
testId: "assets-datasource-modal--aql-valid"
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return (0, _react2.jsx)(_search.default, {
|
|
59
|
+
label: "label",
|
|
60
|
+
size: "medium",
|
|
61
|
+
testId: "assets-datasource-modal--aql-idle"
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
var AqlSearchInput = function AqlSearchInput(_ref) {
|
|
65
|
+
var value = _ref.value,
|
|
66
|
+
workspaceId = _ref.workspaceId,
|
|
67
|
+
_ref$testId = _ref.testId,
|
|
68
|
+
testId = _ref$testId === void 0 ? 'assets-datasource-modal--aql-search-input' : _ref$testId;
|
|
69
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
70
|
+
formatMessage = _useIntl.formatMessage;
|
|
71
|
+
var timeout = (0, _react.useRef)();
|
|
72
|
+
var lastValue = (0, _react.useRef)(value);
|
|
73
|
+
var lastResult = (0, _react.useRef)(Promise.resolve(undefined));
|
|
74
|
+
var _useValidateAqlText = (0, _useValidateAqlText2.useValidateAqlText)(workspaceId),
|
|
75
|
+
validateAqlText = _useValidateAqlText.validateAqlText;
|
|
76
|
+
|
|
77
|
+
// Validation expects undefined when valid and a string as an error message when invalid
|
|
78
|
+
var handleValidation = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
79
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(newUnvalidatedQlQuery) {
|
|
80
|
+
var isValid;
|
|
81
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
82
|
+
while (1) switch (_context.prev = _context.next) {
|
|
83
|
+
case 0:
|
|
84
|
+
if (newUnvalidatedQlQuery) {
|
|
85
|
+
_context.next = 2;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
return _context.abrupt("return", undefined);
|
|
89
|
+
case 2:
|
|
90
|
+
_context.next = 4;
|
|
91
|
+
return validateAqlText(newUnvalidatedQlQuery);
|
|
92
|
+
case 4:
|
|
93
|
+
isValid = _context.sent;
|
|
94
|
+
return _context.abrupt("return", isValid ? undefined : 'invalid');
|
|
95
|
+
case 6:
|
|
96
|
+
case "end":
|
|
97
|
+
return _context.stop();
|
|
98
|
+
}
|
|
99
|
+
}, _callee);
|
|
100
|
+
}));
|
|
101
|
+
return function (_x) {
|
|
102
|
+
return _ref2.apply(this, arguments);
|
|
103
|
+
};
|
|
104
|
+
}(), [validateAqlText]);
|
|
105
|
+
|
|
106
|
+
/* Debounce async validation for input, validation is also called on every field change
|
|
107
|
+
in a form so we need to also memoize. The async validate function is expected to either:
|
|
108
|
+
Immediately return a promise (which is then collected into an array, every single time validation is run),
|
|
109
|
+
or immediately return either undefined or an error message */
|
|
110
|
+
var debouncedMemoizedValidation = function debouncedMemoizedValidation(value) {
|
|
111
|
+
return new Promise(function (resolve) {
|
|
112
|
+
if (timeout.current) {
|
|
113
|
+
timeout.current();
|
|
114
|
+
}
|
|
115
|
+
if (value !== lastValue.current) {
|
|
116
|
+
var timerId = setTimeout(function () {
|
|
117
|
+
lastValue.current = value;
|
|
118
|
+
lastResult.current = handleValidation(value);
|
|
119
|
+
resolve(lastResult.current);
|
|
120
|
+
}, SEARCH_DEBOUNCE_MS);
|
|
121
|
+
timeout.current = function () {
|
|
122
|
+
clearTimeout(timerId);
|
|
123
|
+
resolve('debouncing');
|
|
124
|
+
};
|
|
125
|
+
} else {
|
|
126
|
+
resolve(lastResult.current);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
return (0, _react2.jsx)(_styled.FieldContainer, null, (0, _react2.jsx)(_form.Field, {
|
|
131
|
+
name: _types.aqlKey,
|
|
132
|
+
defaultValue: value,
|
|
133
|
+
validate: debouncedMemoizedValidation
|
|
134
|
+
}, function (_ref3) {
|
|
135
|
+
var fieldProps = _ref3.fieldProps,
|
|
136
|
+
meta = _ref3.meta,
|
|
137
|
+
error = _ref3.error;
|
|
138
|
+
return (0, _react2.jsx)(_textfield.default, (0, _extends2.default)({}, fieldProps, {
|
|
139
|
+
elemBeforeInput: (0, _react2.jsx)("span", {
|
|
140
|
+
style: {
|
|
141
|
+
paddingLeft: 6,
|
|
142
|
+
width: 24
|
|
143
|
+
}
|
|
144
|
+
}, renderValidatorIcon(fieldProps.value, error, meta)),
|
|
145
|
+
elemAfterInput: (0, _react2.jsx)(_button.default, {
|
|
146
|
+
appearance: "primary",
|
|
147
|
+
css: searchButtonStyles,
|
|
148
|
+
iconBefore: (0, _react2.jsx)(_search.default, {
|
|
149
|
+
label: formatMessage(_messages.searchInputMessages.placeholder),
|
|
150
|
+
size: "medium"
|
|
151
|
+
}),
|
|
152
|
+
spacing: "none",
|
|
153
|
+
testId: "assets-datasource-modal--aql-search-button",
|
|
154
|
+
type: "submit"
|
|
155
|
+
}),
|
|
156
|
+
placeholder: formatMessage(_messages.searchInputMessages.placeholder),
|
|
157
|
+
testId: testId
|
|
158
|
+
}));
|
|
159
|
+
}));
|
|
160
|
+
};
|
|
161
|
+
exports.AqlSearchInput = AqlSearchInput;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AssetsAqlSearchInputSkeleton = void 0;
|
|
7
|
+
var _react = require("@emotion/react");
|
|
8
|
+
var _linkingCommon = require("@atlaskit/linking-common");
|
|
9
|
+
/** @jsx jsx */
|
|
10
|
+
|
|
11
|
+
var AssetsAqlSearchInputSkeleton = function AssetsAqlSearchInputSkeleton() {
|
|
12
|
+
return (0, _react.jsx)(_linkingCommon.Skeleton, {
|
|
13
|
+
width: "100%",
|
|
14
|
+
height: "40px",
|
|
15
|
+
testId: "assets-datasource-modal--aql-search-input-skeleton"
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
exports.AssetsAqlSearchInputSkeleton = AssetsAqlSearchInputSkeleton;
|
|
@@ -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
|
};
|
package/dist/es2019/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { default as JiraIssuesConfigModal } from './ui/jira-issues-modal';
|
|
2
|
+
export { default as AssetsConfigModal } from './ui/assets-modal';
|
|
2
3
|
export { default as DatasourceTableView } from './ui/datasource-table-view';
|
|
3
4
|
export { default as JSMAssetsConfigModal } from './ui/assets-modal';
|
|
4
5
|
export { JIRA_LIST_OF_LINKS_DATASOURCE_ID } from './ui/jira-issues-modal';
|
|
@@ -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
|
};
|