@atlaskit/link-datasource 1.16.4 → 1.16.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 +6 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +18 -11
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +4 -2
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.js +39 -2
- package/dist/cjs/ui/jira-issues-modal/basic-filters/ui/menu-list/index.js +6 -2
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +5 -1
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +4 -2
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.js +33 -2
- package/dist/es2019/ui/jira-issues-modal/basic-filters/ui/menu-list/index.js +5 -1
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.js +18 -11
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/async-popup-select/index.js +4 -2
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.js +36 -2
- package/dist/esm/ui/jira-issues-modal/basic-filters/ui/menu-list/index.js +6 -2
- package/dist/types/analytics/generated/analytics.types.d.ts +8 -1
- package/dist/types/services/cmdbService.utils.d.ts +1 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +1 -0
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.d.ts +6 -1
- package/dist/types/ui/jira-issues-modal/basic-filters/ui/menu-list/index.d.ts +3 -1
- package/dist/types-ts4.5/analytics/generated/analytics.types.d.ts +8 -1
- package/dist/types-ts4.5/services/cmdbService.utils.d.ts +1 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/hooks/useFilterOptions.d.ts +1 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/menu-list/errorMessage.d.ts +6 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/basic-filters/ui/menu-list/index.d.ts +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 1.16.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#43103](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/43103) [`effb3f0234c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/effb3f0234c) - Add ui analytics event when error UI is displayed for basic filter search.
|
|
8
|
+
|
|
3
9
|
## 1.16.4
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -27,10 +27,14 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
|
|
|
27
27
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
28
28
|
status = _useState6[0],
|
|
29
29
|
setStatus = _useState6[1];
|
|
30
|
-
var _useState7 = (0, _react.useState)(
|
|
30
|
+
var _useState7 = (0, _react.useState)([]),
|
|
31
31
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
errors = _useState8[0],
|
|
33
|
+
setErrors = _useState8[1];
|
|
34
|
+
var _useState9 = (0, _react.useState)(undefined),
|
|
35
|
+
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
36
|
+
nextPageCursor = _useState10[0],
|
|
37
|
+
setNextPageCursor = _useState10[1];
|
|
34
38
|
var initialData = (0, _react.useRef)();
|
|
35
39
|
var _useBasicFilterAGG = (0, _useBasicFilterAGG2.useBasicFilterAGG)(),
|
|
36
40
|
getFieldValues = _useBasicFilterAGG.getFieldValues;
|
|
@@ -73,12 +77,13 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
|
|
|
73
77
|
case 13:
|
|
74
78
|
response = _context.t0;
|
|
75
79
|
if (!(response.errors && response.errors.length > 0)) {
|
|
76
|
-
_context.next =
|
|
80
|
+
_context.next = 18;
|
|
77
81
|
break;
|
|
78
82
|
}
|
|
79
83
|
setStatus('rejected');
|
|
84
|
+
setErrors(response.errors);
|
|
80
85
|
return _context.abrupt("return");
|
|
81
|
-
case
|
|
86
|
+
case 18:
|
|
82
87
|
if (isNewSearch) {
|
|
83
88
|
setFilterOptions((0, _transformers.mapFieldValuesToFilterOptions)(response));
|
|
84
89
|
if (isRequestLikeInitialSearch) {
|
|
@@ -94,23 +99,25 @@ var useFilterOptions = exports.useFilterOptions = function useFilterOptions(_ref
|
|
|
94
99
|
setTotalCount((0, _transformers.mapFieldValuesToTotalCount)(response));
|
|
95
100
|
setNextPageCursor((0, _transformers.mapFieldValuesToPageCursor)(response));
|
|
96
101
|
setStatus('resolved');
|
|
97
|
-
_context.next =
|
|
102
|
+
_context.next = 28;
|
|
98
103
|
break;
|
|
99
|
-
case
|
|
100
|
-
_context.prev =
|
|
104
|
+
case 24:
|
|
105
|
+
_context.prev = 24;
|
|
101
106
|
_context.t1 = _context["catch"](5);
|
|
107
|
+
setErrors([_context.t1]);
|
|
102
108
|
setStatus('rejected');
|
|
103
|
-
case
|
|
109
|
+
case 28:
|
|
104
110
|
case "end":
|
|
105
111
|
return _context.stop();
|
|
106
112
|
}
|
|
107
|
-
}, _callee, null, [[5,
|
|
113
|
+
}, _callee, null, [[5, 24]]);
|
|
108
114
|
})), [cloudId, filterOptions, filterType, getFieldValues]);
|
|
109
115
|
return {
|
|
110
116
|
filterOptions: filterOptions,
|
|
111
117
|
fetchFilterOptions: fetchFilterOptions,
|
|
112
118
|
totalCount: totalCount,
|
|
113
119
|
pageCursor: nextPageCursor,
|
|
114
|
-
status: status
|
|
120
|
+
status: status,
|
|
121
|
+
errors: status === 'rejected' ? errors : []
|
|
115
122
|
};
|
|
116
123
|
};
|
|
@@ -58,7 +58,8 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
58
58
|
fetchFilterOptions = _useFilterOptions.fetchFilterOptions,
|
|
59
59
|
totalCount = _useFilterOptions.totalCount,
|
|
60
60
|
status = _useFilterOptions.status,
|
|
61
|
-
pageCursor = _useFilterOptions.pageCursor
|
|
61
|
+
pageCursor = _useFilterOptions.pageCursor,
|
|
62
|
+
errors = _useFilterOptions.errors;
|
|
62
63
|
var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function (searchString) {
|
|
63
64
|
fetchFilterOptions({
|
|
64
65
|
searchString: searchString
|
|
@@ -152,7 +153,8 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
152
153
|
isLoading: isLoading,
|
|
153
154
|
isLoadingMore: isLoadingMore,
|
|
154
155
|
showMore: shouldDisplayShowMoreButton,
|
|
155
|
-
handleShowMore: handleShowMore
|
|
156
|
+
handleShowMore: handleShowMore,
|
|
157
|
+
errors: errors
|
|
156
158
|
}));
|
|
157
159
|
},
|
|
158
160
|
DropdownIndicator: _dropdownIndicator.default,
|
|
@@ -1,16 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
8
|
-
var
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _useDebounce = require("use-debounce");
|
|
9
12
|
var _error = _interopRequireDefault(require("@atlaskit/icon/glyph/error"));
|
|
10
13
|
var _colors = require("@atlaskit/theme/colors");
|
|
14
|
+
var _analytics = require("../../../../../analytics");
|
|
15
|
+
var _asyncPopupSelect = require("../async-popup-select");
|
|
11
16
|
var _messages = require("./messages");
|
|
12
17
|
var _selectMessage = _interopRequireDefault(require("./selectMessage"));
|
|
13
|
-
var
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
20
|
+
var getErrorReasonType = function getErrorReasonType(errors) {
|
|
21
|
+
var _ref = errors || [],
|
|
22
|
+
_ref2 = (0, _slicedToArray2.default)(_ref, 1),
|
|
23
|
+
error = _ref2[0];
|
|
24
|
+
if (error instanceof Error) {
|
|
25
|
+
return 'network';
|
|
26
|
+
}
|
|
27
|
+
if (errors && errors.length > 0) {
|
|
28
|
+
return 'agg';
|
|
29
|
+
}
|
|
30
|
+
return 'unknown';
|
|
31
|
+
};
|
|
32
|
+
var CustomErrorMessage = function CustomErrorMessage(_ref3) {
|
|
33
|
+
var filterType = _ref3.filterType,
|
|
34
|
+
errors = _ref3.errors;
|
|
35
|
+
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
36
|
+
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Debounce is required because our search is debounced
|
|
40
|
+
* ref: ./noOptionsMessage.tsx
|
|
41
|
+
*/
|
|
42
|
+
var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function () {
|
|
43
|
+
fireEvent('ui.error.shown.basicSearchDropdown', {
|
|
44
|
+
filterType: filterType,
|
|
45
|
+
reason: getErrorReasonType(errors)
|
|
46
|
+
});
|
|
47
|
+
}, _asyncPopupSelect.SEARCH_DEBOUNCE_MS),
|
|
48
|
+
_useDebouncedCallback2 = (0, _slicedToArray2.default)(_useDebouncedCallback, 1),
|
|
49
|
+
debouncedAnalyticsCallback = _useDebouncedCallback2[0];
|
|
50
|
+
(0, _react.useEffect)(debouncedAnalyticsCallback, [debouncedAnalyticsCallback]);
|
|
14
51
|
return /*#__PURE__*/_react.default.createElement(_selectMessage.default, {
|
|
15
52
|
icon: /*#__PURE__*/_react.default.createElement(_error.default, {
|
|
16
53
|
primaryColor: "var(--ds-icon, ".concat(_colors.N500, ")"),
|
|
@@ -14,13 +14,14 @@ var _showMoreButton = _interopRequireDefault(require("../async-popup-select/show
|
|
|
14
14
|
var _errorMessage = _interopRequireDefault(require("./errorMessage"));
|
|
15
15
|
var _loadingMessage = _interopRequireDefault(require("./loadingMessage"));
|
|
16
16
|
var _noOptionsMessage = _interopRequireDefault(require("./noOptionsMessage"));
|
|
17
|
-
var _excluded = ["filterType", "isLoading", "isLoadingMore", "isError", "isEmpty", "showMore", "handleShowMore", "children"];
|
|
17
|
+
var _excluded = ["filterType", "isLoading", "isLoadingMore", "isError", "isEmpty", "errors", "showMore", "handleShowMore", "children"];
|
|
18
18
|
var CustomMenuList = function CustomMenuList(_ref) {
|
|
19
19
|
var filterType = _ref.filterType,
|
|
20
20
|
isLoading = _ref.isLoading,
|
|
21
21
|
isLoadingMore = _ref.isLoadingMore,
|
|
22
22
|
isError = _ref.isError,
|
|
23
23
|
isEmpty = _ref.isEmpty,
|
|
24
|
+
errors = _ref.errors,
|
|
24
25
|
showMore = _ref.showMore,
|
|
25
26
|
handleShowMore = _ref.handleShowMore,
|
|
26
27
|
children = _ref.children,
|
|
@@ -39,7 +40,10 @@ var CustomMenuList = function CustomMenuList(_ref) {
|
|
|
39
40
|
return /*#__PURE__*/_react.default.createElement(_loadingMessage.default, null);
|
|
40
41
|
}
|
|
41
42
|
if (isError) {
|
|
42
|
-
return /*#__PURE__*/_react.default.createElement(_errorMessage.default,
|
|
43
|
+
return /*#__PURE__*/_react.default.createElement(_errorMessage.default, {
|
|
44
|
+
filterType: filterType,
|
|
45
|
+
errors: errors
|
|
46
|
+
});
|
|
43
47
|
}
|
|
44
48
|
if (isEmpty) {
|
|
45
49
|
return /*#__PURE__*/_react.default.createElement(_noOptionsMessage.default, {
|
|
@@ -8,6 +8,7 @@ export const useFilterOptions = ({
|
|
|
8
8
|
const [filterOptions, setFilterOptions] = useState([]);
|
|
9
9
|
const [totalCount, setTotalCount] = useState(0);
|
|
10
10
|
const [status, setStatus] = useState('empty');
|
|
11
|
+
const [errors, setErrors] = useState([]);
|
|
11
12
|
const [nextPageCursor, setNextPageCursor] = useState(undefined);
|
|
12
13
|
const initialData = useRef();
|
|
13
14
|
const {
|
|
@@ -33,6 +34,7 @@ export const useFilterOptions = ({
|
|
|
33
34
|
});
|
|
34
35
|
if (response.errors && response.errors.length > 0) {
|
|
35
36
|
setStatus('rejected');
|
|
37
|
+
setErrors(response.errors);
|
|
36
38
|
return;
|
|
37
39
|
}
|
|
38
40
|
if (isNewSearch) {
|
|
@@ -51,6 +53,7 @@ export const useFilterOptions = ({
|
|
|
51
53
|
setNextPageCursor(mapFieldValuesToPageCursor(response));
|
|
52
54
|
setStatus('resolved');
|
|
53
55
|
} catch (error) {
|
|
56
|
+
setErrors([error]);
|
|
54
57
|
setStatus('rejected');
|
|
55
58
|
}
|
|
56
59
|
}, [cloudId, filterOptions, filterType, getFieldValues]);
|
|
@@ -59,6 +62,7 @@ export const useFilterOptions = ({
|
|
|
59
62
|
fetchFilterOptions,
|
|
60
63
|
totalCount,
|
|
61
64
|
pageCursor: nextPageCursor,
|
|
62
|
-
status
|
|
65
|
+
status,
|
|
66
|
+
errors: status === 'rejected' ? errors : []
|
|
63
67
|
};
|
|
64
68
|
};
|
|
@@ -32,7 +32,8 @@ const AsyncPopupSelect = ({
|
|
|
32
32
|
fetchFilterOptions,
|
|
33
33
|
totalCount,
|
|
34
34
|
status,
|
|
35
|
-
pageCursor
|
|
35
|
+
pageCursor,
|
|
36
|
+
errors
|
|
36
37
|
} = useFilterOptions({
|
|
37
38
|
filterType,
|
|
38
39
|
cloudId
|
|
@@ -114,7 +115,8 @@ const AsyncPopupSelect = ({
|
|
|
114
115
|
isLoading: isLoading,
|
|
115
116
|
isLoadingMore: isLoadingMore,
|
|
116
117
|
showMore: shouldDisplayShowMoreButton,
|
|
117
|
-
handleShowMore: handleShowMore
|
|
118
|
+
handleShowMore: handleShowMore,
|
|
119
|
+
errors: errors
|
|
118
120
|
})),
|
|
119
121
|
DropdownIndicator: CustomDropdownIndicator,
|
|
120
122
|
LoadingIndicator: undefined,
|
|
@@ -1,9 +1,40 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import { useDebouncedCallback } from 'use-debounce';
|
|
2
3
|
import ErrorIcon from '@atlaskit/icon/glyph/error';
|
|
3
4
|
import { N500 } from '@atlaskit/theme/colors';
|
|
5
|
+
import { useDatasourceAnalyticsEvents } from '../../../../../analytics';
|
|
6
|
+
import { SEARCH_DEBOUNCE_MS } from '../async-popup-select';
|
|
4
7
|
import { asyncPopupSelectMessages } from './messages';
|
|
5
8
|
import CustomSelectMessage from './selectMessage';
|
|
6
|
-
const
|
|
9
|
+
const getErrorReasonType = errors => {
|
|
10
|
+
const [error] = errors || [];
|
|
11
|
+
if (error instanceof Error) {
|
|
12
|
+
return 'network';
|
|
13
|
+
}
|
|
14
|
+
if (errors && errors.length > 0) {
|
|
15
|
+
return 'agg';
|
|
16
|
+
}
|
|
17
|
+
return 'unknown';
|
|
18
|
+
};
|
|
19
|
+
const CustomErrorMessage = ({
|
|
20
|
+
filterType,
|
|
21
|
+
errors
|
|
22
|
+
}) => {
|
|
23
|
+
const {
|
|
24
|
+
fireEvent
|
|
25
|
+
} = useDatasourceAnalyticsEvents();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Debounce is required because our search is debounced
|
|
29
|
+
* ref: ./noOptionsMessage.tsx
|
|
30
|
+
*/
|
|
31
|
+
const [debouncedAnalyticsCallback] = useDebouncedCallback(() => {
|
|
32
|
+
fireEvent('ui.error.shown.basicSearchDropdown', {
|
|
33
|
+
filterType,
|
|
34
|
+
reason: getErrorReasonType(errors)
|
|
35
|
+
});
|
|
36
|
+
}, SEARCH_DEBOUNCE_MS);
|
|
37
|
+
useEffect(debouncedAnalyticsCallback, [debouncedAnalyticsCallback]);
|
|
7
38
|
return /*#__PURE__*/React.createElement(CustomSelectMessage, {
|
|
8
39
|
icon: /*#__PURE__*/React.createElement(ErrorIcon, {
|
|
9
40
|
primaryColor: `var(--ds-icon, ${N500})`,
|
|
@@ -12,6 +12,7 @@ const CustomMenuList = ({
|
|
|
12
12
|
isLoadingMore,
|
|
13
13
|
isError,
|
|
14
14
|
isEmpty,
|
|
15
|
+
errors,
|
|
15
16
|
showMore,
|
|
16
17
|
handleShowMore,
|
|
17
18
|
children,
|
|
@@ -29,7 +30,10 @@ const CustomMenuList = ({
|
|
|
29
30
|
return /*#__PURE__*/React.createElement(CustomDropdownLoadingMessage, null);
|
|
30
31
|
}
|
|
31
32
|
if (isError) {
|
|
32
|
-
return /*#__PURE__*/React.createElement(CustomErrorMessage,
|
|
33
|
+
return /*#__PURE__*/React.createElement(CustomErrorMessage, {
|
|
34
|
+
filterType: filterType,
|
|
35
|
+
errors: errors
|
|
36
|
+
});
|
|
33
37
|
}
|
|
34
38
|
if (isEmpty) {
|
|
35
39
|
return /*#__PURE__*/React.createElement(CustomNoOptionsMessage, {
|
|
@@ -20,10 +20,14 @@ export var useFilterOptions = function useFilterOptions(_ref) {
|
|
|
20
20
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
21
21
|
status = _useState6[0],
|
|
22
22
|
setStatus = _useState6[1];
|
|
23
|
-
var _useState7 = useState(
|
|
23
|
+
var _useState7 = useState([]),
|
|
24
24
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
errors = _useState8[0],
|
|
26
|
+
setErrors = _useState8[1];
|
|
27
|
+
var _useState9 = useState(undefined),
|
|
28
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
29
|
+
nextPageCursor = _useState10[0],
|
|
30
|
+
setNextPageCursor = _useState10[1];
|
|
27
31
|
var initialData = useRef();
|
|
28
32
|
var _useBasicFilterAGG = useBasicFilterAGG(),
|
|
29
33
|
getFieldValues = _useBasicFilterAGG.getFieldValues;
|
|
@@ -66,12 +70,13 @@ export var useFilterOptions = function useFilterOptions(_ref) {
|
|
|
66
70
|
case 13:
|
|
67
71
|
response = _context.t0;
|
|
68
72
|
if (!(response.errors && response.errors.length > 0)) {
|
|
69
|
-
_context.next =
|
|
73
|
+
_context.next = 18;
|
|
70
74
|
break;
|
|
71
75
|
}
|
|
72
76
|
setStatus('rejected');
|
|
77
|
+
setErrors(response.errors);
|
|
73
78
|
return _context.abrupt("return");
|
|
74
|
-
case
|
|
79
|
+
case 18:
|
|
75
80
|
if (isNewSearch) {
|
|
76
81
|
setFilterOptions(mapFieldValuesToFilterOptions(response));
|
|
77
82
|
if (isRequestLikeInitialSearch) {
|
|
@@ -87,23 +92,25 @@ export var useFilterOptions = function useFilterOptions(_ref) {
|
|
|
87
92
|
setTotalCount(mapFieldValuesToTotalCount(response));
|
|
88
93
|
setNextPageCursor(mapFieldValuesToPageCursor(response));
|
|
89
94
|
setStatus('resolved');
|
|
90
|
-
_context.next =
|
|
95
|
+
_context.next = 28;
|
|
91
96
|
break;
|
|
92
|
-
case
|
|
93
|
-
_context.prev =
|
|
97
|
+
case 24:
|
|
98
|
+
_context.prev = 24;
|
|
94
99
|
_context.t1 = _context["catch"](5);
|
|
100
|
+
setErrors([_context.t1]);
|
|
95
101
|
setStatus('rejected');
|
|
96
|
-
case
|
|
102
|
+
case 28:
|
|
97
103
|
case "end":
|
|
98
104
|
return _context.stop();
|
|
99
105
|
}
|
|
100
|
-
}, _callee, null, [[5,
|
|
106
|
+
}, _callee, null, [[5, 24]]);
|
|
101
107
|
})), [cloudId, filterOptions, filterType, getFieldValues]);
|
|
102
108
|
return {
|
|
103
109
|
filterOptions: filterOptions,
|
|
104
110
|
fetchFilterOptions: fetchFilterOptions,
|
|
105
111
|
totalCount: totalCount,
|
|
106
112
|
pageCursor: nextPageCursor,
|
|
107
|
-
status: status
|
|
113
|
+
status: status,
|
|
114
|
+
errors: status === 'rejected' ? errors : []
|
|
108
115
|
};
|
|
109
116
|
};
|
|
@@ -48,7 +48,8 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
48
48
|
fetchFilterOptions = _useFilterOptions.fetchFilterOptions,
|
|
49
49
|
totalCount = _useFilterOptions.totalCount,
|
|
50
50
|
status = _useFilterOptions.status,
|
|
51
|
-
pageCursor = _useFilterOptions.pageCursor
|
|
51
|
+
pageCursor = _useFilterOptions.pageCursor,
|
|
52
|
+
errors = _useFilterOptions.errors;
|
|
52
53
|
var _useDebouncedCallback = useDebouncedCallback(function (searchString) {
|
|
53
54
|
fetchFilterOptions({
|
|
54
55
|
searchString: searchString
|
|
@@ -142,7 +143,8 @@ var AsyncPopupSelect = function AsyncPopupSelect(_ref) {
|
|
|
142
143
|
isLoading: isLoading,
|
|
143
144
|
isLoadingMore: isLoadingMore,
|
|
144
145
|
showMore: shouldDisplayShowMoreButton,
|
|
145
|
-
handleShowMore: handleShowMore
|
|
146
|
+
handleShowMore: handleShowMore,
|
|
147
|
+
errors: errors
|
|
146
148
|
}));
|
|
147
149
|
},
|
|
148
150
|
DropdownIndicator: CustomDropdownIndicator,
|
|
@@ -1,9 +1,43 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import React, { useEffect } from 'react';
|
|
3
|
+
import { useDebouncedCallback } from 'use-debounce';
|
|
2
4
|
import ErrorIcon from '@atlaskit/icon/glyph/error';
|
|
3
5
|
import { N500 } from '@atlaskit/theme/colors';
|
|
6
|
+
import { useDatasourceAnalyticsEvents } from '../../../../../analytics';
|
|
7
|
+
import { SEARCH_DEBOUNCE_MS } from '../async-popup-select';
|
|
4
8
|
import { asyncPopupSelectMessages } from './messages';
|
|
5
9
|
import CustomSelectMessage from './selectMessage';
|
|
6
|
-
var
|
|
10
|
+
var getErrorReasonType = function getErrorReasonType(errors) {
|
|
11
|
+
var _ref = errors || [],
|
|
12
|
+
_ref2 = _slicedToArray(_ref, 1),
|
|
13
|
+
error = _ref2[0];
|
|
14
|
+
if (error instanceof Error) {
|
|
15
|
+
return 'network';
|
|
16
|
+
}
|
|
17
|
+
if (errors && errors.length > 0) {
|
|
18
|
+
return 'agg';
|
|
19
|
+
}
|
|
20
|
+
return 'unknown';
|
|
21
|
+
};
|
|
22
|
+
var CustomErrorMessage = function CustomErrorMessage(_ref3) {
|
|
23
|
+
var filterType = _ref3.filterType,
|
|
24
|
+
errors = _ref3.errors;
|
|
25
|
+
var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
|
|
26
|
+
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Debounce is required because our search is debounced
|
|
30
|
+
* ref: ./noOptionsMessage.tsx
|
|
31
|
+
*/
|
|
32
|
+
var _useDebouncedCallback = useDebouncedCallback(function () {
|
|
33
|
+
fireEvent('ui.error.shown.basicSearchDropdown', {
|
|
34
|
+
filterType: filterType,
|
|
35
|
+
reason: getErrorReasonType(errors)
|
|
36
|
+
});
|
|
37
|
+
}, SEARCH_DEBOUNCE_MS),
|
|
38
|
+
_useDebouncedCallback2 = _slicedToArray(_useDebouncedCallback, 1),
|
|
39
|
+
debouncedAnalyticsCallback = _useDebouncedCallback2[0];
|
|
40
|
+
useEffect(debouncedAnalyticsCallback, [debouncedAnalyticsCallback]);
|
|
7
41
|
return /*#__PURE__*/React.createElement(CustomSelectMessage, {
|
|
8
42
|
icon: /*#__PURE__*/React.createElement(ErrorIcon, {
|
|
9
43
|
primaryColor: "var(--ds-icon, ".concat(N500, ")"),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
|
-
var _excluded = ["filterType", "isLoading", "isLoadingMore", "isError", "isEmpty", "showMore", "handleShowMore", "children"];
|
|
2
|
+
var _excluded = ["filterType", "isLoading", "isLoadingMore", "isError", "isEmpty", "errors", "showMore", "handleShowMore", "children"];
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { Flex } from '@atlaskit/primitives';
|
|
5
5
|
import { components } from '@atlaskit/select';
|
|
@@ -14,6 +14,7 @@ var CustomMenuList = function CustomMenuList(_ref) {
|
|
|
14
14
|
isLoadingMore = _ref.isLoadingMore,
|
|
15
15
|
isError = _ref.isError,
|
|
16
16
|
isEmpty = _ref.isEmpty,
|
|
17
|
+
errors = _ref.errors,
|
|
17
18
|
showMore = _ref.showMore,
|
|
18
19
|
handleShowMore = _ref.handleShowMore,
|
|
19
20
|
children = _ref.children,
|
|
@@ -32,7 +33,10 @@ var CustomMenuList = function CustomMenuList(_ref) {
|
|
|
32
33
|
return /*#__PURE__*/React.createElement(CustomDropdownLoadingMessage, null);
|
|
33
34
|
}
|
|
34
35
|
if (isError) {
|
|
35
|
-
return /*#__PURE__*/React.createElement(CustomErrorMessage,
|
|
36
|
+
return /*#__PURE__*/React.createElement(CustomErrorMessage, {
|
|
37
|
+
filterType: filterType,
|
|
38
|
+
errors: errors
|
|
39
|
+
});
|
|
36
40
|
}
|
|
37
41
|
if (isEmpty) {
|
|
38
42
|
return /*#__PURE__*/React.createElement(CustomNoOptionsMessage, {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::ddaee20abebe8b4891d75f243120dce8>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen link-datasource
|
|
8
8
|
*/
|
|
9
9
|
export type PackageMetaDataType = {
|
|
@@ -85,6 +85,10 @@ export type LinkViewedCountAttributesType = {
|
|
|
85
85
|
export type EmptyResultShownBasicSearchDropdownAttributesType = {
|
|
86
86
|
filterType: 'project' | 'assignee' | 'issuetype' | 'status';
|
|
87
87
|
};
|
|
88
|
+
export type ErrorShownBasicSearchDropdownAttributesType = {
|
|
89
|
+
filterType: 'project' | 'assignee' | 'issuetype' | 'status';
|
|
90
|
+
reason: 'agg' | 'network' | 'unknown';
|
|
91
|
+
};
|
|
88
92
|
export type AqlEditorSearchedAttributesType = {};
|
|
89
93
|
export type AnalyticsEventAttributes = {
|
|
90
94
|
/**
|
|
@@ -138,6 +142,9 @@ export type AnalyticsEventAttributes = {
|
|
|
138
142
|
/**
|
|
139
143
|
* Fired when the basic filter search results are empty */
|
|
140
144
|
'ui.emptyResult.shown.basicSearchDropdown': EmptyResultShownBasicSearchDropdownAttributesType;
|
|
145
|
+
/**
|
|
146
|
+
* Fired when the basic filter search dropdown shows an error UI */
|
|
147
|
+
'ui.error.shown.basicSearchDropdown': ErrorShownBasicSearchDropdownAttributesType;
|
|
141
148
|
/**
|
|
142
149
|
* Fired when search is initiated via the search icon or enter key press for aql editor input field. */
|
|
143
150
|
'ui.aqlEditor.searched': AqlEditorSearchedAttributesType;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const mapFetchErrors: (error: any) => Error;
|
|
2
|
-
export declare const getStatusCodeGroup: (error: Error) => "
|
|
2
|
+
export declare const getStatusCodeGroup: (error: Error) => "unknown" | "1xx" | "3xx" | "4xx" | "5xx";
|
|
3
3
|
export declare class PermissionError extends Error {
|
|
4
4
|
constructor(message: string);
|
|
5
5
|
}
|
|
@@ -13,6 +13,7 @@ export interface FilterOptionsState {
|
|
|
13
13
|
totalCount: number;
|
|
14
14
|
pageCursor?: string;
|
|
15
15
|
status: 'empty' | 'loading' | 'resolved' | 'rejected' | 'loadingMore';
|
|
16
|
+
errors: unknown[];
|
|
16
17
|
}
|
|
17
18
|
export declare const useFilterOptions: ({ filterType, cloudId, }: FilterOptionsProps) => FilterOptionsState;
|
|
18
19
|
export {};
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
2
|
+
import { FilterOptionsState } from '../../hooks/useFilterOptions';
|
|
3
|
+
import { BasicFilterFieldType } from '../../types';
|
|
4
|
+
declare const CustomErrorMessage: ({ filterType, errors, }: {
|
|
5
|
+
filterType: BasicFilterFieldType;
|
|
6
|
+
errors?: unknown[] | undefined;
|
|
7
|
+
}) => JSX.Element;
|
|
3
8
|
export default CustomErrorMessage;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { MenuListComponentProps } from '@atlaskit/select';
|
|
3
|
+
import { FilterOptionsState } from '../../hooks/useFilterOptions';
|
|
3
4
|
import { BasicFilterFieldType, SelectOption } from '../../types';
|
|
4
5
|
type CustomProps = {
|
|
5
6
|
isError?: boolean;
|
|
@@ -9,6 +10,7 @@ type CustomProps = {
|
|
|
9
10
|
showMore?: boolean;
|
|
10
11
|
handleShowMore: () => void;
|
|
11
12
|
filterType: BasicFilterFieldType;
|
|
13
|
+
errors?: FilterOptionsState['errors'];
|
|
12
14
|
};
|
|
13
|
-
declare const CustomMenuList: ({ filterType, isLoading, isLoadingMore, isError, isEmpty, showMore, handleShowMore, children, ...props }: MenuListComponentProps<SelectOption, true> & CustomProps) => JSX.Element;
|
|
15
|
+
declare const CustomMenuList: ({ filterType, isLoading, isLoadingMore, isError, isEmpty, errors, showMore, handleShowMore, children, ...props }: MenuListComponentProps<SelectOption, true> & CustomProps) => JSX.Element;
|
|
14
16
|
export default CustomMenuList;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Generates Typescript types for analytics events from analytics.spec.yaml
|
|
5
5
|
*
|
|
6
|
-
* @codegen <<SignedSource::
|
|
6
|
+
* @codegen <<SignedSource::ddaee20abebe8b4891d75f243120dce8>>
|
|
7
7
|
* @codegenCommand yarn workspace @atlassian/analytics-tooling run analytics:codegen link-datasource
|
|
8
8
|
*/
|
|
9
9
|
export type PackageMetaDataType = {
|
|
@@ -85,6 +85,10 @@ export type LinkViewedCountAttributesType = {
|
|
|
85
85
|
export type EmptyResultShownBasicSearchDropdownAttributesType = {
|
|
86
86
|
filterType: 'project' | 'assignee' | 'issuetype' | 'status';
|
|
87
87
|
};
|
|
88
|
+
export type ErrorShownBasicSearchDropdownAttributesType = {
|
|
89
|
+
filterType: 'project' | 'assignee' | 'issuetype' | 'status';
|
|
90
|
+
reason: 'agg' | 'network' | 'unknown';
|
|
91
|
+
};
|
|
88
92
|
export type AqlEditorSearchedAttributesType = {};
|
|
89
93
|
export type AnalyticsEventAttributes = {
|
|
90
94
|
/**
|
|
@@ -138,6 +142,9 @@ export type AnalyticsEventAttributes = {
|
|
|
138
142
|
/**
|
|
139
143
|
* Fired when the basic filter search results are empty */
|
|
140
144
|
'ui.emptyResult.shown.basicSearchDropdown': EmptyResultShownBasicSearchDropdownAttributesType;
|
|
145
|
+
/**
|
|
146
|
+
* Fired when the basic filter search dropdown shows an error UI */
|
|
147
|
+
'ui.error.shown.basicSearchDropdown': ErrorShownBasicSearchDropdownAttributesType;
|
|
141
148
|
/**
|
|
142
149
|
* Fired when search is initiated via the search icon or enter key press for aql editor input field. */
|
|
143
150
|
'ui.aqlEditor.searched': AqlEditorSearchedAttributesType;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const mapFetchErrors: (error: any) => Error;
|
|
2
|
-
export declare const getStatusCodeGroup: (error: Error) => "
|
|
2
|
+
export declare const getStatusCodeGroup: (error: Error) => "unknown" | "1xx" | "3xx" | "4xx" | "5xx";
|
|
3
3
|
export declare class PermissionError extends Error {
|
|
4
4
|
constructor(message: string);
|
|
5
5
|
}
|
|
@@ -13,6 +13,7 @@ export interface FilterOptionsState {
|
|
|
13
13
|
totalCount: number;
|
|
14
14
|
pageCursor?: string;
|
|
15
15
|
status: 'empty' | 'loading' | 'resolved' | 'rejected' | 'loadingMore';
|
|
16
|
+
errors: unknown[];
|
|
16
17
|
}
|
|
17
18
|
export declare const useFilterOptions: ({ filterType, cloudId, }: FilterOptionsProps) => FilterOptionsState;
|
|
18
19
|
export {};
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
2
|
+
import { FilterOptionsState } from '../../hooks/useFilterOptions';
|
|
3
|
+
import { BasicFilterFieldType } from '../../types';
|
|
4
|
+
declare const CustomErrorMessage: ({ filterType, errors, }: {
|
|
5
|
+
filterType: BasicFilterFieldType;
|
|
6
|
+
errors?: unknown[] | undefined;
|
|
7
|
+
}) => JSX.Element;
|
|
3
8
|
export default CustomErrorMessage;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { MenuListComponentProps } from '@atlaskit/select';
|
|
3
|
+
import { FilterOptionsState } from '../../hooks/useFilterOptions';
|
|
3
4
|
import { BasicFilterFieldType, SelectOption } from '../../types';
|
|
4
5
|
type CustomProps = {
|
|
5
6
|
isError?: boolean;
|
|
@@ -9,6 +10,7 @@ type CustomProps = {
|
|
|
9
10
|
showMore?: boolean;
|
|
10
11
|
handleShowMore: () => void;
|
|
11
12
|
filterType: BasicFilterFieldType;
|
|
13
|
+
errors?: FilterOptionsState['errors'];
|
|
12
14
|
};
|
|
13
|
-
declare const CustomMenuList: ({ filterType, isLoading, isLoadingMore, isError, isEmpty, showMore, handleShowMore, children, ...props }: MenuListComponentProps<SelectOption, true> & CustomProps) => JSX.Element;
|
|
15
|
+
declare const CustomMenuList: ({ filterType, isLoading, isLoadingMore, isError, isEmpty, errors, showMore, handleShowMore, children, ...props }: MenuListComponentProps<SelectOption, true> & CustomProps) => JSX.Element;
|
|
14
16
|
export default CustomMenuList;
|