@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/link-datasource
2
2
 
3
+ ## 1.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#41407](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41407) [`2e336273b6e`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2e336273b6e) - [ux] Added an optional url prop for JiraConfigModal
8
+
3
9
  ## 1.8.0
4
10
 
5
11
  ### Minor Changes
@@ -7,5 +7,5 @@ exports.packageMetaData = exports.EVENT_CHANNEL = void 0;
7
7
  var EVENT_CHANNEL = exports.EVENT_CHANNEL = 'media';
8
8
  var packageMetaData = exports.packageMetaData = {
9
9
  packageName: "@atlaskit/link-datasource",
10
- packageVersion: "1.8.0"
10
+ packageVersion: "1.9.0"
11
11
  };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.stickyTableHeadersIndex = exports.siteSelectorIndex = void 0;
7
+ var stickyTableHeadersIndex = exports.stickyTableHeadersIndex = 10;
8
+ var siteSelectorIndex = exports.siteSelectorIndex = stickyTableHeadersIndex + 1;
@@ -234,7 +234,7 @@ var analyticsContextAttributes = {
234
234
  };
235
235
  var analyticsContextData = {
236
236
  packageName: "@atlaskit/link-datasource",
237
- packageVersion: "1.8.0",
237
+ packageVersion: "1.9.0",
238
238
  source: 'datasourceConfigModal'
239
239
  };
240
240
  var contextData = _objectSpread(_objectSpread({}, analyticsContextData), {}, {
@@ -9,13 +9,41 @@ var _react = require("react");
9
9
  var _react2 = require("@emotion/react");
10
10
  var _reactIntlNext = require("react-intl-next");
11
11
  var _emptyState = _interopRequireDefault(require("@atlaskit/empty-state"));
12
+ var _colors = require("@atlaskit/theme/colors");
12
13
  var _analytics = require("../../../analytics");
13
14
  var _accessRequiredSvg = require("./access-required-svg");
14
15
  var _messages = require("./messages");
15
16
  /** @jsx jsx */
16
17
 
17
- var AccessRequired = exports.AccessRequired = function AccessRequired(_ref) {
18
- var siteName = _ref.siteName;
18
+ var urlStyles = (0, _react2.css)({
19
+ color: "var(--ds-text-subtlest, ".concat(_colors.N400, ")"),
20
+ fontSize: "var(--ds-font-size-100, 14px)",
21
+ lineHeight: "var(--ds-font-lineHeight-200, 20px)"
22
+ });
23
+ var descriptionMessageStyles = (0, _react2.css)({
24
+ display: 'flex',
25
+ flexDirection: 'column',
26
+ gap: "var(--ds-space-200, 16px)"
27
+ });
28
+ var iconContainerStyles = (0, _react2.css)({
29
+ marginBottom: "var(--ds-space-200, 16px)"
30
+ });
31
+ var Description = function Description(_ref) {
32
+ var message = _ref.message,
33
+ url = _ref.url;
34
+ return (0, _react2.jsx)("div", {
35
+ css: descriptionMessageStyles
36
+ }, (0, _react2.jsx)("span", {
37
+ css: urlStyles
38
+ }, url), (0, _react2.jsx)("span", null, message));
39
+ };
40
+ var IconContainer = function IconContainer() {
41
+ return (0, _react2.jsx)("div", {
42
+ css: iconContainerStyles
43
+ }, (0, _react2.jsx)(_accessRequiredSvg.AccessRequiredSVG, null));
44
+ };
45
+ var AccessRequired = exports.AccessRequired = function AccessRequired(_ref2) {
46
+ var url = _ref2.url;
19
47
  var _useIntl = (0, _reactIntlNext.useIntl)(),
20
48
  formatMessage = _useIntl.formatMessage;
21
49
  var _useDatasourceAnalyti = (0, _analytics.useDatasourceAnalyticsEvents)(),
@@ -25,13 +53,19 @@ var AccessRequired = exports.AccessRequired = function AccessRequired(_ref) {
25
53
  reason: 'access'
26
54
  });
27
55
  }, [fireEvent]);
56
+ if (url) {
57
+ return (0, _react2.jsx)(_emptyState.default, {
58
+ header: formatMessage(_messages.loadingErrorMessages.accessRequiredWithSite),
59
+ description: (0, _react2.jsx)(Description, {
60
+ message: formatMessage(_messages.loadingErrorMessages.accessInstructions),
61
+ url: url
62
+ }),
63
+ renderImage: IconContainer
64
+ });
65
+ }
28
66
  return (0, _react2.jsx)(_emptyState.default, {
29
- header: siteName ? formatMessage(_messages.loadingErrorMessages.accessRequiredWithSite, {
30
- siteName: siteName
31
- }) : formatMessage(_messages.loadingErrorMessages.accessRequired),
67
+ header: formatMessage(_messages.loadingErrorMessages.accessRequired),
32
68
  description: formatMessage(_messages.loadingErrorMessages.accessInstructions),
33
- renderImage: function renderImage() {
34
- return (0, _react2.jsx)(_accessRequiredSvg.AccessRequiredSVG, null);
35
- }
69
+ renderImage: IconContainer
36
70
  });
37
71
  };
@@ -8,8 +8,8 @@ var _reactIntlNext = require("react-intl-next");
8
8
  var loadingErrorMessages = exports.loadingErrorMessages = (0, _reactIntlNext.defineMessages)({
9
9
  accessInstructions: {
10
10
  id: 'linkDataSource.jira-issues.accessInstructions',
11
- description: "Instructions to let the user know they must contact an administrator in order to access this site's content",
12
- defaultMessage: 'To request access, contact your admin.'
11
+ description: "Instructions to let the user know they must contact their site administrator in order to access this site's content",
12
+ defaultMessage: 'To request access, contact your site administrator.'
13
13
  },
14
14
  accessRequired: {
15
15
  id: 'linkDataSource.jira-issues.accessRequired',
@@ -18,8 +18,8 @@ var loadingErrorMessages = exports.loadingErrorMessages = (0, _reactIntlNext.def
18
18
  },
19
19
  accessRequiredWithSite: {
20
20
  id: 'linkDataSource.jira-issues.accessRequiredWithSite',
21
- description: 'Message letting user know that they do not have access to the site by name',
22
- defaultMessage: "You don't have access to {siteName}"
21
+ description: 'Message letting user know that they do not have access to the site that will be listed below this message',
22
+ defaultMessage: "You don't have access to the following site:"
23
23
  },
24
24
  checkConnection: {
25
25
  id: 'linkDataSource.jira-issues.checkConnection',
@@ -114,7 +114,9 @@ var DatasourceTableViewWithoutAnalytics = function DatasourceTableViewWithoutAna
114
114
  });
115
115
  }
116
116
  if (status === 'unauthorized') {
117
- return (0, _react2.jsx)(_accessRequired.AccessRequired, null);
117
+ return (0, _react2.jsx)(_accessRequired.AccessRequired, {
118
+ url: url
119
+ });
118
120
  }
119
121
  if (status === 'rejected') {
120
122
  return (0, _react2.jsx)(_loadingError.LoadingError, {
@@ -25,6 +25,7 @@ var _combine = require("@atlaskit/pragmatic-drag-and-drop/util/combine");
25
25
  var _colors = require("@atlaskit/theme/colors");
26
26
  var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
27
27
  var _ufoExperiences = require("../../analytics/ufoExperiences");
28
+ var _zindex = require("../../common/zindex");
28
29
  var _columnPicker = require("./column-picker");
29
30
  var _dragColumnPreview = require("./drag-column-preview");
30
31
  var _draggableTableHeading = require("./draggable-table-heading");
@@ -41,7 +42,7 @@ var tableHeadStyles = (0, _react2.css)({
41
42
  background: "var(--ds-surface, #FFF)",
42
43
  position: 'sticky',
43
44
  top: 0,
44
- zIndex: 10
45
+ zIndex: _zindex.stickyTableHeadersIndex
45
46
  });
46
47
  var ColumnPickerHeader = _styled.default.th(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\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(_colors.N40, ")"), "var(--ds-surface, #FFF)", tableSidePadding);
47
48
  var truncatedCellStyles = (0, _react2.css)({
@@ -46,8 +46,11 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
46
46
  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) { (0, _defineProperty2.default)(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; } /** @jsx jsx */
47
47
  var dropdownContainerStyles = (0, _react2.css)({
48
48
  display: 'flex',
49
- gap: "var(--ds-space-100, 0.5rem)"
49
+ alignItems: 'center',
50
+ gap: "var(--ds-space-100, 0.5rem)",
51
+ minHeight: '40px' // to prevent vertical shifting when site selector pops in
50
52
  });
53
+
51
54
  var contentContainerStyles = (0, _react2.css)({
52
55
  display: 'grid',
53
56
  maxHeight: '420px',
@@ -92,12 +95,13 @@ var getColumnAction = exports.getColumnAction = function getColumnAction(oldVisi
92
95
  };
93
96
  var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function PlainJiraIssuesConfigModal(props) {
94
97
  var datasourceId = props.datasourceId,
95
- initialParameters = props.parameters,
96
- initialVisibleColumnKeys = props.visibleColumnKeys,
97
98
  onCancel = props.onCancel,
98
99
  onInsert = props.onInsert,
99
100
  _props$viewMode = props.viewMode,
100
- viewMode = _props$viewMode === void 0 ? 'issue' : _props$viewMode;
101
+ viewMode = _props$viewMode === void 0 ? 'issue' : _props$viewMode,
102
+ initialParameters = props.parameters,
103
+ urlBeingEdited = props.url,
104
+ initialVisibleColumnKeys = props.visibleColumnKeys;
101
105
  var _useState = (0, _react.useState)([]),
102
106
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
103
107
  availableSites = _useState2[0],
@@ -161,11 +165,9 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
161
165
  modalRenderInstanceId = _useRef.current;
162
166
  var selectedJiraSite = (0, _react.useMemo)(function () {
163
167
  if (cloudId) {
164
- // if the cloud id we're editing isn't in available sites then user is likely unauthorized for that site
165
- // TODO: unauthorized to edit flow https://product-fabric.atlassian.net/browse/EDM-7216
166
168
  return availableSites.find(function (jiraSite) {
167
169
  return jiraSite.cloudId === cloudId;
168
- }) || availableSites[0];
170
+ });
169
171
  } else {
170
172
  var currentlyLoggedInSiteUrl = window.location.origin;
171
173
  return availableSites.find(function (jiraSite) {
@@ -417,12 +419,12 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
417
419
  }));
418
420
  }, [columns, defaultVisibleColumnKeys, handleOnNextPage, handleVisibleColumnKeysChange, hasNextPage, loadDatasourceDetails, modalRenderInstanceId, responseItems, status, visibleColumnKeys, extensionKey]);
419
421
  var renderCountModeContent = (0, _react.useCallback)(function () {
420
- var url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
422
+ var selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
421
423
  if (status === 'unauthorized') {
422
424
  return (0, _react2.jsx)(_accessRequired.AccessRequired, {
423
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
425
+ url: selectedJiraSiteUrl || urlBeingEdited
424
426
  });
425
- } else if (status === 'empty' || !jql || !url) {
427
+ } else if (status === 'empty' || !jql || !selectedJiraSiteUrl) {
426
428
  return (0, _react2.jsx)("div", {
427
429
  css: smartLinkContainerStyles
428
430
  }, (0, _react2.jsx)("span", {
@@ -430,22 +432,23 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
430
432
  css: placeholderSmartLinkStyles
431
433
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.issuesCountSmartCardPlaceholderText)));
432
434
  } else {
433
- var urlWithEncodedJql = "".concat(url, "/issues/?jql=").concat(encodeURI(jql));
435
+ var urlWithEncodedJql = "".concat(selectedJiraSiteUrl, "/issues/?jql=").concat(encodeURI(jql));
434
436
  return (0, _react2.jsx)("div", {
435
437
  css: smartLinkContainerStyles
436
438
  }, (0, _react2.jsx)(_link.default, {
437
439
  url: urlWithEncodedJql
438
440
  }));
439
441
  }
440
- }, [jql, selectedJiraSite, status]);
442
+ }, [jql, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
441
443
  var renderIssuesModeContent = (0, _react.useCallback)(function () {
444
+ var selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
442
445
  if (status === 'rejected' && jqlUrl) {
443
446
  return (0, _react2.jsx)(_modalLoadingError.ModalLoadingError, {
444
447
  url: jqlUrl
445
448
  });
446
449
  } else if (status === 'unauthorized') {
447
450
  return (0, _react2.jsx)(_accessRequired.AccessRequired, {
448
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
451
+ url: selectedJiraSiteUrl || urlBeingEdited
449
452
  });
450
453
  } else if (resolvedWithNoResults) {
451
454
  return (0, _react2.jsx)(_noResults.NoResults, null);
@@ -468,24 +471,20 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
468
471
  }));
469
472
  }
470
473
  return issueLikeDataTableView;
471
- }, [status, jqlUrl, resolvedWithNoResults, columns.length, retrieveUrlForSmartCardRender, responseItems.length, issueLikeDataTableView, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName, jql, currentSearchMethod]);
474
+ }, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, responseItems.length, retrieveUrlForSmartCardRender, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
472
475
  return (0, _react2.jsx)(_modalDialog.ModalTransition, null, (0, _react2.jsx)(_modalDialog.default, {
473
- testId: 'jira-jql-datasource-modal',
476
+ testId: "jira-jql-datasource-modal",
474
477
  onClose: onCancel,
475
478
  width: "calc(100% - 80px)",
476
479
  shouldScrollInViewport: true
477
- }, (0, _react2.jsx)(_modalDialog.ModalHeader, null, (0, _react2.jsx)(_modalDialog.ModalTitle, null, availableSites.length < 2 ? (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesTitle) : (0, _react2.jsx)("div", {
480
+ }, (0, _react2.jsx)(_modalDialog.ModalHeader, null, (0, _react2.jsx)(_modalDialog.ModalTitle, null, (0, _react2.jsx)("div", {
478
481
  css: dropdownContainerStyles
479
- }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.modalMessages.insertIssuesTitleManySites, {
480
- values: {
481
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
482
- }
483
- })), (0, _react2.jsx)(_siteSelector.JiraSiteSelector, {
484
- testId: "jira-jql-datasource-modal--site-selector",
482
+ }, availableSites.length < 2 ? (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesTitle) : (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesTitleManySites), (0, _react2.jsx)(_siteSelector.JiraSiteSelector, {
485
483
  availableSites: availableSites,
486
484
  onSiteSelection: onSiteSelection,
487
- selectedJiraSite: selectedJiraSite
488
- }))), (0, _react2.jsx)(_modeSwitcher.ModeSwitcher, {
485
+ selectedJiraSite: selectedJiraSite,
486
+ testId: "jira-jql-datasource-modal--site-selector"
487
+ })))), (0, _react2.jsx)(_modeSwitcher.ModeSwitcher, {
489
488
  isCompact: true,
490
489
  options: [{
491
490
  label: formatMessage(_messages.modalMessages.issueViewModeLabel),
@@ -525,7 +524,7 @@ var PlainJiraIssuesConfigModal = exports.PlainJiraIssuesConfigModal = function P
525
524
  appearance: "primary",
526
525
  onClick: onInsertPressed,
527
526
  isDisabled: isInsertDisabled,
528
- testId: 'jira-jql-datasource-modal--insert-button'
527
+ testId: "jira-jql-datasource-modal--insert-button"
529
528
  }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesButtonText)))));
530
529
  };
531
530
  var analyticsContextAttributes = {
@@ -23,8 +23,8 @@ var modalMessages = exports.modalMessages = (0, _reactIntlNext.defineMessages)({
23
23
  },
24
24
  insertIssuesTitleManySites: {
25
25
  id: 'linkDataSource.jira-issues.configmodal.insertIssuesTitleManySites',
26
- description: 'Title for the Jira Issues Datasource config modal when multiple sites are available',
27
- defaultMessage: 'Insert Jira issues from {siteName}'
26
+ description: 'Title for the Jira Issues modal when a user has to select a site to inserting issues from',
27
+ defaultMessage: 'Insert Jira issues from'
28
28
  },
29
29
  issueViewModeLabel: {
30
30
  id: 'linkDataSource.jira-issues.configmodal.issueViewModeLabel',
@@ -1,55 +1,77 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.JiraSiteSelector = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _react = require("@emotion/react");
10
+ var _react = require("react");
11
+ var _react2 = require("@emotion/react");
12
12
  var _reactIntlNext = require("react-intl-next");
13
- var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
14
- var _dropdownMenu = _interopRequireWildcard(require("@atlaskit/dropdown-menu"));
15
- var _chevronDown = _interopRequireDefault(require("@atlaskit/icon/glyph/chevron-down"));
13
+ var _select = _interopRequireDefault(require("@atlaskit/select"));
14
+ var _zindex = require("../../../common/zindex");
16
15
  var _messages = require("./messages");
17
- var _excluded = ["triggerRef"];
16
+ var _excluded = ["width"];
18
17
  /** @jsx jsx */
19
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
+ 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) { (0, _defineProperty2.default)(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; }
20
+ var selectStyles = (0, _react2.css)({
21
+ fontSize: "var(--ds-font-size-100, 14px)",
22
+ fontWeight: "var(--ds-font-weight-medium, 500)",
23
+ lineHeight: "var(--ds-font-lineHeight-200, 20px)",
24
+ zIndex: _zindex.siteSelectorIndex
25
+ });
21
26
  var JiraSiteSelector = exports.JiraSiteSelector = function JiraSiteSelector(props) {
22
27
  var availableSites = props.availableSites,
23
28
  onSiteSelection = props.onSiteSelection,
24
29
  selectedJiraSite = props.selectedJiraSite,
25
30
  testId = props.testId;
26
- var intl = (0, _reactIntlNext.useIntl)();
27
- return (0, _react.jsx)(_dropdownMenu.default, {
28
- spacing: "compact",
29
- testId: testId,
30
- trigger: function trigger(_ref) {
31
- var triggerRef = _ref.triggerRef,
32
- props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
33
- return (0, _react.jsx)(_standardButton.default, (0, _extends2.default)({}, props, {
34
- testId: "".concat(testId, "--trigger"),
35
- spacing: "none",
36
- iconBefore: (0, _react.jsx)(_chevronDown.default, {
37
- label: intl.formatMessage(_messages.siteSelectorMessages.dropdownChevronLabel)
38
- }),
39
- ref: triggerRef
40
- }));
31
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
32
+ formatMessage = _useIntl.formatMessage;
33
+ var onChange = function onChange(newValue) {
34
+ var selectedSite = availableSites.find(function (site) {
35
+ return site.cloudId === (newValue === null || newValue === void 0 ? void 0 : newValue.value);
36
+ });
37
+ if (selectedSite) {
38
+ onSiteSelection(selectedSite);
41
39
  }
42
- }, (0, _react.jsx)(_dropdownMenu.DropdownItemGroup, null, availableSites.map(function (availableSite) {
43
- var displayName = availableSite.displayName,
44
- cloudId = availableSite.cloudId;
45
- var isSelected = displayName === (selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName);
46
- return (0, _react.jsx)(_dropdownMenu.DropdownItem, {
47
- isSelected: isSelected,
48
- key: cloudId,
49
- onClick: function onClick() {
50
- return onSiteSelection(availableSite);
51
- },
52
- testId: testId && "".concat(testId, "--dropdown-item").concat(isSelected ? '__selected' : '')
53
- }, displayName);
54
- })));
40
+ };
41
+ var availableSitesOptions = (0, _react.useMemo)(function () {
42
+ return availableSites.map(function (site) {
43
+ return {
44
+ label: site.displayName,
45
+ value: site.cloudId
46
+ };
47
+ });
48
+ }, [availableSites]);
49
+ var selectedSiteOption = selectedJiraSite && {
50
+ label: selectedJiraSite.displayName,
51
+ value: selectedJiraSite.cloudId
52
+ };
53
+ return (0, _react2.jsx)("span", {
54
+ "data-testid": "".concat(testId, "--trigger")
55
+ }, (0, _react2.jsx)(_select.default, {
56
+ css: selectStyles,
57
+ classNamePrefix: testId,
58
+ isLoading: availableSites.length === 0,
59
+ onChange: onChange,
60
+ options: availableSitesOptions,
61
+ placeholder: formatMessage(_messages.siteSelectorMessages.chooseSite),
62
+ styles: {
63
+ // prevents the popup menu with available sites from being too narrow
64
+ // if the selected site is much shorter than the other options
65
+ menu: function menu(_ref) {
66
+ var width = _ref.width,
67
+ css = (0, _objectWithoutProperties2.default)(_ref, _excluded);
68
+ return _objectSpread(_objectSpread({}, css), {}, {
69
+ minWidth: '100%',
70
+ width: 'max-content'
71
+ });
72
+ }
73
+ },
74
+ testId: testId,
75
+ value: selectedSiteOption
76
+ }));
55
77
  };
@@ -6,14 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.siteSelectorMessages = void 0;
7
7
  var _reactIntlNext = require("react-intl-next");
8
8
  var siteSelectorMessages = exports.siteSelectorMessages = (0, _reactIntlNext.defineMessages)({
9
- dropdownChevronLabel: {
10
- id: 'linkDataSource.jira-issues.configmodal.dropdownChevronLabel',
11
- description: 'Label for button that reveals more available site options to choose from',
12
- defaultMessage: 'Pick jira site'
13
- },
14
- selectedJiraSiteLabel: {
15
- id: 'linkDataSource.jira-issues.configmodal.selectedJiraSiteLabel',
16
- description: 'Label for a check icon declaring which option is selected',
17
- defaultMessage: '{siteName} is selected'
9
+ chooseSite: {
10
+ id: 'linkDataSource.jira-issues.configmodal.chooseSite',
11
+ description: 'Label for input letting user know they have to choose a site',
12
+ defaultMessage: 'Choose site'
18
13
  }
19
14
  });
@@ -1,5 +1,5 @@
1
1
  export const EVENT_CHANNEL = 'media';
2
2
  export const 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 const stickyTableHeadersIndex = 10;
2
+ export const siteSelectorIndex = stickyTableHeadersIndex + 1;
@@ -194,7 +194,7 @@ const analyticsContextAttributes = {
194
194
  };
195
195
  const analyticsContextData = {
196
196
  packageName: "@atlaskit/link-datasource",
197
- packageVersion: "1.8.0",
197
+ packageVersion: "1.9.0",
198
198
  source: 'datasourceConfigModal'
199
199
  };
200
200
  const contextData = {
@@ -1,13 +1,40 @@
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';
10
+ const urlStyles = css({
11
+ color: `var(--ds-text-subtlest, ${N400})`,
12
+ fontSize: "var(--ds-font-size-100, 14px)",
13
+ lineHeight: "var(--ds-font-lineHeight-200, 20px)"
14
+ });
15
+ const descriptionMessageStyles = css({
16
+ display: 'flex',
17
+ flexDirection: 'column',
18
+ gap: "var(--ds-space-200, 16px)"
19
+ });
20
+ const iconContainerStyles = css({
21
+ marginBottom: "var(--ds-space-200, 16px)"
22
+ });
23
+ const Description = ({
24
+ message,
25
+ url
26
+ }) => {
27
+ return jsx("div", {
28
+ css: descriptionMessageStyles
29
+ }, jsx("span", {
30
+ css: urlStyles
31
+ }, url), jsx("span", null, message));
32
+ };
33
+ const IconContainer = () => jsx("div", {
34
+ css: iconContainerStyles
35
+ }, jsx(AccessRequiredSVG, null));
9
36
  export const AccessRequired = ({
10
- siteName
37
+ url
11
38
  }) => {
12
39
  const {
13
40
  formatMessage
@@ -20,11 +47,19 @@ export const AccessRequired = ({
20
47
  reason: 'access'
21
48
  });
22
49
  }, [fireEvent]);
50
+ if (url) {
51
+ return jsx(EmptyState, {
52
+ header: formatMessage(loadingErrorMessages.accessRequiredWithSite),
53
+ description: jsx(Description, {
54
+ message: formatMessage(loadingErrorMessages.accessInstructions),
55
+ url: url
56
+ }),
57
+ renderImage: IconContainer
58
+ });
59
+ }
23
60
  return jsx(EmptyState, {
24
- header: siteName ? formatMessage(loadingErrorMessages.accessRequiredWithSite, {
25
- siteName
26
- }) : formatMessage(loadingErrorMessages.accessRequired),
61
+ header: formatMessage(loadingErrorMessages.accessRequired),
27
62
  description: formatMessage(loadingErrorMessages.accessInstructions),
28
- renderImage: () => jsx(AccessRequiredSVG, null)
63
+ renderImage: IconContainer
29
64
  });
30
65
  };
@@ -2,8 +2,8 @@ import { defineMessages } from 'react-intl-next';
2
2
  export const 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 const 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',
@@ -109,7 +109,9 @@ const DatasourceTableViewWithoutAnalytics = ({
109
109
  });
110
110
  }
111
111
  if (status === 'unauthorized') {
112
- return jsx(AccessRequired, null);
112
+ return jsx(AccessRequired, {
113
+ url: url
114
+ });
113
115
  }
114
116
  if (status === 'rejected') {
115
117
  return jsx(LoadingError, {
@@ -13,6 +13,7 @@ import { combine } from '@atlaskit/pragmatic-drag-and-drop/util/combine';
13
13
  import { N40 } from '@atlaskit/theme/colors';
14
14
  import Tooltip from '@atlaskit/tooltip';
15
15
  import { startUfoExperience, succeedUfoExperience } from '../../analytics/ufoExperiences';
16
+ import { stickyTableHeadersIndex } from '../../common/zindex';
16
17
  import { ColumnPicker } from './column-picker';
17
18
  import { DragColumnPreview } from './drag-column-preview';
18
19
  import { DraggableTableHeading } from './draggable-table-heading';
@@ -25,7 +26,7 @@ const tableHeadStyles = css({
25
26
  background: "var(--ds-surface, #FFF)",
26
27
  position: 'sticky',
27
28
  top: 0,
28
- zIndex: 10
29
+ zIndex: stickyTableHeadersIndex
29
30
  });
30
31
  const ColumnPickerHeader = styled.th`
31
32
  width: 40px;