@atlaskit/link-datasource 2.11.5 → 2.11.7
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 +20 -0
- package/dist/cjs/hooks/useDatasourceTableFlag.js +19 -16
- package/dist/cjs/hooks/useDatasourceTableState.js +3 -1
- package/dist/cjs/hooks/useErrorLogger.js +8 -7
- package/dist/cjs/state/actions/index.js +33 -18
- package/dist/cjs/ui/issue-like-table/edit-type/text/index.js +5 -2
- package/dist/cjs/ui/issue-like-table/messages.js +12 -7
- package/dist/cjs/ui/issue-like-table/table-cell-content/index.js +1 -0
- package/dist/cjs/ui/issue-like-table/table-cell-content/inline-edit.js +16 -9
- package/dist/es2019/hooks/useDatasourceTableFlag.js +18 -14
- package/dist/es2019/hooks/useDatasourceTableState.js +3 -1
- package/dist/es2019/hooks/useErrorLogger.js +5 -7
- package/dist/es2019/state/actions/index.js +47 -32
- package/dist/es2019/ui/issue-like-table/edit-type/text/index.js +5 -2
- package/dist/es2019/ui/issue-like-table/messages.js +12 -7
- package/dist/es2019/ui/issue-like-table/table-cell-content/index.js +1 -0
- package/dist/es2019/ui/issue-like-table/table-cell-content/inline-edit.js +14 -7
- package/dist/esm/hooks/useDatasourceTableFlag.js +20 -17
- package/dist/esm/hooks/useDatasourceTableState.js +3 -1
- package/dist/esm/hooks/useErrorLogger.js +8 -8
- package/dist/esm/state/actions/index.js +33 -18
- package/dist/esm/ui/issue-like-table/edit-type/text/index.js +5 -2
- package/dist/esm/ui/issue-like-table/messages.js +12 -7
- package/dist/esm/ui/issue-like-table/table-cell-content/index.js +1 -0
- package/dist/esm/ui/issue-like-table/table-cell-content/inline-edit.js +14 -7
- package/dist/types/hooks/useDatasourceTableFlag.d.ts +3 -1
- package/dist/types/hooks/useErrorLogger.d.ts +6 -2
- package/dist/types/state/actions/index.d.ts +6 -4
- package/dist/types/ui/issue-like-table/messages.d.ts +6 -1
- package/dist/types/ui/issue-like-table/table-cell-content/inline-edit.d.ts +2 -1
- package/dist/types-ts4.5/hooks/useDatasourceTableFlag.d.ts +3 -1
- package/dist/types-ts4.5/hooks/useErrorLogger.d.ts +6 -2
- package/dist/types-ts4.5/state/actions/index.d.ts +6 -4
- package/dist/types-ts4.5/ui/issue-like-table/messages.d.ts +6 -1
- package/dist/types-ts4.5/ui/issue-like-table/table-cell-content/inline-edit.d.ts +2 -1
- package/package.json +4 -3
- package/dist/cjs/common/utils/response-item.js +0 -18
- package/dist/es2019/common/utils/response-item.js +0 -6
- package/dist/esm/common/utils/response-item.js +0 -11
- package/dist/types/common/utils/response-item.d.ts +0 -2
- package/dist/types-ts4.5/common/utils/response-item.d.ts +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 2.11.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#132813](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/132813)
|
|
8
|
+
[`62c34ffa30fd8`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/62c34ffa30fd8) -
|
|
9
|
+
Fires events analytics for action discovery and execution errors
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
|
|
12
|
+
## 2.11.6
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- [#130683](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/130683)
|
|
17
|
+
[`c61bb13127c88`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c61bb13127c88) -
|
|
18
|
+
Add datasource table inline edit 403 error message behind feature flag
|
|
19
|
+
- [#132566](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/132566)
|
|
20
|
+
[`3e30b62782282`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/3e30b62782282) -
|
|
21
|
+
Fix datasource modal close on pressing escape (ESC) from inline edit behind feature flag
|
|
22
|
+
|
|
3
23
|
## 2.11.5
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -17,32 +17,35 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
|
|
|
17
17
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
18
18
|
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; }
|
|
19
19
|
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; }
|
|
20
|
+
var getGenericErrorMessage = function getGenericErrorMessage(status) {
|
|
21
|
+
switch (status) {
|
|
22
|
+
case 403:
|
|
23
|
+
return {
|
|
24
|
+
title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.updateError403Title),
|
|
25
|
+
description: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.updateError403Description)
|
|
26
|
+
};
|
|
27
|
+
default:
|
|
28
|
+
return {
|
|
29
|
+
title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.updateErrorGenericTitle),
|
|
30
|
+
description: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.updateErrorGenericDescription)
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
20
34
|
var useDatasourceTableFlag = exports.useDatasourceTableFlag = function useDatasourceTableFlag(options) {
|
|
21
35
|
var _useFlags = (0, _flag.useFlags)(),
|
|
22
36
|
showFlag = _useFlags.showFlag;
|
|
23
|
-
var actions = (0, _react.useMemo)(function () {
|
|
24
|
-
var resourceLink = (options === null || options === void 0 ? void 0 : options.url) && {
|
|
25
|
-
content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.goToResourceLink),
|
|
26
|
-
href: options === null || options === void 0 ? void 0 : options.url,
|
|
27
|
-
target: '_blank'
|
|
28
|
-
};
|
|
29
|
-
return resourceLink ? [resourceLink] : undefined;
|
|
30
|
-
}, [options === null || options === void 0 ? void 0 : options.url]);
|
|
31
37
|
var showErrorFlag = (0, _react.useCallback)(function (args) {
|
|
32
|
-
showFlag(_objectSpread({
|
|
33
|
-
|
|
34
|
-
description: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.updateErrorGenericDescription),
|
|
35
|
-
// We need IconTile (currently in beta) in order to scale the new icon to 24px
|
|
38
|
+
showFlag(_objectSpread(_objectSpread({
|
|
39
|
+
// We need IconTile in order to scale the new icon to 24px
|
|
36
40
|
// eslint-disable-next-line @atlaskit/design-system/no-legacy-icons
|
|
37
41
|
icon: /*#__PURE__*/_react.default.createElement(_crossCircle.default, {
|
|
38
42
|
label: "Error",
|
|
39
43
|
primaryColor: "var(--ds-icon-danger, #C9372C)"
|
|
40
44
|
}),
|
|
41
45
|
id: (0, _uuid.default)(),
|
|
42
|
-
isAutoDismiss: true
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}, [actions, showFlag]);
|
|
46
|
+
isAutoDismiss: true
|
|
47
|
+
}, getGenericErrorMessage(args === null || args === void 0 ? void 0 : args.status)), args));
|
|
48
|
+
}, [showFlag]);
|
|
46
49
|
return {
|
|
47
50
|
showErrorFlag: showErrorFlag
|
|
48
51
|
};
|
|
@@ -30,7 +30,9 @@ var useDatasourceTableState = exports.useDatasourceTableState = function useData
|
|
|
30
30
|
captureError = _useErrorLogger.captureError;
|
|
31
31
|
var _useDatasourceActions = (0, _state.useDatasourceActions)(),
|
|
32
32
|
onAddItems = _useDatasourceActions.onAddItems;
|
|
33
|
-
var _useDiscoverActions = (0, _actions.useDiscoverActions)(
|
|
33
|
+
var _useDiscoverActions = (0, _actions.useDiscoverActions)({
|
|
34
|
+
captureError: captureError
|
|
35
|
+
}),
|
|
34
36
|
discoverActions = _useDiscoverActions.discoverActions;
|
|
35
37
|
var idFieldCount = 1;
|
|
36
38
|
var keyFieldCount = 1;
|
|
@@ -1,14 +1,18 @@
|
|
|
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.logToSentry = exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
9
|
var _react = require("react");
|
|
8
10
|
var _sentry = require("@atlaskit/linking-common/sentry");
|
|
9
11
|
var _utils = require("@atlaskit/linking-common/utils");
|
|
10
12
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
13
|
var _analytics = require("../analytics");
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
12
16
|
var getNetworkFields = function getNetworkFields(error) {
|
|
13
17
|
return error instanceof Response ? {
|
|
14
18
|
traceId: (0, _utils.getTraceId)(error),
|
|
@@ -24,15 +28,14 @@ var getNetworkFields = function getNetworkFields(error) {
|
|
|
24
28
|
* a helper Tail type which removes the first element of the tuple
|
|
25
29
|
*/
|
|
26
30
|
var logToSentry = exports.logToSentry = function logToSentry(error) {
|
|
27
|
-
if ((0, _platformFeatureFlags.
|
|
31
|
+
if (error instanceof Error && (0, _platformFeatureFlags.fg)('platform.linking-platform.datasources.enable-sentry-client')) {
|
|
28
32
|
for (var _len = arguments.length, captureExceptionParams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
29
33
|
captureExceptionParams[_key - 1] = arguments[_key];
|
|
30
34
|
}
|
|
31
35
|
_sentry.captureException.apply(void 0, [error].concat(captureExceptionParams));
|
|
32
36
|
}
|
|
33
37
|
};
|
|
34
|
-
var useErrorLogger = function useErrorLogger(
|
|
35
|
-
var datasourceId = _ref.datasourceId;
|
|
38
|
+
var useErrorLogger = function useErrorLogger(loggerProps) {
|
|
36
39
|
var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
|
|
37
40
|
fireEvent = _useDatasourceAnalyti.fireEvent;
|
|
38
41
|
|
|
@@ -51,10 +54,8 @@ var useErrorLogger = function useErrorLogger(_ref) {
|
|
|
51
54
|
traceId: traceId,
|
|
52
55
|
status: status
|
|
53
56
|
});
|
|
54
|
-
logToSentry(error, 'link-datasource', {
|
|
55
|
-
|
|
56
|
-
});
|
|
57
|
-
}, [fireEvent, datasourceId]);
|
|
57
|
+
logToSentry(error, 'link-datasource', _objectSpread({}, loggerProps));
|
|
58
|
+
}, [fireEvent, loggerProps]);
|
|
58
59
|
return {
|
|
59
60
|
captureError: captureError
|
|
60
61
|
};
|
|
@@ -7,11 +7,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useExecuteAtomicAction = exports.useDiscoverActions = exports.useAtomicUpdateActionSchema = exports.actions = exports.ActionsStore = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
10
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
13
|
var _react = require("react");
|
|
13
14
|
var _reactSweetState = require("react-sweet-state");
|
|
14
15
|
var _linkClientExtension = require("@atlaskit/link-client-extension");
|
|
16
|
+
var _excluded = ["aris", "fieldKeys"];
|
|
15
17
|
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; }
|
|
16
18
|
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; }
|
|
17
19
|
/**
|
|
@@ -55,17 +57,18 @@ var getInitialState = function getInitialState() {
|
|
|
55
57
|
};
|
|
56
58
|
};
|
|
57
59
|
var actions = exports.actions = {
|
|
58
|
-
discoverActions: function discoverActions(api, request) {
|
|
60
|
+
discoverActions: function discoverActions(captureError, api, request) {
|
|
59
61
|
return /*#__PURE__*/function () {
|
|
60
62
|
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
|
|
61
|
-
var setState, getState, response, _getState, currentActions, currentPermissions, actionsByIntegration, permissions;
|
|
63
|
+
var setState, getState, response, _getState, currentActions, currentPermissions, actionsByIntegration, permissions, aris, fieldKeys, rest;
|
|
62
64
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
63
65
|
while (1) switch (_context.prev = _context.next) {
|
|
64
66
|
case 0:
|
|
65
67
|
setState = _ref.setState, getState = _ref.getState;
|
|
66
|
-
_context.
|
|
68
|
+
_context.prev = 1;
|
|
69
|
+
_context.next = 4;
|
|
67
70
|
return api.getDatasourceActionsAndPermissions(request);
|
|
68
|
-
case
|
|
71
|
+
case 4:
|
|
69
72
|
response = _context.sent;
|
|
70
73
|
if ('permissions' in response) {
|
|
71
74
|
_getState = getState(), currentActions = _getState.actionsByIntegration, currentPermissions = _getState.permissions;
|
|
@@ -85,11 +88,22 @@ var actions = exports.actions = {
|
|
|
85
88
|
permissions: permissions
|
|
86
89
|
});
|
|
87
90
|
}
|
|
88
|
-
|
|
91
|
+
_context.next = 12;
|
|
92
|
+
break;
|
|
93
|
+
case 8:
|
|
94
|
+
_context.prev = 8;
|
|
95
|
+
_context.t0 = _context["catch"](1);
|
|
96
|
+
/**
|
|
97
|
+
* Requests can be made with datasourceId or integrationKey
|
|
98
|
+
* We only want one of them with entityType, leave the rest out.
|
|
99
|
+
*/
|
|
100
|
+
aris = request.aris, fieldKeys = request.fieldKeys, rest = (0, _objectWithoutProperties2.default)(request, _excluded);
|
|
101
|
+
captureError('actionDiscovery', _context.t0, rest);
|
|
102
|
+
case 12:
|
|
89
103
|
case "end":
|
|
90
104
|
return _context.stop();
|
|
91
105
|
}
|
|
92
|
-
}, _callee);
|
|
106
|
+
}, _callee, null, [[1, 8]]);
|
|
93
107
|
}));
|
|
94
108
|
return function (_x) {
|
|
95
109
|
return _ref2.apply(this, arguments);
|
|
@@ -103,24 +117,25 @@ var ActionsStore = exports.ActionsStore = (0, _reactSweetState.createStore)({
|
|
|
103
117
|
actions: actions
|
|
104
118
|
});
|
|
105
119
|
var useActionStoreActions = (0, _reactSweetState.createActionsHook)(ActionsStore);
|
|
106
|
-
var useDiscoverActions = exports.useDiscoverActions = function useDiscoverActions() {
|
|
120
|
+
var useDiscoverActions = exports.useDiscoverActions = function useDiscoverActions(_ref3) {
|
|
121
|
+
var captureError = _ref3.captureError;
|
|
107
122
|
var _useDatasourceClientE = (0, _linkClientExtension.useDatasourceClientExtension)(),
|
|
108
123
|
getDatasourceActionsAndPermissions = _useDatasourceClientE.getDatasourceActionsAndPermissions;
|
|
109
124
|
var _useActionStoreAction = useActionStoreActions(),
|
|
110
125
|
discoverActions = _useActionStoreAction.discoverActions;
|
|
111
126
|
return {
|
|
112
127
|
discoverActions: (0, _react.useMemo)(function () {
|
|
113
|
-
return discoverActions.bind(null, {
|
|
128
|
+
return discoverActions.bind(null, captureError, {
|
|
114
129
|
getDatasourceActionsAndPermissions: getDatasourceActionsAndPermissions
|
|
115
130
|
});
|
|
116
|
-
}, [discoverActions, getDatasourceActionsAndPermissions])
|
|
131
|
+
}, [captureError, discoverActions, getDatasourceActionsAndPermissions])
|
|
117
132
|
};
|
|
118
133
|
};
|
|
119
|
-
var getFieldUpdateActionByAri = function getFieldUpdateActionByAri(state,
|
|
134
|
+
var getFieldUpdateActionByAri = function getFieldUpdateActionByAri(state, _ref4) {
|
|
120
135
|
var _state$permissions$ar, _state$actionsByInteg;
|
|
121
|
-
var ari =
|
|
122
|
-
fieldKey =
|
|
123
|
-
integrationKey =
|
|
136
|
+
var ari = _ref4.ari,
|
|
137
|
+
fieldKey = _ref4.fieldKey,
|
|
138
|
+
integrationKey = _ref4.integrationKey;
|
|
124
139
|
var isEditable = (_state$permissions$ar = state.permissions[ari]) === null || _state$permissions$ar === void 0 || (_state$permissions$ar = _state$permissions$ar[fieldKey]) === null || _state$permissions$ar === void 0 ? void 0 : _state$permissions$ar.isEditable;
|
|
125
140
|
if (!isEditable) {
|
|
126
141
|
return;
|
|
@@ -146,10 +161,10 @@ var useAtomicUpdateActionSchema = exports.useAtomicUpdateActionSchema = (0, _rea
|
|
|
146
161
|
* return <button onClick={() => execute('New summary')}>Update summary</button>;
|
|
147
162
|
* ```
|
|
148
163
|
*/
|
|
149
|
-
var useExecuteAtomicAction = exports.useExecuteAtomicAction = function useExecuteAtomicAction(
|
|
150
|
-
var ari =
|
|
151
|
-
fieldKey =
|
|
152
|
-
integrationKey =
|
|
164
|
+
var useExecuteAtomicAction = exports.useExecuteAtomicAction = function useExecuteAtomicAction(_ref5) {
|
|
165
|
+
var ari = _ref5.ari,
|
|
166
|
+
fieldKey = _ref5.fieldKey,
|
|
167
|
+
integrationKey = _ref5.integrationKey;
|
|
153
168
|
var _useAtomicUpdateActio = useAtomicUpdateActionSchema({
|
|
154
169
|
ari: ari,
|
|
155
170
|
fieldKey: fieldKey,
|
|
@@ -173,7 +188,7 @@ var useExecuteAtomicAction = exports.useExecuteAtomicAction = function useExecut
|
|
|
173
188
|
}
|
|
174
189
|
}
|
|
175
190
|
});
|
|
176
|
-
}, [executeAction, integrationKey,
|
|
191
|
+
}, [schema, executeAction, integrationKey, fieldKey, ari]);
|
|
177
192
|
if (!schema) {
|
|
178
193
|
return {};
|
|
179
194
|
}
|
|
@@ -7,12 +7,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _layering = require("@atlaskit/layering");
|
|
10
11
|
var _textfield = _interopRequireDefault(require("@atlaskit/textfield"));
|
|
11
12
|
var TextEditType = function TextEditType(props) {
|
|
12
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
13
|
+
return /*#__PURE__*/_react.default.createElement(_layering.UNSAFE_LAYERING, {
|
|
14
|
+
isDisabled: false
|
|
15
|
+
}, /*#__PURE__*/_react.default.createElement(_textfield.default, (0, _extends2.default)({}, props, {
|
|
13
16
|
autoFocus: true,
|
|
14
17
|
isCompact: true,
|
|
15
18
|
testId: "inline-edit-text"
|
|
16
|
-
}));
|
|
19
|
+
})));
|
|
17
20
|
};
|
|
18
21
|
var _default = exports.default = TextEditType;
|
|
@@ -6,18 +6,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.issueLikeTableMessages = void 0;
|
|
7
7
|
var _reactIntlNext = require("react-intl-next");
|
|
8
8
|
var issueLikeTableMessages = exports.issueLikeTableMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
-
|
|
10
|
-
id: 'linkDataSource.issue-line-table.
|
|
11
|
-
description: '
|
|
12
|
-
defaultMessage: '
|
|
9
|
+
updateError403Description: {
|
|
10
|
+
id: 'linkDataSource.issue-line-table.error-403-description',
|
|
11
|
+
description: 'Generic error message description shown when updating issue field fails due to user does not have permission to update.',
|
|
12
|
+
defaultMessage: 'You need the right permissions to edit this item.'
|
|
13
|
+
},
|
|
14
|
+
updateError403Title: {
|
|
15
|
+
id: 'linkDataSource.issue-line-table.error-403-title',
|
|
16
|
+
description: 'Generic error message title shown when updating issue field fails due to user does not have permission to update.',
|
|
17
|
+
defaultMessage: 'Changes not saved'
|
|
13
18
|
},
|
|
14
19
|
updateErrorGenericDescription: {
|
|
15
|
-
id: 'linkDataSource.issue-line-table.error-generic-description
|
|
20
|
+
id: 'linkDataSource.issue-line-table.error-generic-description',
|
|
16
21
|
description: 'Generic error message description shown when updating issue field fails',
|
|
17
|
-
defaultMessage: 'We had an issue trying to complete the update.
|
|
22
|
+
defaultMessage: 'We had an issue trying to complete the update. Wait a few minutes, then try again. Contact support if this keeps happening.'
|
|
18
23
|
},
|
|
19
24
|
updateErrorGenericTitle: {
|
|
20
|
-
id: 'linkDataSource.issue-line-table.error-generic-title
|
|
25
|
+
id: 'linkDataSource.issue-line-table.error-generic-title',
|
|
21
26
|
description: 'Generic error message title shown when updating issue field fails',
|
|
22
27
|
defaultMessage: 'Something went wrong'
|
|
23
28
|
},
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var
|
|
4
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.InlineEdit = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
10
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
14
|
var _inlineEdit = _interopRequireDefault(require("@atlaskit/inline-edit"));
|
|
14
15
|
var _primitives = require("@atlaskit/primitives");
|
|
15
|
-
var _responseItem = require("../../../common/utils/response-item");
|
|
16
16
|
var _useDatasourceTableFlag = require("../../../hooks/useDatasourceTableFlag");
|
|
17
|
+
var _useErrorLogger2 = _interopRequireDefault(require("../../../hooks/useErrorLogger"));
|
|
17
18
|
var _state = require("../../../state");
|
|
18
19
|
var _editType = require("../edit-type");
|
|
19
20
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
20
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
21
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
22
|
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; }
|
|
22
23
|
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; }
|
|
23
24
|
var containerStyles = (0, _primitives.xcss)({
|
|
@@ -41,6 +42,7 @@ var InlineEdit = exports.InlineEdit = function InlineEdit(_ref) {
|
|
|
41
42
|
execute = _ref.execute,
|
|
42
43
|
_readView = _ref.readView,
|
|
43
44
|
columnKey = _ref.columnKey,
|
|
45
|
+
integrationKey = _ref.integrationKey,
|
|
44
46
|
datasourceTypeWithValues = _ref.datasourceTypeWithValues;
|
|
45
47
|
var _useState = (0, _react.useState)(false),
|
|
46
48
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -49,13 +51,14 @@ var InlineEdit = exports.InlineEdit = function InlineEdit(_ref) {
|
|
|
49
51
|
var item = (0, _state.useDatasourceItem)({
|
|
50
52
|
id: ari
|
|
51
53
|
});
|
|
52
|
-
var
|
|
53
|
-
var _useDatasourceTableFl = (0, _useDatasourceTableFlag.useDatasourceTableFlag)({
|
|
54
|
-
url: url
|
|
55
|
-
}),
|
|
54
|
+
var _useDatasourceTableFl = (0, _useDatasourceTableFlag.useDatasourceTableFlag)(),
|
|
56
55
|
showErrorFlag = _useDatasourceTableFl.showErrorFlag;
|
|
57
56
|
var _useDatasourceActions = (0, _state.useDatasourceActions)(),
|
|
58
57
|
onUpdateItem = _useDatasourceActions.onUpdateItem;
|
|
58
|
+
var _useErrorLogger = (0, _useErrorLogger2.default)({
|
|
59
|
+
integrationKey: integrationKey
|
|
60
|
+
}),
|
|
61
|
+
captureError = _useErrorLogger.captureError;
|
|
59
62
|
var onCommitUpdate = (0, _react.useCallback)(function (value) {
|
|
60
63
|
if (!item) {
|
|
61
64
|
setIsEditing(false);
|
|
@@ -69,11 +72,15 @@ var InlineEdit = exports.InlineEdit = function InlineEdit(_ref) {
|
|
|
69
72
|
}
|
|
70
73
|
onUpdateItem(ari, newItem);
|
|
71
74
|
execute(value).catch(function (error) {
|
|
72
|
-
|
|
75
|
+
var status = error && (0, _typeof2.default)(error) === 'object' ? error.status : undefined;
|
|
76
|
+
showErrorFlag({
|
|
77
|
+
status: status
|
|
78
|
+
});
|
|
73
79
|
onUpdateItem(ari, existingData);
|
|
80
|
+
captureError('actionExecution', error);
|
|
74
81
|
});
|
|
75
82
|
setIsEditing(false);
|
|
76
|
-
}, [
|
|
83
|
+
}, [item, datasourceTypeWithValues.type, columnKey, onUpdateItem, ari, execute, showErrorFlag, captureError]);
|
|
77
84
|
return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
78
85
|
xcss: containerStyles
|
|
79
86
|
}, /*#__PURE__*/_react.default.createElement(_inlineEdit.default, (0, _extends2.default)({}, (0, _editType.editType)(datasourceTypeWithValues), {
|
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
import React, { useCallback
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
2
|
import { FormattedMessage } from 'react-intl-next';
|
|
3
3
|
import uuid from 'uuid';
|
|
4
4
|
import { useFlags } from '@atlaskit/flag';
|
|
5
5
|
import CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';
|
|
6
6
|
import { issueLikeTableMessages } from '../ui/issue-like-table/messages';
|
|
7
|
+
const getGenericErrorMessage = status => {
|
|
8
|
+
switch (status) {
|
|
9
|
+
case 403:
|
|
10
|
+
return {
|
|
11
|
+
title: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateError403Title),
|
|
12
|
+
description: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateError403Description)
|
|
13
|
+
};
|
|
14
|
+
default:
|
|
15
|
+
return {
|
|
16
|
+
title: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateErrorGenericTitle),
|
|
17
|
+
description: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateErrorGenericDescription)
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
};
|
|
7
21
|
export const useDatasourceTableFlag = options => {
|
|
8
22
|
const {
|
|
9
23
|
showFlag
|
|
10
24
|
} = useFlags();
|
|
11
|
-
const actions = useMemo(() => {
|
|
12
|
-
const resourceLink = (options === null || options === void 0 ? void 0 : options.url) && {
|
|
13
|
-
content: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.goToResourceLink),
|
|
14
|
-
href: options === null || options === void 0 ? void 0 : options.url,
|
|
15
|
-
target: '_blank'
|
|
16
|
-
};
|
|
17
|
-
return resourceLink ? [resourceLink] : undefined;
|
|
18
|
-
}, [options === null || options === void 0 ? void 0 : options.url]);
|
|
19
25
|
const showErrorFlag = useCallback(args => {
|
|
20
26
|
showFlag({
|
|
21
|
-
|
|
22
|
-
description: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateErrorGenericDescription),
|
|
23
|
-
// We need IconTile (currently in beta) in order to scale the new icon to 24px
|
|
27
|
+
// We need IconTile in order to scale the new icon to 24px
|
|
24
28
|
// eslint-disable-next-line @atlaskit/design-system/no-legacy-icons
|
|
25
29
|
icon: /*#__PURE__*/React.createElement(CrossCircleIcon, {
|
|
26
30
|
label: "Error",
|
|
@@ -28,10 +32,10 @@ export const useDatasourceTableFlag = options => {
|
|
|
28
32
|
}),
|
|
29
33
|
id: uuid(),
|
|
30
34
|
isAutoDismiss: true,
|
|
31
|
-
|
|
35
|
+
...getGenericErrorMessage(args === null || args === void 0 ? void 0 : args.status),
|
|
32
36
|
...args
|
|
33
37
|
});
|
|
34
|
-
}, [
|
|
38
|
+
}, [showFlag]);
|
|
35
39
|
return {
|
|
36
40
|
showErrorFlag
|
|
37
41
|
};
|
|
@@ -24,7 +24,9 @@ export const useDatasourceTableState = ({
|
|
|
24
24
|
} = useDatasourceActions();
|
|
25
25
|
const {
|
|
26
26
|
discoverActions
|
|
27
|
-
} = useDiscoverActions(
|
|
27
|
+
} = useDiscoverActions({
|
|
28
|
+
captureError
|
|
29
|
+
});
|
|
28
30
|
const idFieldCount = 1;
|
|
29
31
|
const keyFieldCount = 1;
|
|
30
32
|
const [initialEmptyArray] = useState([]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
2
|
import { captureException } from '@atlaskit/linking-common/sentry';
|
|
3
3
|
import { getTraceId } from '@atlaskit/linking-common/utils';
|
|
4
|
-
import {
|
|
4
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
5
|
import { useDatasourceAnalyticsEvents } from '../analytics';
|
|
6
6
|
const getNetworkFields = error => {
|
|
7
7
|
return error instanceof Response ? {
|
|
@@ -18,13 +18,11 @@ const getNetworkFields = error => {
|
|
|
18
18
|
* a helper Tail type which removes the first element of the tuple
|
|
19
19
|
*/
|
|
20
20
|
export const logToSentry = (error, ...captureExceptionParams) => {
|
|
21
|
-
if (
|
|
21
|
+
if (error instanceof Error && fg('platform.linking-platform.datasources.enable-sentry-client')) {
|
|
22
22
|
captureException(error, ...captureExceptionParams);
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
|
-
const useErrorLogger =
|
|
26
|
-
datasourceId
|
|
27
|
-
}) => {
|
|
25
|
+
const useErrorLogger = loggerProps => {
|
|
28
26
|
const {
|
|
29
27
|
fireEvent
|
|
30
28
|
} = useDatasourceAnalyticsEvents();
|
|
@@ -46,9 +44,9 @@ const useErrorLogger = ({
|
|
|
46
44
|
status
|
|
47
45
|
});
|
|
48
46
|
logToSentry(error, 'link-datasource', {
|
|
49
|
-
|
|
47
|
+
...loggerProps
|
|
50
48
|
});
|
|
51
|
-
}, [fireEvent,
|
|
49
|
+
}, [fireEvent, loggerProps]);
|
|
52
50
|
return {
|
|
53
51
|
captureError
|
|
54
52
|
};
|
|
@@ -41,39 +41,52 @@ const getInitialState = () => ({
|
|
|
41
41
|
permissions: {}
|
|
42
42
|
});
|
|
43
43
|
export const actions = {
|
|
44
|
-
discoverActions: (api, request) => async ({
|
|
44
|
+
discoverActions: (captureError, api, request) => async ({
|
|
45
45
|
setState,
|
|
46
46
|
getState
|
|
47
47
|
}) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
try {
|
|
49
|
+
const response = await api.getDatasourceActionsAndPermissions(request);
|
|
50
|
+
if ('permissions' in response) {
|
|
51
|
+
const {
|
|
52
|
+
actionsByIntegration: currentActions,
|
|
53
|
+
permissions: currentPermissions
|
|
54
|
+
} = getState();
|
|
55
|
+
const actionsByIntegration = response.actions.reduce((acc, action) => ({
|
|
56
|
+
...acc,
|
|
57
|
+
[action.integrationKey]: {
|
|
58
|
+
...acc[action.integrationKey],
|
|
59
|
+
[action.fieldKey]: {
|
|
60
|
+
actionKey: action.actionKey,
|
|
61
|
+
type: action.type
|
|
62
|
+
}
|
|
61
63
|
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
}), currentActions);
|
|
65
|
+
const permissions = response.permissions.data.reduce((acc, permission) => ({
|
|
66
|
+
...acc,
|
|
67
|
+
[permission.ari]: {
|
|
68
|
+
...acc[permission.ari],
|
|
69
|
+
[permission.fieldKey]: {
|
|
70
|
+
isEditable: permission.isEditable
|
|
71
|
+
}
|
|
70
72
|
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
73
|
+
}), currentPermissions);
|
|
74
|
+
setState({
|
|
75
|
+
actionsByIntegration,
|
|
76
|
+
permissions
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
} catch (error) {
|
|
80
|
+
/**
|
|
81
|
+
* Requests can be made with datasourceId or integrationKey
|
|
82
|
+
* We only want one of them with entityType, leave the rest out.
|
|
83
|
+
*/
|
|
84
|
+
const {
|
|
85
|
+
aris,
|
|
86
|
+
fieldKeys,
|
|
87
|
+
...rest
|
|
88
|
+
} = request;
|
|
89
|
+
captureError('actionDiscovery', error, rest);
|
|
77
90
|
}
|
|
78
91
|
}
|
|
79
92
|
};
|
|
@@ -83,7 +96,9 @@ export const ActionsStore = createStore({
|
|
|
83
96
|
actions
|
|
84
97
|
});
|
|
85
98
|
const useActionStoreActions = createActionsHook(ActionsStore);
|
|
86
|
-
export const useDiscoverActions = (
|
|
99
|
+
export const useDiscoverActions = ({
|
|
100
|
+
captureError
|
|
101
|
+
}) => {
|
|
87
102
|
const {
|
|
88
103
|
getDatasourceActionsAndPermissions
|
|
89
104
|
} = useDatasourceClientExtension();
|
|
@@ -91,9 +106,9 @@ export const useDiscoverActions = () => {
|
|
|
91
106
|
discoverActions
|
|
92
107
|
} = useActionStoreActions();
|
|
93
108
|
return {
|
|
94
|
-
discoverActions: useMemo(() => discoverActions.bind(null, {
|
|
109
|
+
discoverActions: useMemo(() => discoverActions.bind(null, captureError, {
|
|
95
110
|
getDatasourceActionsAndPermissions
|
|
96
|
-
}), [discoverActions, getDatasourceActionsAndPermissions])
|
|
111
|
+
}), [captureError, discoverActions, getDatasourceActionsAndPermissions])
|
|
97
112
|
};
|
|
98
113
|
};
|
|
99
114
|
const getFieldUpdateActionByAri = (state, {
|
|
@@ -156,7 +171,7 @@ export const useExecuteAtomicAction = ({
|
|
|
156
171
|
}
|
|
157
172
|
}
|
|
158
173
|
});
|
|
159
|
-
}, [executeAction, integrationKey,
|
|
174
|
+
}, [schema, executeAction, integrationKey, fieldKey, ari]);
|
|
160
175
|
if (!schema) {
|
|
161
176
|
return {};
|
|
162
177
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { UNSAFE_LAYERING } from '@atlaskit/layering';
|
|
3
4
|
import Textfield from '@atlaskit/textfield';
|
|
4
|
-
const TextEditType = props => /*#__PURE__*/React.createElement(
|
|
5
|
+
const TextEditType = props => /*#__PURE__*/React.createElement(UNSAFE_LAYERING, {
|
|
6
|
+
isDisabled: false
|
|
7
|
+
}, /*#__PURE__*/React.createElement(Textfield, _extends({}, props, {
|
|
5
8
|
autoFocus: true,
|
|
6
9
|
isCompact: true,
|
|
7
10
|
testId: "inline-edit-text"
|
|
8
|
-
}));
|
|
11
|
+
})));
|
|
9
12
|
export default TextEditType;
|