@atlaskit/link-datasource 1.10.3 → 1.11.1
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/analytics/constants.js +1 -1
- package/dist/cjs/analytics/types.js +1 -0
- package/dist/cjs/hooks/useObjectSchemas.js +23 -13
- package/dist/cjs/ui/assets-modal/modal/index.js +109 -16
- package/dist/cjs/ui/assets-modal/modal/render-assets-content/index.js +5 -3
- package/dist/cjs/ui/assets-modal/search-container/index.js +4 -0
- package/dist/cjs/ui/assets-modal/search-container/object-schema-select/index.js +68 -23
- package/dist/cjs/ui/jira-issues-modal/jira-search-container/buildJQL.js +23 -3
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +2 -1
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/analytics/types.js +1 -0
- package/dist/es2019/hooks/useObjectSchemas.js +9 -1
- package/dist/es2019/ui/assets-modal/modal/index.js +112 -15
- package/dist/es2019/ui/assets-modal/modal/render-assets-content/index.js +5 -3
- package/dist/es2019/ui/assets-modal/search-container/index.js +5 -0
- package/dist/es2019/ui/assets-modal/search-container/object-schema-select/index.js +32 -5
- package/dist/es2019/ui/jira-issues-modal/jira-search-container/buildJQL.js +17 -4
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +2 -1
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/analytics/types.js +1 -0
- package/dist/esm/hooks/useObjectSchemas.js +23 -13
- package/dist/esm/ui/assets-modal/modal/index.js +112 -19
- package/dist/esm/ui/assets-modal/modal/render-assets-content/index.js +5 -3
- package/dist/esm/ui/assets-modal/search-container/index.js +4 -0
- package/dist/esm/ui/assets-modal/search-container/object-schema-select/index.js +65 -20
- package/dist/esm/ui/jira-issues-modal/jira-search-container/buildJQL.js +23 -4
- package/dist/esm/ui/jira-issues-modal/modal/index.js +2 -1
- package/dist/types/analytics/generated/analytics.types.d.ts +7 -2
- package/dist/types/analytics/types.d.ts +2 -1
- package/dist/types/hooks/useObjectSchemas.d.ts +3 -1
- package/dist/types/ui/assets-modal/modal/render-assets-content/index.d.ts +1 -0
- package/dist/types/ui/assets-modal/search-container/index.d.ts +1 -2
- package/dist/types/ui/assets-modal/types.d.ts +2 -1
- package/dist/types/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +4 -0
- package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +7 -2
- package/dist/types-ts4.5/analytics/types.d.ts +2 -1
- package/dist/types-ts4.5/hooks/useObjectSchemas.d.ts +3 -1
- package/dist/types-ts4.5/ui/assets-modal/modal/render-assets-content/index.d.ts +1 -0
- package/dist/types-ts4.5/ui/assets-modal/search-container/index.d.ts +1 -2
- package/dist/types-ts4.5/ui/assets-modal/types.d.ts +2 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/jira-search-container/buildJQL.d.ts +4 -0
- package/package.json +2 -2
- package/report.api.md +4 -1
- package/tmp/api-report-tmp.d.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.11.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#42377](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42377) [`c1c8a308bd5`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c1c8a308bd5) - Add support for basic filter in JQL generation
|
|
8
|
+
|
|
9
|
+
## 1.11.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#42245](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42245) [`7b328d1b1b2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7b328d1b1b2) - Added Datasource Analytics and UFO metrics to Assets Config Modal.
|
|
14
|
+
Added additional analyticsEvent param to onInsert of AssetsConfigModal.
|
|
15
|
+
|
|
3
16
|
## 1.10.3
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -12,6 +12,7 @@ var DatasourceAction = exports.DatasourceAction = /*#__PURE__*/function (Datasou
|
|
|
12
12
|
DatasourceAction["QUERY_UPDATED"] = "query updated";
|
|
13
13
|
DatasourceAction["DISPLAY_VIEW_CHANGED"] = "display view changed";
|
|
14
14
|
DatasourceAction["NEXT_PAGE_SCROLLED"] = "next page scrolled";
|
|
15
|
+
DatasourceAction["SCHEMA_UPDATED"] = "schema updated";
|
|
15
16
|
return DatasourceAction;
|
|
16
17
|
}({});
|
|
17
18
|
var DatasourceDisplay = exports.DatasourceDisplay = /*#__PURE__*/function (DatasourceDisplay) {
|
|
@@ -21,11 +21,15 @@ var useObjectSchemas = exports.useObjectSchemas = function useObjectSchemas(work
|
|
|
21
21
|
setObjectSchemas = _useState4[1];
|
|
22
22
|
var _useState5 = (0, _react.useState)(),
|
|
23
23
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
totalObjectSchemas = _useState6[0],
|
|
25
|
+
setTotalObjectSchemas = _useState6[1];
|
|
26
|
+
var _useState7 = (0, _react.useState)(),
|
|
27
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
28
|
+
error = _useState8[0],
|
|
29
|
+
setError = _useState8[1];
|
|
26
30
|
var request = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
27
31
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query) {
|
|
28
|
-
var fetchedObjectSchemas, fetchedObjectSchemasResponse;
|
|
32
|
+
var fetchedObjectSchemas, fetchTotalObjectSchemas, fetchedObjectSchemasResponse;
|
|
29
33
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
30
34
|
while (1) switch (_context.prev = _context.next) {
|
|
31
35
|
case 0:
|
|
@@ -37,28 +41,33 @@ var useObjectSchemas = exports.useObjectSchemas = function useObjectSchemas(work
|
|
|
37
41
|
case 5:
|
|
38
42
|
fetchedObjectSchemasResponse = _context.sent;
|
|
39
43
|
setObjectSchemas(fetchedObjectSchemasResponse.values);
|
|
44
|
+
setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
|
|
40
45
|
fetchedObjectSchemas = fetchedObjectSchemasResponse.values;
|
|
41
|
-
|
|
46
|
+
fetchTotalObjectSchemas = fetchedObjectSchemasResponse.total;
|
|
47
|
+
_context.next = 15;
|
|
42
48
|
break;
|
|
43
|
-
case
|
|
44
|
-
_context.prev =
|
|
49
|
+
case 12:
|
|
50
|
+
_context.prev = 12;
|
|
45
51
|
_context.t0 = _context["catch"](2);
|
|
46
52
|
if (_context.t0 instanceof Error) {
|
|
47
53
|
setError(_context.t0);
|
|
48
54
|
} else {
|
|
49
55
|
setError(new Error('Unexpected error occured'));
|
|
50
56
|
}
|
|
51
|
-
case
|
|
52
|
-
_context.prev =
|
|
57
|
+
case 15:
|
|
58
|
+
_context.prev = 15;
|
|
53
59
|
setLoading(false);
|
|
54
|
-
return _context.finish(
|
|
55
|
-
case
|
|
56
|
-
return _context.abrupt("return",
|
|
57
|
-
|
|
60
|
+
return _context.finish(15);
|
|
61
|
+
case 18:
|
|
62
|
+
return _context.abrupt("return", {
|
|
63
|
+
objectSchemas: fetchedObjectSchemas,
|
|
64
|
+
totalObjectSchemas: fetchTotalObjectSchemas
|
|
65
|
+
});
|
|
66
|
+
case 19:
|
|
58
67
|
case "end":
|
|
59
68
|
return _context.stop();
|
|
60
69
|
}
|
|
61
|
-
}, _callee, null, [[2,
|
|
70
|
+
}, _callee, null, [[2, 12, 15, 18]]);
|
|
62
71
|
}));
|
|
63
72
|
return function (_x) {
|
|
64
73
|
return _ref.apply(this, arguments);
|
|
@@ -68,6 +77,7 @@ var useObjectSchemas = exports.useObjectSchemas = function useObjectSchemas(work
|
|
|
68
77
|
objectSchemasLoading: loading,
|
|
69
78
|
objectSchemasError: error,
|
|
70
79
|
objectSchemas: objectSchemas,
|
|
80
|
+
totalObjectSchemas: totalObjectSchemas,
|
|
71
81
|
fetchObjectSchemas: request
|
|
72
82
|
};
|
|
73
83
|
};
|
|
@@ -7,18 +7,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.AssetsConfigModal = void 0;
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
12
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
13
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
14
14
|
var _react = require("react");
|
|
15
15
|
var _react2 = require("@emotion/react");
|
|
16
16
|
var _reactIntlNext = require("react-intl-next");
|
|
17
|
+
var _uuid = require("uuid");
|
|
17
18
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
18
19
|
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
19
20
|
var _intlMessagesProvider = require("@atlaskit/intl-messages-provider");
|
|
20
21
|
var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
|
|
21
22
|
var _analytics = require("../../../analytics");
|
|
23
|
+
var _constants = require("../../../analytics/constants");
|
|
24
|
+
var _types = require("../../../analytics/types");
|
|
25
|
+
var _ufoExperiences = require("../../../analytics/ufoExperiences");
|
|
26
|
+
var _useColumnPickerRenderedFailedUfoExperience = require("../../../analytics/ufoExperiences/hooks/useColumnPickerRenderedFailedUfoExperience");
|
|
27
|
+
var _useDataRenderedUfoExperience = require("../../../analytics/ufoExperiences/hooks/useDataRenderedUfoExperience");
|
|
22
28
|
var _fetchMessagesForLocale = require("../../../common/utils/locale/fetch-messages-for-locale");
|
|
23
29
|
var _useAssetsClient2 = require("../../../hooks/useAssetsClient");
|
|
24
30
|
var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
|
|
@@ -62,6 +68,8 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
62
68
|
setIsNewSearch = _useState8[1];
|
|
63
69
|
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
64
70
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
71
|
+
var _useRef = (0, _react.useRef)((0, _uuid.v4)()),
|
|
72
|
+
modalRenderInstanceId = _useRef.current;
|
|
65
73
|
|
|
66
74
|
// If a workspaceError occurs this is a critical error
|
|
67
75
|
var _useAssetsClient = (0, _useAssetsClient2.useAssetsClient)(initialParameters),
|
|
@@ -89,13 +97,69 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
89
97
|
loadDatasourceDetails = _useDatasourceTableSt.loadDatasourceDetails,
|
|
90
98
|
hasNextPage = _useDatasourceTableSt.hasNextPage,
|
|
91
99
|
columns = _useDatasourceTableSt.columns,
|
|
92
|
-
defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys
|
|
100
|
+
defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys,
|
|
101
|
+
_useDatasourceTableSt2 = _useDatasourceTableSt.extensionKey,
|
|
102
|
+
extensionKey = _useDatasourceTableSt2 === void 0 ? null : _useDatasourceTableSt2,
|
|
103
|
+
destinationObjectTypes = _useDatasourceTableSt.destinationObjectTypes,
|
|
104
|
+
totalCount = _useDatasourceTableSt.totalCount;
|
|
105
|
+
|
|
106
|
+
/* ------------------------------ OBSERVABILITY ------------------------------ */
|
|
107
|
+
var searchCount = (0, _react.useRef)(0);
|
|
108
|
+
var userInteractionActions = (0, _react.useRef)(new Set());
|
|
109
|
+
var visibleColumnCount = (0, _react.useRef)((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
|
|
110
|
+
var isDataReady = (visibleColumnKeys || []).length > 0;
|
|
111
|
+
var analyticsPayload = (0, _react.useMemo)(function () {
|
|
112
|
+
return {
|
|
113
|
+
extensionKey: extensionKey,
|
|
114
|
+
destinationObjectTypes: destinationObjectTypes
|
|
115
|
+
};
|
|
116
|
+
}, [destinationObjectTypes, extensionKey]);
|
|
117
|
+
(0, _react.useEffect)(function () {
|
|
118
|
+
fireEvent('screen.datasourceModalDialog.viewed', {});
|
|
119
|
+
}, [fireEvent]);
|
|
120
|
+
var fireTableViewedEvent = (0, _react.useCallback)(function () {
|
|
121
|
+
if (isDataReady) {
|
|
122
|
+
fireEvent('ui.table.viewed.datasourceConfigModal', _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
123
|
+
totalItemCount: totalCount || 0,
|
|
124
|
+
searchMethod: _types.DatasourceSearchMethod.DATASOURCE_SEARCH_QUERY,
|
|
125
|
+
displayedColumnCount: visibleColumnCount.current
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
}, [analyticsPayload, fireEvent, totalCount, isDataReady]);
|
|
129
|
+
(0, _react.useEffect)(function () {
|
|
130
|
+
var isResolved = status === 'resolved';
|
|
131
|
+
if (!isResolved || !totalCount) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (totalCount > 1) {
|
|
135
|
+
fireTableViewedEvent();
|
|
136
|
+
}
|
|
137
|
+
}, [fireTableViewedEvent, status, totalCount]);
|
|
138
|
+
(0, _react.useEffect)(function () {
|
|
139
|
+
var shouldStartUfoExperience = status === 'loading';
|
|
140
|
+
if (shouldStartUfoExperience) {
|
|
141
|
+
(0, _ufoExperiences.startUfoExperience)({
|
|
142
|
+
name: 'datasource-rendered'
|
|
143
|
+
}, modalRenderInstanceId);
|
|
144
|
+
}
|
|
145
|
+
}, [modalRenderInstanceId, status]);
|
|
146
|
+
(0, _useDataRenderedUfoExperience.useDataRenderedUfoExperience)({
|
|
147
|
+
status: status,
|
|
148
|
+
experienceId: modalRenderInstanceId,
|
|
149
|
+
itemCount: responseItems.length,
|
|
150
|
+
canBeLink: false,
|
|
151
|
+
extensionKey: extensionKey
|
|
152
|
+
});
|
|
153
|
+
(0, _useColumnPickerRenderedFailedUfoExperience.useColumnPickerRenderedFailedUfoExperience)(status, modalRenderInstanceId);
|
|
154
|
+
/* ------------------------------ END OBSERVABILITY ------------------------------ */
|
|
155
|
+
|
|
93
156
|
var onVisibleColumnKeysChange = (0, _react.useCallback)(function (visibleColumnKeys) {
|
|
94
157
|
setVisibleColumnKeys(visibleColumnKeys);
|
|
95
158
|
setIsNewSearch(false);
|
|
96
159
|
}, []);
|
|
97
160
|
(0, _react.useEffect)(function () {
|
|
98
161
|
var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
|
|
162
|
+
visibleColumnCount.current = newVisibleColumnKeys.length;
|
|
99
163
|
setVisibleColumnKeys(newVisibleColumnKeys);
|
|
100
164
|
}, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
|
|
101
165
|
(0, _react.useEffect)(function () {
|
|
@@ -103,10 +167,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
103
167
|
setVisibleColumnKeys(defaultVisibleColumnKeys);
|
|
104
168
|
}
|
|
105
169
|
}, [defaultVisibleColumnKeys, isNewSearch]);
|
|
106
|
-
|
|
107
|
-
fireEvent('screen.datasourceModalDialog.viewed', {});
|
|
108
|
-
}, [fireEvent]);
|
|
109
|
-
var isDisabled = !!workspaceError || status === 'rejected' || status === 'loading' || status === 'empty' || !!workspaceError || assetsClientLoading || !aql || !schemaId;
|
|
170
|
+
var isDisabled = !!workspaceError || status === 'rejected' || status === 'loading' || status === 'empty' || assetsClientLoading || !aql || !schemaId;
|
|
110
171
|
var retrieveUrlForSmartCardRender = (0, _react.useCallback)(function () {
|
|
111
172
|
var _data$key;
|
|
112
173
|
var _responseItems = (0, _slicedToArray2.default)(responseItems, 1),
|
|
@@ -114,10 +175,25 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
114
175
|
// agreement with BE that we will use `key` for rendering smartlink
|
|
115
176
|
return data === null || data === void 0 || (_data$key = data.key) === null || _data$key === void 0 || (_data$key = _data$key.data) === null || _data$key === void 0 ? void 0 : _data$key.url;
|
|
116
177
|
}, [responseItems]);
|
|
117
|
-
var onInsertPressed = (0, _react.useCallback)(function () {
|
|
178
|
+
var onInsertPressed = (0, _react.useCallback)(function (e, analyticsEvent) {
|
|
179
|
+
var _insertButtonClickedE;
|
|
118
180
|
if (!aql || !schemaId || !workspaceId) {
|
|
119
181
|
return;
|
|
120
182
|
}
|
|
183
|
+
var insertButtonClickedEvent = analyticsEvent.update({
|
|
184
|
+
actionSubjectId: 'insert',
|
|
185
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
186
|
+
totalItemCount: totalCount || 0,
|
|
187
|
+
displayedColumnCount: visibleColumnCount.current,
|
|
188
|
+
display: _types.DatasourceDisplay.DATASOURCE_TABLE,
|
|
189
|
+
searchCount: searchCount.current,
|
|
190
|
+
searchMethod: _types.DatasourceSearchMethod.DATASOURCE_SEARCH_QUERY,
|
|
191
|
+
actions: Array.from(userInteractionActions.current)
|
|
192
|
+
}),
|
|
193
|
+
eventType: 'ui'
|
|
194
|
+
});
|
|
195
|
+
var consumerEvent = (_insertButtonClickedE = insertButtonClickedEvent.clone()) !== null && _insertButtonClickedE !== void 0 ? _insertButtonClickedE : undefined;
|
|
196
|
+
insertButtonClickedEvent.fire(_analytics.EVENT_CHANNEL);
|
|
121
197
|
var firstAssetUrl = retrieveUrlForSmartCardRender();
|
|
122
198
|
if (responseItems.length === 1 && firstAssetUrl) {
|
|
123
199
|
onInsert({
|
|
@@ -125,7 +201,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
125
201
|
attrs: {
|
|
126
202
|
url: firstAssetUrl
|
|
127
203
|
}
|
|
128
|
-
});
|
|
204
|
+
}, consumerEvent);
|
|
129
205
|
} else {
|
|
130
206
|
onInsert({
|
|
131
207
|
type: 'blockCard',
|
|
@@ -149,15 +225,33 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
149
225
|
}]
|
|
150
226
|
}
|
|
151
227
|
}
|
|
152
|
-
});
|
|
228
|
+
}, consumerEvent);
|
|
153
229
|
}
|
|
154
|
-
}, [aql, schemaId, workspaceId, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
|
|
230
|
+
}, [aql, schemaId, workspaceId, analyticsPayload, totalCount, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, visibleColumnKeys]);
|
|
231
|
+
var onCancelClick = (0, _react.useCallback)(function (e, analyticEvent) {
|
|
232
|
+
analyticEvent.update({
|
|
233
|
+
eventType: 'ui',
|
|
234
|
+
actionSubjectId: 'cancel',
|
|
235
|
+
attributes: _objectSpread(_objectSpread({}, analyticsPayload), {}, {
|
|
236
|
+
searchCount: searchCount.current,
|
|
237
|
+
actions: Array.from(userInteractionActions.current)
|
|
238
|
+
})
|
|
239
|
+
}).fire(_analytics.EVENT_CHANNEL);
|
|
240
|
+
onCancel();
|
|
241
|
+
}, [analyticsPayload, onCancel]);
|
|
155
242
|
var handleOnSearch = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
156
243
|
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(searchAql, searchSchemaId) {
|
|
157
244
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
158
245
|
while (1) switch (_context.prev = _context.next) {
|
|
159
246
|
case 0:
|
|
160
247
|
if (schemaId !== searchSchemaId || aql !== searchAql) {
|
|
248
|
+
searchCount.current++;
|
|
249
|
+
if (schemaId !== searchSchemaId) {
|
|
250
|
+
userInteractionActions.current.add(_types.DatasourceAction.SCHEMA_UPDATED);
|
|
251
|
+
}
|
|
252
|
+
if (aql !== searchAql) {
|
|
253
|
+
userInteractionActions.current.add(_types.DatasourceAction.QUERY_UPDATED);
|
|
254
|
+
}
|
|
161
255
|
reset({
|
|
162
256
|
shouldResetColumns: true
|
|
163
257
|
});
|
|
@@ -219,10 +313,11 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
219
313
|
hasNextPage: hasNextPage,
|
|
220
314
|
loadDatasourceDetails: loadDatasourceDetails,
|
|
221
315
|
columns: columns,
|
|
222
|
-
defaultVisibleColumnKeys: defaultVisibleColumnKeys
|
|
316
|
+
defaultVisibleColumnKeys: defaultVisibleColumnKeys,
|
|
317
|
+
modalRenderInstanceId: modalRenderInstanceId
|
|
223
318
|
}))), (0, _react2.jsx)(_modalDialog.ModalFooter, null, (0, _react2.jsx)(_standardButton.default, {
|
|
224
319
|
appearance: "default",
|
|
225
|
-
onClick:
|
|
320
|
+
onClick: onCancelClick,
|
|
226
321
|
testId: 'asset-datasource-modal--cancel-button'
|
|
227
322
|
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.cancelButtonText)), (0, _react2.jsx)(_standardButton.default, {
|
|
228
323
|
appearance: "primary",
|
|
@@ -238,11 +333,9 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
238
333
|
var analyticsContextAttributes = {
|
|
239
334
|
dataProvider: 'jsm-assets'
|
|
240
335
|
};
|
|
241
|
-
var analyticsContextData = {
|
|
242
|
-
packageName: "@atlaskit/link-datasource",
|
|
243
|
-
packageVersion: "1.10.3",
|
|
336
|
+
var analyticsContextData = _objectSpread(_objectSpread({}, _constants.packageMetaData), {}, {
|
|
244
337
|
source: 'datasourceConfigModal'
|
|
245
|
-
};
|
|
338
|
+
});
|
|
246
339
|
var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
|
|
247
340
|
attributes: _objectSpread({}, analyticsContextAttributes)
|
|
248
341
|
});
|
|
@@ -21,7 +21,8 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
|
|
|
21
21
|
loadDatasourceDetails = props.loadDatasourceDetails,
|
|
22
22
|
columns = props.columns,
|
|
23
23
|
defaultVisibleColumnKeys = props.defaultVisibleColumnKeys,
|
|
24
|
-
onVisibleColumnKeysChange = props.onVisibleColumnKeysChange
|
|
24
|
+
onVisibleColumnKeysChange = props.onVisibleColumnKeysChange,
|
|
25
|
+
modalRenderInstanceId = props.modalRenderInstanceId;
|
|
25
26
|
var resolvedWithNoResults = status === 'resolved' && !responseItems.length;
|
|
26
27
|
var issueLikeDataTableView = (0, _react.useMemo)(function () {
|
|
27
28
|
return /*#__PURE__*/_react.default.createElement(_issueLikeTable.IssueLikeDataTableView, {
|
|
@@ -33,9 +34,10 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
|
|
|
33
34
|
visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
|
|
34
35
|
onNextPage: onNextPage,
|
|
35
36
|
onLoadDatasourceDetails: loadDatasourceDetails,
|
|
36
|
-
onVisibleColumnKeysChange: onVisibleColumnKeysChange
|
|
37
|
+
onVisibleColumnKeysChange: onVisibleColumnKeysChange,
|
|
38
|
+
parentContainerRenderInstanceId: modalRenderInstanceId
|
|
37
39
|
});
|
|
38
|
-
}, [columns, defaultVisibleColumnKeys, hasNextPage, loadDatasourceDetails, onNextPage, onVisibleColumnKeysChange, responseItems, status, visibleColumnKeys]);
|
|
40
|
+
}, [columns, defaultVisibleColumnKeys, hasNextPage, loadDatasourceDetails, onNextPage, onVisibleColumnKeysChange, responseItems, status, visibleColumnKeys, modalRenderInstanceId]);
|
|
39
41
|
if (status === 'rejected') {
|
|
40
42
|
return /*#__PURE__*/_react.default.createElement(_modalLoadingError.ModalLoadingError, null);
|
|
41
43
|
} else if (status === 'empty') {
|
|
@@ -8,6 +8,7 @@ exports.AssetsSearchContainer = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _react = require("@emotion/react");
|
|
10
10
|
var _form = _interopRequireDefault(require("@atlaskit/form"));
|
|
11
|
+
var _analytics = require("../../../analytics");
|
|
11
12
|
var _aqlSearchInput = require("./aql-search-input");
|
|
12
13
|
var _objectSchemaSelect = require("./object-schema-select");
|
|
13
14
|
var _styled = require("./styled");
|
|
@@ -21,10 +22,13 @@ var AssetsSearchContainer = exports.AssetsSearchContainer = function AssetsSearc
|
|
|
21
22
|
initialSearchData = props.initialSearchData,
|
|
22
23
|
modalTitle = props.modalTitle,
|
|
23
24
|
isSearching = props.isSearching;
|
|
25
|
+
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
26
|
+
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
24
27
|
var onFormSubmit = function onFormSubmit(searchFormValues) {
|
|
25
28
|
var aql = searchFormValues.aql,
|
|
26
29
|
objectSchema = searchFormValues.objectSchema;
|
|
27
30
|
if (objectSchema) {
|
|
31
|
+
fireEvent('ui.aqlEditor.searched', {});
|
|
28
32
|
// Pass the validated aql and object schema back to modal
|
|
29
33
|
onSearch(aql, objectSchema.value);
|
|
30
34
|
}
|
|
@@ -9,13 +9,16 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
9
9
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
10
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
13
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
var _react = require("
|
|
14
|
+
var _react = require("react");
|
|
15
|
+
var _react2 = require("@emotion/react");
|
|
14
16
|
var _debouncePromise = _interopRequireDefault(require("debounce-promise"));
|
|
15
17
|
var _reactIntlNext = require("react-intl-next");
|
|
16
18
|
var _form = require("@atlaskit/form");
|
|
17
19
|
var _select = require("@atlaskit/select");
|
|
18
20
|
var _constants = require("@atlaskit/theme/constants");
|
|
21
|
+
var _analytics = require("../../../../analytics");
|
|
19
22
|
var _useObjectSchemas2 = require("../../../../hooks/useObjectSchemas");
|
|
20
23
|
var _types = require("../../../../types/assets/types");
|
|
21
24
|
var _styled = require("../styled");
|
|
@@ -25,6 +28,11 @@ var _excluded = ["onChange", "onFocus"];
|
|
|
25
28
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
26
29
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /** @jsx jsx */
|
|
27
30
|
var SEARCH_DEBOUNCE_MS = exports.SEARCH_DEBOUNCE_MS = 350;
|
|
31
|
+
var mapObjectSchemasToOptions = function mapObjectSchemasToOptions(objectSchemas) {
|
|
32
|
+
return objectSchemas ? objectSchemas.map(function (objectSchema) {
|
|
33
|
+
return (0, _utils.objectSchemaToSelectOption)(objectSchema);
|
|
34
|
+
}) : [];
|
|
35
|
+
};
|
|
28
36
|
|
|
29
37
|
/**
|
|
30
38
|
* Rendering a `<Select>` in a `<Modal>` results in the select options getting cut off by the bottom of the modal and
|
|
@@ -45,34 +53,72 @@ var AssetsObjectSchemaSelect = exports.AssetsObjectSchemaSelect = function Asset
|
|
|
45
53
|
workspaceId = _ref.workspaceId,
|
|
46
54
|
_ref$classNamePrefix = _ref.classNamePrefix,
|
|
47
55
|
classNamePrefix = _ref$classNamePrefix === void 0 ? 'assets-datasource-modal--object-schema-select' : _ref$classNamePrefix;
|
|
56
|
+
var _useState = (0, _react.useState)(null),
|
|
57
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
58
|
+
defaultOptions = _useState2[0],
|
|
59
|
+
setDefaultOptions = _useState2[1];
|
|
60
|
+
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
61
|
+
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
48
62
|
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
49
63
|
formatMessage = _useIntl.formatMessage;
|
|
50
64
|
var _useObjectSchemas = (0, _useObjectSchemas2.useObjectSchemas)(workspaceId),
|
|
51
65
|
fetchObjectSchemas = _useObjectSchemas.fetchObjectSchemas,
|
|
52
66
|
objectSchemasLoading = _useObjectSchemas.objectSchemasLoading;
|
|
53
67
|
var selectedObjectSchema = value ? (0, _utils.objectSchemaToSelectOption)(value) : undefined;
|
|
68
|
+
(0, _react.useEffect)(function () {
|
|
69
|
+
var fetchInitialData = /*#__PURE__*/function () {
|
|
70
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
71
|
+
var _yield$fetchObjectSch, objectSchemas, totalObjectSchemas;
|
|
72
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
73
|
+
while (1) switch (_context.prev = _context.next) {
|
|
74
|
+
case 0:
|
|
75
|
+
_context.next = 2;
|
|
76
|
+
return fetchObjectSchemas('');
|
|
77
|
+
case 2:
|
|
78
|
+
_yield$fetchObjectSch = _context.sent;
|
|
79
|
+
objectSchemas = _yield$fetchObjectSch.objectSchemas;
|
|
80
|
+
totalObjectSchemas = _yield$fetchObjectSch.totalObjectSchemas;
|
|
81
|
+
// We only want to send modal ready event once after we've fetched the schema count
|
|
82
|
+
fireEvent('ui.modal.ready.datasource', {
|
|
83
|
+
schemasCount: totalObjectSchemas !== null && totalObjectSchemas !== void 0 ? totalObjectSchemas : 0,
|
|
84
|
+
instancesCount: null
|
|
85
|
+
});
|
|
86
|
+
setDefaultOptions(mapObjectSchemasToOptions(objectSchemas));
|
|
87
|
+
case 7:
|
|
88
|
+
case "end":
|
|
89
|
+
return _context.stop();
|
|
90
|
+
}
|
|
91
|
+
}, _callee);
|
|
92
|
+
}));
|
|
93
|
+
return function fetchInitialData() {
|
|
94
|
+
return _ref2.apply(this, arguments);
|
|
95
|
+
};
|
|
96
|
+
}();
|
|
97
|
+
if (defaultOptions === null) {
|
|
98
|
+
fetchInitialData();
|
|
99
|
+
}
|
|
100
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
|
+
}, []);
|
|
54
102
|
var loadOptions = /*#__PURE__*/function () {
|
|
55
|
-
var
|
|
56
|
-
var
|
|
57
|
-
return _regenerator.default.wrap(function
|
|
58
|
-
while (1) switch (
|
|
103
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(inputValue) {
|
|
104
|
+
var _yield$fetchObjectSch2, objectSchemas;
|
|
105
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
106
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
59
107
|
case 0:
|
|
60
|
-
|
|
108
|
+
_context2.next = 2;
|
|
61
109
|
return fetchObjectSchemas(inputValue);
|
|
62
110
|
case 2:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}) : [];
|
|
67
|
-
return _context.abrupt("return", options);
|
|
111
|
+
_yield$fetchObjectSch2 = _context2.sent;
|
|
112
|
+
objectSchemas = _yield$fetchObjectSch2.objectSchemas;
|
|
113
|
+
return _context2.abrupt("return", mapObjectSchemasToOptions(objectSchemas));
|
|
68
114
|
case 5:
|
|
69
115
|
case "end":
|
|
70
|
-
return
|
|
116
|
+
return _context2.stop();
|
|
71
117
|
}
|
|
72
|
-
},
|
|
118
|
+
}, _callee2);
|
|
73
119
|
}));
|
|
74
120
|
return function loadOptions(_x) {
|
|
75
|
-
return
|
|
121
|
+
return _ref3.apply(this, arguments);
|
|
76
122
|
};
|
|
77
123
|
}();
|
|
78
124
|
var debouncedLoadOptions = (0, _debouncePromise.default)(loadOptions, SEARCH_DEBOUNCE_MS);
|
|
@@ -82,23 +128,22 @@ var AssetsObjectSchemaSelect = exports.AssetsObjectSchemaSelect = function Asset
|
|
|
82
128
|
}
|
|
83
129
|
return undefined;
|
|
84
130
|
};
|
|
85
|
-
return (0,
|
|
131
|
+
return (0, _react2.jsx)(_styled.FieldContainer, null, (0, _react2.jsx)(_form.Field, {
|
|
86
132
|
name: _types.objectSchemaKey,
|
|
87
133
|
defaultValue: selectedObjectSchema,
|
|
88
134
|
validate: function validate(value) {
|
|
89
135
|
return validateSchema(value);
|
|
90
136
|
}
|
|
91
|
-
}, function (
|
|
92
|
-
var
|
|
93
|
-
_onChange =
|
|
94
|
-
onFocus =
|
|
95
|
-
restFieldProps = (0, _objectWithoutProperties2.default)(
|
|
96
|
-
return (0,
|
|
137
|
+
}, function (_ref4) {
|
|
138
|
+
var _ref4$fieldProps = _ref4.fieldProps,
|
|
139
|
+
_onChange = _ref4$fieldProps.onChange,
|
|
140
|
+
onFocus = _ref4$fieldProps.onFocus,
|
|
141
|
+
restFieldProps = (0, _objectWithoutProperties2.default)(_ref4$fieldProps, _excluded);
|
|
142
|
+
return (0, _react2.jsx)(_select.AsyncSelect, (0, _extends2.default)({
|
|
97
143
|
autoFocus: true,
|
|
98
144
|
classNamePrefix: classNamePrefix,
|
|
99
145
|
isLoading: objectSchemasLoading,
|
|
100
|
-
defaultOptions:
|
|
101
|
-
,
|
|
146
|
+
defaultOptions: defaultOptions !== null && defaultOptions !== void 0 ? defaultOptions : [],
|
|
102
147
|
isSearchable: true,
|
|
103
148
|
loadOptions: debouncedLoadOptions,
|
|
104
149
|
placeholder: formatMessage(_messages.objectSchemaSelectMessages.placeholder),
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.buildJQL = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
7
9
|
var _jqlAst = require("@atlaskit/jql-ast");
|
|
8
10
|
var fuzzySearchRegExp = /^"(.+)"$/;
|
|
9
11
|
var jiraIssueKeyRegExp = /[A-Z]+-\d+/;
|
|
@@ -21,7 +23,8 @@ var buildJQL = exports.buildJQL = function buildJQL(input) {
|
|
|
21
23
|
_input$orderDirection = input.orderDirection,
|
|
22
24
|
orderDirection = _input$orderDirection === void 0 ? _jqlAst.ORDER_BY_DIRECTION_DESC : _input$orderDirection,
|
|
23
25
|
_input$orderKey = input.orderKey,
|
|
24
|
-
orderKey = _input$orderKey === void 0 ? 'created' : _input$orderKey
|
|
26
|
+
orderKey = _input$orderKey === void 0 ? 'created' : _input$orderKey,
|
|
27
|
+
filterValues = input.filterValues;
|
|
25
28
|
var trimmedRawSearch = rawSearch.trim();
|
|
26
29
|
if (!query) {
|
|
27
30
|
return '';
|
|
@@ -38,12 +41,29 @@ var buildJQL = exports.buildJQL = function buildJQL(input) {
|
|
|
38
41
|
}
|
|
39
42
|
var orClause = _jqlAst.creators.compoundClause(_jqlAst.creators.compoundOperator(_jqlAst.COMPOUND_OPERATOR_OR), orClauseFields);
|
|
40
43
|
query.appendClause(orClause, _jqlAst.COMPOUND_OPERATOR_AND);
|
|
41
|
-
}
|
|
44
|
+
}
|
|
45
|
+
if (filterValues) {
|
|
46
|
+
Object.entries(filterValues).forEach(function (_ref) {
|
|
47
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
48
|
+
key = _ref2[0],
|
|
49
|
+
filterFieldValues = _ref2[1];
|
|
50
|
+
if (!key || filterFieldValues.length === 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
var filterInClause = _jqlAst.creators.terminalClause(_jqlAst.creators.field(key), _jqlAst.creators.operator(_jqlAst.OPERATOR_IN), _jqlAst.creators.listOperand(filterFieldValues.map(function (filterFieldValue) {
|
|
54
|
+
return _jqlAst.creators.valueOperand(filterFieldValue.value);
|
|
55
|
+
})));
|
|
56
|
+
query.appendClause(filterInClause, _jqlAst.COMPOUND_OPERATOR_AND);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (!trimmedRawSearch) {
|
|
42
60
|
var created = constructTerminalClause('created', _jqlAst.OPERATOR_GT_EQUALS, '-30d');
|
|
43
61
|
query.appendClause(created, _jqlAst.COMPOUND_OPERATOR_AND);
|
|
44
62
|
}
|
|
45
63
|
var orderField = _jqlAst.creators.orderByField(_jqlAst.creators.field(orderKey));
|
|
46
64
|
query.prependOrderField(orderField);
|
|
47
65
|
query.setOrderDirection(_jqlAst.creators.orderByDirection(orderDirection.toLowerCase() === 'asc' ? _jqlAst.ORDER_BY_DIRECTION_ASC : _jqlAst.ORDER_BY_DIRECTION_DESC));
|
|
48
|
-
return (0, _jqlAst.print)(jast
|
|
66
|
+
return (0, _jqlAst.print)(jast, {
|
|
67
|
+
printWidth: null // this ensures jql string is not broken to new line
|
|
68
|
+
});
|
|
49
69
|
};
|
|
@@ -225,7 +225,8 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
|
|
|
225
225
|
});
|
|
226
226
|
setAvailableSites(sortedAvailableSites);
|
|
227
227
|
fireEvent('ui.modal.ready.datasource', {
|
|
228
|
-
instancesCount: sortedAvailableSites.length
|
|
228
|
+
instancesCount: sortedAvailableSites.length,
|
|
229
|
+
schemasCount: null
|
|
229
230
|
});
|
|
230
231
|
case 6:
|
|
231
232
|
case "end":
|
|
@@ -6,6 +6,7 @@ export let DatasourceAction = /*#__PURE__*/function (DatasourceAction) {
|
|
|
6
6
|
DatasourceAction["QUERY_UPDATED"] = "query updated";
|
|
7
7
|
DatasourceAction["DISPLAY_VIEW_CHANGED"] = "display view changed";
|
|
8
8
|
DatasourceAction["NEXT_PAGE_SCROLLED"] = "next page scrolled";
|
|
9
|
+
DatasourceAction["SCHEMA_UPDATED"] = "schema updated";
|
|
9
10
|
return DatasourceAction;
|
|
10
11
|
}({});
|
|
11
12
|
export let DatasourceDisplay = /*#__PURE__*/function (DatasourceDisplay) {
|
|
@@ -3,15 +3,19 @@ import { fetchObjectSchemas } from '../services/cmdbService';
|
|
|
3
3
|
export const useObjectSchemas = workspaceId => {
|
|
4
4
|
const [loading, setLoading] = useState(false);
|
|
5
5
|
const [objectSchemas, setObjectSchemas] = useState();
|
|
6
|
+
const [totalObjectSchemas, setTotalObjectSchemas] = useState();
|
|
6
7
|
const [error, setError] = useState();
|
|
7
8
|
const request = useCallback(async query => {
|
|
8
9
|
setLoading(true);
|
|
9
10
|
setError(undefined);
|
|
10
11
|
let fetchedObjectSchemas;
|
|
12
|
+
let fetchTotalObjectSchemas;
|
|
11
13
|
try {
|
|
12
14
|
const fetchedObjectSchemasResponse = await fetchObjectSchemas(workspaceId, query);
|
|
13
15
|
setObjectSchemas(fetchedObjectSchemasResponse.values);
|
|
16
|
+
setTotalObjectSchemas(fetchedObjectSchemasResponse.total);
|
|
14
17
|
fetchedObjectSchemas = fetchedObjectSchemasResponse.values;
|
|
18
|
+
fetchTotalObjectSchemas = fetchedObjectSchemasResponse.total;
|
|
15
19
|
} catch (err) {
|
|
16
20
|
if (err instanceof Error) {
|
|
17
21
|
setError(err);
|
|
@@ -21,12 +25,16 @@ export const useObjectSchemas = workspaceId => {
|
|
|
21
25
|
} finally {
|
|
22
26
|
setLoading(false);
|
|
23
27
|
}
|
|
24
|
-
return
|
|
28
|
+
return {
|
|
29
|
+
objectSchemas: fetchedObjectSchemas,
|
|
30
|
+
totalObjectSchemas: fetchTotalObjectSchemas
|
|
31
|
+
};
|
|
25
32
|
}, [workspaceId]);
|
|
26
33
|
return {
|
|
27
34
|
objectSchemasLoading: loading,
|
|
28
35
|
objectSchemasError: error,
|
|
29
36
|
objectSchemas,
|
|
37
|
+
totalObjectSchemas,
|
|
30
38
|
fetchObjectSchemas: request
|
|
31
39
|
};
|
|
32
40
|
};
|