@atlaskit/link-datasource 7.8.1 → 7.9.0
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 +21 -0
- package/dist/cjs/ui/assets-modal/modal/index.js +4 -4
- package/dist/cjs/ui/assets-modal/modal/render-assets-content/index.js +1 -0
- package/dist/cjs/ui/assets-modal/search-container/index.js +1 -0
- package/dist/cjs/ui/issue-like-table/render-type/object-reference/index.js +75 -0
- package/dist/cjs/ui/issue-like-table/render-type/renderType.js +12 -0
- package/dist/cjs/ui/issue-like-table/render-type/stringifyType.js +1 -0
- package/dist/es2019/ui/assets-modal/modal/index.js +4 -4
- package/dist/es2019/ui/assets-modal/modal/render-assets-content/index.js +1 -0
- package/dist/es2019/ui/assets-modal/search-container/index.js +1 -0
- package/dist/es2019/ui/issue-like-table/render-type/object-reference/index.js +59 -0
- package/dist/es2019/ui/issue-like-table/render-type/renderType.js +10 -0
- package/dist/es2019/ui/issue-like-table/render-type/stringifyType.js +1 -0
- package/dist/esm/ui/assets-modal/modal/index.js +4 -4
- package/dist/esm/ui/assets-modal/modal/render-assets-content/index.js +1 -0
- package/dist/esm/ui/assets-modal/search-container/index.js +1 -0
- package/dist/esm/ui/issue-like-table/render-type/object-reference/index.js +66 -0
- package/dist/esm/ui/issue-like-table/render-type/renderType.js +12 -0
- package/dist/esm/ui/issue-like-table/render-type/stringifyType.js +1 -0
- package/dist/types/ui/issue-like-table/render-type/object-reference/index.d.ts +8 -0
- package/package.json +6 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atlaskit/link-datasource
|
|
2
2
|
|
|
3
|
+
## 7.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`cdcc836eb6f91`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cdcc836eb6f91) -
|
|
8
|
+
Add support for the new `objectReference` datasource type (`{ url, text?, avatarUrl? }`). Behind
|
|
9
|
+
`astral_assets_macro_table_ui_uplift` it renders as an `AvatarTag` with a Smart Link hover card
|
|
10
|
+
that opens in a new tab; when the gate is off it falls back to the existing link render type.
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
16
|
+
## 7.8.2
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- [`1a4bf8ba80113`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/1a4bf8ba80113) -
|
|
21
|
+
Remove the `platform_lp_sllv_preserve_assets_columns` feature gate and permanently preserve
|
|
22
|
+
selected Assets columns when editing AQL within the same object schema.
|
|
23
|
+
|
|
3
24
|
## 7.8.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -165,7 +165,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
165
165
|
// newly selected ones - refetching for them, and throwing away the results just received. The
|
|
166
166
|
// re-render this schedules is discarded before commit, so the hook only ever sees the reconciled
|
|
167
167
|
// selection.
|
|
168
|
-
if (
|
|
168
|
+
if (hasPreservedColumns && status === 'resolved' && columns.length > 0) {
|
|
169
169
|
var availableKeys = new Set(columns.map(function (_ref) {
|
|
170
170
|
var key = _ref.key;
|
|
171
171
|
return key;
|
|
@@ -241,7 +241,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
241
241
|
}, []);
|
|
242
242
|
(0, _react.useEffect)(function () {
|
|
243
243
|
// A preserved selection owns the columns, so restoring the saved or default ones would undo it
|
|
244
|
-
if (
|
|
244
|
+
if (hasPreservedColumns) {
|
|
245
245
|
return;
|
|
246
246
|
}
|
|
247
247
|
var newVisibleColumnKeys = initialVisibleColumnKeys && initialVisibleColumnKeys.length > 0 && apiVersion === VERSION_TWO ? initialVisibleColumnKeys : defaultVisibleColumnKeys;
|
|
@@ -251,7 +251,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
251
251
|
// The response described none of the requested fields, so there is nothing valid to keep and
|
|
252
252
|
// no reported defaults to fall back to. Give up preserving and re-request the schema's own
|
|
253
253
|
// defaults. This one has to stay an effect because it issues a request.
|
|
254
|
-
if (!
|
|
254
|
+
if (!hasPreservedColumns || status !== 'resolved' || columns.length > 0) {
|
|
255
255
|
return;
|
|
256
256
|
}
|
|
257
257
|
setHasPreservedColumns(false);
|
|
@@ -339,7 +339,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
339
339
|
}
|
|
340
340
|
// An empty selection has nothing worth preserving, and keeping it would stop the
|
|
341
341
|
// response's defaults from being adopted
|
|
342
|
-
var shouldPreserveColumns =
|
|
342
|
+
var shouldPreserveColumns = schemaId === searchSchemaId && (visibleColumnKeys !== null && visibleColumnKeys !== void 0 ? visibleColumnKeys : []).length > 0;
|
|
343
343
|
setHasPreservedColumns(shouldPreserveColumns);
|
|
344
344
|
setAql(searchAql);
|
|
345
345
|
setSchemaId(searchSchemaId);
|
|
@@ -109,6 +109,7 @@ var RenderAssetsContent = exports.RenderAssetsContent = function RenderAssetsCon
|
|
|
109
109
|
return /*#__PURE__*/React.createElement(_stack.Stack, {
|
|
110
110
|
space: "space.200"
|
|
111
111
|
}, status !== 'empty' && /*#__PURE__*/React.createElement(_heading.default, {
|
|
112
|
+
as: "h2",
|
|
112
113
|
size: "xsmall"
|
|
113
114
|
}, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _messages.modalMessages.tablePreviewText)), renderAssetsContentView());
|
|
114
115
|
}
|
|
@@ -126,6 +126,7 @@ var AssetsSearchContainer = exports.AssetsSearchContainer = function AssetsSearc
|
|
|
126
126
|
}, /*#__PURE__*/React.createElement(_closeButton.CloseButton, {
|
|
127
127
|
onClick: onCancel
|
|
128
128
|
})))), (0, _fg.fg)('astral_assets_macro_table_ui_uplift') ? /*#__PURE__*/React.createElement(_heading.default, {
|
|
129
|
+
as: "h2",
|
|
129
130
|
size: "xsmall"
|
|
130
131
|
}, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _messages.modalMessages.filterObjectsText)) : null, /*#__PURE__*/React.createElement(_styled.FormRowContainer, null, /*#__PURE__*/React.createElement(_aqlSearchInput.AqlSearchInput, {
|
|
131
132
|
value: (_initialSearchData$aq = initialSearchData.aql) !== null && _initialSearchData$aq !== void 0 ? _initialSearchData$aq : DEFAULT_AQL_QUERY,
|
|
@@ -0,0 +1,75 @@
|
|
|
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.default = exports.OBJECT_REFERENCE_TYPE_TEST_ID = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactIntl = require("react-intl");
|
|
12
|
+
var _anchor = require("@atlaskit/primitives/compiled/anchor");
|
|
13
|
+
var _useSmartLinkDestinationUrl = require("@atlaskit/smart-card/hook/use-smart-link-destination-url");
|
|
14
|
+
var _hover = require("@atlaskit/smart-card/hover");
|
|
15
|
+
var _avatarTag = _interopRequireDefault(require("@atlaskit/tag/avatar-tag"));
|
|
16
|
+
var _teamsAvatar = _interopRequireDefault(require("@atlaskit/teams-avatar/teams-avatar"));
|
|
17
|
+
var _messages = require("../link/messages");
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
|
+
var OBJECT_REFERENCE_TYPE_TEST_ID = exports.OBJECT_REFERENCE_TYPE_TEST_ID = 'link-datasource-render-type--object-reference';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Renders an `objectReference` datasource value as an avatar tag that links to the referenced
|
|
23
|
+
* object. Behaves like the `link` render type (opens in a new tab, shows a Smart Link hover card,
|
|
24
|
+
* honours cross-product URL wrapping) but with the look and feel of an `AvatarTag`.
|
|
25
|
+
*/
|
|
26
|
+
var ObjectReferenceRenderType = function ObjectReferenceRenderType(_ref) {
|
|
27
|
+
var url = _ref.url,
|
|
28
|
+
text = _ref.text,
|
|
29
|
+
avatarUrl = _ref.avatarUrl,
|
|
30
|
+
_ref$testId = _ref.testId,
|
|
31
|
+
testId = _ref$testId === void 0 ? OBJECT_REFERENCE_TYPE_TEST_ID : _ref$testId;
|
|
32
|
+
var _useIntl = (0, _reactIntl.useIntl)(),
|
|
33
|
+
formatMessage = _useIntl.formatMessage;
|
|
34
|
+
var destinationUrl = (0, _useSmartLinkDestinationUrl.useSmartLinkDestinationUrl)(url);
|
|
35
|
+
var newWindowLabel = formatMessage(_messages.messages.opensInNewTab);
|
|
36
|
+
|
|
37
|
+
// `AvatarTag` provides the controlled avatar props (size, appearance, border colour); we only
|
|
38
|
+
// supply the image source and accessible name.
|
|
39
|
+
var avatar = (0, _react.useMemo)(function () {
|
|
40
|
+
return function (props) {
|
|
41
|
+
return /*#__PURE__*/_react.default.createElement(_teamsAvatar.default, (0, _extends2.default)({}, props, {
|
|
42
|
+
src: avatarUrl,
|
|
43
|
+
name: text,
|
|
44
|
+
testId: "".concat(testId, "--avatar")
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
}, [avatarUrl, text, testId]);
|
|
48
|
+
var linkComponent = (0, _react.useMemo)(function () {
|
|
49
|
+
return function (props) {
|
|
50
|
+
return /*#__PURE__*/_react.default.createElement(_anchor.Anchor, (0, _extends2.default)({}, props, {
|
|
51
|
+
target: "_blank",
|
|
52
|
+
rel: "noopener noreferrer",
|
|
53
|
+
newWindowLabel: newWindowLabel
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
}, [newWindowLabel]);
|
|
57
|
+
|
|
58
|
+
// url can be undefined before data is fetched whilst adding a new column to display
|
|
59
|
+
if (!url) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return /*#__PURE__*/_react.default.createElement(_hover.HoverCard, {
|
|
63
|
+
url: url
|
|
64
|
+
}, /*#__PURE__*/_react.default.createElement(_avatarTag.default, {
|
|
65
|
+
type: "other",
|
|
66
|
+
text: text,
|
|
67
|
+
href: destinationUrl,
|
|
68
|
+
isRemovable: false,
|
|
69
|
+
avatar: avatar,
|
|
70
|
+
linkComponent: linkComponent,
|
|
71
|
+
testId: testId
|
|
72
|
+
}));
|
|
73
|
+
};
|
|
74
|
+
var _default_1 = /*#__PURE__*/_react.default.memo(ObjectReferenceRenderType);
|
|
75
|
+
var _default = exports.default = _default_1;
|
|
@@ -7,12 +7,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.renderType = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _fg = require("@atlaskit/platform-feature-flags/fg");
|
|
10
11
|
var _boolean = _interopRequireDefault(require("./boolean"));
|
|
11
12
|
var _dateRange = _interopRequireDefault(require("./date-range"));
|
|
12
13
|
var _dateTime = _interopRequireDefault(require("./date-time"));
|
|
13
14
|
var _icon = _interopRequireDefault(require("./icon"));
|
|
14
15
|
var _link = _interopRequireDefault(require("./link"));
|
|
15
16
|
var _number = _interopRequireDefault(require("./number"));
|
|
17
|
+
var _objectReference = _interopRequireDefault(require("./object-reference"));
|
|
16
18
|
var _richtext = _interopRequireDefault(require("./richtext"));
|
|
17
19
|
var _status = _interopRequireDefault(require("./status"));
|
|
18
20
|
var _tag = _interopRequireDefault(require("./tag"));
|
|
@@ -64,6 +66,16 @@ var renderType = exports.renderType = function renderType(item) {
|
|
|
64
66
|
number: numberValue
|
|
65
67
|
});
|
|
66
68
|
});
|
|
69
|
+
case 'objectReference':
|
|
70
|
+
return item.values.map(function (objectReferenceValue) {
|
|
71
|
+
return (0, _fg.fg)('astral_assets_macro_table_ui_uplift') ? /*#__PURE__*/_react.default.createElement(_objectReference.default, (0, _extends2.default)({
|
|
72
|
+
key: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url
|
|
73
|
+
}, objectReferenceValue)) : /*#__PURE__*/_react.default.createElement(_link.default, {
|
|
74
|
+
key: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url,
|
|
75
|
+
url: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url,
|
|
76
|
+
text: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.text
|
|
77
|
+
});
|
|
78
|
+
});
|
|
67
79
|
case 'status':
|
|
68
80
|
return item.values.map(function (statusValue) {
|
|
69
81
|
return /*#__PURE__*/_react.default.createElement(_status.default, statusValue);
|
|
@@ -135,7 +135,7 @@ const PlainAssetsConfigModal = props => {
|
|
|
135
135
|
// newly selected ones - refetching for them, and throwing away the results just received. The
|
|
136
136
|
// re-render this schedules is discarded before commit, so the hook only ever sees the reconciled
|
|
137
137
|
// selection.
|
|
138
|
-
if (
|
|
138
|
+
if (hasPreservedColumns && status === 'resolved' && columns.length > 0) {
|
|
139
139
|
const availableKeys = new Set(columns.map(({
|
|
140
140
|
key
|
|
141
141
|
}) => key));
|
|
@@ -209,7 +209,7 @@ const PlainAssetsConfigModal = props => {
|
|
|
209
209
|
}, []);
|
|
210
210
|
useEffect(() => {
|
|
211
211
|
// A preserved selection owns the columns, so restoring the saved or default ones would undo it
|
|
212
|
-
if (
|
|
212
|
+
if (hasPreservedColumns) {
|
|
213
213
|
return;
|
|
214
214
|
}
|
|
215
215
|
const newVisibleColumnKeys = initialVisibleColumnKeys && initialVisibleColumnKeys.length > 0 && apiVersion === VERSION_TWO ? initialVisibleColumnKeys : defaultVisibleColumnKeys;
|
|
@@ -219,7 +219,7 @@ const PlainAssetsConfigModal = props => {
|
|
|
219
219
|
// The response described none of the requested fields, so there is nothing valid to keep and
|
|
220
220
|
// no reported defaults to fall back to. Give up preserving and re-request the schema's own
|
|
221
221
|
// defaults. This one has to stay an effect because it issues a request.
|
|
222
|
-
if (!
|
|
222
|
+
if (!hasPreservedColumns || status !== 'resolved' || columns.length > 0) {
|
|
223
223
|
return;
|
|
224
224
|
}
|
|
225
225
|
setHasPreservedColumns(false);
|
|
@@ -305,7 +305,7 @@ const PlainAssetsConfigModal = props => {
|
|
|
305
305
|
}
|
|
306
306
|
// An empty selection has nothing worth preserving, and keeping it would stop the
|
|
307
307
|
// response's defaults from being adopted
|
|
308
|
-
const shouldPreserveColumns =
|
|
308
|
+
const shouldPreserveColumns = schemaId === searchSchemaId && (visibleColumnKeys !== null && visibleColumnKeys !== void 0 ? visibleColumnKeys : []).length > 0;
|
|
309
309
|
setHasPreservedColumns(shouldPreserveColumns);
|
|
310
310
|
setAql(searchAql);
|
|
311
311
|
setSchemaId(searchSchemaId);
|
|
@@ -90,6 +90,7 @@ export const RenderAssetsContent = props => {
|
|
|
90
90
|
return /*#__PURE__*/React.createElement(Stack, {
|
|
91
91
|
space: "space.200"
|
|
92
92
|
}, status !== 'empty' && /*#__PURE__*/React.createElement(Heading, {
|
|
93
|
+
as: "h2",
|
|
93
94
|
size: "xsmall"
|
|
94
95
|
}, /*#__PURE__*/React.createElement(FormattedMessage, modalMessages.tablePreviewText)), renderAssetsContentView());
|
|
95
96
|
}
|
|
@@ -121,6 +121,7 @@ export const AssetsSearchContainer = props => {
|
|
|
121
121
|
}, /*#__PURE__*/React.createElement(CloseButton, {
|
|
122
122
|
onClick: onCancel
|
|
123
123
|
})))), fg('astral_assets_macro_table_ui_uplift') ? /*#__PURE__*/React.createElement(Heading, {
|
|
124
|
+
as: "h2",
|
|
124
125
|
size: "xsmall"
|
|
125
126
|
}, /*#__PURE__*/React.createElement(FormattedMessage, modalMessages.filterObjectsText)) : null, /*#__PURE__*/React.createElement(FormRowContainer, null, /*#__PURE__*/React.createElement(AqlSearchInput, {
|
|
126
127
|
value: (_initialSearchData$aq = initialSearchData.aql) !== null && _initialSearchData$aq !== void 0 ? _initialSearchData$aq : DEFAULT_AQL_QUERY,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { Anchor } from '@atlaskit/primitives/compiled/anchor';
|
|
5
|
+
import { useSmartLinkDestinationUrl } from '@atlaskit/smart-card/hook/use-smart-link-destination-url';
|
|
6
|
+
import { HoverCard } from '@atlaskit/smart-card/hover';
|
|
7
|
+
import AvatarTag from '@atlaskit/tag/avatar-tag';
|
|
8
|
+
import TeamAvatar from '@atlaskit/teams-avatar/teams-avatar';
|
|
9
|
+
import { messages } from '../link/messages';
|
|
10
|
+
export const OBJECT_REFERENCE_TYPE_TEST_ID = 'link-datasource-render-type--object-reference';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Renders an `objectReference` datasource value as an avatar tag that links to the referenced
|
|
14
|
+
* object. Behaves like the `link` render type (opens in a new tab, shows a Smart Link hover card,
|
|
15
|
+
* honours cross-product URL wrapping) but with the look and feel of an `AvatarTag`.
|
|
16
|
+
*/
|
|
17
|
+
const ObjectReferenceRenderType = ({
|
|
18
|
+
url,
|
|
19
|
+
text,
|
|
20
|
+
avatarUrl,
|
|
21
|
+
testId = OBJECT_REFERENCE_TYPE_TEST_ID
|
|
22
|
+
}) => {
|
|
23
|
+
const {
|
|
24
|
+
formatMessage
|
|
25
|
+
} = useIntl();
|
|
26
|
+
const destinationUrl = useSmartLinkDestinationUrl(url);
|
|
27
|
+
const newWindowLabel = formatMessage(messages.opensInNewTab);
|
|
28
|
+
|
|
29
|
+
// `AvatarTag` provides the controlled avatar props (size, appearance, border colour); we only
|
|
30
|
+
// supply the image source and accessible name.
|
|
31
|
+
const avatar = useMemo(() => props => /*#__PURE__*/React.createElement(TeamAvatar, _extends({}, props, {
|
|
32
|
+
src: avatarUrl,
|
|
33
|
+
name: text,
|
|
34
|
+
testId: `${testId}--avatar`
|
|
35
|
+
})), [avatarUrl, text, testId]);
|
|
36
|
+
const linkComponent = useMemo(() => props => /*#__PURE__*/React.createElement(Anchor, _extends({}, props, {
|
|
37
|
+
target: "_blank",
|
|
38
|
+
rel: "noopener noreferrer",
|
|
39
|
+
newWindowLabel: newWindowLabel
|
|
40
|
+
})), [newWindowLabel]);
|
|
41
|
+
|
|
42
|
+
// url can be undefined before data is fetched whilst adding a new column to display
|
|
43
|
+
if (!url) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return /*#__PURE__*/React.createElement(HoverCard, {
|
|
47
|
+
url: url
|
|
48
|
+
}, /*#__PURE__*/React.createElement(AvatarTag, {
|
|
49
|
+
type: "other",
|
|
50
|
+
text: text,
|
|
51
|
+
href: destinationUrl,
|
|
52
|
+
isRemovable: false,
|
|
53
|
+
avatar: avatar,
|
|
54
|
+
linkComponent: linkComponent,
|
|
55
|
+
testId: testId
|
|
56
|
+
}));
|
|
57
|
+
};
|
|
58
|
+
const _default_1 = /*#__PURE__*/React.memo(ObjectReferenceRenderType);
|
|
59
|
+
export default _default_1;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
3
4
|
import BooleanRenderType from './boolean';
|
|
4
5
|
import DateRangeRenderType from './date-range';
|
|
5
6
|
import DateTimeRenderType from './date-time';
|
|
6
7
|
import IconRenderType from './icon';
|
|
7
8
|
import LinkRenderType from './link';
|
|
8
9
|
import NumberRenderType from './number';
|
|
10
|
+
import ObjectReferenceRenderType from './object-reference';
|
|
9
11
|
import RichTextRenderType from './richtext';
|
|
10
12
|
import StatusRenderType from './status';
|
|
11
13
|
import TagRenderType from './tag';
|
|
@@ -43,6 +45,14 @@ export const renderType = item => {
|
|
|
43
45
|
return item.values.map(numberValue => /*#__PURE__*/React.createElement(NumberRenderType, {
|
|
44
46
|
number: numberValue
|
|
45
47
|
}));
|
|
48
|
+
case 'objectReference':
|
|
49
|
+
return item.values.map(objectReferenceValue => fg('astral_assets_macro_table_ui_uplift') ? /*#__PURE__*/React.createElement(ObjectReferenceRenderType, _extends({
|
|
50
|
+
key: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url
|
|
51
|
+
}, objectReferenceValue)) : /*#__PURE__*/React.createElement(LinkRenderType, {
|
|
52
|
+
key: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url,
|
|
53
|
+
url: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url,
|
|
54
|
+
text: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.text
|
|
55
|
+
}));
|
|
46
56
|
case 'status':
|
|
47
57
|
return item.values.map(statusValue => /*#__PURE__*/React.createElement(StatusRenderType, statusValue));
|
|
48
58
|
case 'string':
|
|
@@ -157,7 +157,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
157
157
|
// newly selected ones - refetching for them, and throwing away the results just received. The
|
|
158
158
|
// re-render this schedules is discarded before commit, so the hook only ever sees the reconciled
|
|
159
159
|
// selection.
|
|
160
|
-
if (
|
|
160
|
+
if (hasPreservedColumns && status === 'resolved' && columns.length > 0) {
|
|
161
161
|
var availableKeys = new Set(columns.map(function (_ref) {
|
|
162
162
|
var key = _ref.key;
|
|
163
163
|
return key;
|
|
@@ -233,7 +233,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
233
233
|
}, []);
|
|
234
234
|
useEffect(function () {
|
|
235
235
|
// A preserved selection owns the columns, so restoring the saved or default ones would undo it
|
|
236
|
-
if (
|
|
236
|
+
if (hasPreservedColumns) {
|
|
237
237
|
return;
|
|
238
238
|
}
|
|
239
239
|
var newVisibleColumnKeys = initialVisibleColumnKeys && initialVisibleColumnKeys.length > 0 && apiVersion === VERSION_TWO ? initialVisibleColumnKeys : defaultVisibleColumnKeys;
|
|
@@ -243,7 +243,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
243
243
|
// The response described none of the requested fields, so there is nothing valid to keep and
|
|
244
244
|
// no reported defaults to fall back to. Give up preserving and re-request the schema's own
|
|
245
245
|
// defaults. This one has to stay an effect because it issues a request.
|
|
246
|
-
if (!
|
|
246
|
+
if (!hasPreservedColumns || status !== 'resolved' || columns.length > 0) {
|
|
247
247
|
return;
|
|
248
248
|
}
|
|
249
249
|
setHasPreservedColumns(false);
|
|
@@ -331,7 +331,7 @@ var PlainAssetsConfigModal = function PlainAssetsConfigModal(props) {
|
|
|
331
331
|
}
|
|
332
332
|
// An empty selection has nothing worth preserving, and keeping it would stop the
|
|
333
333
|
// response's defaults from being adopted
|
|
334
|
-
var shouldPreserveColumns =
|
|
334
|
+
var shouldPreserveColumns = schemaId === searchSchemaId && (visibleColumnKeys !== null && visibleColumnKeys !== void 0 ? visibleColumnKeys : []).length > 0;
|
|
335
335
|
setHasPreservedColumns(shouldPreserveColumns);
|
|
336
336
|
setAql(searchAql);
|
|
337
337
|
setSchemaId(searchSchemaId);
|
|
@@ -100,6 +100,7 @@ export var RenderAssetsContent = function RenderAssetsContent(props) {
|
|
|
100
100
|
return /*#__PURE__*/React.createElement(Stack, {
|
|
101
101
|
space: "space.200"
|
|
102
102
|
}, status !== 'empty' && /*#__PURE__*/React.createElement(Heading, {
|
|
103
|
+
as: "h2",
|
|
103
104
|
size: "xsmall"
|
|
104
105
|
}, /*#__PURE__*/React.createElement(FormattedMessage, modalMessages.tablePreviewText)), renderAssetsContentView());
|
|
105
106
|
}
|
|
@@ -117,6 +117,7 @@ export var AssetsSearchContainer = function AssetsSearchContainer(props) {
|
|
|
117
117
|
}, /*#__PURE__*/React.createElement(CloseButton, {
|
|
118
118
|
onClick: onCancel
|
|
119
119
|
})))), fg('astral_assets_macro_table_ui_uplift') ? /*#__PURE__*/React.createElement(Heading, {
|
|
120
|
+
as: "h2",
|
|
120
121
|
size: "xsmall"
|
|
121
122
|
}, /*#__PURE__*/React.createElement(FormattedMessage, modalMessages.filterObjectsText)) : null, /*#__PURE__*/React.createElement(FormRowContainer, null, /*#__PURE__*/React.createElement(AqlSearchInput, {
|
|
122
123
|
value: (_initialSearchData$aq = initialSearchData.aql) !== null && _initialSearchData$aq !== void 0 ? _initialSearchData$aq : DEFAULT_AQL_QUERY,
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React, { useMemo } from 'react';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { Anchor } from '@atlaskit/primitives/compiled/anchor';
|
|
5
|
+
import { useSmartLinkDestinationUrl } from '@atlaskit/smart-card/hook/use-smart-link-destination-url';
|
|
6
|
+
import { HoverCard } from '@atlaskit/smart-card/hover';
|
|
7
|
+
import AvatarTag from '@atlaskit/tag/avatar-tag';
|
|
8
|
+
import TeamAvatar from '@atlaskit/teams-avatar/teams-avatar';
|
|
9
|
+
import { messages } from '../link/messages';
|
|
10
|
+
export var OBJECT_REFERENCE_TYPE_TEST_ID = 'link-datasource-render-type--object-reference';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Renders an `objectReference` datasource value as an avatar tag that links to the referenced
|
|
14
|
+
* object. Behaves like the `link` render type (opens in a new tab, shows a Smart Link hover card,
|
|
15
|
+
* honours cross-product URL wrapping) but with the look and feel of an `AvatarTag`.
|
|
16
|
+
*/
|
|
17
|
+
var ObjectReferenceRenderType = function ObjectReferenceRenderType(_ref) {
|
|
18
|
+
var url = _ref.url,
|
|
19
|
+
text = _ref.text,
|
|
20
|
+
avatarUrl = _ref.avatarUrl,
|
|
21
|
+
_ref$testId = _ref.testId,
|
|
22
|
+
testId = _ref$testId === void 0 ? OBJECT_REFERENCE_TYPE_TEST_ID : _ref$testId;
|
|
23
|
+
var _useIntl = useIntl(),
|
|
24
|
+
formatMessage = _useIntl.formatMessage;
|
|
25
|
+
var destinationUrl = useSmartLinkDestinationUrl(url);
|
|
26
|
+
var newWindowLabel = formatMessage(messages.opensInNewTab);
|
|
27
|
+
|
|
28
|
+
// `AvatarTag` provides the controlled avatar props (size, appearance, border colour); we only
|
|
29
|
+
// supply the image source and accessible name.
|
|
30
|
+
var avatar = useMemo(function () {
|
|
31
|
+
return function (props) {
|
|
32
|
+
return /*#__PURE__*/React.createElement(TeamAvatar, _extends({}, props, {
|
|
33
|
+
src: avatarUrl,
|
|
34
|
+
name: text,
|
|
35
|
+
testId: "".concat(testId, "--avatar")
|
|
36
|
+
}));
|
|
37
|
+
};
|
|
38
|
+
}, [avatarUrl, text, testId]);
|
|
39
|
+
var linkComponent = useMemo(function () {
|
|
40
|
+
return function (props) {
|
|
41
|
+
return /*#__PURE__*/React.createElement(Anchor, _extends({}, props, {
|
|
42
|
+
target: "_blank",
|
|
43
|
+
rel: "noopener noreferrer",
|
|
44
|
+
newWindowLabel: newWindowLabel
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
}, [newWindowLabel]);
|
|
48
|
+
|
|
49
|
+
// url can be undefined before data is fetched whilst adding a new column to display
|
|
50
|
+
if (!url) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return /*#__PURE__*/React.createElement(HoverCard, {
|
|
54
|
+
url: url
|
|
55
|
+
}, /*#__PURE__*/React.createElement(AvatarTag, {
|
|
56
|
+
type: "other",
|
|
57
|
+
text: text,
|
|
58
|
+
href: destinationUrl,
|
|
59
|
+
isRemovable: false,
|
|
60
|
+
avatar: avatar,
|
|
61
|
+
linkComponent: linkComponent,
|
|
62
|
+
testId: testId
|
|
63
|
+
}));
|
|
64
|
+
};
|
|
65
|
+
var _default_1 = /*#__PURE__*/React.memo(ObjectReferenceRenderType);
|
|
66
|
+
export default _default_1;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React from 'react';
|
|
3
|
+
import { fg } from '@atlaskit/platform-feature-flags/fg';
|
|
3
4
|
import BooleanRenderType from './boolean';
|
|
4
5
|
import DateRangeRenderType from './date-range';
|
|
5
6
|
import DateTimeRenderType from './date-time';
|
|
6
7
|
import IconRenderType from './icon';
|
|
7
8
|
import LinkRenderType from './link';
|
|
8
9
|
import NumberRenderType from './number';
|
|
10
|
+
import ObjectReferenceRenderType from './object-reference';
|
|
9
11
|
import RichTextRenderType from './richtext';
|
|
10
12
|
import StatusRenderType from './status';
|
|
11
13
|
import TagRenderType from './tag';
|
|
@@ -57,6 +59,16 @@ export var renderType = function renderType(item) {
|
|
|
57
59
|
number: numberValue
|
|
58
60
|
});
|
|
59
61
|
});
|
|
62
|
+
case 'objectReference':
|
|
63
|
+
return item.values.map(function (objectReferenceValue) {
|
|
64
|
+
return fg('astral_assets_macro_table_ui_uplift') ? /*#__PURE__*/React.createElement(ObjectReferenceRenderType, _extends({
|
|
65
|
+
key: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url
|
|
66
|
+
}, objectReferenceValue)) : /*#__PURE__*/React.createElement(LinkRenderType, {
|
|
67
|
+
key: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url,
|
|
68
|
+
url: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.url,
|
|
69
|
+
text: objectReferenceValue === null || objectReferenceValue === void 0 ? void 0 : objectReferenceValue.text
|
|
70
|
+
});
|
|
71
|
+
});
|
|
60
72
|
case 'status':
|
|
61
73
|
return item.values.map(function (statusValue) {
|
|
62
74
|
return /*#__PURE__*/React.createElement(StatusRenderType, statusValue);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ObjectReference } from '@atlaskit/linking-types/datasource';
|
|
3
|
+
interface ObjectReferenceProps extends ObjectReference {
|
|
4
|
+
testId?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const OBJECT_REFERENCE_TYPE_TEST_ID = "link-datasource-render-type--object-reference";
|
|
7
|
+
declare const _default_1: React.MemoExoticComponent<({ url, text, avatarUrl, testId }: ObjectReferenceProps) => React.JSX.Element | null>;
|
|
8
|
+
export default _default_1;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/link-datasource",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.9.0",
|
|
4
4
|
"description": "UI Components to support linking platform dataset feature",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"@atlaskit/dropdown-menu": "^21.0.0",
|
|
54
54
|
"@atlaskit/editor-prosemirror": "^9.0.0",
|
|
55
55
|
"@atlaskit/empty-state": "^12.2.0",
|
|
56
|
-
"@atlaskit/feature-gate-js-client": "^7.
|
|
56
|
+
"@atlaskit/feature-gate-js-client": "^7.1.0",
|
|
57
57
|
"@atlaskit/flag": "^19.0.0",
|
|
58
58
|
"@atlaskit/form": "^18.3.0",
|
|
59
59
|
"@atlaskit/heading": "^8.0.0",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"@atlaskit/link-client-extension": "^8.0.0",
|
|
70
70
|
"@atlaskit/link-provider": "^6.0.0",
|
|
71
71
|
"@atlaskit/linking-common": "^13.0.0",
|
|
72
|
-
"@atlaskit/linking-types": "^16.
|
|
72
|
+
"@atlaskit/linking-types": "^16.1.0",
|
|
73
73
|
"@atlaskit/logo": "^23.3.0",
|
|
74
74
|
"@atlaskit/lozenge": "^17.0.0",
|
|
75
75
|
"@atlaskit/modal-dialog": "^17.1.0",
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"@atlaskit/smart-user-picker": "^12.8.0",
|
|
92
92
|
"@atlaskit/spinner": "^20.4.0",
|
|
93
93
|
"@atlaskit/tag": "^17.0.0",
|
|
94
|
+
"@atlaskit/teams-avatar": "^4.2.0",
|
|
94
95
|
"@atlaskit/textfield": "^10.3.0",
|
|
95
96
|
"@atlaskit/theme": "^28.2.0",
|
|
96
97
|
"@atlaskit/toggle": "^17.3.0",
|
|
@@ -98,7 +99,7 @@
|
|
|
98
99
|
"@atlaskit/tooltip": "^24.4.0",
|
|
99
100
|
"@atlaskit/top-layer": "^7.0.0",
|
|
100
101
|
"@atlaskit/ufo": "^2.0.0",
|
|
101
|
-
"@atlaskit/user-picker": "^14.
|
|
102
|
+
"@atlaskit/user-picker": "^14.4.0",
|
|
102
103
|
"@atlaskit/visually-hidden": "^4.4.0",
|
|
103
104
|
"@atlaskit/width-detector": "^7.2.0",
|
|
104
105
|
"@babel/runtime": "^7.0.0",
|
|
@@ -127,7 +128,7 @@
|
|
|
127
128
|
"@atlaskit/link-test-helpers": "^11.2.0",
|
|
128
129
|
"@atlaskit/radio": "^10.2.0",
|
|
129
130
|
"@atlaskit/ssr": "workspace:^",
|
|
130
|
-
"@atlaskit/textarea": "^10.
|
|
131
|
+
"@atlaskit/textarea": "^10.3.0",
|
|
131
132
|
"@atlassian/a11y-jest-testing": "^0.17.0",
|
|
132
133
|
"@atlassian/a11y-playwright-testing": "^0.13.0",
|
|
133
134
|
"@atlassian/experiment-test-utils": "^0.2.0",
|
|
@@ -166,9 +167,6 @@
|
|
|
166
167
|
"linking_platform_link_datasource_unit_compliant": {
|
|
167
168
|
"type": "boolean"
|
|
168
169
|
},
|
|
169
|
-
"platform_lp_sllv_preserve_assets_columns": {
|
|
170
|
-
"type": "boolean"
|
|
171
|
-
},
|
|
172
170
|
"platform_lp_sllv_on_request_settled": {
|
|
173
171
|
"type": "boolean"
|
|
174
172
|
},
|