@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.
Files changed (47) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/analytics/constants.js +1 -1
  3. package/dist/cjs/common/zindex.js +8 -0
  4. package/dist/cjs/ui/assets-modal/modal/index.js +1 -1
  5. package/dist/cjs/ui/common/error-state/access-required.js +42 -8
  6. package/dist/cjs/ui/common/error-state/messages.js +4 -4
  7. package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +3 -1
  8. package/dist/cjs/ui/issue-like-table/index.js +2 -1
  9. package/dist/cjs/ui/jira-issues-modal/modal/index.js +24 -25
  10. package/dist/cjs/ui/jira-issues-modal/modal/messages.js +2 -2
  11. package/dist/cjs/ui/jira-issues-modal/site-selector/index.js +59 -37
  12. package/dist/cjs/ui/jira-issues-modal/site-selector/messages.js +4 -9
  13. package/dist/es2019/analytics/constants.js +1 -1
  14. package/dist/es2019/common/zindex.js +2 -0
  15. package/dist/es2019/ui/assets-modal/modal/index.js +1 -1
  16. package/dist/es2019/ui/common/error-state/access-required.js +41 -6
  17. package/dist/es2019/ui/common/error-state/messages.js +4 -4
  18. package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +3 -1
  19. package/dist/es2019/ui/issue-like-table/index.js +2 -1
  20. package/dist/es2019/ui/jira-issues-modal/modal/index.js +25 -26
  21. package/dist/es2019/ui/jira-issues-modal/modal/messages.js +2 -2
  22. package/dist/es2019/ui/jira-issues-modal/site-selector/index.js +50 -32
  23. package/dist/es2019/ui/jira-issues-modal/site-selector/messages.js +4 -9
  24. package/dist/esm/analytics/constants.js +1 -1
  25. package/dist/esm/common/zindex.js +2 -0
  26. package/dist/esm/ui/assets-modal/modal/index.js +1 -1
  27. package/dist/esm/ui/common/error-state/access-required.js +43 -9
  28. package/dist/esm/ui/common/error-state/messages.js +4 -4
  29. package/dist/esm/ui/datasource-table-view/datasourceTableView.js +3 -1
  30. package/dist/esm/ui/issue-like-table/index.js +2 -1
  31. package/dist/esm/ui/jira-issues-modal/modal/index.js +25 -26
  32. package/dist/esm/ui/jira-issues-modal/modal/messages.js +2 -2
  33. package/dist/esm/ui/jira-issues-modal/site-selector/index.js +59 -34
  34. package/dist/esm/ui/jira-issues-modal/site-selector/messages.js +4 -9
  35. package/dist/types/common/zindex.d.ts +2 -0
  36. package/dist/types/ui/common/error-state/access-required.d.ts +2 -2
  37. package/dist/types/ui/jira-issues-modal/site-selector/index.d.ts +0 -1
  38. package/dist/types/ui/jira-issues-modal/site-selector/messages.d.ts +1 -6
  39. package/dist/types/ui/jira-issues-modal/types.d.ts +2 -0
  40. package/dist/types-ts4.5/common/zindex.d.ts +2 -0
  41. package/dist/types-ts4.5/ui/common/error-state/access-required.d.ts +2 -2
  42. package/dist/types-ts4.5/ui/jira-issues-modal/site-selector/index.d.ts +0 -1
  43. package/dist/types-ts4.5/ui/jira-issues-modal/site-selector/messages.d.ts +1 -6
  44. package/dist/types-ts4.5/ui/jira-issues-modal/types.d.ts +2 -0
  45. package/package.json +2 -3
  46. package/report.api.md +1 -0
  47. 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
- gap: "var(--ds-space-100, 0.5rem)"
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
- // if the cloud id we're editing isn't in available sites then user is likely unauthorized for that site
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 url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
365
+ const selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
364
366
  if (status === 'unauthorized') {
365
367
  return jsx(AccessRequired, {
366
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
368
+ url: selectedJiraSiteUrl || urlBeingEdited
367
369
  });
368
- } else if (status === 'empty' || !jql || !url) {
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 = `${url}/issues/?jql=${encodeURI(jql)}`;
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
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
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
- }, [status, jqlUrl, resolvedWithNoResults, columns.length, retrieveUrlForSmartCardRender, responseItems.length, issueLikeDataTableView, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName, jql, currentSearchMethod]);
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: 'jira-jql-datasource-modal',
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, availableSites.length < 2 ? jsx(FormattedMessage, modalMessages.insertIssuesTitle) : jsx("div", {
423
+ }, jsx(ModalHeader, null, jsx(ModalTitle, null, jsx("div", {
421
424
  css: dropdownContainerStyles
422
- }, jsx(FormattedMessage, _extends({}, modalMessages.insertIssuesTitleManySites, {
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
- }))), jsx(ModeSwitcher, {
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: 'jira-jql-datasource-modal--insert-button'
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 Datasource config modal when multiple sites are available',
21
- defaultMessage: 'Insert Jira issues from {siteName}'
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 { jsx } from '@emotion/react';
2
+ import { useMemo } from 'react';
3
+ import { css, jsx } from '@emotion/react';
4
4
  import { useIntl } from 'react-intl-next';
5
- import Button from '@atlaskit/button/standard-button';
6
- import DropdownMenu, { DropdownItem, DropdownItemGroup } from '@atlaskit/dropdown-menu';
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 intl = useIntl();
17
- return jsx(DropdownMenu, {
18
- spacing: "compact",
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
- trigger: ({
21
- triggerRef,
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
- dropdownChevronLabel: {
4
- id: 'linkDataSource.jira-issues.configmodal.dropdownChevronLabel',
5
- description: 'Label for button that reveals more available site options to choose from',
6
- defaultMessage: 'Pick jira site'
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
  });
@@ -1,5 +1,5 @@
1
1
  export var EVENT_CHANNEL = 'media';
2
2
  export var packageMetaData = {
3
3
  packageName: "@atlaskit/link-datasource",
4
- packageVersion: "1.8.0"
4
+ packageVersion: "1.9.0"
5
5
  };
@@ -0,0 +1,2 @@
1
+ export var stickyTableHeadersIndex = 10;
2
+ export var siteSelectorIndex = stickyTableHeadersIndex + 1;
@@ -225,7 +225,7 @@ var analyticsContextAttributes = {
225
225
  };
226
226
  var analyticsContextData = {
227
227
  packageName: "@atlaskit/link-datasource",
228
- packageVersion: "1.8.0",
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
- export var AccessRequired = function AccessRequired(_ref) {
10
- var siteName = _ref.siteName;
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: siteName ? formatMessage(loadingErrorMessages.accessRequiredWithSite, {
22
- siteName: siteName
23
- }) : formatMessage(loadingErrorMessages.accessRequired),
59
+ header: formatMessage(loadingErrorMessages.accessRequired),
24
60
  description: formatMessage(loadingErrorMessages.accessInstructions),
25
- renderImage: function 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 an administrator in order to access this site's content",
6
- defaultMessage: 'To request access, contact your admin.'
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 by name',
16
- defaultMessage: "You don't have access to {siteName}"
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, null);
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: 10
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
- gap: "var(--ds-space-100, 0.5rem)"
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
- }) || availableSites[0];
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 url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
413
+ var selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
412
414
  if (status === 'unauthorized') {
413
415
  return jsx(AccessRequired, {
414
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
416
+ url: selectedJiraSiteUrl || urlBeingEdited
415
417
  });
416
- } else if (status === 'empty' || !jql || !url) {
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(url, "/issues/?jql=").concat(encodeURI(jql));
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
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
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
- }, [status, jqlUrl, resolvedWithNoResults, columns.length, retrieveUrlForSmartCardRender, responseItems.length, issueLikeDataTableView, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName, jql, currentSearchMethod]);
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: 'jira-jql-datasource-modal',
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, availableSites.length < 2 ? jsx(FormattedMessage, modalMessages.insertIssuesTitle) : jsx("div", {
471
+ }, jsx(ModalHeader, null, jsx(ModalTitle, null, jsx("div", {
469
472
  css: dropdownContainerStyles
470
- }, jsx(FormattedMessage, _extends({}, modalMessages.insertIssuesTitleManySites, {
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
- }))), jsx(ModeSwitcher, {
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: 'jira-jql-datasource-modal--insert-button'
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 Datasource config modal when multiple sites are available',
21
- defaultMessage: 'Insert Jira issues from {siteName}'
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',