@atlaskit/link-datasource 1.8.0 → 1.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 +6 -0
- package/dist/cjs/analytics/constants.js +1 -1
- package/dist/cjs/common/zindex.js +8 -0
- package/dist/cjs/ui/assets-modal/modal/index.js +1 -1
- package/dist/cjs/ui/common/error-state/access-required.js +42 -8
- package/dist/cjs/ui/common/error-state/messages.js +4 -4
- package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +3 -1
- package/dist/cjs/ui/issue-like-table/index.js +2 -1
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +24 -25
- package/dist/cjs/ui/jira-issues-modal/modal/messages.js +2 -2
- package/dist/cjs/ui/jira-issues-modal/site-selector/index.js +59 -37
- package/dist/cjs/ui/jira-issues-modal/site-selector/messages.js +4 -9
- package/dist/es2019/analytics/constants.js +1 -1
- package/dist/es2019/common/zindex.js +2 -0
- package/dist/es2019/ui/assets-modal/modal/index.js +1 -1
- package/dist/es2019/ui/common/error-state/access-required.js +41 -6
- package/dist/es2019/ui/common/error-state/messages.js +4 -4
- package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +3 -1
- package/dist/es2019/ui/issue-like-table/index.js +2 -1
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +25 -26
- package/dist/es2019/ui/jira-issues-modal/modal/messages.js +2 -2
- package/dist/es2019/ui/jira-issues-modal/site-selector/index.js +50 -32
- package/dist/es2019/ui/jira-issues-modal/site-selector/messages.js +4 -9
- package/dist/esm/analytics/constants.js +1 -1
- package/dist/esm/common/zindex.js +2 -0
- package/dist/esm/ui/assets-modal/modal/index.js +1 -1
- package/dist/esm/ui/common/error-state/access-required.js +43 -9
- package/dist/esm/ui/common/error-state/messages.js +4 -4
- package/dist/esm/ui/datasource-table-view/datasourceTableView.js +3 -1
- package/dist/esm/ui/issue-like-table/index.js +2 -1
- package/dist/esm/ui/jira-issues-modal/modal/index.js +25 -26
- package/dist/esm/ui/jira-issues-modal/modal/messages.js +2 -2
- package/dist/esm/ui/jira-issues-modal/site-selector/index.js +59 -34
- package/dist/esm/ui/jira-issues-modal/site-selector/messages.js +4 -9
- package/dist/types/common/zindex.d.ts +2 -0
- package/dist/types/ui/common/error-state/access-required.d.ts +2 -2
- package/dist/types/ui/jira-issues-modal/site-selector/index.d.ts +0 -1
- package/dist/types/ui/jira-issues-modal/site-selector/messages.d.ts +1 -6
- package/dist/types/ui/jira-issues-modal/types.d.ts +2 -0
- package/dist/types-ts4.5/common/zindex.d.ts +2 -0
- package/dist/types-ts4.5/ui/common/error-state/access-required.d.ts +2 -2
- package/dist/types-ts4.5/ui/jira-issues-modal/site-selector/index.d.ts +0 -1
- package/dist/types-ts4.5/ui/jira-issues-modal/site-selector/messages.d.ts +1 -6
- package/dist/types-ts4.5/ui/jira-issues-modal/types.d.ts +2 -0
- package/package.json +2 -3
- package/report.api.md +1 -0
- package/tmp/api-report-tmp.d.ts +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
/** @jsx jsx */
|
|
3
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { css, jsx } from '@emotion/react';
|
|
5
5
|
import { FormattedMessage, FormattedNumber, useIntl } from 'react-intl-next';
|
|
6
6
|
import { v4 as uuidv4 } from 'uuid';
|
|
@@ -30,8 +30,11 @@ import { JiraSiteSelector } from '../site-selector';
|
|
|
30
30
|
import { modalMessages } from './messages';
|
|
31
31
|
const dropdownContainerStyles = css({
|
|
32
32
|
display: 'flex',
|
|
33
|
-
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
gap: "var(--ds-space-100, 0.5rem)",
|
|
35
|
+
minHeight: '40px' // to prevent vertical shifting when site selector pops in
|
|
34
36
|
});
|
|
37
|
+
|
|
35
38
|
const contentContainerStyles = css({
|
|
36
39
|
display: 'grid',
|
|
37
40
|
maxHeight: '420px',
|
|
@@ -77,11 +80,12 @@ export const getColumnAction = (oldVisibleColumnKeys, newVisibleColumnKeys) => {
|
|
|
77
80
|
export const PlainJiraIssuesConfigModal = props => {
|
|
78
81
|
const {
|
|
79
82
|
datasourceId,
|
|
80
|
-
parameters: initialParameters,
|
|
81
|
-
visibleColumnKeys: initialVisibleColumnKeys,
|
|
82
83
|
onCancel,
|
|
83
84
|
onInsert,
|
|
84
|
-
viewMode = 'issue'
|
|
85
|
+
viewMode = 'issue',
|
|
86
|
+
parameters: initialParameters,
|
|
87
|
+
url: urlBeingEdited,
|
|
88
|
+
visibleColumnKeys: initialVisibleColumnKeys
|
|
85
89
|
} = props;
|
|
86
90
|
const [availableSites, setAvailableSites] = useState([]);
|
|
87
91
|
const [currentViewMode, setCurrentViewMode] = useState(viewMode);
|
|
@@ -129,9 +133,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
129
133
|
} = useRef(uuidv4());
|
|
130
134
|
const selectedJiraSite = useMemo(() => {
|
|
131
135
|
if (cloudId) {
|
|
132
|
-
|
|
133
|
-
// TODO: unauthorized to edit flow https://product-fabric.atlassian.net/browse/EDM-7216
|
|
134
|
-
return availableSites.find(jiraSite => jiraSite.cloudId === cloudId) || availableSites[0];
|
|
136
|
+
return availableSites.find(jiraSite => jiraSite.cloudId === cloudId);
|
|
135
137
|
} else {
|
|
136
138
|
const currentlyLoggedInSiteUrl = window.location.origin;
|
|
137
139
|
return availableSites.find(jiraSite => jiraSite.url === currentlyLoggedInSiteUrl) || availableSites[0];
|
|
@@ -360,12 +362,12 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
360
362
|
extensionKey: extensionKey
|
|
361
363
|
})), [columns, defaultVisibleColumnKeys, handleOnNextPage, handleVisibleColumnKeysChange, hasNextPage, loadDatasourceDetails, modalRenderInstanceId, responseItems, status, visibleColumnKeys, extensionKey]);
|
|
362
364
|
const renderCountModeContent = useCallback(() => {
|
|
363
|
-
const
|
|
365
|
+
const selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
364
366
|
if (status === 'unauthorized') {
|
|
365
367
|
return jsx(AccessRequired, {
|
|
366
|
-
|
|
368
|
+
url: selectedJiraSiteUrl || urlBeingEdited
|
|
367
369
|
});
|
|
368
|
-
} else if (status === 'empty' || !jql || !
|
|
370
|
+
} else if (status === 'empty' || !jql || !selectedJiraSiteUrl) {
|
|
369
371
|
return jsx("div", {
|
|
370
372
|
css: smartLinkContainerStyles
|
|
371
373
|
}, jsx("span", {
|
|
@@ -373,22 +375,23 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
373
375
|
css: placeholderSmartLinkStyles
|
|
374
376
|
}, jsx(FormattedMessage, modalMessages.issuesCountSmartCardPlaceholderText)));
|
|
375
377
|
} else {
|
|
376
|
-
const urlWithEncodedJql = `${
|
|
378
|
+
const urlWithEncodedJql = `${selectedJiraSiteUrl}/issues/?jql=${encodeURI(jql)}`;
|
|
377
379
|
return jsx("div", {
|
|
378
380
|
css: smartLinkContainerStyles
|
|
379
381
|
}, jsx(LinkRenderType, {
|
|
380
382
|
url: urlWithEncodedJql
|
|
381
383
|
}));
|
|
382
384
|
}
|
|
383
|
-
}, [jql, selectedJiraSite, status]);
|
|
385
|
+
}, [jql, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
|
|
384
386
|
const renderIssuesModeContent = useCallback(() => {
|
|
387
|
+
const selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
385
388
|
if (status === 'rejected' && jqlUrl) {
|
|
386
389
|
return jsx(ModalLoadingError, {
|
|
387
390
|
url: jqlUrl
|
|
388
391
|
});
|
|
389
392
|
} else if (status === 'unauthorized') {
|
|
390
393
|
return jsx(AccessRequired, {
|
|
391
|
-
|
|
394
|
+
url: selectedJiraSiteUrl || urlBeingEdited
|
|
392
395
|
});
|
|
393
396
|
} else if (resolvedWithNoResults) {
|
|
394
397
|
return jsx(NoResults, null);
|
|
@@ -411,24 +414,20 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
411
414
|
}));
|
|
412
415
|
}
|
|
413
416
|
return issueLikeDataTableView;
|
|
414
|
-
}, [
|
|
417
|
+
}, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, responseItems.length, retrieveUrlForSmartCardRender, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
|
|
415
418
|
return jsx(ModalTransition, null, jsx(Modal, {
|
|
416
|
-
testId:
|
|
419
|
+
testId: "jira-jql-datasource-modal",
|
|
417
420
|
onClose: onCancel,
|
|
418
421
|
width: "calc(100% - 80px)",
|
|
419
422
|
shouldScrollInViewport: true
|
|
420
|
-
}, jsx(ModalHeader, null, jsx(ModalTitle, null,
|
|
423
|
+
}, jsx(ModalHeader, null, jsx(ModalTitle, null, jsx("div", {
|
|
421
424
|
css: dropdownContainerStyles
|
|
422
|
-
}, jsx(FormattedMessage,
|
|
423
|
-
values: {
|
|
424
|
-
siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
|
|
425
|
-
}
|
|
426
|
-
})), jsx(JiraSiteSelector, {
|
|
427
|
-
testId: `jira-jql-datasource-modal--site-selector`,
|
|
425
|
+
}, availableSites.length < 2 ? jsx(FormattedMessage, modalMessages.insertIssuesTitle) : jsx(Fragment, null, jsx(FormattedMessage, modalMessages.insertIssuesTitleManySites), jsx(JiraSiteSelector, {
|
|
428
426
|
availableSites: availableSites,
|
|
429
427
|
onSiteSelection: onSiteSelection,
|
|
430
|
-
selectedJiraSite: selectedJiraSite
|
|
431
|
-
|
|
428
|
+
selectedJiraSite: selectedJiraSite,
|
|
429
|
+
testId: "jira-jql-datasource-modal--site-selector"
|
|
430
|
+
})))), jsx(ModeSwitcher, {
|
|
432
431
|
isCompact: true,
|
|
433
432
|
options: [{
|
|
434
433
|
label: formatMessage(modalMessages.issueViewModeLabel),
|
|
@@ -468,7 +467,7 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
468
467
|
appearance: "primary",
|
|
469
468
|
onClick: onInsertPressed,
|
|
470
469
|
isDisabled: isInsertDisabled,
|
|
471
|
-
testId:
|
|
470
|
+
testId: "jira-jql-datasource-modal--insert-button"
|
|
472
471
|
}, jsx(FormattedMessage, modalMessages.insertIssuesButtonText)))));
|
|
473
472
|
};
|
|
474
473
|
const analyticsContextAttributes = {
|
|
@@ -17,8 +17,8 @@ export const modalMessages = defineMessages({
|
|
|
17
17
|
},
|
|
18
18
|
insertIssuesTitleManySites: {
|
|
19
19
|
id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitleManySites',
|
|
20
|
-
description: 'Title for the Jira Issues
|
|
21
|
-
defaultMessage: 'Insert Jira issues from
|
|
20
|
+
description: 'Title for the Jira Issues modal when a user has to select a site to inserting issues from',
|
|
21
|
+
defaultMessage: 'Insert Jira issues from'
|
|
22
22
|
},
|
|
23
23
|
issueViewModeLabel: {
|
|
24
24
|
id: 'linkDataSource.jira-issues.configmodal.issueViewModeLabel',
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
1
|
/** @jsx jsx */
|
|
3
|
-
import {
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import { useIntl } from 'react-intl-next';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';
|
|
5
|
+
import Select from '@atlaskit/select';
|
|
6
|
+
import { siteSelectorIndex } from '../../../common/zindex';
|
|
8
7
|
import { siteSelectorMessages } from './messages';
|
|
8
|
+
const selectStyles = css({
|
|
9
|
+
fontSize: "var(--ds-font-size-100, 14px)",
|
|
10
|
+
fontWeight: "var(--ds-font-weight-medium, 500)",
|
|
11
|
+
lineHeight: "var(--ds-font-lineHeight-200, 20px)",
|
|
12
|
+
zIndex: siteSelectorIndex
|
|
13
|
+
});
|
|
9
14
|
export const JiraSiteSelector = props => {
|
|
10
15
|
const {
|
|
11
16
|
availableSites,
|
|
@@ -13,32 +18,45 @@ export const JiraSiteSelector = props => {
|
|
|
13
18
|
selectedJiraSite,
|
|
14
19
|
testId
|
|
15
20
|
} = props;
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
const {
|
|
22
|
+
formatMessage
|
|
23
|
+
} = useIntl();
|
|
24
|
+
const onChange = newValue => {
|
|
25
|
+
const selectedSite = availableSites.find(site => site.cloudId === (newValue === null || newValue === void 0 ? void 0 : newValue.value));
|
|
26
|
+
if (selectedSite) {
|
|
27
|
+
onSiteSelection(selectedSite);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const availableSitesOptions = useMemo(() => availableSites.map(site => ({
|
|
31
|
+
label: site.displayName,
|
|
32
|
+
value: site.cloudId
|
|
33
|
+
})), [availableSites]);
|
|
34
|
+
const selectedSiteOption = selectedJiraSite && {
|
|
35
|
+
label: selectedJiraSite.displayName,
|
|
36
|
+
value: selectedJiraSite.cloudId
|
|
37
|
+
};
|
|
38
|
+
return jsx("span", {
|
|
39
|
+
"data-testid": `${testId}--trigger`
|
|
40
|
+
}, jsx(Select, {
|
|
41
|
+
css: selectStyles,
|
|
42
|
+
classNamePrefix: testId,
|
|
43
|
+
isLoading: availableSites.length === 0,
|
|
44
|
+
onChange: onChange,
|
|
45
|
+
options: availableSitesOptions,
|
|
46
|
+
placeholder: formatMessage(siteSelectorMessages.chooseSite),
|
|
47
|
+
styles: {
|
|
48
|
+
// prevents the popup menu with available sites from being too narrow
|
|
49
|
+
// if the selected site is much shorter than the other options
|
|
50
|
+
menu: ({
|
|
51
|
+
width,
|
|
52
|
+
...css
|
|
53
|
+
}) => ({
|
|
54
|
+
...css,
|
|
55
|
+
minWidth: '100%',
|
|
56
|
+
width: 'max-content'
|
|
57
|
+
})
|
|
58
|
+
},
|
|
19
59
|
testId: testId,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
...props
|
|
23
|
-
}) => jsx(Button, _extends({}, props, {
|
|
24
|
-
testId: `${testId}--trigger`,
|
|
25
|
-
spacing: "none",
|
|
26
|
-
iconBefore: jsx(ChevronDownIcon, {
|
|
27
|
-
label: intl.formatMessage(siteSelectorMessages.dropdownChevronLabel)
|
|
28
|
-
}),
|
|
29
|
-
ref: triggerRef
|
|
30
|
-
}))
|
|
31
|
-
}, jsx(DropdownItemGroup, null, availableSites.map(availableSite => {
|
|
32
|
-
const {
|
|
33
|
-
displayName,
|
|
34
|
-
cloudId
|
|
35
|
-
} = availableSite;
|
|
36
|
-
const isSelected = displayName === (selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName);
|
|
37
|
-
return jsx(DropdownItem, {
|
|
38
|
-
isSelected: isSelected,
|
|
39
|
-
key: cloudId,
|
|
40
|
-
onClick: () => onSiteSelection(availableSite),
|
|
41
|
-
testId: testId && `${testId}--dropdown-item${isSelected ? '__selected' : ''}`
|
|
42
|
-
}, displayName);
|
|
43
|
-
})));
|
|
60
|
+
value: selectedSiteOption
|
|
61
|
+
}));
|
|
44
62
|
};
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import { defineMessages } from 'react-intl-next';
|
|
2
2
|
export const siteSelectorMessages = defineMessages({
|
|
3
|
-
|
|
4
|
-
id: 'linkDataSource.jira-issues.configmodal.
|
|
5
|
-
description: 'Label for
|
|
6
|
-
defaultMessage: '
|
|
7
|
-
},
|
|
8
|
-
selectedJiraSiteLabel: {
|
|
9
|
-
id: 'linkDataSource.jira-issues.configmodal.selectedJiraSiteLabel',
|
|
10
|
-
description: 'Label for a check icon declaring which option is selected',
|
|
11
|
-
defaultMessage: '{siteName} is selected'
|
|
3
|
+
chooseSite: {
|
|
4
|
+
id: 'linkDataSource.jira-issues.configmodal.chooseSite',
|
|
5
|
+
description: 'Label for input letting user know they have to choose a site',
|
|
6
|
+
defaultMessage: 'Choose site'
|
|
12
7
|
}
|
|
13
8
|
});
|
|
@@ -225,7 +225,7 @@ var analyticsContextAttributes = {
|
|
|
225
225
|
};
|
|
226
226
|
var analyticsContextData = {
|
|
227
227
|
packageName: "@atlaskit/link-datasource",
|
|
228
|
-
packageVersion: "1.
|
|
228
|
+
packageVersion: "1.9.0",
|
|
229
229
|
source: 'datasourceConfigModal'
|
|
230
230
|
};
|
|
231
231
|
var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
|
|
@@ -1,13 +1,41 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
|
-
import { jsx } from '@emotion/react';
|
|
3
|
+
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import { useIntl } from 'react-intl-next';
|
|
5
5
|
import EmptyState from '@atlaskit/empty-state';
|
|
6
|
+
import { N400 } from '@atlaskit/theme/colors';
|
|
6
7
|
import { useDatasourceAnalyticsEvents } from '../../../analytics';
|
|
7
8
|
import { AccessRequiredSVG } from './access-required-svg';
|
|
8
9
|
import { loadingErrorMessages } from './messages';
|
|
9
|
-
|
|
10
|
-
var
|
|
10
|
+
var urlStyles = css({
|
|
11
|
+
color: "var(--ds-text-subtlest, ".concat(N400, ")"),
|
|
12
|
+
fontSize: "var(--ds-font-size-100, 14px)",
|
|
13
|
+
lineHeight: "var(--ds-font-lineHeight-200, 20px)"
|
|
14
|
+
});
|
|
15
|
+
var descriptionMessageStyles = css({
|
|
16
|
+
display: 'flex',
|
|
17
|
+
flexDirection: 'column',
|
|
18
|
+
gap: "var(--ds-space-200, 16px)"
|
|
19
|
+
});
|
|
20
|
+
var iconContainerStyles = css({
|
|
21
|
+
marginBottom: "var(--ds-space-200, 16px)"
|
|
22
|
+
});
|
|
23
|
+
var Description = function Description(_ref) {
|
|
24
|
+
var message = _ref.message,
|
|
25
|
+
url = _ref.url;
|
|
26
|
+
return jsx("div", {
|
|
27
|
+
css: descriptionMessageStyles
|
|
28
|
+
}, jsx("span", {
|
|
29
|
+
css: urlStyles
|
|
30
|
+
}, url), jsx("span", null, message));
|
|
31
|
+
};
|
|
32
|
+
var IconContainer = function IconContainer() {
|
|
33
|
+
return jsx("div", {
|
|
34
|
+
css: iconContainerStyles
|
|
35
|
+
}, jsx(AccessRequiredSVG, null));
|
|
36
|
+
};
|
|
37
|
+
export var AccessRequired = function AccessRequired(_ref2) {
|
|
38
|
+
var url = _ref2.url;
|
|
11
39
|
var _useIntl = useIntl(),
|
|
12
40
|
formatMessage = _useIntl.formatMessage;
|
|
13
41
|
var _useDatasourceAnalyti = useDatasourceAnalyticsEvents(),
|
|
@@ -17,13 +45,19 @@ export var AccessRequired = function AccessRequired(_ref) {
|
|
|
17
45
|
reason: 'access'
|
|
18
46
|
});
|
|
19
47
|
}, [fireEvent]);
|
|
48
|
+
if (url) {
|
|
49
|
+
return jsx(EmptyState, {
|
|
50
|
+
header: formatMessage(loadingErrorMessages.accessRequiredWithSite),
|
|
51
|
+
description: jsx(Description, {
|
|
52
|
+
message: formatMessage(loadingErrorMessages.accessInstructions),
|
|
53
|
+
url: url
|
|
54
|
+
}),
|
|
55
|
+
renderImage: IconContainer
|
|
56
|
+
});
|
|
57
|
+
}
|
|
20
58
|
return jsx(EmptyState, {
|
|
21
|
-
header:
|
|
22
|
-
siteName: siteName
|
|
23
|
-
}) : formatMessage(loadingErrorMessages.accessRequired),
|
|
59
|
+
header: formatMessage(loadingErrorMessages.accessRequired),
|
|
24
60
|
description: formatMessage(loadingErrorMessages.accessInstructions),
|
|
25
|
-
renderImage:
|
|
26
|
-
return jsx(AccessRequiredSVG, null);
|
|
27
|
-
}
|
|
61
|
+
renderImage: IconContainer
|
|
28
62
|
});
|
|
29
63
|
};
|
|
@@ -2,8 +2,8 @@ import { defineMessages } from 'react-intl-next';
|
|
|
2
2
|
export var loadingErrorMessages = defineMessages({
|
|
3
3
|
accessInstructions: {
|
|
4
4
|
id: 'linkDataSource.jira-issues.accessInstructions',
|
|
5
|
-
description: "Instructions to let the user know they must contact
|
|
6
|
-
defaultMessage: 'To request access, contact your
|
|
5
|
+
description: "Instructions to let the user know they must contact their site administrator in order to access this site's content",
|
|
6
|
+
defaultMessage: 'To request access, contact your site administrator.'
|
|
7
7
|
},
|
|
8
8
|
accessRequired: {
|
|
9
9
|
id: 'linkDataSource.jira-issues.accessRequired',
|
|
@@ -12,8 +12,8 @@ export var loadingErrorMessages = defineMessages({
|
|
|
12
12
|
},
|
|
13
13
|
accessRequiredWithSite: {
|
|
14
14
|
id: 'linkDataSource.jira-issues.accessRequiredWithSite',
|
|
15
|
-
description: 'Message letting user know that they do not have access to the site
|
|
16
|
-
defaultMessage: "You don't have access to
|
|
15
|
+
description: 'Message letting user know that they do not have access to the site that will be listed below this message',
|
|
16
|
+
defaultMessage: "You don't have access to the following site:"
|
|
17
17
|
},
|
|
18
18
|
checkConnection: {
|
|
19
19
|
id: 'linkDataSource.jira-issues.checkConnection',
|
|
@@ -106,7 +106,9 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
|
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
108
|
if (status === 'unauthorized') {
|
|
109
|
-
return jsx(AccessRequired,
|
|
109
|
+
return jsx(AccessRequired, {
|
|
110
|
+
url: url
|
|
111
|
+
});
|
|
110
112
|
}
|
|
111
113
|
if (status === 'rejected') {
|
|
112
114
|
return jsx(LoadingError, {
|
|
@@ -22,6 +22,7 @@ import { combine } from '@atlaskit/pragmatic-drag-and-drop/util/combine';
|
|
|
22
22
|
import { N40 } from '@atlaskit/theme/colors';
|
|
23
23
|
import Tooltip from '@atlaskit/tooltip';
|
|
24
24
|
import { startUfoExperience, succeedUfoExperience } from '../../analytics/ufoExperiences';
|
|
25
|
+
import { stickyTableHeadersIndex } from '../../common/zindex';
|
|
25
26
|
import { ColumnPicker } from './column-picker';
|
|
26
27
|
import { DragColumnPreview } from './drag-column-preview';
|
|
27
28
|
import { DraggableTableHeading } from './draggable-table-heading';
|
|
@@ -34,7 +35,7 @@ var tableHeadStyles = css({
|
|
|
34
35
|
background: "var(--ds-surface, #FFF)",
|
|
35
36
|
position: 'sticky',
|
|
36
37
|
top: 0,
|
|
37
|
-
zIndex:
|
|
38
|
+
zIndex: stickyTableHeadersIndex
|
|
38
39
|
});
|
|
39
40
|
var ColumnPickerHeader = styled.th(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: 40px;\n position: sticky;\n right: calc(-1 * ", ");\n background-color: ", ";\n border-bottom: 2px solid ", "; /* It is required to have solid (not half-transparent) color because of this gradient business bellow */\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n ", " 10%\n );\n vertical-align: middle; /* Keeps dropdown button in the middle */\n &:last-of-type {\n padding-right: ", ";\n }\n"])), tableSidePadding, "var(--ds-surface, #FFF)", "var(--ds-background-accent-gray-subtler, ".concat(N40, ")"), "var(--ds-surface, #FFF)", tableSidePadding);
|
|
40
41
|
var truncatedCellStyles = css({
|
|
@@ -7,7 +7,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
|
|
|
7
7
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
8
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
9
9
|
/** @jsx jsx */
|
|
10
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
10
|
+
import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
11
11
|
import { css, jsx } from '@emotion/react';
|
|
12
12
|
import { FormattedMessage, FormattedNumber, useIntl } from 'react-intl-next';
|
|
13
13
|
import { v4 as uuidv4 } from 'uuid';
|
|
@@ -37,8 +37,11 @@ import { JiraSiteSelector } from '../site-selector';
|
|
|
37
37
|
import { modalMessages } from './messages';
|
|
38
38
|
var dropdownContainerStyles = css({
|
|
39
39
|
display: 'flex',
|
|
40
|
-
|
|
40
|
+
alignItems: 'center',
|
|
41
|
+
gap: "var(--ds-space-100, 0.5rem)",
|
|
42
|
+
minHeight: '40px' // to prevent vertical shifting when site selector pops in
|
|
41
43
|
});
|
|
44
|
+
|
|
42
45
|
var contentContainerStyles = css({
|
|
43
46
|
display: 'grid',
|
|
44
47
|
maxHeight: '420px',
|
|
@@ -83,12 +86,13 @@ export var getColumnAction = function getColumnAction(oldVisibleColumnKeys, newV
|
|
|
83
86
|
};
|
|
84
87
|
export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
|
|
85
88
|
var datasourceId = props.datasourceId,
|
|
86
|
-
initialParameters = props.parameters,
|
|
87
|
-
initialVisibleColumnKeys = props.visibleColumnKeys,
|
|
88
89
|
onCancel = props.onCancel,
|
|
89
90
|
onInsert = props.onInsert,
|
|
90
91
|
_props$viewMode = props.viewMode,
|
|
91
|
-
viewMode = _props$viewMode === void 0 ? 'issue' : _props$viewMode
|
|
92
|
+
viewMode = _props$viewMode === void 0 ? 'issue' : _props$viewMode,
|
|
93
|
+
initialParameters = props.parameters,
|
|
94
|
+
urlBeingEdited = props.url,
|
|
95
|
+
initialVisibleColumnKeys = props.visibleColumnKeys;
|
|
92
96
|
var _useState = useState([]),
|
|
93
97
|
_useState2 = _slicedToArray(_useState, 2),
|
|
94
98
|
availableSites = _useState2[0],
|
|
@@ -152,11 +156,9 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
152
156
|
modalRenderInstanceId = _useRef.current;
|
|
153
157
|
var selectedJiraSite = useMemo(function () {
|
|
154
158
|
if (cloudId) {
|
|
155
|
-
// if the cloud id we're editing isn't in available sites then user is likely unauthorized for that site
|
|
156
|
-
// TODO: unauthorized to edit flow https://product-fabric.atlassian.net/browse/EDM-7216
|
|
157
159
|
return availableSites.find(function (jiraSite) {
|
|
158
160
|
return jiraSite.cloudId === cloudId;
|
|
159
|
-
})
|
|
161
|
+
});
|
|
160
162
|
} else {
|
|
161
163
|
var currentlyLoggedInSiteUrl = window.location.origin;
|
|
162
164
|
return availableSites.find(function (jiraSite) {
|
|
@@ -408,12 +410,12 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
408
410
|
}));
|
|
409
411
|
}, [columns, defaultVisibleColumnKeys, handleOnNextPage, handleVisibleColumnKeysChange, hasNextPage, loadDatasourceDetails, modalRenderInstanceId, responseItems, status, visibleColumnKeys, extensionKey]);
|
|
410
412
|
var renderCountModeContent = useCallback(function () {
|
|
411
|
-
var
|
|
413
|
+
var selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
412
414
|
if (status === 'unauthorized') {
|
|
413
415
|
return jsx(AccessRequired, {
|
|
414
|
-
|
|
416
|
+
url: selectedJiraSiteUrl || urlBeingEdited
|
|
415
417
|
});
|
|
416
|
-
} else if (status === 'empty' || !jql || !
|
|
418
|
+
} else if (status === 'empty' || !jql || !selectedJiraSiteUrl) {
|
|
417
419
|
return jsx("div", {
|
|
418
420
|
css: smartLinkContainerStyles
|
|
419
421
|
}, jsx("span", {
|
|
@@ -421,22 +423,23 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
421
423
|
css: placeholderSmartLinkStyles
|
|
422
424
|
}, jsx(FormattedMessage, modalMessages.issuesCountSmartCardPlaceholderText)));
|
|
423
425
|
} else {
|
|
424
|
-
var urlWithEncodedJql = "".concat(
|
|
426
|
+
var urlWithEncodedJql = "".concat(selectedJiraSiteUrl, "/issues/?jql=").concat(encodeURI(jql));
|
|
425
427
|
return jsx("div", {
|
|
426
428
|
css: smartLinkContainerStyles
|
|
427
429
|
}, jsx(LinkRenderType, {
|
|
428
430
|
url: urlWithEncodedJql
|
|
429
431
|
}));
|
|
430
432
|
}
|
|
431
|
-
}, [jql, selectedJiraSite, status]);
|
|
433
|
+
}, [jql, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
|
|
432
434
|
var renderIssuesModeContent = useCallback(function () {
|
|
435
|
+
var selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
433
436
|
if (status === 'rejected' && jqlUrl) {
|
|
434
437
|
return jsx(ModalLoadingError, {
|
|
435
438
|
url: jqlUrl
|
|
436
439
|
});
|
|
437
440
|
} else if (status === 'unauthorized') {
|
|
438
441
|
return jsx(AccessRequired, {
|
|
439
|
-
|
|
442
|
+
url: selectedJiraSiteUrl || urlBeingEdited
|
|
440
443
|
});
|
|
441
444
|
} else if (resolvedWithNoResults) {
|
|
442
445
|
return jsx(NoResults, null);
|
|
@@ -459,24 +462,20 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
459
462
|
}));
|
|
460
463
|
}
|
|
461
464
|
return issueLikeDataTableView;
|
|
462
|
-
}, [
|
|
465
|
+
}, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, responseItems.length, retrieveUrlForSmartCardRender, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
|
|
463
466
|
return jsx(ModalTransition, null, jsx(Modal, {
|
|
464
|
-
testId:
|
|
467
|
+
testId: "jira-jql-datasource-modal",
|
|
465
468
|
onClose: onCancel,
|
|
466
469
|
width: "calc(100% - 80px)",
|
|
467
470
|
shouldScrollInViewport: true
|
|
468
|
-
}, jsx(ModalHeader, null, jsx(ModalTitle, null,
|
|
471
|
+
}, jsx(ModalHeader, null, jsx(ModalTitle, null, jsx("div", {
|
|
469
472
|
css: dropdownContainerStyles
|
|
470
|
-
}, jsx(FormattedMessage,
|
|
471
|
-
values: {
|
|
472
|
-
siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
|
|
473
|
-
}
|
|
474
|
-
})), jsx(JiraSiteSelector, {
|
|
475
|
-
testId: "jira-jql-datasource-modal--site-selector",
|
|
473
|
+
}, availableSites.length < 2 ? jsx(FormattedMessage, modalMessages.insertIssuesTitle) : jsx(Fragment, null, jsx(FormattedMessage, modalMessages.insertIssuesTitleManySites), jsx(JiraSiteSelector, {
|
|
476
474
|
availableSites: availableSites,
|
|
477
475
|
onSiteSelection: onSiteSelection,
|
|
478
|
-
selectedJiraSite: selectedJiraSite
|
|
479
|
-
|
|
476
|
+
selectedJiraSite: selectedJiraSite,
|
|
477
|
+
testId: "jira-jql-datasource-modal--site-selector"
|
|
478
|
+
})))), jsx(ModeSwitcher, {
|
|
480
479
|
isCompact: true,
|
|
481
480
|
options: [{
|
|
482
481
|
label: formatMessage(modalMessages.issueViewModeLabel),
|
|
@@ -516,7 +515,7 @@ export var PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(prop
|
|
|
516
515
|
appearance: "primary",
|
|
517
516
|
onClick: onInsertPressed,
|
|
518
517
|
isDisabled: isInsertDisabled,
|
|
519
|
-
testId:
|
|
518
|
+
testId: "jira-jql-datasource-modal--insert-button"
|
|
520
519
|
}, jsx(FormattedMessage, modalMessages.insertIssuesButtonText)))));
|
|
521
520
|
};
|
|
522
521
|
var analyticsContextAttributes = {
|
|
@@ -17,8 +17,8 @@ export var modalMessages = defineMessages({
|
|
|
17
17
|
},
|
|
18
18
|
insertIssuesTitleManySites: {
|
|
19
19
|
id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitleManySites',
|
|
20
|
-
description: 'Title for the Jira Issues
|
|
21
|
-
defaultMessage: 'Insert Jira issues from
|
|
20
|
+
description: 'Title for the Jira Issues modal when a user has to select a site to inserting issues from',
|
|
21
|
+
defaultMessage: 'Insert Jira issues from'
|
|
22
22
|
},
|
|
23
23
|
issueViewModeLabel: {
|
|
24
24
|
id: 'linkDataSource.jira-issues.configmodal.issueViewModeLabel',
|