@atlaskit/smart-card 23.12.3 → 23.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/extractors/common/icon/extractIcon.js +12 -6
- package/dist/cjs/extractors/common/icon/extractIconFromDocument.js +14 -7
- package/dist/cjs/extractors/common/icon/extractIconFromTask.js +25 -15
- package/dist/cjs/linkUrl.js +15 -0
- package/dist/cjs/messages.js +21 -1
- package/dist/cjs/utils/index.js +2 -1
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/EmbedCard/components/ExpandedFrame.js +3 -1
- package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +2 -1
- package/dist/cjs/view/InlineCard/ErroredView/index.js +4 -2
- package/dist/cjs/view/InlineCard/ForbiddenView/index.js +6 -3
- package/dist/cjs/view/InlineCard/IconAndTitleLayout/index.js +2 -1
- package/dist/cjs/view/InlineCard/ResolvedView/index.js +1 -0
- package/dist/cjs/view/LinkUrl/LinkWarningModal/hooks/use-link-warning-modal.js +76 -0
- package/dist/cjs/view/LinkUrl/LinkWarningModal/index.js +70 -0
- package/dist/cjs/view/LinkUrl/index.js +48 -0
- package/dist/cjs/view/LinkUrl/types.js +5 -0
- package/dist/es2019/extractors/common/icon/extractIcon.js +12 -6
- package/dist/es2019/extractors/common/icon/extractIconFromDocument.js +14 -7
- package/dist/es2019/extractors/common/icon/extractIconFromTask.js +24 -15
- package/dist/es2019/linkUrl.js +1 -0
- package/dist/es2019/messages.js +21 -1
- package/dist/es2019/utils/index.js +2 -1
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/EmbedCard/components/ExpandedFrame.js +3 -1
- package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +2 -1
- package/dist/es2019/view/InlineCard/ErroredView/index.js +4 -2
- package/dist/es2019/view/InlineCard/ForbiddenView/index.js +6 -3
- package/dist/es2019/view/InlineCard/IconAndTitleLayout/index.js +2 -1
- package/dist/es2019/view/InlineCard/ResolvedView/index.js +1 -0
- package/dist/es2019/view/LinkUrl/LinkWarningModal/hooks/use-link-warning-modal.js +49 -0
- package/dist/es2019/view/LinkUrl/LinkWarningModal/index.js +46 -0
- package/dist/es2019/view/LinkUrl/index.js +28 -0
- package/dist/es2019/view/LinkUrl/types.js +1 -0
- package/dist/esm/extractors/common/icon/extractIcon.js +12 -6
- package/dist/esm/extractors/common/icon/extractIconFromDocument.js +14 -7
- package/dist/esm/extractors/common/icon/extractIconFromTask.js +24 -15
- package/dist/esm/linkUrl.js +1 -0
- package/dist/esm/messages.js +21 -1
- package/dist/esm/utils/index.js +2 -1
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/EmbedCard/components/ExpandedFrame.js +3 -1
- package/dist/esm/view/HoverCard/components/HoverCardComponent.js +2 -1
- package/dist/esm/view/InlineCard/ErroredView/index.js +4 -2
- package/dist/esm/view/InlineCard/ForbiddenView/index.js +6 -3
- package/dist/esm/view/InlineCard/IconAndTitleLayout/index.js +2 -1
- package/dist/esm/view/InlineCard/ResolvedView/index.js +1 -0
- package/dist/esm/view/LinkUrl/LinkWarningModal/hooks/use-link-warning-modal.js +62 -0
- package/dist/esm/view/LinkUrl/LinkWarningModal/index.js +46 -0
- package/dist/esm/view/LinkUrl/index.js +33 -0
- package/dist/esm/view/LinkUrl/types.js +1 -0
- package/dist/types/extractors/common/__mocks__/withIntl.d.ts +2 -0
- package/dist/types/linkUrl.d.ts +2 -0
- package/dist/types/messages.d.ts +1 -1
- package/dist/types/view/LinkUrl/LinkWarningModal/hooks/use-link-warning-modal.d.ts +9 -0
- package/dist/types/view/LinkUrl/LinkWarningModal/index.d.ts +13 -0
- package/dist/types/view/LinkUrl/index.d.ts +4 -0
- package/dist/types/view/LinkUrl/types.d.ts +8 -0
- package/link-url/package.json +15 -0
- package/package.json +3 -4
- package/dist/types/extractors/common/__mocks__/render.d.ts +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/smart-card
|
|
2
2
|
|
|
3
|
+
## 23.13.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`02d341ecf63`](https://bitbucket.org/atlassian/atlassian-frontend/commits/02d341ecf63) - [ux] Fix copy button tooltip to show Copy link, not Download
|
|
8
|
+
|
|
9
|
+
## 23.13.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`67cfd8e13d0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/67cfd8e13d0) - LinkUrl component with built-in link safety check added
|
|
14
|
+
|
|
3
15
|
## 23.12.3
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -71,33 +71,39 @@ var extractIconByType = function extractIconByType(type, opts) {
|
|
|
71
71
|
|
|
72
72
|
case 'atlassian:Goal':
|
|
73
73
|
return opts.icon || /*#__PURE__*/_react.default.createElement(_5.default, {
|
|
74
|
-
label: opts.title || 'goal'
|
|
74
|
+
label: opts.title || 'goal',
|
|
75
|
+
testId: "task-icon"
|
|
75
76
|
});
|
|
76
77
|
|
|
77
78
|
case 'atlassian:Project':
|
|
78
79
|
return opts.icon || /*#__PURE__*/_react.default.createElement(_peopleGroup.default, {
|
|
79
80
|
label: opts.title || 'project',
|
|
80
|
-
size: "small"
|
|
81
|
+
size: "small",
|
|
82
|
+
testId: "project-icon"
|
|
81
83
|
});
|
|
82
84
|
|
|
83
85
|
case 'atlassian:SourceCodeCommit':
|
|
84
86
|
return /*#__PURE__*/_react.default.createElement(_.default, {
|
|
85
|
-
label: opts.title || 'commit'
|
|
87
|
+
label: opts.title || 'commit',
|
|
88
|
+
testId: "commit-icon"
|
|
86
89
|
});
|
|
87
90
|
|
|
88
91
|
case 'atlassian:SourceCodePullRequest':
|
|
89
92
|
return /*#__PURE__*/_react.default.createElement(_2.default, {
|
|
90
|
-
label: opts.title || 'pullRequest'
|
|
93
|
+
label: opts.title || 'pullRequest',
|
|
94
|
+
testId: "pull-request-icon"
|
|
91
95
|
});
|
|
92
96
|
|
|
93
97
|
case 'atlassian:SourceCodeReference':
|
|
94
98
|
return /*#__PURE__*/_react.default.createElement(_3.default, {
|
|
95
|
-
label: opts.title || 'reference'
|
|
99
|
+
label: opts.title || 'reference',
|
|
100
|
+
testId: "branch-icon"
|
|
96
101
|
});
|
|
97
102
|
|
|
98
103
|
case 'atlassian:SourceCodeRepository':
|
|
99
104
|
return /*#__PURE__*/_react.default.createElement(_4.default, {
|
|
100
|
-
label: opts.title || 'repository'
|
|
105
|
+
label: opts.title || 'repository',
|
|
106
|
+
testId: "repo-icon"
|
|
101
107
|
});
|
|
102
108
|
|
|
103
109
|
case 'atlassian:Task':
|
|
@@ -49,37 +49,44 @@ var documentTypeToIcon = function documentTypeToIcon(type, opts) {
|
|
|
49
49
|
switch (type) {
|
|
50
50
|
case 'schema:BlogPosting':
|
|
51
51
|
return /*#__PURE__*/_react.default.createElement(_.default, {
|
|
52
|
-
label: opts.title || 'blog'
|
|
52
|
+
label: opts.title || 'blog',
|
|
53
|
+
testId: "blog-icon"
|
|
53
54
|
});
|
|
54
55
|
|
|
55
56
|
case 'schema:DigitalDocument':
|
|
56
57
|
return /*#__PURE__*/_react.default.createElement(_2.default, {
|
|
57
|
-
label: opts.title || 'file'
|
|
58
|
+
label: opts.title || 'file',
|
|
59
|
+
testId: "file-icon"
|
|
58
60
|
});
|
|
59
61
|
|
|
60
62
|
case 'schema:TextDigitalDocument':
|
|
61
63
|
return /*#__PURE__*/_react.default.createElement(_5.default, {
|
|
62
|
-
label: opts.title || 'document'
|
|
64
|
+
label: opts.title || 'document',
|
|
65
|
+
testId: "document-icon"
|
|
63
66
|
});
|
|
64
67
|
|
|
65
68
|
case 'schema:PresentationDigitalDocument':
|
|
66
69
|
return /*#__PURE__*/_react.default.createElement(_3.default, {
|
|
67
|
-
label: opts.title || 'presentation'
|
|
70
|
+
label: opts.title || 'presentation',
|
|
71
|
+
testId: "presentation-icon"
|
|
68
72
|
});
|
|
69
73
|
|
|
70
74
|
case 'schema:SpreadsheetDigitalDocument':
|
|
71
75
|
return /*#__PURE__*/_react.default.createElement(_4.default, {
|
|
72
|
-
label: opts.title || 'spreadsheet'
|
|
76
|
+
label: opts.title || 'spreadsheet',
|
|
77
|
+
testId: "spreadsheet-icon"
|
|
73
78
|
});
|
|
74
79
|
|
|
75
80
|
case 'atlassian:Template':
|
|
76
81
|
return /*#__PURE__*/_react.default.createElement(_documentFilled.default, {
|
|
77
|
-
label: opts.title || 'template'
|
|
82
|
+
label: opts.title || 'template',
|
|
83
|
+
testId: "document-filled-icon"
|
|
78
84
|
});
|
|
79
85
|
|
|
80
86
|
case 'atlassian:UndefinedLink':
|
|
81
87
|
return /*#__PURE__*/_react.default.createElement(_5.default, {
|
|
82
|
-
label: opts.title || 'undefinedLink'
|
|
88
|
+
label: opts.title || 'undefinedLink',
|
|
89
|
+
testId: "document-icon"
|
|
83
90
|
});
|
|
84
91
|
}
|
|
85
92
|
};
|
|
@@ -35,6 +35,11 @@ var extractIconFromTask = function extractIconFromTask(opts) {
|
|
|
35
35
|
provider = opts.provider;
|
|
36
36
|
var taskLabel = opts.title || 'task';
|
|
37
37
|
|
|
38
|
+
var defaultIcon = /*#__PURE__*/_react.default.createElement(_.default, {
|
|
39
|
+
label: taskLabel,
|
|
40
|
+
testId: "default-task-icon"
|
|
41
|
+
});
|
|
42
|
+
|
|
38
43
|
if (provider && provider.id === _constants.JIRA_GENERATOR_ID && taskType && taskType.id) {
|
|
39
44
|
var taskTypeId = taskType.id;
|
|
40
45
|
var taskTypeName = taskTypeId.split('#').pop();
|
|
@@ -42,59 +47,64 @@ var extractIconFromTask = function extractIconFromTask(opts) {
|
|
|
42
47
|
switch (taskTypeName) {
|
|
43
48
|
case _constants.JIRA_TASK:
|
|
44
49
|
return /*#__PURE__*/_react.default.createElement(_.default, {
|
|
45
|
-
label: taskLabel
|
|
50
|
+
label: taskLabel,
|
|
51
|
+
testId: "jira-task-icon"
|
|
46
52
|
});
|
|
47
53
|
|
|
48
54
|
case _constants.JIRA_SUB_TASK:
|
|
49
55
|
return /*#__PURE__*/_react.default.createElement(_2.default, {
|
|
50
|
-
label: taskLabel
|
|
56
|
+
label: taskLabel,
|
|
57
|
+
testId: "jira-subtask-icon"
|
|
51
58
|
});
|
|
52
59
|
|
|
53
60
|
case _constants.JIRA_STORY:
|
|
54
61
|
return /*#__PURE__*/_react.default.createElement(_3.default, {
|
|
55
|
-
label: taskLabel
|
|
62
|
+
label: taskLabel,
|
|
63
|
+
testId: "jira-story-icon"
|
|
56
64
|
});
|
|
57
65
|
|
|
58
66
|
case _constants.JIRA_BUG:
|
|
59
67
|
return /*#__PURE__*/_react.default.createElement(_4.default, {
|
|
60
|
-
label: taskLabel
|
|
68
|
+
label: taskLabel,
|
|
69
|
+
testId: "jira-bug-icon"
|
|
61
70
|
});
|
|
62
71
|
|
|
63
72
|
case _constants.JIRA_EPIC:
|
|
64
73
|
return /*#__PURE__*/_react.default.createElement(_5.default, {
|
|
65
|
-
label: taskLabel
|
|
74
|
+
label: taskLabel,
|
|
75
|
+
testId: "jira-epic-icon"
|
|
66
76
|
});
|
|
67
77
|
|
|
68
78
|
case _constants.JIRA_INCIDENT:
|
|
69
79
|
return /*#__PURE__*/_react.default.createElement(_6.default, {
|
|
70
|
-
label: taskLabel
|
|
80
|
+
label: taskLabel,
|
|
81
|
+
testId: "jira-incident-icon"
|
|
71
82
|
});
|
|
72
83
|
|
|
73
84
|
case _constants.JIRA_SERVICE_REQUEST:
|
|
74
85
|
return /*#__PURE__*/_react.default.createElement(_7.default, {
|
|
75
|
-
label: taskLabel
|
|
86
|
+
label: taskLabel,
|
|
87
|
+
testId: "jira-service-request-icon"
|
|
76
88
|
});
|
|
77
89
|
|
|
78
90
|
case _constants.JIRA_CHANGE:
|
|
79
91
|
return /*#__PURE__*/_react.default.createElement(_8.default, {
|
|
80
|
-
label: taskLabel
|
|
92
|
+
label: taskLabel,
|
|
93
|
+
testId: "jira-change-icon"
|
|
81
94
|
});
|
|
82
95
|
|
|
83
96
|
case _constants.JIRA_PROBLEM:
|
|
84
97
|
return /*#__PURE__*/_react.default.createElement(_9.default, {
|
|
85
|
-
label: taskLabel
|
|
98
|
+
label: taskLabel,
|
|
99
|
+
testId: "jira-problem-icon"
|
|
86
100
|
});
|
|
87
101
|
|
|
88
102
|
case _constants.JIRA_CUSTOM_TASK_TYPE:
|
|
89
|
-
return taskType.icon || opts.icon || provider.icon ||
|
|
90
|
-
label: taskLabel
|
|
91
|
-
});
|
|
103
|
+
return taskType.icon || opts.icon || provider.icon || defaultIcon;
|
|
92
104
|
}
|
|
93
105
|
}
|
|
94
106
|
|
|
95
|
-
return
|
|
96
|
-
label: taskLabel
|
|
97
|
-
});
|
|
107
|
+
return defaultIcon;
|
|
98
108
|
};
|
|
99
109
|
|
|
100
110
|
exports.extractIconFromTask = extractIconFromTask;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "default", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _LinkUrl.default;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
var _LinkUrl = _interopRequireDefault(require("./view/LinkUrl"));
|
package/dist/cjs/messages.js
CHANGED
|
@@ -48,6 +48,11 @@ var messages = (0, _reactIntlNext.defineMessages)({
|
|
|
48
48
|
defaultMessage: 'Close',
|
|
49
49
|
description: ''
|
|
50
50
|
},
|
|
51
|
+
check_this_link: {
|
|
52
|
+
id: 'fabric.linking.check_this_link',
|
|
53
|
+
defaultMessage: 'Check this link',
|
|
54
|
+
description: 'Link safety warning modal header'
|
|
55
|
+
},
|
|
51
56
|
connect_to: {
|
|
52
57
|
id: 'fabric.linking.connect_to',
|
|
53
58
|
defaultMessage: 'Connect to {name}',
|
|
@@ -93,8 +98,13 @@ var messages = (0, _reactIntlNext.defineMessages)({
|
|
|
93
98
|
defaultMessage: 'Connect to Atlassian to view more details of your work and collaborate from one place.',
|
|
94
99
|
description: 'Shown when a user does not have access to a link, but can connect their external account to view the link on card view and we do not have the providers name.'
|
|
95
100
|
},
|
|
101
|
+
continue: {
|
|
102
|
+
id: 'fabric.linking.continue',
|
|
103
|
+
defaultMessage: 'Continue',
|
|
104
|
+
description: 'continue'
|
|
105
|
+
},
|
|
96
106
|
copy_url_to_clipboard: {
|
|
97
|
-
id: 'fabric.linking.
|
|
107
|
+
id: 'fabric.linking.copy_url_to_clipboard',
|
|
98
108
|
defaultMessage: 'Copy link',
|
|
99
109
|
description: ''
|
|
100
110
|
},
|
|
@@ -138,6 +148,11 @@ var messages = (0, _reactIntlNext.defineMessages)({
|
|
|
138
148
|
defaultMessage: 'You don’t have access to this preview. Contact the site admin if you need access.',
|
|
139
149
|
description: 'Informs the user that they cannot view this content.'
|
|
140
150
|
},
|
|
151
|
+
go_back: {
|
|
152
|
+
id: 'fabric.linking.go_back',
|
|
153
|
+
defaultMessage: 'Go back',
|
|
154
|
+
description: 'go back'
|
|
155
|
+
},
|
|
141
156
|
invalid_permissions: {
|
|
142
157
|
id: 'fabric.linking.invalid_permissions',
|
|
143
158
|
defaultMessage: 'Restricted content',
|
|
@@ -343,6 +358,11 @@ var messages = (0, _reactIntlNext.defineMessages)({
|
|
|
343
358
|
defaultMessage: 'Try another account',
|
|
344
359
|
description: 'Allows the user to try an action again with a different account'
|
|
345
360
|
},
|
|
361
|
+
link_safety_warning_message: {
|
|
362
|
+
id: 'fabric.linking.link_safety_warning_message',
|
|
363
|
+
defaultMessage: 'The link {unsafeLinkText} is taking you to a different site, <a>actual link here</a>',
|
|
364
|
+
description: 'Link safety check warning message'
|
|
365
|
+
},
|
|
346
366
|
unlink_account: {
|
|
347
367
|
id: 'fabric.linking.unlink_account',
|
|
348
368
|
defaultMessage: 'Unlink Account',
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -84,7 +84,8 @@ var getIconForFileType = function getIconForFileType(fileMimeType) {
|
|
|
84
84
|
}); // because we're using dynamic loading here, TS will not be able to infer the type
|
|
85
85
|
|
|
86
86
|
return /*#__PURE__*/_react.default.createElement(Icon, {
|
|
87
|
-
label: label
|
|
87
|
+
label: label,
|
|
88
|
+
testId: "document-file-format-icon"
|
|
88
89
|
});
|
|
89
90
|
};
|
|
90
91
|
|
package/dist/cjs/version.json
CHANGED
|
@@ -89,7 +89,9 @@ var ExpandedFrame = function ExpandedFrame(_ref) {
|
|
|
89
89
|
"data-testid": testId,
|
|
90
90
|
"data-trello-do-not-use-override": testId,
|
|
91
91
|
"data-is-selected": isSelected,
|
|
92
|
-
"data-is-visible": isVisible
|
|
92
|
+
"data-is-visible": isVisible,
|
|
93
|
+
"data-wrapper-type": "default",
|
|
94
|
+
"data-is-interactive": isInteractive()
|
|
93
95
|
}, renderHeader(), renderContent());
|
|
94
96
|
}
|
|
95
97
|
};
|
|
@@ -173,7 +173,8 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
173
173
|
onMouseEnter: initShowCard,
|
|
174
174
|
onMouseLeave: initHideCard,
|
|
175
175
|
onMouseMove: setMousePosition,
|
|
176
|
-
onClick: onChildClick
|
|
176
|
+
onClick: onChildClick,
|
|
177
|
+
"data-testid": "hover-card-trigger-wrapper"
|
|
177
178
|
}), children));
|
|
178
179
|
},
|
|
179
180
|
zIndex: 511 // Temporary fix for Confluence inline comment on editor mod has z-index of 500, Jira issue view has z-index of 510
|
|
@@ -77,7 +77,8 @@ var InlineCardErroredView = /*#__PURE__*/function (_React$Component) {
|
|
|
77
77
|
spacing: "none",
|
|
78
78
|
appearance: "subtle-link",
|
|
79
79
|
component: _styled.IconStyledButton,
|
|
80
|
-
onClick: _this.handleRetry
|
|
80
|
+
onClick: _this.handleRetry,
|
|
81
|
+
role: "button"
|
|
81
82
|
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.try_again, function (formattedMessage) {
|
|
82
83
|
return /*#__PURE__*/_react.default.createElement(_styled.LowercaseAppearance, null, formattedMessage);
|
|
83
84
|
})));
|
|
@@ -102,7 +103,8 @@ var InlineCardErroredView = /*#__PURE__*/function (_React$Component) {
|
|
|
102
103
|
icon: icon || /*#__PURE__*/_react.default.createElement(_Icon.AKIconWrapper, null, /*#__PURE__*/_react.default.createElement(_error.default, {
|
|
103
104
|
label: "error",
|
|
104
105
|
size: "small",
|
|
105
|
-
primaryColor: "var(--ds-icon-danger, ".concat(_colors.R300, ")")
|
|
106
|
+
primaryColor: "var(--ds-icon-danger, ".concat(_colors.R300, ")"),
|
|
107
|
+
testId: "errored-view-default-icon"
|
|
106
108
|
})),
|
|
107
109
|
link: url,
|
|
108
110
|
title: url,
|
|
@@ -54,7 +54,8 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
54
54
|
var FallbackForbiddenIcon = /*#__PURE__*/_react.default.createElement(_Icon.AKIconWrapper, null, /*#__PURE__*/_react.default.createElement(_lockFilled.default, {
|
|
55
55
|
label: "error",
|
|
56
56
|
size: "small",
|
|
57
|
-
primaryColor: "var(--ds-icon-danger, ".concat(_colors.R400, ")")
|
|
57
|
+
primaryColor: "var(--ds-icon-danger, ".concat(_colors.R400, ")"),
|
|
58
|
+
testId: "forbidden-view-fallback-icon"
|
|
58
59
|
}));
|
|
59
60
|
|
|
60
61
|
var InlineCardForbiddenView = /*#__PURE__*/function (_React$Component) {
|
|
@@ -115,7 +116,8 @@ var InlineCardForbiddenView = /*#__PURE__*/function (_React$Component) {
|
|
|
115
116
|
appearance: "subtle-link",
|
|
116
117
|
onClick: _this.handleRetry,
|
|
117
118
|
component: _styled.IconStyledButton,
|
|
118
|
-
testId: "button-connect-other-account"
|
|
119
|
+
testId: "button-connect-other-account",
|
|
120
|
+
role: "button"
|
|
119
121
|
}, _this.renderForbiddenAccessMessage());
|
|
120
122
|
}
|
|
121
123
|
|
|
@@ -125,7 +127,8 @@ var InlineCardForbiddenView = /*#__PURE__*/function (_React$Component) {
|
|
|
125
127
|
appearance: "subtle-link",
|
|
126
128
|
onClick: _this.handleRetry,
|
|
127
129
|
component: _styled.IconStyledButton,
|
|
128
|
-
testId: "button-connect-other-account"
|
|
130
|
+
testId: "button-connect-other-account",
|
|
131
|
+
role: "button"
|
|
129
132
|
}, /*#__PURE__*/_react.default.createElement(_styled2.LozengeWrapper, null, /*#__PURE__*/_react.default.createElement(_lozenge.default, {
|
|
130
133
|
appearance: 'moved'
|
|
131
134
|
}, _this.renderForbiddenAccessMessage()))));
|
|
@@ -171,7 +171,8 @@ var IconAndTitleLayout = /*#__PURE__*/function (_React$Component) {
|
|
|
171
171
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_styled.IconTitleWrapper, {
|
|
172
172
|
style: {
|
|
173
173
|
color: titleColor
|
|
174
|
-
}
|
|
174
|
+
},
|
|
175
|
+
"data-testid": testId
|
|
175
176
|
}, link ? /*#__PURE__*/_react.default.createElement(_styled2.LinkAppearance, {
|
|
176
177
|
href: link,
|
|
177
178
|
onClick: this.handleClick,
|
|
@@ -53,6 +53,7 @@ var InlineCardResolvedView = /*#__PURE__*/function (_React$Component) {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
return /*#__PURE__*/_react.default.createElement(_styled.LozengeBlockWrapper, null, /*#__PURE__*/_react.default.createElement(_styled.LozengeWrapper, null, /*#__PURE__*/_react.default.createElement(_lozenge.default, {
|
|
56
|
+
testId: "inline-card-resolved-view-lozenge",
|
|
56
57
|
appearance: lozenge.appearance || 'default',
|
|
57
58
|
isBold: lozenge.isBold
|
|
58
59
|
}, lozenge.text)));
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useLinkWarningModal = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var _url = require("@atlaskit/linking-common/url");
|
|
15
|
+
|
|
16
|
+
var useLinkWarningModal = function useLinkWarningModal() {
|
|
17
|
+
var _useState = (0, _react.useState)(null),
|
|
18
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
19
|
+
unsafeLinkText = _useState2[0],
|
|
20
|
+
setUnsafeLinkText = _useState2[1];
|
|
21
|
+
|
|
22
|
+
var _useState3 = (0, _react.useState)(null),
|
|
23
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
24
|
+
url = _useState4[0],
|
|
25
|
+
setUrl = _useState4[1];
|
|
26
|
+
|
|
27
|
+
var _useState5 = (0, _react.useState)(false),
|
|
28
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
29
|
+
isOpen = _useState6[0],
|
|
30
|
+
setIsOpen = _useState6[1];
|
|
31
|
+
/**
|
|
32
|
+
* It checks and warns if a link text is a URL and different from an actual link destination
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
var checkLinkSafety = function checkLinkSafety(event, href) {
|
|
37
|
+
var linkText = event.currentTarget.innerText;
|
|
38
|
+
var anchorLinkRegex = new RegExp(/^#/im);
|
|
39
|
+
var isAnchorLink = anchorLinkRegex.test(linkText);
|
|
40
|
+
|
|
41
|
+
if (isAnchorLink) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var normalisedUrlFromLinkText = (0, _url.normalizeUrl)(linkText);
|
|
46
|
+
|
|
47
|
+
if (!!normalisedUrlFromLinkText && normalisedUrlFromLinkText !== href) {
|
|
48
|
+
event.preventDefault();
|
|
49
|
+
setUnsafeLinkText(linkText);
|
|
50
|
+
href && setUrl(href);
|
|
51
|
+
setIsOpen(true);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
var onClose = function onClose() {
|
|
56
|
+
setIsOpen(false);
|
|
57
|
+
setUnsafeLinkText(null);
|
|
58
|
+
setUrl(null);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
var onContinue = function onContinue() {
|
|
62
|
+
onClose();
|
|
63
|
+
url && window.location.assign(url);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
checkLinkSafety: checkLinkSafety,
|
|
68
|
+
unsafeLinkText: unsafeLinkText,
|
|
69
|
+
onClose: onClose,
|
|
70
|
+
onContinue: onContinue,
|
|
71
|
+
isOpen: isOpen,
|
|
72
|
+
url: url
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
exports.useLinkWarningModal = useLinkWarningModal;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireDefault(require("react"));
|
|
15
|
+
|
|
16
|
+
var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
|
|
17
|
+
|
|
18
|
+
var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
|
|
19
|
+
|
|
20
|
+
var _reactIntlNext = require("react-intl-next");
|
|
21
|
+
|
|
22
|
+
var _messages = require("../../../messages");
|
|
23
|
+
|
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
+
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
+
|
|
28
|
+
var WarningModal = function WarningModal(props) {
|
|
29
|
+
var isOpen = props.isOpen,
|
|
30
|
+
unsafeLinkText = props.unsafeLinkText,
|
|
31
|
+
url = props.url,
|
|
32
|
+
onClose = props.onClose,
|
|
33
|
+
onContinue = props.onContinue,
|
|
34
|
+
intl = props.intl;
|
|
35
|
+
|
|
36
|
+
var content = /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, isOpen && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
|
|
37
|
+
onClose: onClose,
|
|
38
|
+
testId: "link-with-safety-warning"
|
|
39
|
+
}, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalHeader, null, /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTitle, {
|
|
40
|
+
appearance: "warning"
|
|
41
|
+
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.check_this_link))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalBody, null, url && unsafeLinkText && /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.messages.link_safety_warning_message, {
|
|
42
|
+
values: {
|
|
43
|
+
unsafeLinkText: unsafeLinkText,
|
|
44
|
+
a: function a() {
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement("a", {
|
|
46
|
+
href: url,
|
|
47
|
+
target: "_blank",
|
|
48
|
+
rel: "noopener noreferrer"
|
|
49
|
+
}, url);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}))), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_standardButton.default, {
|
|
53
|
+
appearance: "subtle",
|
|
54
|
+
onClick: onClose
|
|
55
|
+
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.go_back)), /*#__PURE__*/_react.default.createElement(_standardButton.default, {
|
|
56
|
+
appearance: "warning",
|
|
57
|
+
onClick: onContinue,
|
|
58
|
+
autoFocus: true
|
|
59
|
+
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.continue)))));
|
|
60
|
+
|
|
61
|
+
return intl ? content : /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
|
|
62
|
+
locale: "en"
|
|
63
|
+
}, content);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
var _default = (0, _reactIntlNext.injectIntl)(WarningModal, {
|
|
67
|
+
enforceContext: false
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
exports.default = _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
|
|
12
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireDefault(require("react"));
|
|
15
|
+
|
|
16
|
+
var _useLinkWarningModal2 = require("./LinkWarningModal/hooks/use-link-warning-modal");
|
|
17
|
+
|
|
18
|
+
var _LinkWarningModal = _interopRequireDefault(require("./LinkWarningModal"));
|
|
19
|
+
|
|
20
|
+
var _excluded = ["href", "children", "checkSafety", "onClick", "testId"],
|
|
21
|
+
_excluded2 = ["checkLinkSafety"];
|
|
22
|
+
|
|
23
|
+
var LinkUrl = function LinkUrl(_ref) {
|
|
24
|
+
var href = _ref.href,
|
|
25
|
+
children = _ref.children,
|
|
26
|
+
_ref$checkSafety = _ref.checkSafety,
|
|
27
|
+
checkSafety = _ref$checkSafety === void 0 ? true : _ref$checkSafety,
|
|
28
|
+
_onClick = _ref.onClick,
|
|
29
|
+
_ref$testId = _ref.testId,
|
|
30
|
+
testId = _ref$testId === void 0 ? 'link-with-safety' : _ref$testId,
|
|
31
|
+
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
32
|
+
|
|
33
|
+
var _useLinkWarningModal = (0, _useLinkWarningModal2.useLinkWarningModal)(),
|
|
34
|
+
checkLinkSafety = _useLinkWarningModal.checkLinkSafety,
|
|
35
|
+
linkWarningModalProps = (0, _objectWithoutProperties2.default)(_useLinkWarningModal, _excluded2);
|
|
36
|
+
|
|
37
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("a", (0, _extends2.default)({
|
|
38
|
+
"data-testid": testId,
|
|
39
|
+
href: href,
|
|
40
|
+
onClick: function onClick(e) {
|
|
41
|
+
checkSafety && checkLinkSafety(e, href);
|
|
42
|
+
_onClick && _onClick(e);
|
|
43
|
+
}
|
|
44
|
+
}, props), children), checkSafety && /*#__PURE__*/_react.default.createElement(_LinkWarningModal.default, linkWarningModalProps));
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
var _default = LinkUrl;
|
|
48
|
+
exports.default = _default;
|
|
@@ -44,33 +44,39 @@ const extractIconByType = (type, opts) => {
|
|
|
44
44
|
|
|
45
45
|
case 'atlassian:Goal':
|
|
46
46
|
return opts.icon || /*#__PURE__*/React.createElement(TaskIcon, {
|
|
47
|
-
label: opts.title || 'goal'
|
|
47
|
+
label: opts.title || 'goal',
|
|
48
|
+
testId: "task-icon"
|
|
48
49
|
});
|
|
49
50
|
|
|
50
51
|
case 'atlassian:Project':
|
|
51
52
|
return opts.icon || /*#__PURE__*/React.createElement(ProjectIcon, {
|
|
52
53
|
label: opts.title || 'project',
|
|
53
|
-
size: "small"
|
|
54
|
+
size: "small",
|
|
55
|
+
testId: "project-icon"
|
|
54
56
|
});
|
|
55
57
|
|
|
56
58
|
case 'atlassian:SourceCodeCommit':
|
|
57
59
|
return /*#__PURE__*/React.createElement(CommitIcon, {
|
|
58
|
-
label: opts.title || 'commit'
|
|
60
|
+
label: opts.title || 'commit',
|
|
61
|
+
testId: "commit-icon"
|
|
59
62
|
});
|
|
60
63
|
|
|
61
64
|
case 'atlassian:SourceCodePullRequest':
|
|
62
65
|
return /*#__PURE__*/React.createElement(PullRequestIcon, {
|
|
63
|
-
label: opts.title || 'pullRequest'
|
|
66
|
+
label: opts.title || 'pullRequest',
|
|
67
|
+
testId: "pull-request-icon"
|
|
64
68
|
});
|
|
65
69
|
|
|
66
70
|
case 'atlassian:SourceCodeReference':
|
|
67
71
|
return /*#__PURE__*/React.createElement(BranchIcon, {
|
|
68
|
-
label: opts.title || 'reference'
|
|
72
|
+
label: opts.title || 'reference',
|
|
73
|
+
testId: "branch-icon"
|
|
69
74
|
});
|
|
70
75
|
|
|
71
76
|
case 'atlassian:SourceCodeRepository':
|
|
72
77
|
return /*#__PURE__*/React.createElement(RepoIcon, {
|
|
73
|
-
label: opts.title || 'repository'
|
|
78
|
+
label: opts.title || 'repository',
|
|
79
|
+
testId: "repo-icon"
|
|
74
80
|
});
|
|
75
81
|
|
|
76
82
|
case 'atlassian:Task':
|