@atlaskit/link-datasource 2.11.0 → 2.11.2
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 +16 -0
- package/dist/cjs/common/utils/response-item.js +18 -0
- package/dist/cjs/hooks/useDatasourceTableFlag.js +49 -0
- package/dist/cjs/state/actions/index.js +1 -1
- package/dist/cjs/ui/issue-like-table/index.js +11 -2
- package/dist/cjs/ui/issue-like-table/messages.js +15 -0
- package/dist/cjs/ui/issue-like-table/table-cell-content/index.js +61 -48
- package/dist/cjs/ui/issue-like-table/table-cell-content/inline-edit.js +13 -14
- package/dist/es2019/common/utils/response-item.js +6 -0
- package/dist/es2019/hooks/useDatasourceTableFlag.js +38 -0
- package/dist/es2019/state/actions/index.js +1 -1
- package/dist/es2019/ui/issue-like-table/index.js +12 -3
- package/dist/es2019/ui/issue-like-table/messages.js +15 -0
- package/dist/es2019/ui/issue-like-table/table-cell-content/index.js +61 -47
- package/dist/es2019/ui/issue-like-table/table-cell-content/inline-edit.js +14 -15
- package/dist/esm/common/utils/response-item.js +11 -0
- package/dist/esm/hooks/useDatasourceTableFlag.js +39 -0
- package/dist/esm/state/actions/index.js +1 -1
- package/dist/esm/ui/issue-like-table/index.js +12 -3
- package/dist/esm/ui/issue-like-table/messages.js +15 -0
- package/dist/esm/ui/issue-like-table/table-cell-content/index.js +60 -47
- package/dist/esm/ui/issue-like-table/table-cell-content/inline-edit.js +13 -14
- package/dist/types/common/utils/response-item.d.ts +2 -0
- package/dist/types/hooks/useDatasourceTableFlag.d.ts +8 -0
- package/dist/types/ui/common/modal/cancel-button/index.d.ts +1 -1
- package/dist/types/ui/common/modal/insert-button/index.d.ts +1 -1
- package/dist/types/ui/issue-like-table/messages.d.ts +15 -0
- package/dist/types/ui/issue-like-table/table-cell-content/index.d.ts +2 -1
- package/dist/types/ui/issue-like-table/table-cell-content/inline-edit.d.ts +4 -2
- package/dist/types-ts4.5/common/utils/response-item.d.ts +2 -0
- package/dist/types-ts4.5/hooks/useDatasourceTableFlag.d.ts +8 -0
- package/dist/types-ts4.5/ui/common/modal/cancel-button/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/common/modal/insert-button/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/issue-like-table/messages.d.ts +15 -0
- package/dist/types-ts4.5/ui/issue-like-table/table-cell-content/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/issue-like-table/table-cell-content/inline-edit.d.ts +4 -2
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 2.11.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#131099](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/131099)
|
|
8
|
+
[`9762a9622c0a9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/9762a9622c0a9) -
|
|
9
|
+
[ux] Add error flag on update inline edit fails
|
|
10
|
+
|
|
11
|
+
## 2.11.1
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#125506](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/125506)
|
|
16
|
+
[`2c38223755a99`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/2c38223755a99) -
|
|
17
|
+
Fix isEditable field validation behind FF
|
|
18
|
+
|
|
3
19
|
## 2.11.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getResourceUrl = void 0;
|
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
+
var isLink = function isLink(data) {
|
|
10
|
+
return (0, _typeof2.default)(data) === 'object' && 'url' in data;
|
|
11
|
+
};
|
|
12
|
+
var getLinkTypeUrl = function getLinkTypeUrl(data) {
|
|
13
|
+
return isLink(data) ? data.url : undefined;
|
|
14
|
+
};
|
|
15
|
+
var getResourceUrl = exports.getResourceUrl = function getResourceUrl(data) {
|
|
16
|
+
var _data$key, _data$title;
|
|
17
|
+
return getLinkTypeUrl(data === null || data === void 0 || (_data$key = data['key']) === null || _data$key === void 0 ? void 0 : _data$key.data) || getLinkTypeUrl(data === null || data === void 0 || (_data$title = data['title']) === null || _data$title === void 0 ? void 0 : _data$title.data);
|
|
18
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useDatasourceTableFlag = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactIntlNext = require("react-intl-next");
|
|
12
|
+
var _uuid = _interopRequireDefault(require("uuid"));
|
|
13
|
+
var _flag = require("@atlaskit/flag");
|
|
14
|
+
var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/cross-circle"));
|
|
15
|
+
var _messages = require("../ui/issue-like-table/messages");
|
|
16
|
+
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); }
|
|
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
|
+
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
|
+
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 useDatasourceTableFlag = exports.useDatasourceTableFlag = function useDatasourceTableFlag(options) {
|
|
21
|
+
var _useFlags = (0, _flag.useFlags)(),
|
|
22
|
+
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
|
+
var showErrorFlag = (0, _react.useCallback)(function (args) {
|
|
32
|
+
showFlag(_objectSpread({
|
|
33
|
+
actions: actions,
|
|
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
|
|
36
|
+
// eslint-disable-next-line @atlaskit/design-system/no-legacy-icons
|
|
37
|
+
icon: /*#__PURE__*/_react.default.createElement(_crossCircle.default, {
|
|
38
|
+
label: "Error",
|
|
39
|
+
primaryColor: "var(--ds-icon-danger, #C9372C)"
|
|
40
|
+
}),
|
|
41
|
+
id: (0, _uuid.default)(),
|
|
42
|
+
isAutoDismiss: true,
|
|
43
|
+
title: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.issueLikeTableMessages.updateErrorGenericTitle)
|
|
44
|
+
}, args));
|
|
45
|
+
}, [actions, showFlag]);
|
|
46
|
+
return {
|
|
47
|
+
showErrorFlag: showErrorFlag
|
|
48
|
+
};
|
|
49
|
+
};
|
|
@@ -122,7 +122,7 @@ var getFieldUpdateActionByAri = function getFieldUpdateActionByAri(state, _ref3)
|
|
|
122
122
|
fieldKey = _ref3.fieldKey,
|
|
123
123
|
integrationKey = _ref3.integrationKey;
|
|
124
124
|
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
|
-
if (isEditable
|
|
125
|
+
if (!isEditable) {
|
|
126
126
|
return;
|
|
127
127
|
}
|
|
128
128
|
return (_state$actionsByInteg = state.actionsByIntegration[integrationKey]) === null || _state$actionsByInteg === void 0 ? void 0 : _state$actionsByInteg[fieldKey];
|
|
@@ -16,6 +16,7 @@ var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
|
16
16
|
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
17
17
|
var _reactIntlNext = require("react-intl-next");
|
|
18
18
|
var _tinyInvariant = _interopRequireDefault(require("tiny-invariant"));
|
|
19
|
+
var _flag = require("@atlaskit/flag");
|
|
19
20
|
var _linkingCommon = require("@atlaskit/linking-common");
|
|
20
21
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
21
22
|
var _closestEdge = require("@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge");
|
|
@@ -471,7 +472,14 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
|
|
|
471
472
|
return {
|
|
472
473
|
key: key,
|
|
473
474
|
columnKey: key,
|
|
474
|
-
|
|
475
|
+
// eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
|
|
476
|
+
content: (0, _platformFeatureFlags.fg)('platform-datasources-enable-two-way-sync') ? (0, _react2.jsx)(_tableCellContent.TableCellContent, {
|
|
477
|
+
id: id,
|
|
478
|
+
columnKey: key,
|
|
479
|
+
columnType: type,
|
|
480
|
+
wrappedColumnKeys: wrappedColumnKeys,
|
|
481
|
+
renderItem: renderItem
|
|
482
|
+
}) : (0, _react2.jsx)(_tableCellContent.ReadOnlyCell, {
|
|
475
483
|
id: id,
|
|
476
484
|
columnKey: key,
|
|
477
485
|
columnType: type,
|
|
@@ -585,7 +593,7 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
|
|
|
585
593
|
}, _callee, null, [[3, 9]]);
|
|
586
594
|
})), [experienceId, extensionKey, hasFullSchema, onLoadDatasourceDetails]);
|
|
587
595
|
var isEditable = onVisibleColumnKeysChange && hasData;
|
|
588
|
-
|
|
596
|
+
var view = (0, _react2.jsx)("div", {
|
|
589
597
|
/* There is required contentEditable={true} in editor-card-plugin
|
|
590
598
|
* But this brakes how DND works. We set contentEditable={false} to allow DND to work
|
|
591
599
|
* when dragging is initiated on top of a column label.
|
|
@@ -731,5 +739,6 @@ var IssueLikeDataTableView = exports.IssueLikeDataTableView = function IssueLike
|
|
|
731
739
|
}
|
|
732
740
|
}));
|
|
733
741
|
}))));
|
|
742
|
+
return (0, _platformFeatureFlags.fg)('platform-datasources-enable-two-way-sync') ? (0, _react2.jsx)(_flag.FlagsProvider, null, view) : view;
|
|
734
743
|
};
|
|
735
744
|
var EmptyState = exports.EmptyState = _emptyState.default;
|
|
@@ -6,6 +6,21 @@ 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
|
+
goToResourceLink: {
|
|
10
|
+
id: 'linkDataSource.issue-line-table.go-to-resource.nonfinal',
|
|
11
|
+
description: 'Link to navigate to the resource page',
|
|
12
|
+
defaultMessage: 'Go to item'
|
|
13
|
+
},
|
|
14
|
+
updateErrorGenericDescription: {
|
|
15
|
+
id: 'linkDataSource.issue-line-table.error-generic-description.nonfinal',
|
|
16
|
+
description: 'Generic error message description shown when updating issue field fails',
|
|
17
|
+
defaultMessage: 'We had an issue trying to complete the update. Refresh the page and try again.'
|
|
18
|
+
},
|
|
19
|
+
updateErrorGenericTitle: {
|
|
20
|
+
id: 'linkDataSource.issue-line-table.error-generic-title.nonfinal',
|
|
21
|
+
description: 'Generic error message title shown when updating issue field fails',
|
|
22
|
+
defaultMessage: 'Something went wrong'
|
|
23
|
+
},
|
|
9
24
|
wrapText: {
|
|
10
25
|
id: 'linkDataSource.issue-line-table.wrap-text',
|
|
11
26
|
description: 'Table header Dropdown item for making whole column to wrap text',
|
|
@@ -4,13 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.TableCellContent = void 0;
|
|
7
|
+
exports.TableCellContent = exports.ReadOnlyCell = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
var _reactIntlNext = require("react-intl-next");
|
|
10
|
-
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
11
10
|
var _primitives = require("@atlaskit/primitives");
|
|
12
11
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
13
12
|
var _state = require("../../../state");
|
|
13
|
+
var _actions = require("../../../state/actions");
|
|
14
14
|
var _editType = require("../edit-type");
|
|
15
15
|
var _renderType = require("../render-type");
|
|
16
16
|
var _truncateTextTag = require("../truncate-text-tag");
|
|
@@ -47,7 +47,7 @@ var TooltipWrapper = function TooltipWrapper(_ref) {
|
|
|
47
47
|
}
|
|
48
48
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
49
49
|
};
|
|
50
|
-
var ReadOnlyCell = function ReadOnlyCell(_ref2) {
|
|
50
|
+
var ReadOnlyCell = exports.ReadOnlyCell = function ReadOnlyCell(_ref2) {
|
|
51
51
|
var _useDatasourceItem, _rowData$columnKey;
|
|
52
52
|
var id = _ref2.id,
|
|
53
53
|
columnType = _ref2.columnType,
|
|
@@ -59,7 +59,7 @@ var ReadOnlyCell = function ReadOnlyCell(_ref2) {
|
|
|
59
59
|
id: id
|
|
60
60
|
})) === null || _useDatasourceItem === void 0 ? void 0 : _useDatasourceItem.data;
|
|
61
61
|
if (!rowData || !columnKey || !rowData[columnKey]) {
|
|
62
|
-
return
|
|
62
|
+
return null;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
// Need to make sure we keep falsy values like 0 and '', as well as the boolean false.
|
|
@@ -76,71 +76,84 @@ var ReadOnlyCell = function ReadOnlyCell(_ref2) {
|
|
|
76
76
|
}, renderItem(datasourceTypeWithValues));
|
|
77
77
|
};
|
|
78
78
|
var InlineEditableCell = function InlineEditableCell(_ref3) {
|
|
79
|
-
var
|
|
80
|
-
|
|
79
|
+
var ari = _ref3.ari,
|
|
80
|
+
values = _ref3.values,
|
|
81
81
|
columnKey = _ref3.columnKey,
|
|
82
|
-
columnType = _ref3.columnType,
|
|
83
82
|
renderItem = _ref3.renderItem,
|
|
83
|
+
integrationKey = _ref3.integrationKey,
|
|
84
84
|
wrappedColumnKeys = _ref3.wrappedColumnKeys;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
ari = item.ari;
|
|
94
|
-
if (!rowData || !columnKey || !rowData[columnKey]) {
|
|
95
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Check if field is editable
|
|
99
|
-
var isEditable = !!ari && !!integrationKey && (0, _editType.isEditTypeSupported)(columnType);
|
|
100
|
-
|
|
101
|
-
// Need to make sure we keep falsy values like 0 and '', as well as the boolean false.
|
|
102
|
-
var value = (_rowData$columnKey2 = rowData[columnKey]) === null || _rowData$columnKey2 === void 0 ? void 0 : _rowData$columnKey2.data;
|
|
103
|
-
var values = Array.isArray(value) ? value : [value];
|
|
104
|
-
var datasourceTypeWithValues = {
|
|
105
|
-
type: columnType,
|
|
106
|
-
values: values
|
|
107
|
-
};
|
|
85
|
+
// Execute fn is only returned when the field is editable and the action schema exists
|
|
86
|
+
var _useExecuteAtomicActi = (0, _actions.useExecuteAtomicAction)({
|
|
87
|
+
ari: ari,
|
|
88
|
+
fieldKey: columnKey,
|
|
89
|
+
integrationKey: integrationKey
|
|
90
|
+
}),
|
|
91
|
+
execute = _useExecuteAtomicActi.execute;
|
|
92
|
+
var isEditable = !!execute;
|
|
108
93
|
var readView = /*#__PURE__*/_react.default.createElement(TooltipWrapper, {
|
|
109
94
|
columnKey: columnKey,
|
|
110
|
-
datasourceTypeWithValues:
|
|
95
|
+
datasourceTypeWithValues: values,
|
|
111
96
|
wrappedColumnKeys: wrappedColumnKeys
|
|
112
97
|
}, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
113
98
|
testId: "inline-edit-read-view",
|
|
114
99
|
paddingInline: isEditable ? 'space.075' : 'space.100',
|
|
115
100
|
paddingBlock: "space.050",
|
|
116
101
|
xcss: truncateTextStyles
|
|
117
|
-
}, renderItem(
|
|
118
|
-
|
|
102
|
+
}, renderItem(values)));
|
|
103
|
+
if (!isEditable) {
|
|
104
|
+
return readView;
|
|
105
|
+
}
|
|
106
|
+
return /*#__PURE__*/_react.default.createElement(_inlineEdit.InlineEdit, {
|
|
119
107
|
ari: ari,
|
|
108
|
+
execute: execute,
|
|
109
|
+
readView: readView,
|
|
120
110
|
columnKey: columnKey,
|
|
121
|
-
datasourceTypeWithValues:
|
|
122
|
-
|
|
123
|
-
}) : readView;
|
|
111
|
+
datasourceTypeWithValues: values
|
|
112
|
+
});
|
|
124
113
|
};
|
|
125
114
|
var TableCellContent = exports.TableCellContent = function TableCellContent(_ref4) {
|
|
126
|
-
var
|
|
115
|
+
var id = _ref4.id,
|
|
116
|
+
columnKey = _ref4.columnKey,
|
|
127
117
|
columnType = _ref4.columnType,
|
|
128
|
-
id = _ref4.id,
|
|
129
118
|
renderItem = _ref4.renderItem,
|
|
130
119
|
wrappedColumnKeys = _ref4.wrappedColumnKeys;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
120
|
+
var item = (0, _state.useDatasourceItem)({
|
|
121
|
+
id: id
|
|
122
|
+
});
|
|
123
|
+
if (item) {
|
|
124
|
+
var integrationKey = item.integrationKey,
|
|
125
|
+
ari = item.ari,
|
|
126
|
+
rowData = item.data;
|
|
127
|
+
var isEditType = !!ari && !!integrationKey && rowData[columnKey] && (0, _editType.isEditTypeSupported)(columnType);
|
|
128
|
+
if (isEditType) {
|
|
129
|
+
var _rowData$columnKey2;
|
|
130
|
+
// Need to make sure we keep falsy values like 0 and '', as well as the boolean false.
|
|
131
|
+
var value = (_rowData$columnKey2 = rowData[columnKey]) === null || _rowData$columnKey2 === void 0 ? void 0 : _rowData$columnKey2.data;
|
|
132
|
+
var values = Array.isArray(value) ? value : [value];
|
|
133
|
+
var datasourceTypeWithValues = {
|
|
134
|
+
type: columnType,
|
|
135
|
+
values: values
|
|
136
|
+
};
|
|
137
|
+
return /*#__PURE__*/_react.default.createElement(InlineEditableCell, {
|
|
138
|
+
ari: ari,
|
|
139
|
+
columnKey: columnKey,
|
|
140
|
+
renderItem: renderItem,
|
|
141
|
+
integrationKey: integrationKey,
|
|
142
|
+
values: datasourceTypeWithValues,
|
|
143
|
+
wrappedColumnKeys: wrappedColumnKeys
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
148
|
+
testId: "inline-edit-read-view",
|
|
149
|
+
paddingInline: "space.100",
|
|
150
|
+
paddingBlock: "space.050",
|
|
151
|
+
xcss: truncateTextStyles
|
|
152
|
+
}, /*#__PURE__*/_react.default.createElement(ReadOnlyCell, {
|
|
139
153
|
id: id,
|
|
140
154
|
columnKey: columnKey,
|
|
141
155
|
columnType: columnType,
|
|
142
156
|
wrappedColumnKeys: wrappedColumnKeys,
|
|
143
157
|
renderItem: renderItem
|
|
144
|
-
});
|
|
145
|
-
return renderedContent;
|
|
158
|
+
}));
|
|
146
159
|
};
|
|
@@ -12,8 +12,9 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
var _inlineEdit = _interopRequireDefault(require("@atlaskit/inline-edit"));
|
|
14
14
|
var _primitives = require("@atlaskit/primitives");
|
|
15
|
+
var _responseItem = require("../../../common/utils/response-item");
|
|
16
|
+
var _useDatasourceTableFlag = require("../../../hooks/useDatasourceTableFlag");
|
|
15
17
|
var _state = require("../../../state");
|
|
16
|
-
var _actions = require("../../../state/actions");
|
|
17
18
|
var _editType = require("../edit-type");
|
|
18
19
|
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); }
|
|
19
20
|
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; }
|
|
@@ -33,11 +34,11 @@ var mapUpdatedItem = function mapUpdatedItem(type, existingItem, columnKey, newV
|
|
|
33
34
|
return null;
|
|
34
35
|
};
|
|
35
36
|
var InlineEdit = exports.InlineEdit = function InlineEdit(_ref) {
|
|
36
|
-
var _item$integrationKey;
|
|
37
37
|
var ari = _ref.ari,
|
|
38
|
+
execute = _ref.execute,
|
|
39
|
+
_readView = _ref.readView,
|
|
38
40
|
columnKey = _ref.columnKey,
|
|
39
|
-
datasourceTypeWithValues = _ref.datasourceTypeWithValues
|
|
40
|
-
_readView = _ref.readView;
|
|
41
|
+
datasourceTypeWithValues = _ref.datasourceTypeWithValues;
|
|
41
42
|
var _useState = (0, _react.useState)(false),
|
|
42
43
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
43
44
|
isEditing = _useState2[0],
|
|
@@ -45,16 +46,15 @@ var InlineEdit = exports.InlineEdit = function InlineEdit(_ref) {
|
|
|
45
46
|
var item = (0, _state.useDatasourceItem)({
|
|
46
47
|
id: ari
|
|
47
48
|
});
|
|
49
|
+
var url = (0, _responseItem.getResourceUrl)(item === null || item === void 0 ? void 0 : item.data);
|
|
50
|
+
var _useDatasourceTableFl = (0, _useDatasourceTableFlag.useDatasourceTableFlag)({
|
|
51
|
+
url: url
|
|
52
|
+
}),
|
|
53
|
+
showErrorFlag = _useDatasourceTableFl.showErrorFlag;
|
|
48
54
|
var _useDatasourceActions = (0, _state.useDatasourceActions)(),
|
|
49
55
|
onUpdateItem = _useDatasourceActions.onUpdateItem;
|
|
50
|
-
var _useExecuteAtomicActi = (0, _actions.useExecuteAtomicAction)({
|
|
51
|
-
ari: ari,
|
|
52
|
-
fieldKey: columnKey,
|
|
53
|
-
integrationKey: (_item$integrationKey = item === null || item === void 0 ? void 0 : item.integrationKey) !== null && _item$integrationKey !== void 0 ? _item$integrationKey : ''
|
|
54
|
-
}),
|
|
55
|
-
execute = _useExecuteAtomicActi.execute;
|
|
56
56
|
var onCommitUpdate = (0, _react.useCallback)(function (value) {
|
|
57
|
-
if (!
|
|
57
|
+
if (!item) {
|
|
58
58
|
setIsEditing(false);
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
@@ -66,12 +66,11 @@ var InlineEdit = exports.InlineEdit = function InlineEdit(_ref) {
|
|
|
66
66
|
}
|
|
67
67
|
onUpdateItem(ari, newItem);
|
|
68
68
|
execute(value).catch(function (error) {
|
|
69
|
-
|
|
70
|
-
console.error(error);
|
|
69
|
+
showErrorFlag();
|
|
71
70
|
onUpdateItem(ari, existingData);
|
|
72
71
|
});
|
|
73
72
|
setIsEditing(false);
|
|
74
|
-
}, [ari, execute, datasourceTypeWithValues, item, columnKey, onUpdateItem]);
|
|
73
|
+
}, [ari, execute, datasourceTypeWithValues, item, columnKey, onUpdateItem, showErrorFlag]);
|
|
75
74
|
return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
76
75
|
xcss: containerStyles
|
|
77
76
|
}, /*#__PURE__*/_react.default.createElement(_inlineEdit.default, (0, _extends2.default)({}, (0, _editType.editType)(datasourceTypeWithValues), {
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const isLink = data => typeof data === 'object' && 'url' in data;
|
|
2
|
+
const getLinkTypeUrl = data => isLink(data) ? data.url : undefined;
|
|
3
|
+
export const getResourceUrl = data => {
|
|
4
|
+
var _data$key, _data$title;
|
|
5
|
+
return getLinkTypeUrl(data === null || data === void 0 ? void 0 : (_data$key = data['key']) === null || _data$key === void 0 ? void 0 : _data$key.data) || getLinkTypeUrl(data === null || data === void 0 ? void 0 : (_data$title = data['title']) === null || _data$title === void 0 ? void 0 : _data$title.data);
|
|
6
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React, { useCallback, useMemo } from 'react';
|
|
2
|
+
import { FormattedMessage } from 'react-intl-next';
|
|
3
|
+
import uuid from 'uuid';
|
|
4
|
+
import { useFlags } from '@atlaskit/flag';
|
|
5
|
+
import CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';
|
|
6
|
+
import { issueLikeTableMessages } from '../ui/issue-like-table/messages';
|
|
7
|
+
export const useDatasourceTableFlag = options => {
|
|
8
|
+
const {
|
|
9
|
+
showFlag
|
|
10
|
+
} = 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
|
+
const showErrorFlag = useCallback(args => {
|
|
20
|
+
showFlag({
|
|
21
|
+
actions,
|
|
22
|
+
description: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateErrorGenericDescription),
|
|
23
|
+
// We need IconTile (currently in beta) in order to scale the new icon to 24px
|
|
24
|
+
// eslint-disable-next-line @atlaskit/design-system/no-legacy-icons
|
|
25
|
+
icon: /*#__PURE__*/React.createElement(CrossCircleIcon, {
|
|
26
|
+
label: "Error",
|
|
27
|
+
primaryColor: "var(--ds-icon-danger, #C9372C)"
|
|
28
|
+
}),
|
|
29
|
+
id: uuid(),
|
|
30
|
+
isAutoDismiss: true,
|
|
31
|
+
title: /*#__PURE__*/React.createElement(FormattedMessage, issueLikeTableMessages.updateErrorGenericTitle),
|
|
32
|
+
...args
|
|
33
|
+
});
|
|
34
|
+
}, [actions, showFlag]);
|
|
35
|
+
return {
|
|
36
|
+
showErrorFlag
|
|
37
|
+
};
|
|
38
|
+
};
|
|
@@ -103,7 +103,7 @@ const getFieldUpdateActionByAri = (state, {
|
|
|
103
103
|
}) => {
|
|
104
104
|
var _state$permissions$ar, _state$permissions$ar2, _state$actionsByInteg;
|
|
105
105
|
const isEditable = (_state$permissions$ar = state.permissions[ari]) === null || _state$permissions$ar === void 0 ? void 0 : (_state$permissions$ar2 = _state$permissions$ar[fieldKey]) === null || _state$permissions$ar2 === void 0 ? void 0 : _state$permissions$ar2.isEditable;
|
|
106
|
-
if (isEditable
|
|
106
|
+
if (!isEditable) {
|
|
107
107
|
return;
|
|
108
108
|
}
|
|
109
109
|
return (_state$actionsByInteg = state.actionsByIntegration[integrationKey]) === null || _state$actionsByInteg === void 0 ? void 0 : _state$actionsByInteg[fieldKey];
|
|
@@ -11,6 +11,7 @@ import styled from '@emotion/styled';
|
|
|
11
11
|
import debounce from 'lodash/debounce';
|
|
12
12
|
import { useIntl } from 'react-intl-next';
|
|
13
13
|
import invariant from 'tiny-invariant';
|
|
14
|
+
import { FlagsProvider } from '@atlaskit/flag';
|
|
14
15
|
import { Skeleton } from '@atlaskit/linking-common';
|
|
15
16
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
16
17
|
import { extractClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
|
|
@@ -31,7 +32,7 @@ import { DraggableTableHeading } from './draggable-table-heading';
|
|
|
31
32
|
import TableEmptyState from './empty-state';
|
|
32
33
|
import { renderType, stringifyType } from './render-type';
|
|
33
34
|
import { InlineEditableTableCell, Table, TableCell, TableHeading, withTablePluginHeaderPrefix } from './styled';
|
|
34
|
-
import { TableCellContent } from './table-cell-content';
|
|
35
|
+
import { ReadOnlyCell, TableCellContent } from './table-cell-content';
|
|
35
36
|
import { TruncateTextTag } from './truncate-text-tag';
|
|
36
37
|
import { useIsOnScreen } from './useIsOnScreen';
|
|
37
38
|
import { COLUMN_BASE_WIDTH, getWidthCss } from './utils';
|
|
@@ -469,7 +470,14 @@ export const IssueLikeDataTableView = ({
|
|
|
469
470
|
return {
|
|
470
471
|
key,
|
|
471
472
|
columnKey: key,
|
|
472
|
-
|
|
473
|
+
// eslint-disable-next-line @atlaskit/platform/ensure-feature-flag-prefix
|
|
474
|
+
content: fg('platform-datasources-enable-two-way-sync') ? jsx(TableCellContent, {
|
|
475
|
+
id: id,
|
|
476
|
+
columnKey: key,
|
|
477
|
+
columnType: type,
|
|
478
|
+
wrappedColumnKeys: wrappedColumnKeys,
|
|
479
|
+
renderItem: renderItem
|
|
480
|
+
}) : jsx(ReadOnlyCell, {
|
|
473
481
|
id: id,
|
|
474
482
|
columnKey: key,
|
|
475
483
|
columnType: type,
|
|
@@ -556,7 +564,7 @@ export const IssueLikeDataTableView = ({
|
|
|
556
564
|
}
|
|
557
565
|
}, [experienceId, extensionKey, hasFullSchema, onLoadDatasourceDetails]);
|
|
558
566
|
const isEditable = onVisibleColumnKeysChange && hasData;
|
|
559
|
-
|
|
567
|
+
const view = jsx("div", {
|
|
560
568
|
/* There is required contentEditable={true} in editor-card-plugin
|
|
561
569
|
* But this brakes how DND works. We set contentEditable={false} to allow DND to work
|
|
562
570
|
* when dragging is initiated on top of a column label.
|
|
@@ -704,5 +712,6 @@ export const IssueLikeDataTableView = ({
|
|
|
704
712
|
}, content);
|
|
705
713
|
}
|
|
706
714
|
}))))));
|
|
715
|
+
return fg('platform-datasources-enable-two-way-sync') ? jsx(FlagsProvider, null, view) : view;
|
|
707
716
|
};
|
|
708
717
|
export const EmptyState = TableEmptyState;
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import { defineMessages } from 'react-intl-next';
|
|
2
2
|
export const issueLikeTableMessages = defineMessages({
|
|
3
|
+
goToResourceLink: {
|
|
4
|
+
id: 'linkDataSource.issue-line-table.go-to-resource.nonfinal',
|
|
5
|
+
description: 'Link to navigate to the resource page',
|
|
6
|
+
defaultMessage: 'Go to item'
|
|
7
|
+
},
|
|
8
|
+
updateErrorGenericDescription: {
|
|
9
|
+
id: 'linkDataSource.issue-line-table.error-generic-description.nonfinal',
|
|
10
|
+
description: 'Generic error message description shown when updating issue field fails',
|
|
11
|
+
defaultMessage: 'We had an issue trying to complete the update. Refresh the page and try again.'
|
|
12
|
+
},
|
|
13
|
+
updateErrorGenericTitle: {
|
|
14
|
+
id: 'linkDataSource.issue-line-table.error-generic-title.nonfinal',
|
|
15
|
+
description: 'Generic error message title shown when updating issue field fails',
|
|
16
|
+
defaultMessage: 'Something went wrong'
|
|
17
|
+
},
|
|
3
18
|
wrapText: {
|
|
4
19
|
id: 'linkDataSource.issue-line-table.wrap-text',
|
|
5
20
|
description: 'Table header Dropdown item for making whole column to wrap text',
|