@atlaskit/smart-card 19.1.28 → 19.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/cjs/constants.js +4 -1
- package/dist/cjs/extractors/common/icon/extractIcon.js +7 -0
- package/dist/cjs/extractors/common/icon/priority.js +1 -0
- package/dist/cjs/extractors/common/lozenge/extractLozenge.js +7 -1
- package/dist/cjs/extractors/common/lozenge/extractState.js +2 -2
- package/dist/cjs/extractors/flexible/icon/extract-jsonld-data-icon.js +6 -0
- package/dist/cjs/extractors/flexible/index.js +5 -2
- package/dist/cjs/extractors/flexible/utils.js +30 -2
- package/dist/cjs/extractors/hover/extractMetadata.js +3 -2
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/FlexibleCard/components/blocks/block/index.js +1 -1
- package/dist/cjs/view/FlexibleCard/components/blocks/utils.js +1 -1
- package/dist/cjs/view/FlexibleCard/components/elements/avatar-group/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/badge/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/date-time/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/icon/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/index.js +25 -4
- package/dist/cjs/view/FlexibleCard/components/elements/link/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/lozenge/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/media/index.js +3 -1
- package/dist/cjs/view/FlexibleCard/components/elements/text/index.js +2 -0
- package/dist/cjs/view/FlexibleCard/components/elements/utils.js +42 -12
- package/dist/cjs/view/HoverCard/components/hover-card-content.js +12 -5
- package/dist/cjs/view/HoverCard/index.js +1 -1
- package/dist/cjs/view/HoverCard/styled.js +8 -5
- package/dist/cjs/view/HoverCard/utils.js +46 -3
- package/dist/es2019/constants.js +4 -1
- package/dist/es2019/extractors/common/icon/extractIcon.js +6 -0
- package/dist/es2019/extractors/common/icon/priority.js +1 -0
- package/dist/es2019/extractors/common/lozenge/extractLozenge.js +4 -0
- package/dist/es2019/extractors/common/lozenge/extractState.js +2 -2
- package/dist/es2019/extractors/flexible/icon/extract-jsonld-data-icon.js +6 -0
- package/dist/es2019/extractors/flexible/index.js +6 -3
- package/dist/es2019/extractors/flexible/utils.js +10 -1
- package/dist/es2019/extractors/hover/extractMetadata.js +3 -2
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/FlexibleCard/components/blocks/block/index.js +11 -1
- package/dist/es2019/view/FlexibleCard/components/blocks/utils.js +6 -3
- package/dist/es2019/view/FlexibleCard/components/elements/avatar-group/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/badge/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/date-time/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/icon/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/index.js +18 -0
- package/dist/es2019/view/FlexibleCard/components/elements/link/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/lozenge/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/media/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/text/index.js +2 -0
- package/dist/es2019/view/FlexibleCard/components/elements/utils.js +48 -16
- package/dist/es2019/view/HoverCard/components/hover-card-content.js +11 -5
- package/dist/es2019/view/HoverCard/index.js +1 -1
- package/dist/es2019/view/HoverCard/styled.js +31 -5
- package/dist/es2019/view/HoverCard/utils.js +46 -4
- package/dist/esm/constants.js +4 -1
- package/dist/esm/extractors/common/icon/extractIcon.js +6 -0
- package/dist/esm/extractors/common/icon/priority.js +1 -0
- package/dist/esm/extractors/common/lozenge/extractLozenge.js +7 -1
- package/dist/esm/extractors/common/lozenge/extractState.js +2 -2
- package/dist/esm/extractors/flexible/icon/extract-jsonld-data-icon.js +6 -0
- package/dist/esm/extractors/flexible/index.js +6 -3
- package/dist/esm/extractors/flexible/utils.js +16 -0
- package/dist/esm/extractors/hover/extractMetadata.js +3 -2
- package/dist/esm/state/actions/index.js +1 -1
- package/dist/esm/state/hooks/usePrefetch.js +1 -1
- package/dist/esm/utils/mocks.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/actions/DownloadAction.js +1 -1
- package/dist/esm/view/BlockCard/actions/PreviewAction.js +1 -1
- package/dist/esm/view/BlockCard/actions/RetryAction.js +1 -1
- package/dist/esm/view/BlockCard/actions/ViewAction.js +1 -1
- package/dist/esm/view/FlexibleCard/components/blocks/block/index.js +2 -2
- package/dist/esm/view/FlexibleCard/components/blocks/utils.js +1 -1
- package/dist/esm/view/FlexibleCard/components/elements/avatar-group/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/badge/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/date-time/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/icon/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/index.js +18 -0
- package/dist/esm/view/FlexibleCard/components/elements/link/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/lozenge/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/media/index.js +3 -1
- package/dist/esm/view/FlexibleCard/components/elements/text/index.js +2 -0
- package/dist/esm/view/FlexibleCard/components/elements/utils.js +41 -12
- package/dist/esm/view/HoverCard/components/hover-card-content.js +11 -5
- package/dist/esm/view/HoverCard/index.js +1 -1
- package/dist/esm/view/HoverCard/styled.js +8 -5
- package/dist/esm/view/HoverCard/utils.js +46 -3
- package/dist/types/constants.d.ts +4 -1
- package/dist/types/extractors/common/__mocks__/jsonld.d.ts +11 -6
- package/dist/types/extractors/common/lozenge/extractState.d.ts +1 -1
- package/dist/types/extractors/flexible/utils.d.ts +3 -0
- package/dist/types/state/flexible-ui-context/types.d.ts +29 -10
- package/dist/types/view/FlexibleCard/components/blocks/types.d.ts +22 -1
- package/dist/types/view/FlexibleCard/components/elements/index.d.ts +15 -0
- package/dist/types/view/FlexibleCard/components/elements/lozenge/types.d.ts +2 -1
- package/dist/types/view/FlexibleCard/components/elements/types.d.ts +7 -1
- package/dist/types/view/HoverCard/types.d.ts +1 -0
- package/dist/types/view/HoverCard/utils.d.ts +1 -1
- package/package.json +2 -2
- package/report.api.md +6 -0
|
@@ -127,7 +127,7 @@ var HoverCardComponent = function HoverCardComponent(_ref) {
|
|
|
127
127
|
onMouseLeave: initHideCard
|
|
128
128
|
}), children);
|
|
129
129
|
},
|
|
130
|
-
zIndex:
|
|
130
|
+
zIndex: 511 // Temporary fix for Confluence inline comment on editor mod has z-index of 500, Jira issue view has z-index of 510
|
|
131
131
|
|
|
132
132
|
});
|
|
133
133
|
};
|
|
@@ -13,13 +13,16 @@ var _core = require("@emotion/core");
|
|
|
13
13
|
|
|
14
14
|
var _index = require("../../index");
|
|
15
15
|
|
|
16
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
16
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var blockGap = '0.5rem';
|
|
19
|
+
var elementGap = '0.5rem';
|
|
20
|
+
var separatorCss = (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n [data-separator] + [data-separator]:before {\n margin-right: ", ";\n }\n"])), elementGap);
|
|
21
|
+
var HoverCardContainer = (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n background: none;\n border-width: 0;\n box-sizing: border-box;\n width: 24rem;\n padding: 1rem;\n\n .", " {\n display: none;\n }\n"])), _index.loadingPlaceholderClassName);
|
|
19
22
|
exports.HoverCardContainer = HoverCardContainer;
|
|
20
|
-
var titleBlockCss = (0, _core.css)(
|
|
23
|
+
var titleBlockCss = (0, _core.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n gap: ", ";\n\n ", "\n\n // title and subtitle element group\n [data-smart-element-group] {\n // gap between title and subtitle\n gap: 0.06rem;\n\n /* subtitle element group */\n > [data-smart-element-group] {\n > span {\n margin-right: ", ";\n }\n }\n }\n"])), blockGap, separatorCss, elementGap);
|
|
21
24
|
exports.titleBlockCss = titleBlockCss;
|
|
22
|
-
var metadataBlockCss = (0, _core.css)(
|
|
25
|
+
var metadataBlockCss = (0, _core.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n gap: 0px;\n\n /* primary element group */\n [data-smart-element-group]:nth-of-type(1) {\n flex-grow: 7;\n\n // a separator between text-based element\n ", "\n\n /* horizontal spacing between elements in group */\n > span {\n margin-right: ", ";\n }\n }\n /* secondary element group */\n [data-smart-element-group]:nth-of-type(2) {\n flex-grow: 3;\n /* horizontal spacing between elements in group */\n > span {\n margin-left: ", ";\n }\n }\n"])), separatorCss, elementGap, elementGap);
|
|
23
26
|
exports.metadataBlockCss = metadataBlockCss;
|
|
24
|
-
var footerBlockCss = (0, _core.css)(
|
|
27
|
+
var footerBlockCss = (0, _core.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n padding-top: 0.25rem;\n"])));
|
|
25
28
|
exports.footerBlockCss = footerBlockCss;
|
|
@@ -12,13 +12,35 @@ exports.HOVER_CARD_ANALYTICS_DISPLAY = HOVER_CARD_ANALYTICS_DISPLAY;
|
|
|
12
12
|
|
|
13
13
|
var getSimulatedMetadata = function getSimulatedMetadata() {
|
|
14
14
|
var extensionKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
15
|
+
var types = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
15
16
|
|
|
16
17
|
switch (extensionKey) {
|
|
18
|
+
case 'bitbucket-object-provider':
|
|
19
|
+
case 'native-bitbucket-object-provider':
|
|
20
|
+
if (types.includes('atlassian:SourceCodePullRequest')) {
|
|
21
|
+
return {
|
|
22
|
+
metadata: {
|
|
23
|
+
primary: [_constants.ElementName.AuthorGroup, _constants.ElementName.ModifiedOn, _constants.ElementName.SubscriberCount, _constants.ElementName.State],
|
|
24
|
+
secondary: [],
|
|
25
|
+
subtitle: [_constants.ElementName.SourceBranch, _constants.ElementName.TargetBranch]
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
metadata: {
|
|
32
|
+
primary: [_constants.ElementName.ModifiedOn, _constants.ElementName.CreatedBy],
|
|
33
|
+
secondary: [],
|
|
34
|
+
subtitle: []
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
17
38
|
case 'confluence-object-provider':
|
|
18
39
|
return {
|
|
19
40
|
metadata: {
|
|
20
41
|
primary: [_constants.ElementName.AuthorGroup, _constants.ElementName.CreatedBy],
|
|
21
|
-
secondary: [_constants.ElementName.CommentCount, _constants.ElementName.ReactCount]
|
|
42
|
+
secondary: [_constants.ElementName.CommentCount, _constants.ElementName.ReactCount],
|
|
43
|
+
subtitle: []
|
|
22
44
|
}
|
|
23
45
|
};
|
|
24
46
|
|
|
@@ -26,7 +48,27 @@ var getSimulatedMetadata = function getSimulatedMetadata() {
|
|
|
26
48
|
return {
|
|
27
49
|
metadata: {
|
|
28
50
|
primary: [_constants.ElementName.AuthorGroup, _constants.ElementName.State, _constants.ElementName.Priority],
|
|
29
|
-
secondary: []
|
|
51
|
+
secondary: [],
|
|
52
|
+
subtitle: []
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
case 'watermelon-object-provider':
|
|
57
|
+
if (types.includes('atlassian:Project')) {
|
|
58
|
+
return {
|
|
59
|
+
metadata: {
|
|
60
|
+
primary: [_constants.ElementName.AuthorGroup, _constants.ElementName.ModifiedOn, _constants.ElementName.State, _constants.ElementName.DueOn],
|
|
61
|
+
secondary: [],
|
|
62
|
+
subtitle: []
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
metadata: {
|
|
69
|
+
primary: [_constants.ElementName.AuthorGroup, _constants.ElementName.State, _constants.ElementName.DueOn],
|
|
70
|
+
secondary: [],
|
|
71
|
+
subtitle: []
|
|
30
72
|
}
|
|
31
73
|
};
|
|
32
74
|
|
|
@@ -34,7 +76,8 @@ var getSimulatedMetadata = function getSimulatedMetadata() {
|
|
|
34
76
|
return {
|
|
35
77
|
metadata: {
|
|
36
78
|
primary: [_constants.ElementName.ModifiedOn, _constants.ElementName.CreatedBy],
|
|
37
|
-
secondary: []
|
|
79
|
+
secondary: [],
|
|
80
|
+
subtitle: []
|
|
38
81
|
}
|
|
39
82
|
};
|
|
40
83
|
}
|
package/dist/es2019/constants.js
CHANGED
|
@@ -83,7 +83,7 @@ export let SmartLinkWidth;
|
|
|
83
83
|
* When adding an element...
|
|
84
84
|
* 1) Create base element if it doesn't already exist.
|
|
85
85
|
* Base element are inside src/view/FlexibleCard/components/elements.
|
|
86
|
-
* E.g. Badge,DateTime, Icon, Lozenge, etc.
|
|
86
|
+
* E.g. Badge, DateTime, Icon, Lozenge, etc.
|
|
87
87
|
* 2) Update FlexibleUiContext with the new prop for data representing
|
|
88
88
|
* the element, preferably with the same name as the element itself.
|
|
89
89
|
* (src/state/flexible-ui-context/types.ts)
|
|
@@ -111,6 +111,7 @@ export let ElementName;
|
|
|
111
111
|
ElementName["CommentCount"] = "CommentCount";
|
|
112
112
|
ElementName["CreatedBy"] = "CreatedBy";
|
|
113
113
|
ElementName["CreatedOn"] = "CreatedOn";
|
|
114
|
+
ElementName["DueOn"] = "DueOn";
|
|
114
115
|
ElementName["LinkIcon"] = "LinkIcon";
|
|
115
116
|
ElementName["ModifiedBy"] = "ModifiedBy";
|
|
116
117
|
ElementName["ModifiedOn"] = "ModifiedOn";
|
|
@@ -120,8 +121,10 @@ export let ElementName;
|
|
|
120
121
|
ElementName["Provider"] = "Provider";
|
|
121
122
|
ElementName["ReactCount"] = "ReactCount";
|
|
122
123
|
ElementName["Snippet"] = "Snippet";
|
|
124
|
+
ElementName["SourceBranch"] = "SourceBranch";
|
|
123
125
|
ElementName["State"] = "State";
|
|
124
126
|
ElementName["SubscriberCount"] = "SubscriberCount";
|
|
127
|
+
ElementName["TargetBranch"] = "TargetBranch";
|
|
125
128
|
ElementName["Title"] = "Title";
|
|
126
129
|
ElementName["ViewCount"] = "ViewCount";
|
|
127
130
|
ElementName["VoteCount"] = "VoteCount";
|
|
@@ -4,6 +4,7 @@ import CommitIcon from '@atlaskit/icon-object/glyph/commit/16';
|
|
|
4
4
|
import PullRequestIcon from '@atlaskit/icon-object/glyph/pull-request/16';
|
|
5
5
|
import BranchIcon from '@atlaskit/icon-object/glyph/branch/16';
|
|
6
6
|
import RepoIcon from '@atlaskit/icon-object/glyph/code/16';
|
|
7
|
+
import TaskIcon from '@atlaskit/icon-object/glyph/task/16';
|
|
7
8
|
import { extractorPriorityMap } from './priority';
|
|
8
9
|
import { extractProvider } from '../context/extractProvider';
|
|
9
10
|
import { extractTitle } from '../primitives/extractTitle';
|
|
@@ -43,6 +44,11 @@ const extractIconByType = (type, opts) => {
|
|
|
43
44
|
case 'atlassian:UndefinedLink':
|
|
44
45
|
return extractIconFromDocument(type, opts);
|
|
45
46
|
|
|
47
|
+
case 'atlassian:Goal':
|
|
48
|
+
return opts.icon || /*#__PURE__*/React.createElement(TaskIcon, {
|
|
49
|
+
label: opts.title || 'goal'
|
|
50
|
+
});
|
|
51
|
+
|
|
46
52
|
case 'atlassian:Project':
|
|
47
53
|
return opts.icon || /*#__PURE__*/React.createElement(ProjectIcon, {
|
|
48
54
|
label: opts.title || 'project',
|
|
@@ -20,6 +20,10 @@ export const extractLozenge = jsonLd => {
|
|
|
20
20
|
const jsonLdDocument = jsonLd;
|
|
21
21
|
const lozengeFromState = extractState(jsonLdDocument);
|
|
22
22
|
return lozengeFromState;
|
|
23
|
+
} else if (type.includes('atlassian:Goal')) {
|
|
24
|
+
const jsonLdProject = jsonLd;
|
|
25
|
+
const lozengeFromState = extractState(jsonLdProject);
|
|
26
|
+
return lozengeFromState;
|
|
23
27
|
} else if (type.includes('atlassian:Project')) {
|
|
24
28
|
const jsonLdProject = jsonLd;
|
|
25
29
|
const lozengeFromState = extractState(jsonLdProject);
|
|
@@ -16,14 +16,14 @@ export const extractState = jsonLd => {
|
|
|
16
16
|
if (state.name) {
|
|
17
17
|
return {
|
|
18
18
|
text: state.name,
|
|
19
|
-
appearance: 'default'
|
|
19
|
+
appearance: state.appearance || 'default'
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
} else if (state['@type'] === 'Object') {
|
|
23
23
|
if (state.name) {
|
|
24
24
|
return {
|
|
25
25
|
text: state.name,
|
|
26
|
-
appearance: 'default'
|
|
26
|
+
appearance: state.appearance || 'default'
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -82,6 +82,12 @@ const extractJsonldDataIcon = data => {
|
|
|
82
82
|
label: taskLabel
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
+
case 'atlassian:Goal':
|
|
86
|
+
return urlIcon || {
|
|
87
|
+
icon: IconType.Task,
|
|
88
|
+
label: label || 'Goal'
|
|
89
|
+
};
|
|
90
|
+
|
|
85
91
|
case 'atlassian:Project':
|
|
86
92
|
return urlIcon || {
|
|
87
93
|
icon: IconType.Project,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { extractLink, extractSummary, extractTitle } from '../common/primitives';
|
|
2
2
|
import { extractLozenge } from '../common/lozenge';
|
|
3
3
|
import { extractLinkIcon } from './icon';
|
|
4
|
-
import { extractCommentCount, extractCreatedBy, extractModifiedBy, extractProgrammingLanguage, extractSubscriberCount, extractViewCount, extractReactCount, extractVoteCount } from './utils';
|
|
4
|
+
import { extractCommentCount, extractCreatedBy, extractModifiedBy, extractProgrammingLanguage, extractSubscriberCount, extractViewCount, extractReactCount, extractVoteCount, extractSourceBranch, extractTargetBranch, extractDueOn } from './utils';
|
|
5
5
|
import { extractPersonCreatedBy } from '../common/person';
|
|
6
6
|
import { extractPersonsUpdatedBy } from './collaboratorGroup';
|
|
7
7
|
import { extractDateUpdated } from '../common/date/extractDateUpdated';
|
|
@@ -27,19 +27,22 @@ const extractFlexibleUiContext = (response, renderers) => {
|
|
|
27
27
|
voteCount: extractVoteCount(data),
|
|
28
28
|
createdBy: extractCreatedBy(data),
|
|
29
29
|
createdOn: extractDateCreated(data),
|
|
30
|
+
dueOn: extractDueOn(data),
|
|
31
|
+
latestCommit: extractLatestCommit(data),
|
|
30
32
|
linkIcon: extractLinkIcon(response, renderers),
|
|
31
33
|
modifiedBy: extractModifiedBy(data),
|
|
32
34
|
modifiedOn: extractDateUpdated(data),
|
|
33
35
|
preview: extractPreview(data),
|
|
34
36
|
priority: extractPriority(data),
|
|
37
|
+
provider: extractProviderIcon(data),
|
|
35
38
|
programmingLanguage: extractProgrammingLanguage(data),
|
|
36
39
|
snippet: extractSummary(data) || undefined,
|
|
37
40
|
// Explicitly set here to remove an empty string
|
|
41
|
+
sourceBranch: extractSourceBranch(data),
|
|
38
42
|
state: extractLozenge(data),
|
|
39
43
|
subscriberCount: extractSubscriberCount(data),
|
|
44
|
+
targetBranch: extractTargetBranch(data),
|
|
40
45
|
title: extractTitle(data) || url,
|
|
41
|
-
provider: extractProviderIcon(data),
|
|
42
|
-
latestCommit: extractLatestCommit(data),
|
|
43
46
|
url
|
|
44
47
|
};
|
|
45
48
|
};
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { extractPersonCreatedBy, extractPersonUpdatedBy } from '../common/person';
|
|
2
2
|
|
|
3
|
+
const extractLinkName = link => {
|
|
4
|
+
if (link && typeof link === 'object' && link['@type'] === 'Link') {
|
|
5
|
+
return link.name;
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
|
|
3
9
|
const extractValue = (data, key) => {
|
|
4
10
|
return data === null || data === void 0 ? void 0 : data[key];
|
|
5
11
|
};
|
|
6
12
|
|
|
7
13
|
export const extractCommentCount = data => extractValue(data, 'schema:commentCount');
|
|
14
|
+
export const extractDueOn = data => extractValue(data, 'endTime');
|
|
8
15
|
export const extractViewCount = data => extractValue(data, 'atlassian:viewCount');
|
|
9
16
|
export const extractReactCount = data => extractValue(data, 'atlassian:reactCount');
|
|
10
17
|
export const extractVoteCount = data => extractValue(data, 'atlassian:voteCount');
|
|
@@ -23,4 +30,6 @@ export const extractModifiedBy = data => {
|
|
|
23
30
|
}
|
|
24
31
|
};
|
|
25
32
|
export const extractProgrammingLanguage = data => extractValue(data, 'schema:programmingLanguage');
|
|
26
|
-
export const
|
|
33
|
+
export const extractSourceBranch = data => extractLinkName(data['atlassian:mergeSource']);
|
|
34
|
+
export const extractSubscriberCount = data => extractValue(data, 'atlassian:subscriberCount');
|
|
35
|
+
export const extractTargetBranch = data => extractLinkName(data['atlassian:mergeDestination']);
|
|
@@ -8,11 +8,12 @@ const elementNamesToItems = elementNames => {
|
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export const extractMetadata = jsonLd => {
|
|
11
|
-
var _jsonLd$metadata, _metadata$primary, _metadata$secondary;
|
|
11
|
+
var _jsonLd$metadata, _metadata$primary, _metadata$secondary, _metadata$subtitle;
|
|
12
12
|
|
|
13
13
|
const metadata = (_jsonLd$metadata = jsonLd.metadata) !== null && _jsonLd$metadata !== void 0 ? _jsonLd$metadata : [];
|
|
14
14
|
return {
|
|
15
15
|
primary: elementNamesToItems((_metadata$primary = metadata.primary) !== null && _metadata$primary !== void 0 ? _metadata$primary : []),
|
|
16
|
-
secondary: elementNamesToItems((_metadata$secondary = metadata.secondary) !== null && _metadata$secondary !== void 0 ? _metadata$secondary : [])
|
|
16
|
+
secondary: elementNamesToItems((_metadata$secondary = metadata.secondary) !== null && _metadata$secondary !== void 0 ? _metadata$secondary : []),
|
|
17
|
+
subtitle: elementNamesToItems((_metadata$subtitle = metadata.subtitle) !== null && _metadata$subtitle !== void 0 ? _metadata$subtitle : [])
|
|
17
18
|
};
|
|
18
19
|
};
|
package/dist/es2019/version.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { css, jsx } from '@emotion/core';
|
|
4
|
-
import { SmartLinkDirection, SmartLinkSize } from '../../../../../constants';
|
|
4
|
+
import { ElementName, SmartLinkDirection, SmartLinkSize } from '../../../../../constants';
|
|
5
5
|
import { getBaseStyles, getGapSize, renderChildren } from '../utils';
|
|
6
6
|
|
|
7
7
|
const getBlockStyles = (direction, size) => css`
|
|
@@ -11,6 +11,16 @@ const getBlockStyles = (direction, size) => css`
|
|
|
11
11
|
content: '•';
|
|
12
12
|
margin-right: ${getGapSize(size)}rem;
|
|
13
13
|
}
|
|
14
|
+
// Pull request elements: source branch → target branch
|
|
15
|
+
[data-smart-element='${ElementName.SourceBranch}']
|
|
16
|
+
+ [data-smart-element='${ElementName.TargetBranch}']:before {
|
|
17
|
+
content: '→';
|
|
18
|
+
}
|
|
19
|
+
// Pull request elements: target branch ← source branch
|
|
20
|
+
[data-smart-element='${ElementName.TargetBranch}']
|
|
21
|
+
+ [data-smart-element='${ElementName.SourceBranch}']:before {
|
|
22
|
+
content: '←';
|
|
23
|
+
}
|
|
14
24
|
`;
|
|
15
25
|
/**
|
|
16
26
|
* A block represents a collection of elements and actions that are arranged
|
|
@@ -16,18 +16,21 @@ export const ElementDisplaySchema = {
|
|
|
16
16
|
[ElementName.VoteCount]: ['inline'],
|
|
17
17
|
[ElementName.CreatedBy]: ['inline'],
|
|
18
18
|
[ElementName.CreatedOn]: ['inline'],
|
|
19
|
+
[ElementName.DueOn]: ['inline'],
|
|
20
|
+
[ElementName.LatestCommit]: ['inline'],
|
|
19
21
|
[ElementName.LinkIcon]: ['inline'],
|
|
20
22
|
[ElementName.ModifiedBy]: ['inline'],
|
|
21
23
|
[ElementName.ModifiedOn]: ['inline'],
|
|
22
24
|
[ElementName.Preview]: ['block'],
|
|
23
25
|
[ElementName.Priority]: ['inline'],
|
|
24
26
|
[ElementName.ProgrammingLanguage]: ['inline'],
|
|
27
|
+
[ElementName.Provider]: ['inline'],
|
|
25
28
|
[ElementName.Snippet]: ['block'],
|
|
29
|
+
[ElementName.SourceBranch]: ['inline'],
|
|
26
30
|
[ElementName.State]: ['inline'],
|
|
27
31
|
[ElementName.SubscriberCount]: ['inline'],
|
|
28
|
-
[ElementName.
|
|
29
|
-
[ElementName.
|
|
30
|
-
[ElementName.LatestCommit]: ['inline']
|
|
32
|
+
[ElementName.TargetBranch]: ['inline'],
|
|
33
|
+
[ElementName.Title]: ['inline']
|
|
31
34
|
};
|
|
32
35
|
|
|
33
36
|
const getDirectionStyles = direction => {
|
|
@@ -43,6 +43,7 @@ const getStyles = size => {
|
|
|
43
43
|
const AvatarGroup = ({
|
|
44
44
|
items = [],
|
|
45
45
|
maxCount = MAX_COUNT,
|
|
46
|
+
name,
|
|
46
47
|
overrideCss,
|
|
47
48
|
size = SmartLinkSize.Medium,
|
|
48
49
|
testId = 'smart-element-avatar-group'
|
|
@@ -54,6 +55,7 @@ const AvatarGroup = ({
|
|
|
54
55
|
return jsx("span", {
|
|
55
56
|
css: [getStyles(size), overrideCss],
|
|
56
57
|
"data-fit-to-content": true,
|
|
58
|
+
"data-smart-element": name,
|
|
57
59
|
"data-smart-element-avatar-group": true,
|
|
58
60
|
"data-testid": testId
|
|
59
61
|
}, jsx(AtlaskitAvatarGroup, {
|
|
@@ -93,6 +93,7 @@ const renderImageIcon = (url, testId) => {
|
|
|
93
93
|
const Badge = ({
|
|
94
94
|
icon,
|
|
95
95
|
label,
|
|
96
|
+
name,
|
|
96
97
|
overrideCss,
|
|
97
98
|
testId = 'smart-element-badge',
|
|
98
99
|
url
|
|
@@ -107,6 +108,7 @@ const Badge = ({
|
|
|
107
108
|
return jsx("span", {
|
|
108
109
|
css: [badgeStyles, overrideCss],
|
|
109
110
|
"data-fit-to-content": true,
|
|
111
|
+
"data-smart-element": name,
|
|
110
112
|
"data-smart-element-badge": true,
|
|
111
113
|
"data-testid": testId
|
|
112
114
|
}, jsx("span", {
|
|
@@ -34,6 +34,7 @@ const typeToDescriptorMap = {
|
|
|
34
34
|
|
|
35
35
|
const DateTime = ({
|
|
36
36
|
date,
|
|
37
|
+
name,
|
|
37
38
|
overrideCss,
|
|
38
39
|
type,
|
|
39
40
|
testId = 'smart-element-date-time',
|
|
@@ -73,6 +74,7 @@ const DateTime = ({
|
|
|
73
74
|
return jsx("span", {
|
|
74
75
|
css: [styles, overrideCss],
|
|
75
76
|
"data-separator": true,
|
|
77
|
+
"data-smart-element": name,
|
|
76
78
|
"data-smart-element-date-time": true,
|
|
77
79
|
"data-testid": testId
|
|
78
80
|
}, text ? `${text} ${context}` : jsx(FormattedMessage, _extends({}, typeToDescriptorMap[type][typeVariant], {
|
|
@@ -77,6 +77,7 @@ const renderImageIcon = (defaultIcon, icon, url, testId) => {
|
|
|
77
77
|
const Icon = ({
|
|
78
78
|
icon,
|
|
79
79
|
label = 'Link',
|
|
80
|
+
name,
|
|
80
81
|
position = SmartLinkPosition.Top,
|
|
81
82
|
overrideCss,
|
|
82
83
|
render,
|
|
@@ -94,6 +95,7 @@ const Icon = ({
|
|
|
94
95
|
return jsx("div", {
|
|
95
96
|
css: [styles, renderStyles, overrideCss],
|
|
96
97
|
"data-fit-to-content": true,
|
|
98
|
+
"data-smart-element": name,
|
|
97
99
|
"data-smart-element-icon": true,
|
|
98
100
|
"data-testid": testId
|
|
99
101
|
}, element);
|
|
@@ -33,6 +33,12 @@ export const CreatedOn = createElement(ElementName.CreatedOn);
|
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
35
|
export const CreatedBy = createElement(ElementName.CreatedBy);
|
|
36
|
+
/**
|
|
37
|
+
* Creates a DueOn Lozenge element using the data from dueOn in the Flexible UI Context.
|
|
38
|
+
* @see Lozenge
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
export const DueOn = createElement(ElementName.DueOn);
|
|
36
42
|
/**
|
|
37
43
|
* Creates an element that contains Last Commit hash
|
|
38
44
|
*/
|
|
@@ -92,6 +98,12 @@ export const ReactCount = createElement(ElementName.ReactCount);
|
|
|
92
98
|
*/
|
|
93
99
|
|
|
94
100
|
export const Snippet = createElement(ElementName.Snippet);
|
|
101
|
+
/**
|
|
102
|
+
* Creates a SourceBranch Text element using the data from sourceBranch in the Flexible UI Context.
|
|
103
|
+
* @see Text
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
export const SourceBranch = createElement(ElementName.SourceBranch);
|
|
95
107
|
/**
|
|
96
108
|
* Creates a State Lozenge element using the data from State in the Flexible UI Context.
|
|
97
109
|
* @see Lozenge
|
|
@@ -104,6 +116,12 @@ export const State = createElement(ElementName.State);
|
|
|
104
116
|
*/
|
|
105
117
|
|
|
106
118
|
export const SubscriberCount = createElement(ElementName.SubscriberCount);
|
|
119
|
+
/**
|
|
120
|
+
* Creates a TargetBranch Text element using the data from targetBranch in the Flexible UI Context.
|
|
121
|
+
* @see Text
|
|
122
|
+
*/
|
|
123
|
+
|
|
124
|
+
export const TargetBranch = createElement(ElementName.TargetBranch);
|
|
107
125
|
/**
|
|
108
126
|
* Creates a Title Link element using the data from Title in the Flexible UI Context.
|
|
109
127
|
* This represents the main link text within the Smart Link.
|
|
@@ -81,6 +81,7 @@ const withTooltip = (trigger, content, testId) => jsx(Tooltip, {
|
|
|
81
81
|
const Link = ({
|
|
82
82
|
hideTooltip,
|
|
83
83
|
maxLines = DEFAULT_MAX_LINES,
|
|
84
|
+
name,
|
|
84
85
|
overrideCss,
|
|
85
86
|
size = SmartLinkSize.Medium,
|
|
86
87
|
testId = 'smart-element-link',
|
|
@@ -93,6 +94,7 @@ const Link = ({
|
|
|
93
94
|
const hasSpace = useMemo(() => text ? hasWhiteSpace(text) : false, [text]);
|
|
94
95
|
const anchor = jsx("a", {
|
|
95
96
|
css: [getAnchorStyles(size, theme, getMaxLines(maxLines), hasSpace), overrideCss],
|
|
97
|
+
"data-smart-element": name,
|
|
96
98
|
"data-smart-element-link": true,
|
|
97
99
|
"data-testid": testId,
|
|
98
100
|
onClick: onClick,
|
|
@@ -15,6 +15,7 @@ const styles = css`
|
|
|
15
15
|
|
|
16
16
|
const Lozenge = ({
|
|
17
17
|
appearance = 'default',
|
|
18
|
+
name,
|
|
18
19
|
overrideCss,
|
|
19
20
|
text,
|
|
20
21
|
testId = 'smart-element-lozenge'
|
|
@@ -26,6 +27,7 @@ const Lozenge = ({
|
|
|
26
27
|
return jsx("span", {
|
|
27
28
|
css: [styles, overrideCss],
|
|
28
29
|
"data-fit-to-content": true,
|
|
30
|
+
"data-smart-element": name,
|
|
29
31
|
"data-smart-element-lozenge": true,
|
|
30
32
|
"data-testid": testId
|
|
31
33
|
}, jsx(AtlaskitLozenge, {
|
|
@@ -55,6 +55,7 @@ const styles = css`
|
|
|
55
55
|
*/
|
|
56
56
|
|
|
57
57
|
const Media = ({
|
|
58
|
+
name,
|
|
58
59
|
overrideCss,
|
|
59
60
|
testId = 'smart-element-media',
|
|
60
61
|
type,
|
|
@@ -66,6 +67,7 @@ const Media = ({
|
|
|
66
67
|
|
|
67
68
|
return jsx("div", {
|
|
68
69
|
css: [styles, overrideCss],
|
|
70
|
+
"data-smart-element": name,
|
|
69
71
|
"data-smart-element-media": true,
|
|
70
72
|
"data-testid": testId
|
|
71
73
|
}, jsx(ImageIcon, {
|
|
@@ -22,6 +22,7 @@ const Text = ({
|
|
|
22
22
|
content,
|
|
23
23
|
maxLines = 1,
|
|
24
24
|
message,
|
|
25
|
+
name,
|
|
25
26
|
overrideCss,
|
|
26
27
|
testId = 'smart-element-text'
|
|
27
28
|
}) => {
|
|
@@ -32,6 +33,7 @@ const Text = ({
|
|
|
32
33
|
return jsx("span", {
|
|
33
34
|
css: [getStyles(maxLines), overrideCss],
|
|
34
35
|
"data-separator": true,
|
|
36
|
+
"data-smart-element": name,
|
|
35
37
|
"data-smart-element-text": true,
|
|
36
38
|
"data-testid": testId
|
|
37
39
|
}, getFormattedMessage(message) || content);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React, { useContext } from 'react';
|
|
3
|
+
import { FormattedDate } from 'react-intl-next';
|
|
3
4
|
import { css } from '@emotion/core';
|
|
4
5
|
import { ElementName, IconType } from '../../../../constants';
|
|
5
6
|
import Icon from './icon';
|
|
@@ -48,12 +49,27 @@ const elementMappings = {
|
|
|
48
49
|
[ElementName.CreatedBy]: {
|
|
49
50
|
component: Text
|
|
50
51
|
},
|
|
52
|
+
[ElementName.CreatedOn]: {
|
|
53
|
+
component: DateTime
|
|
54
|
+
},
|
|
55
|
+
[ElementName.DueOn]: {
|
|
56
|
+
component: Lozenge
|
|
57
|
+
},
|
|
58
|
+
[ElementName.LatestCommit]: {
|
|
59
|
+
component: Badge,
|
|
60
|
+
props: {
|
|
61
|
+
icon: IconType.Commit
|
|
62
|
+
}
|
|
63
|
+
},
|
|
51
64
|
[ElementName.LinkIcon]: {
|
|
52
65
|
component: Icon
|
|
53
66
|
},
|
|
54
67
|
[ElementName.ModifiedBy]: {
|
|
55
68
|
component: Text
|
|
56
69
|
},
|
|
70
|
+
[ElementName.ModifiedOn]: {
|
|
71
|
+
component: DateTime
|
|
72
|
+
},
|
|
57
73
|
[ElementName.Preview]: {
|
|
58
74
|
component: Media
|
|
59
75
|
},
|
|
@@ -66,6 +82,9 @@ const elementMappings = {
|
|
|
66
82
|
icon: IconType.ProgrammingLanguage
|
|
67
83
|
}
|
|
68
84
|
},
|
|
85
|
+
[ElementName.Provider]: {
|
|
86
|
+
component: Badge
|
|
87
|
+
},
|
|
69
88
|
[ElementName.Snippet]: {
|
|
70
89
|
component: Text,
|
|
71
90
|
props: {
|
|
@@ -75,6 +94,9 @@ const elementMappings = {
|
|
|
75
94
|
`
|
|
76
95
|
}
|
|
77
96
|
},
|
|
97
|
+
[ElementName.SourceBranch]: {
|
|
98
|
+
component: Text
|
|
99
|
+
},
|
|
78
100
|
[ElementName.State]: {
|
|
79
101
|
component: Lozenge
|
|
80
102
|
},
|
|
@@ -84,23 +106,11 @@ const elementMappings = {
|
|
|
84
106
|
icon: IconType.Subscriber
|
|
85
107
|
}
|
|
86
108
|
},
|
|
109
|
+
[ElementName.TargetBranch]: {
|
|
110
|
+
component: Text
|
|
111
|
+
},
|
|
87
112
|
[ElementName.Title]: {
|
|
88
113
|
component: Link
|
|
89
|
-
},
|
|
90
|
-
[ElementName.CreatedOn]: {
|
|
91
|
-
component: DateTime
|
|
92
|
-
},
|
|
93
|
-
[ElementName.ModifiedOn]: {
|
|
94
|
-
component: DateTime
|
|
95
|
-
},
|
|
96
|
-
[ElementName.Provider]: {
|
|
97
|
-
component: Badge
|
|
98
|
-
},
|
|
99
|
-
[ElementName.LatestCommit]: {
|
|
100
|
-
component: Badge,
|
|
101
|
-
props: {
|
|
102
|
-
icon: IconType.Commit
|
|
103
|
-
}
|
|
104
114
|
}
|
|
105
115
|
};
|
|
106
116
|
|
|
@@ -137,6 +147,9 @@ const getData = (elementName, contextKey, context) => {
|
|
|
137
147
|
case ElementName.CreatedOn:
|
|
138
148
|
return toDateTimeProps('created', context.createdOn);
|
|
139
149
|
|
|
150
|
+
case ElementName.DueOn:
|
|
151
|
+
return toDateLozengeProps(context.dueOn);
|
|
152
|
+
|
|
140
153
|
case ElementName.ModifiedBy:
|
|
141
154
|
return toFormattedTextProps(messages.modified_by, context.modifiedBy);
|
|
142
155
|
|
|
@@ -144,6 +157,8 @@ const getData = (elementName, contextKey, context) => {
|
|
|
144
157
|
return toDateTimeProps('modified', context.modifiedOn);
|
|
145
158
|
|
|
146
159
|
case ElementName.Snippet:
|
|
160
|
+
case ElementName.SourceBranch:
|
|
161
|
+
case ElementName.TargetBranch:
|
|
147
162
|
return toTextProps(data);
|
|
148
163
|
|
|
149
164
|
case ElementName.Title:
|
|
@@ -166,6 +181,21 @@ const toBadgeProps = label => {
|
|
|
166
181
|
} : undefined;
|
|
167
182
|
};
|
|
168
183
|
|
|
184
|
+
const toDateLozengeProps = dateString => {
|
|
185
|
+
if (dateString) {
|
|
186
|
+
const text = Date.parse(dateString) ? /*#__PURE__*/React.createElement(FormattedDate, {
|
|
187
|
+
value: new Date(dateString),
|
|
188
|
+
year: "numeric",
|
|
189
|
+
month: "short",
|
|
190
|
+
day: "numeric",
|
|
191
|
+
formatMatcher: "best fit"
|
|
192
|
+
}) : dateString;
|
|
193
|
+
return {
|
|
194
|
+
text
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
169
199
|
const toDateTimeProps = (type, dateString) => {
|
|
170
200
|
return dateString ? {
|
|
171
201
|
date: new Date(dateString),
|
|
@@ -211,6 +241,8 @@ export const createElement = name => {
|
|
|
211
241
|
return overrides => {
|
|
212
242
|
const context = useContext(FlexibleUiContext);
|
|
213
243
|
const data = getData(name, contextKey, context);
|
|
214
|
-
return data ? /*#__PURE__*/React.createElement(BaseElement, _extends({}, props, data, overrides
|
|
244
|
+
return data ? /*#__PURE__*/React.createElement(BaseElement, _extends({}, props, data, overrides, {
|
|
245
|
+
name: name
|
|
246
|
+
})) : null;
|
|
215
247
|
};
|
|
216
248
|
};
|