@atlaskit/link-datasource 1.24.7 → 1.24.8
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 +7 -0
- package/dist/cjs/ui/assets-modal/modal/render-assets-content/initial-state-view/index.js +2 -1
- package/dist/cjs/ui/common/error-state/access-required.js +2 -1
- package/dist/cjs/ui/common/error-state/loading-error.js +2 -1
- package/dist/cjs/ui/common/error-state/messages.js +0 -11
- package/dist/cjs/ui/common/error-state/modal-loading-error.js +5 -13
- package/dist/cjs/ui/common/error-state/no-instances.js +2 -1
- package/dist/cjs/ui/common/error-state/no-results.js +2 -1
- package/dist/cjs/ui/common/initial-state-view/index.js +2 -1
- package/dist/cjs/ui/confluence-search-modal/confluence-search-container/index.js +48 -0
- package/dist/cjs/ui/confluence-search-modal/confluence-search-container/messages.js +14 -0
- package/dist/cjs/ui/confluence-search-modal/modal/index.js +209 -30
- package/dist/cjs/ui/confluence-search-modal/modal/messages.js +4 -4
- package/dist/cjs/ui/confluence-search-modal/types.js +5 -0
- package/dist/cjs/ui/issue-like-table/column-picker/concatenated-menu-list.js +2 -1
- package/dist/cjs/ui/issue-like-table/drag-column-preview.js +2 -1
- package/dist/cjs/ui/issue-like-table/index.js +2 -1
- package/dist/cjs/ui/issue-like-table/styled.js +2 -1
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +9 -1
- package/dist/cjs/ui/jira-issues-modal/modal/messages.js +5 -0
- package/dist/cjs/ui/jira-issues-modal/mode-switcher/index.js +1 -0
- package/dist/es2019/ui/assets-modal/modal/render-assets-content/initial-state-view/index.js +2 -1
- package/dist/es2019/ui/common/error-state/access-required.js +2 -1
- package/dist/es2019/ui/common/error-state/loading-error.js +2 -1
- package/dist/es2019/ui/common/error-state/messages.js +0 -11
- package/dist/es2019/ui/common/error-state/modal-loading-error.js +4 -10
- package/dist/es2019/ui/common/error-state/no-instances.js +2 -1
- package/dist/es2019/ui/common/error-state/no-results.js +2 -1
- package/dist/es2019/ui/common/initial-state-view/index.js +2 -1
- package/dist/es2019/ui/confluence-search-modal/confluence-search-container/index.js +35 -0
- package/dist/es2019/ui/confluence-search-modal/confluence-search-container/messages.js +8 -0
- package/dist/es2019/ui/confluence-search-modal/modal/index.js +192 -27
- package/dist/es2019/ui/confluence-search-modal/modal/messages.js +4 -4
- package/dist/es2019/ui/confluence-search-modal/types.js +1 -0
- package/dist/es2019/ui/issue-like-table/column-picker/concatenated-menu-list.js +2 -1
- package/dist/es2019/ui/issue-like-table/drag-column-preview.js +2 -1
- package/dist/es2019/ui/issue-like-table/index.js +2 -1
- package/dist/es2019/ui/issue-like-table/styled.js +2 -1
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +7 -1
- package/dist/es2019/ui/jira-issues-modal/modal/messages.js +5 -0
- package/dist/es2019/ui/jira-issues-modal/mode-switcher/index.js +1 -0
- package/dist/esm/ui/assets-modal/modal/render-assets-content/initial-state-view/index.js +2 -1
- package/dist/esm/ui/common/error-state/access-required.js +2 -1
- package/dist/esm/ui/common/error-state/loading-error.js +2 -1
- package/dist/esm/ui/common/error-state/messages.js +0 -11
- package/dist/esm/ui/common/error-state/modal-loading-error.js +5 -12
- package/dist/esm/ui/common/error-state/no-instances.js +2 -1
- package/dist/esm/ui/common/error-state/no-results.js +2 -1
- package/dist/esm/ui/common/initial-state-view/index.js +2 -1
- package/dist/esm/ui/confluence-search-modal/confluence-search-container/index.js +38 -0
- package/dist/esm/ui/confluence-search-modal/confluence-search-container/messages.js +8 -0
- package/dist/esm/ui/confluence-search-modal/modal/index.js +211 -30
- package/dist/esm/ui/confluence-search-modal/modal/messages.js +4 -4
- package/dist/esm/ui/confluence-search-modal/types.js +1 -0
- package/dist/esm/ui/issue-like-table/column-picker/concatenated-menu-list.js +2 -1
- package/dist/esm/ui/issue-like-table/drag-column-preview.js +2 -1
- package/dist/esm/ui/issue-like-table/index.js +2 -1
- package/dist/esm/ui/issue-like-table/styled.js +2 -1
- package/dist/esm/ui/jira-issues-modal/modal/index.js +9 -1
- package/dist/esm/ui/jira-issues-modal/modal/messages.js +5 -0
- package/dist/esm/ui/jira-issues-modal/mode-switcher/index.js +1 -0
- package/dist/types/common/types.d.ts +3 -6
- package/dist/types/ui/common/error-state/messages.d.ts +0 -10
- package/dist/types/ui/common/error-state/modal-loading-error.d.ts +3 -2
- package/dist/types/ui/confluence-search-modal/confluence-search-container/index.d.ts +9 -0
- package/dist/types/ui/confluence-search-modal/confluence-search-container/messages.d.ts +7 -0
- package/dist/types/ui/confluence-search-modal/index.d.ts +2 -2
- package/dist/types/ui/confluence-search-modal/modal/index.d.ts +2 -2
- package/dist/types/ui/confluence-search-modal/modal/messages.d.ts +1 -1
- package/dist/types/ui/confluence-search-modal/types.d.ts +12 -0
- package/dist/types/ui/jira-issues-modal/index.d.ts +2 -2
- package/dist/types/ui/jira-issues-modal/modal/index.d.ts +3 -13
- package/dist/types/ui/jira-issues-modal/modal/messages.d.ts +5 -0
- package/dist/types/ui/jira-issues-modal/types.d.ts +5 -1
- package/dist/types-ts4.5/common/types.d.ts +3 -6
- package/dist/types-ts4.5/ui/common/error-state/messages.d.ts +0 -10
- package/dist/types-ts4.5/ui/common/error-state/modal-loading-error.d.ts +3 -2
- package/dist/types-ts4.5/ui/confluence-search-modal/confluence-search-container/index.d.ts +9 -0
- package/dist/types-ts4.5/ui/confluence-search-modal/confluence-search-container/messages.d.ts +7 -0
- package/dist/types-ts4.5/ui/confluence-search-modal/index.d.ts +2 -2
- package/dist/types-ts4.5/ui/confluence-search-modal/modal/index.d.ts +2 -2
- package/dist/types-ts4.5/ui/confluence-search-modal/modal/messages.d.ts +1 -1
- package/dist/types-ts4.5/ui/confluence-search-modal/types.d.ts +12 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/index.d.ts +2 -2
- package/dist/types-ts4.5/ui/jira-issues-modal/modal/index.d.ts +3 -13
- package/dist/types-ts4.5/ui/jira-issues-modal/modal/messages.d.ts +5 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/types.d.ts +5 -1
- package/examples-helpers/buildConfluenceSearchTable.tsx +77 -0
- package/package.json +3 -3
|
@@ -8,9 +8,10 @@ exports.withTablePluginPrefix = exports.withTablePluginHeaderPrefix = exports.wi
|
|
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
9
|
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
10
|
var _colors = require("@atlaskit/theme/colors");
|
|
11
|
+
var _typography = require("@atlaskit/theme/typography");
|
|
11
12
|
var _styled$th;
|
|
12
13
|
var ScrollableContainerHeight = exports.ScrollableContainerHeight = 590;
|
|
13
|
-
var fieldTextFontSize = exports.fieldTextFontSize = "var(--ds-font-body,
|
|
14
|
+
var fieldTextFontSize = exports.fieldTextFontSize = "var(--ds-font-body, ".concat(_typography.fontFallback.body.medium, ")");
|
|
14
15
|
var Table = exports.Table = _styled.default.table({
|
|
15
16
|
width: '100%'
|
|
16
17
|
});
|
|
@@ -511,7 +511,15 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
|
|
|
511
511
|
var selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
512
512
|
if (status === 'rejected' && jqlUrl) {
|
|
513
513
|
return (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, {
|
|
514
|
-
|
|
514
|
+
errorMessage: jqlUrl ? (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages3.modalMessages.checkConnectionWithSource, {
|
|
515
|
+
values: {
|
|
516
|
+
a: function a(urlText) {
|
|
517
|
+
return (0, _react2.jsx)("a", {
|
|
518
|
+
href: jqlUrl
|
|
519
|
+
}, urlText);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
})) : undefined
|
|
515
523
|
});
|
|
516
524
|
} else if (status === 'unauthorized') {
|
|
517
525
|
return (0, _react2.jsx)(_accessRequired.AccessRequired, {
|
|
@@ -121,5 +121,10 @@ var modalMessages = exports.modalMessages = (0, _reactIntlNext.defineMessages)({
|
|
|
121
121
|
id: 'linkDataSource.jira-issues.no.jira.sites.access.description',
|
|
122
122
|
description: 'Description that shows in the modal when user has no access to any Jira sites',
|
|
123
123
|
defaultMessage: 'To request access, contact your admin.'
|
|
124
|
+
},
|
|
125
|
+
checkConnectionWithSource: {
|
|
126
|
+
id: 'linkDataSource.jira-issues.checkConnectionWithSource',
|
|
127
|
+
description: 'Instructions to let the user know how to resolve the error that occured, or click the link provided to open the query in Jira',
|
|
128
|
+
defaultMessage: 'Check your connection and refresh, or <a>open this query in Jira</a> to review.'
|
|
124
129
|
}
|
|
125
130
|
});
|
|
@@ -88,6 +88,7 @@ var ModeSwitcher = exports.ModeSwitcher = function ModeSwitcher(props) {
|
|
|
88
88
|
tooltipText = _ref.tooltipText;
|
|
89
89
|
var isSelected = value === selectedOptionValue;
|
|
90
90
|
return (0, _react2.jsx)(_tooltip.default, {
|
|
91
|
+
key: value,
|
|
91
92
|
content: tooltipText
|
|
92
93
|
}, function (tooltipProps) {
|
|
93
94
|
return (0, _react2.jsx)("label", (0, _extends2.default)({}, tooltipProps, {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import { useIntl } from 'react-intl-next';
|
|
5
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
5
6
|
import { CrystalBallSVG } from './assets/crystal-ball-svg';
|
|
6
7
|
import { initialStateViewMessages } from './messages';
|
|
7
8
|
const initialStateViewContainerStyles = css({
|
|
@@ -14,7 +15,7 @@ const svgAndTextsWrapperStyles = css({
|
|
|
14
15
|
alignSelf: 'center'
|
|
15
16
|
});
|
|
16
17
|
const searchTitleStyles = css({
|
|
17
|
-
font:
|
|
18
|
+
font: `var(--ds-font-heading-small, ${fontFallback.heading.small})`,
|
|
18
19
|
paddingTop: "var(--ds-space-200, 16px)",
|
|
19
20
|
paddingBottom: "var(--ds-space-100, 8px)"
|
|
20
21
|
});
|
|
@@ -5,12 +5,13 @@ import { useIntl } from 'react-intl-next';
|
|
|
5
5
|
import EmptyState from '@atlaskit/empty-state';
|
|
6
6
|
import { Box, xcss } from '@atlaskit/primitives';
|
|
7
7
|
import { N400 } from '@atlaskit/theme/colors';
|
|
8
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
8
9
|
import { useDatasourceAnalyticsEvents } from '../../../analytics';
|
|
9
10
|
import { AccessRequiredSVG } from './access-required-svg';
|
|
10
11
|
import { loadingErrorMessages } from './messages';
|
|
11
12
|
const urlStyles = css({
|
|
12
13
|
color: `var(--ds-text-subtlest, ${N400})`,
|
|
13
|
-
font:
|
|
14
|
+
font: `var(--ds-font-body, ${fontFallback.body.medium})`
|
|
14
15
|
});
|
|
15
16
|
const descriptionMessageStyles = css({
|
|
16
17
|
display: 'flex',
|
|
@@ -3,6 +3,7 @@ import { useEffect } from 'react';
|
|
|
3
3
|
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import { FormattedMessage } from 'react-intl-next';
|
|
5
5
|
import Button from '@atlaskit/button/standard-button';
|
|
6
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
6
7
|
import { useDatasourceAnalyticsEvents } from '../../../analytics';
|
|
7
8
|
import { LoadingErrorSVG } from './loading-error-svg';
|
|
8
9
|
import { loadingErrorMessages } from './messages';
|
|
@@ -18,7 +19,7 @@ const errorMessageContainerStyles = css({
|
|
|
18
19
|
placeItems: 'center'
|
|
19
20
|
});
|
|
20
21
|
const errorMessageStyles = css({
|
|
21
|
-
font:
|
|
22
|
+
font: `var(--ds-font-heading-small, ${fontFallback.heading.small})`
|
|
22
23
|
});
|
|
23
24
|
const errorDescriptionStyles = css({
|
|
24
25
|
margin: 0
|
|
@@ -44,17 +44,6 @@ export const loadingErrorMessages = defineMessages({
|
|
|
44
44
|
description: 'Instructions to let the user know how to resolve the network error that occurred or to try again at a different time',
|
|
45
45
|
defaultMessage: 'Check your connection and refresh, or try again later.'
|
|
46
46
|
},
|
|
47
|
-
checkConnectionWithSourceDuplicate: {
|
|
48
|
-
id: 'linkDataSource.checkConnectionWithSource',
|
|
49
|
-
description: 'Instructions to let the user know how to resolve the error that occured, or click the link provided to open the query in Jira',
|
|
50
|
-
defaultMessage: 'Check your connection and refresh, or <a>open this query in Jira</a> to review.'
|
|
51
|
-
},
|
|
52
|
-
//delete and remove duplicate from title above
|
|
53
|
-
checkConnectionWithSource: {
|
|
54
|
-
id: 'linkDataSource.jira-issues.checkConnectionWithSource',
|
|
55
|
-
description: 'Instructions to let the user know how to resolve the error that occured, or click the link provided to open the query in Jira',
|
|
56
|
-
defaultMessage: 'Check your connection and refresh, or <a>open this query in Jira</a> to review.'
|
|
57
|
-
},
|
|
58
47
|
noResultsFoundDuplicate: {
|
|
59
48
|
id: 'linkDataSource.noResultsFound',
|
|
60
49
|
description: 'Status message letting the user know their query did not have any results',
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
|
2
1
|
/** @jsx jsx */
|
|
3
2
|
import { useEffect } from 'react';
|
|
4
3
|
import { css, jsx } from '@emotion/react';
|
|
5
4
|
import { FormattedMessage } from 'react-intl-next';
|
|
5
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
6
6
|
import { useDatasourceAnalyticsEvents } from '../../../analytics';
|
|
7
7
|
import { LoadingErrorSVG } from './loading-error-svg';
|
|
8
8
|
import { loadingErrorMessages } from './messages';
|
|
@@ -18,13 +18,13 @@ const errorMessageContainerStyles = css({
|
|
|
18
18
|
placeItems: 'center'
|
|
19
19
|
});
|
|
20
20
|
const errorMessageStyles = css({
|
|
21
|
-
font:
|
|
21
|
+
font: `var(--ds-font-heading-small, ${fontFallback.heading.small})`
|
|
22
22
|
});
|
|
23
23
|
const errorDescriptionStyles = css({
|
|
24
24
|
margin: 0
|
|
25
25
|
});
|
|
26
26
|
export const ModalLoadingError = ({
|
|
27
|
-
|
|
27
|
+
errorMessage = jsx(FormattedMessage, loadingErrorMessages.checkConnection)
|
|
28
28
|
}) => {
|
|
29
29
|
const {
|
|
30
30
|
fireEvent
|
|
@@ -43,11 +43,5 @@ export const ModalLoadingError = ({
|
|
|
43
43
|
css: errorMessageStyles
|
|
44
44
|
}, jsx(FormattedMessage, loadingErrorMessages.unableToLoadResults)), jsx("p", {
|
|
45
45
|
css: errorDescriptionStyles
|
|
46
|
-
},
|
|
47
|
-
values: {
|
|
48
|
-
a: chunk => jsx("a", {
|
|
49
|
-
href: url
|
|
50
|
-
}, chunk)
|
|
51
|
-
}
|
|
52
|
-
})) : jsx(FormattedMessage, loadingErrorMessages.checkConnection))));
|
|
46
|
+
}, errorMessage)));
|
|
53
47
|
};
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { css, jsx } from '@emotion/react';
|
|
3
3
|
import { useIntl } from 'react-intl-next';
|
|
4
4
|
import { Flex, xcss } from '@atlaskit/primitives';
|
|
5
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
5
6
|
import { NoInstancesSvg } from './no-instances-svg';
|
|
6
7
|
const titleStyles = css({
|
|
7
|
-
font:
|
|
8
|
+
font: `var(--ds-font-heading-small, ${fontFallback.heading.small})`,
|
|
8
9
|
marginTop: "var(--ds-space-200, 16px)"
|
|
9
10
|
});
|
|
10
11
|
const descriptionStyles = css({
|
|
@@ -3,6 +3,7 @@ import { useEffect } from 'react';
|
|
|
3
3
|
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import { FormattedMessage } from 'react-intl-next';
|
|
5
5
|
import Button from '@atlaskit/button/standard-button';
|
|
6
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
6
7
|
import { useDatasourceAnalyticsEvents } from '../../../analytics';
|
|
7
8
|
import { loadingErrorMessages } from './messages';
|
|
8
9
|
const noResultsContainerStyles = css({
|
|
@@ -17,7 +18,7 @@ const noResultsMessageContainerStyles = css({
|
|
|
17
18
|
placeItems: 'center'
|
|
18
19
|
});
|
|
19
20
|
const noResultsMessageStyles = css({
|
|
20
|
-
font:
|
|
21
|
+
font: `var(--ds-font-heading-small, ${fontFallback.heading.small})`
|
|
21
22
|
});
|
|
22
23
|
export const NoResults = ({
|
|
23
24
|
onRefresh
|
|
@@ -3,6 +3,7 @@ import { css, jsx } from '@emotion/react';
|
|
|
3
3
|
import { FormattedMessage, useIntl } from 'react-intl-next';
|
|
4
4
|
import Lozenge from '@atlaskit/lozenge';
|
|
5
5
|
import { N300 } from '@atlaskit/theme/colors';
|
|
6
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
6
7
|
import { initialStateViewMessages } from './messages';
|
|
7
8
|
const initialStateViewContainerStyles = css({
|
|
8
9
|
display: 'flex',
|
|
@@ -20,7 +21,7 @@ const betaTagStyles = css({
|
|
|
20
21
|
});
|
|
21
22
|
const searchTitleStyles = css({
|
|
22
23
|
color: `var(--ds-text-subtlest, ${N300})`,
|
|
23
|
-
font:
|
|
24
|
+
font: `var(--ds-font-heading-medium, ${fontFallback.heading.medium})`,
|
|
24
25
|
paddingTop: "var(--ds-space-200, 16px)",
|
|
25
26
|
paddingBottom: "var(--ds-space-100, 8px)",
|
|
26
27
|
display: 'flex',
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { BasicSearchInput } from '../../common/modal/basic-search-input';
|
|
3
|
+
import { searchMessages } from './messages';
|
|
4
|
+
const ConfluenceSearchContainer = ({
|
|
5
|
+
cloudId,
|
|
6
|
+
initialSearchValue,
|
|
7
|
+
isSearching,
|
|
8
|
+
onSearch
|
|
9
|
+
}) => {
|
|
10
|
+
const currentCloudId = useRef(cloudId);
|
|
11
|
+
const [searchBarSearchString, setSearchBarSearchString] = useState(initialSearchValue !== null && initialSearchValue !== void 0 ? initialSearchValue : '');
|
|
12
|
+
const handleSearchChange = useCallback(e => {
|
|
13
|
+
const rawSearch = e.currentTarget.value;
|
|
14
|
+
setSearchBarSearchString(rawSearch);
|
|
15
|
+
}, []);
|
|
16
|
+
|
|
17
|
+
// TODO: further refactoring in EDM-9573
|
|
18
|
+
// https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6827913
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (currentCloudId.current !== cloudId) {
|
|
21
|
+
setSearchBarSearchString('');
|
|
22
|
+
currentCloudId.current = cloudId;
|
|
23
|
+
}
|
|
24
|
+
}, [cloudId]);
|
|
25
|
+
return /*#__PURE__*/React.createElement(BasicSearchInput, {
|
|
26
|
+
testId: "confluence-search-datasource-modal--search-input",
|
|
27
|
+
isSearching: isSearching,
|
|
28
|
+
onChange: handleSearchChange,
|
|
29
|
+
onSearch: onSearch,
|
|
30
|
+
searchTerm: searchBarSearchString,
|
|
31
|
+
placeholder: searchMessages.searchLabel,
|
|
32
|
+
fullWidth: true
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
export default ConfluenceSearchContainer;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { defineMessages } from 'react-intl-next';
|
|
2
|
+
export const searchMessages = defineMessages({
|
|
3
|
+
searchLabel: {
|
|
4
|
+
id: 'linkDataSource.confluence-search.configmodal.searchLabel',
|
|
5
|
+
description: 'Placeholder text for the search input box',
|
|
6
|
+
defaultMessage: 'Enter keywords to find pages, attachments, and more'
|
|
7
|
+
}
|
|
8
|
+
});
|
|
@@ -1,31 +1,81 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
1
2
|
/** @jsx jsx */
|
|
2
|
-
import { Fragment, useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
4
|
import { jsx } from '@emotion/react';
|
|
4
|
-
import { FormattedMessage } from 'react-intl-next';
|
|
5
|
+
import { FormattedMessage, FormattedNumber } from 'react-intl-next';
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
5
7
|
import Button from '@atlaskit/button/standard-button';
|
|
6
8
|
import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
|
|
7
9
|
import Modal, { ModalBody, ModalFooter, ModalHeader, ModalTitle } from '@atlaskit/modal-dialog';
|
|
10
|
+
import { getBooleanFF } from '@atlaskit/platform-feature-flags';
|
|
11
|
+
import { Box, xcss } from '@atlaskit/primitives';
|
|
12
|
+
import LinkUrl from '@atlaskit/smart-card/link-url';
|
|
13
|
+
import { N800 } from '@atlaskit/theme/colors';
|
|
8
14
|
import { fetchMessagesForLocale } from '../../../common/utils/locale/fetch-messages-for-locale';
|
|
15
|
+
import { useDatasourceTableState } from '../../../hooks/useDatasourceTableState';
|
|
9
16
|
import i18nEN from '../../../i18n/en';
|
|
10
17
|
import { getAvailableSites } from '../../../services/getAvailableSites';
|
|
18
|
+
import { AccessRequired } from '../../common/error-state/access-required';
|
|
19
|
+
import { ModalLoadingError } from '../../common/error-state/modal-loading-error';
|
|
11
20
|
import { NoInstancesView } from '../../common/error-state/no-instances';
|
|
21
|
+
import { NoResults } from '../../common/error-state/no-results';
|
|
12
22
|
import { InitialStateView } from '../../common/initial-state-view';
|
|
13
|
-
import { BasicSearchInput } from '../../common/modal/basic-search-input';
|
|
14
23
|
import { ContentContainer } from '../../common/modal/content-container';
|
|
15
24
|
import { SiteSelector } from '../../common/modal/site-selector';
|
|
25
|
+
import { EmptyState, IssueLikeDataTableView } from '../../issue-like-table';
|
|
26
|
+
import ConfluenceSearchContainer from '../confluence-search-container';
|
|
16
27
|
import { ConfluenceSearchInitialStateSVG } from './confluence-search-initial-state-svg';
|
|
17
28
|
import { confluenceSearchModalMessages } from './messages';
|
|
29
|
+
const inputContainerStyles = xcss({
|
|
30
|
+
alignItems: 'baseline',
|
|
31
|
+
display: 'flex',
|
|
32
|
+
minHeight: '72px'
|
|
33
|
+
});
|
|
34
|
+
const searchCountStyles = xcss({
|
|
35
|
+
flex: 1,
|
|
36
|
+
fontWeight: 600
|
|
37
|
+
});
|
|
18
38
|
export const ConfluenceSearchConfigModal = props => {
|
|
19
39
|
const {
|
|
40
|
+
current: modalRenderInstanceId
|
|
41
|
+
} = useRef(uuidv4());
|
|
42
|
+
const {
|
|
43
|
+
datasourceId,
|
|
44
|
+
columnCustomSizes: initialColumnCustomSizes,
|
|
45
|
+
wrappedColumnKeys: initialWrappedColumnKeys,
|
|
46
|
+
onCancel,
|
|
20
47
|
parameters: initialParameters,
|
|
21
|
-
|
|
48
|
+
url: urlBeingEdited,
|
|
49
|
+
visibleColumnKeys: initialVisibleColumnKeys
|
|
22
50
|
} = props;
|
|
23
51
|
const [availableSites, setAvailableSites] = useState(undefined);
|
|
24
52
|
const [cloudId, setCloudId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.cloudId);
|
|
25
|
-
const [
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
53
|
+
const [searchString, setSearchString] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.searchString);
|
|
54
|
+
const [visibleColumnKeys, setVisibleColumnKeys] = useState(initialVisibleColumnKeys);
|
|
55
|
+
|
|
56
|
+
// TODO: further refactoring in EDM-9573
|
|
57
|
+
// https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829210
|
|
58
|
+
const parameters = useMemo(() => cloudId ? {
|
|
59
|
+
cloudId,
|
|
60
|
+
searchString
|
|
61
|
+
} : undefined, [cloudId, searchString /** Add more parameters when more filters are added */]);
|
|
62
|
+
const isParametersSet = useMemo(() => !!cloudId && Object.values(parameters !== null && parameters !== void 0 ? parameters : {}).filter(v => v !== undefined).length > 1, [cloudId, parameters]);
|
|
63
|
+
const {
|
|
64
|
+
reset,
|
|
65
|
+
status,
|
|
66
|
+
onNextPage,
|
|
67
|
+
responseItems,
|
|
68
|
+
hasNextPage,
|
|
69
|
+
columns,
|
|
70
|
+
defaultVisibleColumnKeys,
|
|
71
|
+
loadDatasourceDetails,
|
|
72
|
+
extensionKey = null,
|
|
73
|
+
totalCount
|
|
74
|
+
} = useDatasourceTableState({
|
|
75
|
+
datasourceId,
|
|
76
|
+
parameters: isParametersSet ? parameters : undefined,
|
|
77
|
+
fieldKeys: visibleColumnKeys
|
|
78
|
+
});
|
|
29
79
|
const hasNoConfluenceSites = availableSites && availableSites.length === 0;
|
|
30
80
|
const selectedConfluenceSite = useMemo(() => {
|
|
31
81
|
if (cloudId) {
|
|
@@ -38,10 +88,24 @@ export const ConfluenceSearchConfigModal = props => {
|
|
|
38
88
|
return (availableSites === null || availableSites === void 0 ? void 0 : availableSites.find(confluenceSite => confluenceSite.url === currentlyLoggedInSiteUrl)) || (availableSites === null || availableSites === void 0 ? void 0 : availableSites[0]);
|
|
39
89
|
}
|
|
40
90
|
}, [availableSites, cloudId]);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
91
|
+
|
|
92
|
+
// TODO: further refactoring in EDM-9573
|
|
93
|
+
// https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6828283
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (selectedConfluenceSite && (!cloudId || cloudId !== selectedConfluenceSite.cloudId)) {
|
|
96
|
+
setCloudId(selectedConfluenceSite.cloudId);
|
|
97
|
+
}
|
|
98
|
+
}, [cloudId, selectedConfluenceSite]);
|
|
99
|
+
|
|
100
|
+
// TODO: further refactoring in EDM-9573
|
|
101
|
+
// https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6829171
|
|
102
|
+
const onSiteSelection = useCallback(site => {
|
|
103
|
+
setSearchString(undefined);
|
|
104
|
+
setCloudId(site.cloudId);
|
|
105
|
+
reset({
|
|
106
|
+
shouldForceRequest: true
|
|
107
|
+
});
|
|
108
|
+
}, [reset]);
|
|
45
109
|
useEffect(() => {
|
|
46
110
|
const fetchSiteDisplayNames = async () => {
|
|
47
111
|
const confluenceSites = await getAvailableSites('confluence');
|
|
@@ -51,6 +115,96 @@ export const ConfluenceSearchConfigModal = props => {
|
|
|
51
115
|
void fetchSiteDisplayNames();
|
|
52
116
|
}, []);
|
|
53
117
|
const siteSelectorLabel = availableSites && availableSites.length > 1 ? confluenceSearchModalMessages.insertIssuesTitleManySites : confluenceSearchModalMessages.insertIssuesTitle;
|
|
118
|
+
const [columnCustomSizes, setColumnCustomSizes] = useState(initialColumnCustomSizes);
|
|
119
|
+
const onColumnResize = useCallback((key, width) => {
|
|
120
|
+
setColumnCustomSizes({
|
|
121
|
+
...columnCustomSizes,
|
|
122
|
+
[key]: width
|
|
123
|
+
});
|
|
124
|
+
}, [columnCustomSizes]);
|
|
125
|
+
const [wrappedColumnKeys, setWrappedColumnKeys] = useState(initialWrappedColumnKeys);
|
|
126
|
+
const onWrappedColumnChange = useCallback((key, isWrapped) => {
|
|
127
|
+
const set = new Set(wrappedColumnKeys);
|
|
128
|
+
if (isWrapped) {
|
|
129
|
+
set.add(key);
|
|
130
|
+
} else {
|
|
131
|
+
set.delete(key);
|
|
132
|
+
}
|
|
133
|
+
setWrappedColumnKeys(Array.from(set));
|
|
134
|
+
}, [wrappedColumnKeys]);
|
|
135
|
+
|
|
136
|
+
// TODO: further refactoring in EDM-9573
|
|
137
|
+
// https://stash.atlassian.com/projects/ATLASSIAN/repos/atlassian-frontend-monorepo/pull-requests/82725/overview?commentId=6798258
|
|
138
|
+
const confluenceSearchTable = useMemo(() => jsx(ContentContainer, {
|
|
139
|
+
withTableBorder: true
|
|
140
|
+
}, jsx(IssueLikeDataTableView, {
|
|
141
|
+
testId: "confluence-search-datasource-table",
|
|
142
|
+
status: status,
|
|
143
|
+
columns: columns,
|
|
144
|
+
items: responseItems,
|
|
145
|
+
hasNextPage: hasNextPage,
|
|
146
|
+
visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
|
|
147
|
+
onNextPage: onNextPage,
|
|
148
|
+
onLoadDatasourceDetails: loadDatasourceDetails,
|
|
149
|
+
onVisibleColumnKeysChange: setVisibleColumnKeys,
|
|
150
|
+
parentContainerRenderInstanceId: modalRenderInstanceId,
|
|
151
|
+
extensionKey: extensionKey,
|
|
152
|
+
columnCustomSizes: columnCustomSizes,
|
|
153
|
+
onColumnResize: onColumnResize,
|
|
154
|
+
wrappedColumnKeys: wrappedColumnKeys,
|
|
155
|
+
onWrappedColumnChange: getBooleanFF('platform.linking-platform.datasource-word_wrap') ? onWrappedColumnChange : undefined
|
|
156
|
+
})), [status, columns, responseItems, hasNextPage, visibleColumnKeys, defaultVisibleColumnKeys, onNextPage, loadDatasourceDetails, setVisibleColumnKeys, modalRenderInstanceId, extensionKey, columnCustomSizes, onColumnResize, wrappedColumnKeys, onWrappedColumnChange]);
|
|
157
|
+
const resolvedWithNoResults = status === 'resolved' && !responseItems.length;
|
|
158
|
+
const hasConfluenceSearchParams = selectedConfluenceSite && searchString;
|
|
159
|
+
const selectedConfluenceSiteUrl = selectedConfluenceSite === null || selectedConfluenceSite === void 0 ? void 0 : selectedConfluenceSite.url;
|
|
160
|
+
const confluenceSearchUrl = selectedConfluenceSiteUrl && searchString !== undefined && `${selectedConfluenceSiteUrl}/wiki/search/?text=${encodeURI(searchString)}`;
|
|
161
|
+
const renderModalContent = useCallback(() => {
|
|
162
|
+
if (status === 'rejected') {
|
|
163
|
+
return jsx(ModalLoadingError, null);
|
|
164
|
+
} else if (status === 'unauthorized') {
|
|
165
|
+
return jsx(AccessRequired, {
|
|
166
|
+
url: selectedConfluenceSiteUrl || urlBeingEdited
|
|
167
|
+
});
|
|
168
|
+
} else if (resolvedWithNoResults || status === 'forbidden') {
|
|
169
|
+
return jsx(NoResults, null);
|
|
170
|
+
} else if (status === 'empty' || !columns.length) {
|
|
171
|
+
// persist the empty state when making the initial /data request which contains the columns
|
|
172
|
+
if (hasConfluenceSearchParams !== undefined) {
|
|
173
|
+
return jsx(EmptyState, {
|
|
174
|
+
testId: `confluence-search-datasource-modal--empty-state`
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return jsx(ContentContainer, null, jsx(InitialStateView, {
|
|
178
|
+
icon: jsx(ConfluenceSearchInitialStateSVG, null),
|
|
179
|
+
title: confluenceSearchModalMessages.initialViewSearchTitle,
|
|
180
|
+
description: confluenceSearchModalMessages.initialViewSearchDescription
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
return confluenceSearchTable;
|
|
184
|
+
}, [columns.length, selectedConfluenceSiteUrl, confluenceSearchTable, resolvedWithNoResults, status, urlBeingEdited, hasConfluenceSearchParams]);
|
|
185
|
+
const shouldShowResultsCount = !!totalCount && totalCount !== 1;
|
|
186
|
+
const onInsertPressed = useCallback(() => {
|
|
187
|
+
// eslint-disable-next-line no-console
|
|
188
|
+
// TODO: Implement onInsert in EDM-9412
|
|
189
|
+
/**
|
|
190
|
+
* onInsert(
|
|
191
|
+
{
|
|
192
|
+
type: 'inlineCard',
|
|
193
|
+
attrs: {
|
|
194
|
+
url,
|
|
195
|
+
},
|
|
196
|
+
} as InlineCardAdf,
|
|
197
|
+
consumerEvent,
|
|
198
|
+
);
|
|
199
|
+
*/
|
|
200
|
+
}, []);
|
|
201
|
+
const onSearch = useCallback(newSearchString => {
|
|
202
|
+
setSearchString(newSearchString);
|
|
203
|
+
reset({
|
|
204
|
+
shouldForceRequest: true
|
|
205
|
+
});
|
|
206
|
+
}, [reset]);
|
|
207
|
+
const isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
|
|
54
208
|
return jsx(IntlMessagesProvider, {
|
|
55
209
|
defaultMessages: i18nEN,
|
|
56
210
|
loaderFn: fetchMessagesForLocale
|
|
@@ -65,29 +219,40 @@ export const ConfluenceSearchConfigModal = props => {
|
|
|
65
219
|
selectedSite: selectedConfluenceSite,
|
|
66
220
|
testId: "confluence-search-datasource-modal--site-selector",
|
|
67
221
|
label: siteSelectorLabel
|
|
68
|
-
}))), jsx(ModalBody, null, !hasNoConfluenceSites ? jsx(Fragment, null, jsx(
|
|
69
|
-
|
|
222
|
+
}))), jsx(ModalBody, null, !hasNoConfluenceSites ? jsx(Fragment, null, jsx(Box, {
|
|
223
|
+
xcss: inputContainerStyles
|
|
224
|
+
}, jsx(ConfluenceSearchContainer, {
|
|
225
|
+
cloudId: cloudId,
|
|
70
226
|
isSearching: status === 'loading',
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
placeholder: confluenceSearchModalMessages.searchLabel,
|
|
75
|
-
fullWidth: true
|
|
76
|
-
}), jsx(ContentContainer, null, jsx(InitialStateView, {
|
|
77
|
-
icon: jsx(ConfluenceSearchInitialStateSVG, null),
|
|
78
|
-
title: confluenceSearchModalMessages.initialViewSearchTitle,
|
|
79
|
-
description: confluenceSearchModalMessages.initialViewSearchDescription
|
|
80
|
-
}))) : jsx(NoInstancesView, {
|
|
227
|
+
onSearch: onSearch,
|
|
228
|
+
initialSearchValue: initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.searchString
|
|
229
|
+
})), renderModalContent()) : jsx(NoInstancesView, {
|
|
81
230
|
title: confluenceSearchModalMessages.noAccessToConfluenceSitesTitle,
|
|
82
231
|
description: confluenceSearchModalMessages.noAccessToConfluenceSitesDescription,
|
|
83
232
|
testId: 'no-confluence-instances-content'
|
|
84
|
-
})), jsx(ModalFooter, null, jsx(
|
|
233
|
+
})), jsx(ModalFooter, null, shouldShowResultsCount && confluenceSearchUrl && jsx(Box, {
|
|
234
|
+
testId: "confluence-search-datasource-modal-total-results-count",
|
|
235
|
+
xcss: searchCountStyles
|
|
236
|
+
}, jsx(LinkUrl, {
|
|
237
|
+
href: confluenceSearchUrl,
|
|
238
|
+
target: "_blank",
|
|
239
|
+
testId: "item-count-url",
|
|
240
|
+
style: {
|
|
241
|
+
color: `var(--ds-text-accent-gray, ${N800})`
|
|
242
|
+
}
|
|
243
|
+
}, jsx(FormattedNumber, {
|
|
244
|
+
value: totalCount
|
|
245
|
+
}), ' ', jsx(FormattedMessage, _extends({}, confluenceSearchModalMessages.searchCountText, {
|
|
246
|
+
values: {
|
|
247
|
+
totalCount
|
|
248
|
+
}
|
|
249
|
+
})))), jsx(Button, {
|
|
85
250
|
appearance: "default",
|
|
86
251
|
onClick: onCancel
|
|
87
252
|
}, jsx(FormattedMessage, confluenceSearchModalMessages.cancelButtonText)), !hasNoConfluenceSites && jsx(Button, {
|
|
88
253
|
appearance: "primary",
|
|
89
|
-
onClick:
|
|
90
|
-
isDisabled:
|
|
254
|
+
onClick: onInsertPressed,
|
|
255
|
+
isDisabled: isInsertDisabled,
|
|
91
256
|
testId: "confluence-search-datasource-modal--insert-button"
|
|
92
257
|
}, jsx(FormattedMessage, confluenceSearchModalMessages.insertResultsButtonText)))));
|
|
93
258
|
};
|
|
@@ -10,10 +10,10 @@ export const confluenceSearchModalMessages = defineMessages({
|
|
|
10
10
|
description: 'Button text to insert the displayed content',
|
|
11
11
|
defaultMessage: 'Insert results'
|
|
12
12
|
},
|
|
13
|
-
|
|
14
|
-
id: 'linkDataSource.confluence-search.configmodal.
|
|
15
|
-
description: '
|
|
16
|
-
defaultMessage: '
|
|
13
|
+
searchCountText: {
|
|
14
|
+
id: 'linkDataSource.confluence-search.configmodal.resultsCountText',
|
|
15
|
+
description: 'Text that appears after search count number.',
|
|
16
|
+
defaultMessage: '{totalCount, plural, one {result} other {results}}'
|
|
17
17
|
},
|
|
18
18
|
insertIssuesTitle: {
|
|
19
19
|
id: 'linkDataSource.confluence-search.configmodal.insertConfluenceTitle',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -3,11 +3,12 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
3
3
|
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import { FormattedMessage } from 'react-intl-next';
|
|
5
5
|
import { components } from '@atlaskit/select';
|
|
6
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
6
7
|
import { columnPickerMessages } from './messages';
|
|
7
8
|
export const SELECT_ITEMS_MAXIMUM_THRESHOLD = 200;
|
|
8
9
|
const messageStyles = css({
|
|
9
10
|
color: "var(--ds-text-subtle, #44546F)",
|
|
10
|
-
font:
|
|
11
|
+
font: `var(--ds-font-body-small, ${fontFallback.body.small})`,
|
|
11
12
|
fontWeight: "var(--ds-font-weight-regular, 400)"
|
|
12
13
|
});
|
|
13
14
|
export const ConcatenatedMenuList = ({
|
|
@@ -3,6 +3,7 @@ import React from 'react';
|
|
|
3
3
|
import { css, jsx } from '@emotion/react';
|
|
4
4
|
import styled from '@emotion/styled';
|
|
5
5
|
import { N40 } from '@atlaskit/theme/colors';
|
|
6
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
6
7
|
import { TableHeading } from './styled';
|
|
7
8
|
const maxWidth = '200px';
|
|
8
9
|
const firstLastChildOverride = `
|
|
@@ -32,7 +33,7 @@ const tableStyles = css({
|
|
|
32
33
|
background: "var(--ds-surface, #FFF)",
|
|
33
34
|
borderCollapse: 'separate',
|
|
34
35
|
borderSpacing: 0,
|
|
35
|
-
font:
|
|
36
|
+
font: `var(--ds-font-body, ${fontFallback.body.medium})`,
|
|
36
37
|
maxWidth
|
|
37
38
|
});
|
|
38
39
|
export const DragColumnPreview = ({
|
|
@@ -12,6 +12,7 @@ import { autoScroller } from '@atlaskit/pragmatic-drag-and-drop-react-beautiful-
|
|
|
12
12
|
import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
|
|
13
13
|
import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
|
|
14
14
|
import { N40 } from '@atlaskit/theme/colors';
|
|
15
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
15
16
|
import Tooltip from '@atlaskit/tooltip';
|
|
16
17
|
import { startUfoExperience, succeedUfoExperience } from '../../analytics/ufoExperiences';
|
|
17
18
|
import { stickyTableHeadersIndex } from '../../common/zindex';
|
|
@@ -228,7 +229,7 @@ const noDefaultBorderStyles = css({
|
|
|
228
229
|
borderBottom: 0
|
|
229
230
|
});
|
|
230
231
|
const headerStyles = css({
|
|
231
|
-
font:
|
|
232
|
+
font: `var(--ds-font-body-UNSAFE_small, ${fontFallback.body.UNSAFE_small})`,
|
|
232
233
|
fontWeight: "var(--ds-font-weight-medium, 500)"
|
|
233
234
|
});
|
|
234
235
|
const headingHoverEffectStyles = css({
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import styled from '@emotion/styled';
|
|
2
2
|
import { N40 } from '@atlaskit/theme/colors';
|
|
3
|
+
import { fontFallback } from '@atlaskit/theme/typography';
|
|
3
4
|
export const ScrollableContainerHeight = 590;
|
|
4
|
-
export const fieldTextFontSize =
|
|
5
|
+
export const fieldTextFontSize = `var(--ds-font-body, ${fontFallback.body.medium})`;
|
|
5
6
|
export const Table = styled.table({
|
|
6
7
|
width: '100%'
|
|
7
8
|
});
|
|
@@ -459,7 +459,13 @@ export const PlainJiraIssuesConfigModal = props => {
|
|
|
459
459
|
const selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
|
|
460
460
|
if (status === 'rejected' && jqlUrl) {
|
|
461
461
|
return jsx(ModalLoadingError, {
|
|
462
|
-
|
|
462
|
+
errorMessage: jqlUrl ? jsx(FormattedMessage, _extends({}, modalMessages.checkConnectionWithSource, {
|
|
463
|
+
values: {
|
|
464
|
+
a: urlText => jsx("a", {
|
|
465
|
+
href: jqlUrl
|
|
466
|
+
}, urlText)
|
|
467
|
+
}
|
|
468
|
+
})) : undefined
|
|
463
469
|
});
|
|
464
470
|
} else if (status === 'unauthorized') {
|
|
465
471
|
return jsx(AccessRequired, {
|
|
@@ -115,5 +115,10 @@ export const modalMessages = defineMessages({
|
|
|
115
115
|
id: 'linkDataSource.jira-issues.no.jira.sites.access.description',
|
|
116
116
|
description: 'Description that shows in the modal when user has no access to any Jira sites',
|
|
117
117
|
defaultMessage: 'To request access, contact your admin.'
|
|
118
|
+
},
|
|
119
|
+
checkConnectionWithSource: {
|
|
120
|
+
id: 'linkDataSource.jira-issues.checkConnectionWithSource',
|
|
121
|
+
description: 'Instructions to let the user know how to resolve the error that occured, or click the link provided to open the query in Jira',
|
|
122
|
+
defaultMessage: 'Check your connection and refresh, or <a>open this query in Jira</a> to review.'
|
|
118
123
|
}
|
|
119
124
|
});
|