@atlaskit/link-datasource 0.18.1 → 0.19.1

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 (45) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/index.js +8 -4
  3. package/dist/cjs/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js} +3 -3
  4. package/dist/cjs/ui/datasource-table-view/index.js +29 -0
  5. package/dist/cjs/ui/datasource-table-view/types.js +5 -0
  6. package/dist/cjs/ui/jira-issues-modal/index.js +22 -266
  7. package/dist/cjs/ui/jira-issues-modal/modal/index.js +275 -0
  8. package/dist/cjs/version.json +1 -1
  9. package/dist/es2019/index.js +2 -2
  10. package/dist/es2019/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js} +3 -3
  11. package/dist/es2019/ui/datasource-table-view/index.js +12 -0
  12. package/dist/es2019/ui/datasource-table-view/types.js +1 -0
  13. package/dist/es2019/ui/jira-issues-modal/index.js +13 -222
  14. package/dist/es2019/ui/jira-issues-modal/modal/index.js +223 -0
  15. package/dist/es2019/version.json +1 -1
  16. package/dist/esm/index.js +2 -2
  17. package/dist/esm/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js} +3 -3
  18. package/dist/esm/ui/datasource-table-view/index.js +16 -0
  19. package/dist/esm/ui/datasource-table-view/types.js +1 -0
  20. package/dist/esm/ui/jira-issues-modal/index.js +17 -262
  21. package/dist/esm/ui/jira-issues-modal/modal/index.js +263 -0
  22. package/dist/esm/version.json +1 -1
  23. package/dist/types/index.d.ts +3 -2
  24. package/dist/types/ui/datasource-table-view/datasourceTableView.d.ts +3 -0
  25. package/dist/types/ui/datasource-table-view/index.d.ts +4 -0
  26. package/dist/types/ui/{datasourceTableView.d.ts → datasource-table-view/types.d.ts} +0 -2
  27. package/dist/types/ui/jira-issues-modal/index.d.ts +4 -11
  28. package/dist/types/ui/jira-issues-modal/modal/index.d.ts +3 -0
  29. package/dist/types/ui/jira-issues-modal/types.d.ts +8 -1
  30. package/dist/types-ts4.5/index.d.ts +3 -2
  31. package/dist/types-ts4.5/ui/datasource-table-view/datasourceTableView.d.ts +3 -0
  32. package/dist/types-ts4.5/ui/datasource-table-view/index.d.ts +4 -0
  33. package/dist/types-ts4.5/ui/{datasourceTableView.d.ts → datasource-table-view/types.d.ts} +0 -2
  34. package/dist/types-ts4.5/ui/jira-issues-modal/index.d.ts +4 -11
  35. package/dist/types-ts4.5/ui/jira-issues-modal/modal/index.d.ts +3 -0
  36. package/dist/types-ts4.5/ui/jira-issues-modal/types.d.ts +8 -1
  37. package/examples-helpers/buildJiraIssuesTable.tsx +1 -1
  38. package/package.json +3 -3
  39. package/report.api.md +14 -8
  40. package/tmp/api-report-tmp.d.ts +12 -3
  41. /package/dist/cjs/ui/jira-issues-modal/{messages.js → modal/messages.js} +0 -0
  42. /package/dist/es2019/ui/jira-issues-modal/{messages.js → modal/messages.js} +0 -0
  43. /package/dist/esm/ui/jira-issues-modal/{messages.js → modal/messages.js} +0 -0
  44. /package/dist/types/ui/jira-issues-modal/{messages.d.ts → modal/messages.d.ts} +0 -0
  45. /package/dist/types-ts4.5/ui/jira-issues-modal/{messages.d.ts → modal/messages.d.ts} +0 -0
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.JiraIssuesConfigModal = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _react = require("react");
14
+ var _react2 = require("@emotion/react");
15
+ var _reactIntlNext = require("react-intl-next");
16
+ var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
17
+ var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
18
+ var _colors = require("@atlaskit/theme/colors");
19
+ var _useDatasourceTableState = require("../../../hooks/useDatasourceTableState");
20
+ var _getAvailableJiraSites = require("../../../services/getAvailableJiraSites");
21
+ var _issueLikeTable = require("../../issue-like-table");
22
+ var _link = _interopRequireDefault(require("../../issue-like-table/render-type/link"));
23
+ var _jiraSearchContainer = require("../jira-search-container");
24
+ var _modeSwitcher = require("../mode-switcher");
25
+ var _siteSelector = require("../site-selector");
26
+ var _messages = require("./messages");
27
+ 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); }
28
+ 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; }
29
+ /** @jsx jsx */
30
+
31
+ var dropdownContainerStyles = (0, _react2.css)({
32
+ display: 'flex',
33
+ gap: "var(--ds-space-100, 0.5rem)"
34
+ });
35
+ var contentContainerStyles = (0, _react2.css)({
36
+ height: '420px',
37
+ overflow: 'auto'
38
+ });
39
+ var placeholderSmartLinkStyles = (0, _react2.css)({
40
+ backgroundColor: "var(--ds-surface-raised, ".concat(_colors.N0, ")"),
41
+ borderRadius: '3px',
42
+ boxShadow: '0px 1px 1px rgba(9, 30, 66, 0.25), 0px 0px 1px rgba(9, 30, 66, 0.31)',
43
+ color: "var(--ds-text-brand, ".concat(_colors.B400, ")"),
44
+ padding: '0px 2px'
45
+ });
46
+ var JiraIssuesConfigModal = function JiraIssuesConfigModal(props) {
47
+ var datasourceId = props.datasourceId,
48
+ initialParameters = props.parameters,
49
+ initialVisibleColumnKeys = props.visibleColumnKeys,
50
+ onCancel = props.onCancel,
51
+ onInsert = props.onInsert;
52
+ var _useState = (0, _react.useState)([]),
53
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
54
+ availableSites = _useState2[0],
55
+ setAvailableSites = _useState2[1];
56
+ var _useState3 = (0, _react.useState)('issue'),
57
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
58
+ currentViewMode = _useState4[0],
59
+ setCurrentViewMode = _useState4[1];
60
+ var _useState5 = (0, _react.useState)(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.cloudId),
61
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
62
+ cloudId = _useState6[0],
63
+ setCloudId = _useState6[1];
64
+ var _useState7 = (0, _react.useState)(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql),
65
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
66
+ jql = _useState8[0],
67
+ setJql = _useState8[1];
68
+ var isParametersSet = !!(jql && cloudId);
69
+ var parameters = (0, _react.useMemo)(function () {
70
+ return !!cloudId ? {
71
+ cloudId: cloudId,
72
+ jql: jql || ''
73
+ } : undefined;
74
+ }, [cloudId, jql]);
75
+ var _useDatasourceTableSt = (0, _useDatasourceTableState.useDatasourceTableState)(datasourceId, parameters),
76
+ reset = _useDatasourceTableSt.reset,
77
+ status = _useDatasourceTableSt.status,
78
+ onNextPage = _useDatasourceTableSt.onNextPage,
79
+ responseItems = _useDatasourceTableSt.responseItems,
80
+ hasNextPage = _useDatasourceTableSt.hasNextPage,
81
+ columns = _useDatasourceTableSt.columns,
82
+ defaultVisibleColumnKeys = _useDatasourceTableSt.defaultVisibleColumnKeys;
83
+ var _useState9 = (0, _react.useState)(initialVisibleColumnKeys || defaultVisibleColumnKeys),
84
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
85
+ visibleColumnKeys = _useState10[0],
86
+ setVisibleColumnKeys = _useState10[1];
87
+ (0, _react.useEffect)(function () {
88
+ var newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
89
+ setVisibleColumnKeys(newVisibleColumnKeys);
90
+ }, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
91
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
92
+ formatMessage = _useIntl.formatMessage;
93
+ (0, _react.useEffect)(function () {
94
+ var fetchSiteDisplayNames = /*#__PURE__*/function () {
95
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
96
+ var jiraSites;
97
+ return _regenerator.default.wrap(function _callee$(_context) {
98
+ while (1) switch (_context.prev = _context.next) {
99
+ case 0:
100
+ _context.next = 2;
101
+ return (0, _getAvailableJiraSites.getAvailableJiraSites)();
102
+ case 2:
103
+ jiraSites = _context.sent;
104
+ setAvailableSites(jiraSites);
105
+ case 4:
106
+ case "end":
107
+ return _context.stop();
108
+ }
109
+ }, _callee);
110
+ }));
111
+ return function fetchSiteDisplayNames() {
112
+ return _ref.apply(this, arguments);
113
+ };
114
+ }();
115
+ void fetchSiteDisplayNames();
116
+ }, []);
117
+ var onSearch = (0, _react.useCallback)(function (newParameters) {
118
+ setJql(newParameters.jql);
119
+ reset();
120
+ }, [reset]);
121
+ var onSiteSelection = (0, _react.useCallback)(function (site) {
122
+ setCloudId(site.cloudId);
123
+ reset();
124
+ }, [reset]);
125
+ var selectedJiraSite = (0, _react.useMemo)(function () {
126
+ return availableSites.find(function (jiraSite) {
127
+ return jiraSite.cloudId === cloudId;
128
+ }) || availableSites[0];
129
+ }, [availableSites, cloudId]);
130
+ (0, _react.useEffect)(function () {
131
+ if (!cloudId && selectedJiraSite) {
132
+ setCloudId(selectedJiraSite.cloudId);
133
+ }
134
+ }, [cloudId, selectedJiraSite]);
135
+ var retrieveUrlForSmartCardRender = (0, _react.useCallback)(function () {
136
+ var _data$key, _data$key$data;
137
+ var _responseItems = (0, _slicedToArray2.default)(responseItems, 1),
138
+ data = _responseItems[0];
139
+ // agrement with BE that we will use `key` for rendering smartlink
140
+ return data === null || data === void 0 ? void 0 : (_data$key = data.key) === null || _data$key === void 0 ? void 0 : (_data$key$data = _data$key.data) === null || _data$key$data === void 0 ? void 0 : _data$key$data.url;
141
+ }, [responseItems]);
142
+ var onInsertPressed = (0, _react.useCallback)(function () {
143
+ if (!isParametersSet || !jql || !selectedJiraSite) {
144
+ return;
145
+ }
146
+ var firstIssueUrl = retrieveUrlForSmartCardRender();
147
+ if (currentViewMode === 'count') {
148
+ onInsert({
149
+ type: 'inlineCard',
150
+ attrs: {
151
+ url: "".concat(selectedJiraSite.url, "/issues/").concat(encodeURI(jql))
152
+ }
153
+ });
154
+ } else if (responseItems.length === 1 && firstIssueUrl) {
155
+ onInsert({
156
+ type: 'inlineCard',
157
+ attrs: {
158
+ url: firstIssueUrl
159
+ }
160
+ });
161
+ } else {
162
+ onInsert({
163
+ type: 'blockCard',
164
+ attrs: {
165
+ datasource: {
166
+ id: datasourceId,
167
+ parameters: {
168
+ cloudId: cloudId,
169
+ jql: jql // TODO support non JQL type
170
+ },
171
+
172
+ views: [{
173
+ type: 'table',
174
+ properties: {
175
+ columnKeys: visibleColumnKeys
176
+ }
177
+ }]
178
+ }
179
+ }
180
+ });
181
+ }
182
+ }, [isParametersSet, jql, selectedJiraSite, retrieveUrlForSmartCardRender, currentViewMode, responseItems.length, onInsert, datasourceId, cloudId, visibleColumnKeys]);
183
+ var handleViewModeChange = function handleViewModeChange(selectedMode) {
184
+ setCurrentViewMode(selectedMode);
185
+ };
186
+ (0, _react.useEffect)(function () {
187
+ if (status === 'empty' && isParametersSet) {
188
+ void onNextPage();
189
+ }
190
+ }, [status, isParametersSet, onNextPage, reset]);
191
+ var issueLikeDataTableView = (0, _react.useMemo)(function () {
192
+ return (0, _react2.jsx)(_issueLikeTable.IssueLikeDataTableView, {
193
+ testId: "jira-jql-datasource-table",
194
+ status: status,
195
+ columns: columns,
196
+ items: responseItems,
197
+ hasNextPage: hasNextPage,
198
+ visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
199
+ onNextPage: onNextPage,
200
+ onVisibleColumnKeysChange: setVisibleColumnKeys
201
+ });
202
+ }, [columns, defaultVisibleColumnKeys, hasNextPage, onNextPage, responseItems, status, visibleColumnKeys]);
203
+ var renderCountModeContent = (0, _react.useCallback)(function () {
204
+ var url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
205
+ if (status === 'empty' || !jql || !url) {
206
+ return (0, _react2.jsx)("span", {
207
+ "data-testid": "jira-jql-datasource-modal--smart-card-placeholder",
208
+ css: placeholderSmartLinkStyles
209
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.issuesCountSmartCardPlaceholderText));
210
+ } else {
211
+ var urlWithEncodedJql = "".concat(url, "/issues/?jql=").concat(encodeURI(jql));
212
+ return (0, _react2.jsx)(_link.default, {
213
+ url: urlWithEncodedJql
214
+ });
215
+ }
216
+ }, [jql, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status]);
217
+ var renderIssuesModeContent = (0, _react.useCallback)(function () {
218
+ if (status === 'empty' || columns.length === 0) {
219
+ return (0, _react2.jsx)(_issueLikeTable.EmptyState, {
220
+ testId: "jira-jql-datasource-modal--empty-state"
221
+ });
222
+ }
223
+ var firstIssueUrl = retrieveUrlForSmartCardRender();
224
+ if (responseItems.length === 1 && firstIssueUrl) {
225
+ return (0, _react2.jsx)(_link.default, {
226
+ url: firstIssueUrl
227
+ });
228
+ }
229
+ return issueLikeDataTableView;
230
+ }, [columns.length, issueLikeDataTableView, responseItems.length, retrieveUrlForSmartCardRender, status]);
231
+ return (0, _react2.jsx)(_reactIntlNext.IntlProvider, {
232
+ locale: "en"
233
+ }, (0, _react2.jsx)(_modalDialog.ModalTransition, null, (0, _react2.jsx)(_modalDialog.default, {
234
+ testId: 'jira-jql-datasource-modal',
235
+ onClose: onCancel,
236
+ width: "x-large",
237
+ shouldScrollInViewport: true
238
+ }, (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", {
239
+ css: dropdownContainerStyles
240
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.modalMessages.insertIssuesTitleManySites, {
241
+ values: {
242
+ siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
243
+ }
244
+ })), (0, _react2.jsx)(_siteSelector.JiraSiteSelector, {
245
+ testId: "jira-jql-datasource-modal--site-selector",
246
+ availableSites: availableSites,
247
+ onSiteSelection: onSiteSelection,
248
+ selectedJiraSite: selectedJiraSite
249
+ }))), (0, _react2.jsx)(_modeSwitcher.ModeSwitcher, {
250
+ isCompact: true,
251
+ options: [{
252
+ label: formatMessage(_messages.modalMessages.issueViewModeLabel),
253
+ value: 'issue'
254
+ }, {
255
+ label: formatMessage(_messages.modalMessages.countViewModeLabel),
256
+ value: 'count'
257
+ }],
258
+ onOptionValueChange: handleViewModeChange,
259
+ selectedOptionValue: currentViewMode
260
+ })), (0, _react2.jsx)(_modalDialog.ModalBody, null, (0, _react2.jsx)(_jiraSearchContainer.JiraSearchContainer, {
261
+ parameters: parameters,
262
+ onSearch: onSearch
263
+ }), (0, _react2.jsx)("div", {
264
+ css: contentContainerStyles
265
+ }, currentViewMode === 'count' ? renderCountModeContent() : renderIssuesModeContent())), (0, _react2.jsx)(_modalDialog.ModalFooter, null, (0, _react2.jsx)(_standardButton.default, {
266
+ appearance: "default",
267
+ onClick: onCancel
268
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.cancelButtonText)), (0, _react2.jsx)(_standardButton.default, {
269
+ appearance: "primary",
270
+ onClick: onInsertPressed,
271
+ isDisabled: !isParametersSet,
272
+ testId: 'jira-jql-datasource-modal--insert-button'
273
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.modalMessages.insertIssuesButtonText))))));
274
+ };
275
+ exports.JiraIssuesConfigModal = JiraIssuesConfigModal;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-datasource",
3
- "version": "0.18.1",
3
+ "version": "0.19.1",
4
4
  "sideEffects": false
5
5
  }
@@ -1,3 +1,3 @@
1
- export { JiraIssuesConfigModal } from './ui/jira-issues-modal';
2
- export { DatasourceTableView } from './ui/datasourceTableView';
1
+ export { default as JiraIssuesConfigModal } from './ui/jira-issues-modal';
2
+ export { default as DatasourceTableView } from './ui/datasource-table-view';
3
3
  export { JIRA_LIST_OF_LINKS_DATASOURCE_ID } from './ui/jira-issues-modal';
@@ -2,9 +2,9 @@
2
2
  import { useEffect } from 'react';
3
3
  import { css, jsx } from '@emotion/react';
4
4
  import Spinner from '@atlaskit/spinner';
5
- import { useDatasourceTableState } from '../hooks/useDatasourceTableState';
6
- import { IssueLikeDataTableView } from './issue-like-table';
7
- import { TableFooter } from './table-footer';
5
+ import { useDatasourceTableState } from '../../hooks/useDatasourceTableState';
6
+ import { IssueLikeDataTableView } from '../issue-like-table';
7
+ import { TableFooter } from '../table-footer';
8
8
  const TableViewWrapperStyles = css({
9
9
  display: 'flex',
10
10
  flexDirection: 'column',
@@ -0,0 +1,12 @@
1
+ import React, { lazy, Suspense } from 'react';
2
+ const LazyDatasourceTableView = /*#__PURE__*/lazy(() => import( /* webpackChunkName: "@atlaskit-internal_linkdatasource-tableview" */'./datasourceTableView').then(module => ({
3
+ default: module.DatasourceTableView
4
+ })));
5
+ const DatasourceTableViewWithWrappers = props => {
6
+ return /*#__PURE__*/React.createElement(Suspense, {
7
+ fallback: /*#__PURE__*/React.createElement("div", {
8
+ "data-testid": 'datasource-table-view-suspense'
9
+ })
10
+ }, /*#__PURE__*/React.createElement(LazyDatasourceTableView, props));
11
+ };
12
+ export default DatasourceTableViewWithWrappers;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,224 +1,15 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
- /** @jsx jsx */
3
- import { useCallback, useEffect, useMemo, useState } from 'react';
4
- import { css, jsx } from '@emotion/react';
5
- import { FormattedMessage, IntlProvider, useIntl } from 'react-intl-next';
6
- import Button from '@atlaskit/button/standard-button';
7
- import Modal, { ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
8
- import { B400, N0 } from '@atlaskit/theme/colors';
9
- import { useDatasourceTableState } from '../../hooks/useDatasourceTableState';
10
- import { getAvailableJiraSites } from '../../services/getAvailableJiraSites';
11
- import { EmptyState, IssueLikeDataTableView } from '../issue-like-table';
12
- import LinkRenderType from '../issue-like-table/render-type/link';
13
- import { JiraSearchContainer } from './jira-search-container';
14
- import { modalMessages } from './messages';
15
- import { ModeSwitcher } from './mode-switcher';
16
- import { JiraSiteSelector } from './site-selector';
17
- const dropdownContainerStyles = css({
18
- display: 'flex',
19
- gap: "var(--ds-space-100, 0.5rem)"
20
- });
21
- const contentContainerStyles = css({
22
- height: '420px',
23
- overflow: 'auto'
24
- });
25
- const placeholderSmartLinkStyles = css({
26
- backgroundColor: `var(--ds-surface-raised, ${N0})`,
27
- borderRadius: '3px',
28
- boxShadow: '0px 1px 1px rgba(9, 30, 66, 0.25), 0px 0px 1px rgba(9, 30, 66, 0.31)',
29
- color: `var(--ds-text-brand, ${B400})`,
30
- padding: '0px 2px'
31
- });
1
+ import React, { lazy, Suspense } from 'react';
32
2
  export const JIRA_LIST_OF_LINKS_DATASOURCE_ID = 'd8b75300-dfda-4519-b6cd-e49abbd50401';
33
- export const JiraIssuesConfigModal = props => {
34
- const {
35
- datasourceId,
36
- parameters: initialParameters,
37
- visibleColumnKeys: initialVisibleColumnKeys,
38
- onCancel,
39
- onInsert
40
- } = props;
41
- const [availableSites, setAvailableSites] = useState([]);
42
- const [currentViewMode, setCurrentViewMode] = useState('issue');
43
- const [cloudId, setCloudId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.cloudId);
44
- const [jql, setJql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql);
45
- const isParametersSet = !!(jql && cloudId);
46
- const parameters = useMemo(() => !!cloudId ? {
47
- cloudId,
48
- jql: jql || ''
49
- } : undefined, [cloudId, jql]);
50
- const {
51
- reset,
52
- status,
53
- onNextPage,
54
- responseItems,
55
- hasNextPage,
56
- columns,
57
- defaultVisibleColumnKeys
58
- } = useDatasourceTableState(datasourceId, parameters);
59
- const [visibleColumnKeys, setVisibleColumnKeys] = useState(initialVisibleColumnKeys || defaultVisibleColumnKeys);
60
- useEffect(() => {
61
- const newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
62
- setVisibleColumnKeys(newVisibleColumnKeys);
63
- }, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
64
- const {
65
- formatMessage
66
- } = useIntl();
67
- useEffect(() => {
68
- const fetchSiteDisplayNames = async () => {
69
- const jiraSites = await getAvailableJiraSites();
70
- setAvailableSites(jiraSites);
71
- };
72
- void fetchSiteDisplayNames();
73
- }, []);
74
- const onSearch = useCallback(newParameters => {
75
- setJql(newParameters.jql);
76
- reset();
77
- }, [reset]);
78
- const onSiteSelection = useCallback(site => {
79
- setCloudId(site.cloudId);
80
- reset();
81
- }, [reset]);
82
- const selectedJiraSite = useMemo(() => availableSites.find(jiraSite => jiraSite.cloudId === cloudId) || availableSites[0], [availableSites, cloudId]);
83
- useEffect(() => {
84
- if (!cloudId && selectedJiraSite) {
85
- setCloudId(selectedJiraSite.cloudId);
86
- }
87
- }, [cloudId, selectedJiraSite]);
88
- const retrieveUrlForSmartCardRender = useCallback(() => {
89
- var _data$key, _data$key$data;
90
- const [data] = responseItems;
91
- // agrement with BE that we will use `key` for rendering smartlink
92
- return data === null || data === void 0 ? void 0 : (_data$key = data.key) === null || _data$key === void 0 ? void 0 : (_data$key$data = _data$key.data) === null || _data$key$data === void 0 ? void 0 : _data$key$data.url;
93
- }, [responseItems]);
94
- const onInsertPressed = useCallback(() => {
95
- if (!isParametersSet || !jql || !selectedJiraSite) {
96
- return;
97
- }
98
- const firstIssueUrl = retrieveUrlForSmartCardRender();
99
- if (currentViewMode === 'count') {
100
- onInsert({
101
- type: 'inlineCard',
102
- attrs: {
103
- url: `${selectedJiraSite.url}/issues/${encodeURI(jql)}`
104
- }
105
- });
106
- } else if (responseItems.length === 1 && firstIssueUrl) {
107
- onInsert({
108
- type: 'inlineCard',
109
- attrs: {
110
- url: firstIssueUrl
111
- }
112
- });
113
- } else {
114
- onInsert({
115
- type: 'blockCard',
116
- attrs: {
117
- datasource: {
118
- id: datasourceId,
119
- parameters: {
120
- cloudId,
121
- jql // TODO support non JQL type
122
- },
3
+ const LazyJiraIssuesConfigModal = /*#__PURE__*/lazy(() => import( /* webpackChunkName: "@atlaskit-internal_linkdatasource-jiraissuesmodal" */'./modal').then(module => ({
4
+ default: module.JiraIssuesConfigModal
5
+ })));
123
6
 
124
- views: [{
125
- type: 'table',
126
- properties: {
127
- columnKeys: visibleColumnKeys
128
- }
129
- }]
130
- }
131
- }
132
- });
133
- }
134
- }, [isParametersSet, jql, selectedJiraSite, retrieveUrlForSmartCardRender, currentViewMode, responseItems.length, onInsert, datasourceId, cloudId, visibleColumnKeys]);
135
- const handleViewModeChange = selectedMode => {
136
- setCurrentViewMode(selectedMode);
137
- };
138
- useEffect(() => {
139
- if (status === 'empty' && isParametersSet) {
140
- void onNextPage();
141
- }
142
- }, [status, isParametersSet, onNextPage, reset]);
143
- const issueLikeDataTableView = useMemo(() => jsx(IssueLikeDataTableView, {
144
- testId: "jira-jql-datasource-table",
145
- status: status,
146
- columns: columns,
147
- items: responseItems,
148
- hasNextPage: hasNextPage,
149
- visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
150
- onNextPage: onNextPage,
151
- onVisibleColumnKeysChange: setVisibleColumnKeys
152
- }), [columns, defaultVisibleColumnKeys, hasNextPage, onNextPage, responseItems, status, visibleColumnKeys]);
153
- const renderCountModeContent = useCallback(() => {
154
- const url = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
155
- if (status === 'empty' || !jql || !url) {
156
- return jsx("span", {
157
- "data-testid": `jira-jql-datasource-modal--smart-card-placeholder`,
158
- css: placeholderSmartLinkStyles
159
- }, jsx(FormattedMessage, modalMessages.issuesCountSmartCardPlaceholderText));
160
- } else {
161
- const urlWithEncodedJql = `${url}/issues/?jql=${encodeURI(jql)}`;
162
- return jsx(LinkRenderType, {
163
- url: urlWithEncodedJql
164
- });
165
- }
166
- }, [jql, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status]);
167
- const renderIssuesModeContent = useCallback(() => {
168
- if (status === 'empty' || columns.length === 0) {
169
- return jsx(EmptyState, {
170
- testId: `jira-jql-datasource-modal--empty-state`
171
- });
172
- }
173
- const firstIssueUrl = retrieveUrlForSmartCardRender();
174
- if (responseItems.length === 1 && firstIssueUrl) {
175
- return jsx(LinkRenderType, {
176
- url: firstIssueUrl
177
- });
178
- }
179
- return issueLikeDataTableView;
180
- }, [columns.length, issueLikeDataTableView, responseItems.length, retrieveUrlForSmartCardRender, status]);
181
- return jsx(IntlProvider, {
182
- locale: "en"
183
- }, jsx(ModalTransition, null, jsx(Modal, {
184
- testId: 'jira-jql-datasource-modal',
185
- onClose: onCancel,
186
- width: "x-large",
187
- shouldScrollInViewport: true
188
- }, jsx(ModalHeader, null, jsx(ModalTitle, null, availableSites.length < 2 ? jsx(FormattedMessage, modalMessages.insertIssuesTitle) : jsx("div", {
189
- css: dropdownContainerStyles
190
- }, jsx(FormattedMessage, _extends({}, modalMessages.insertIssuesTitleManySites, {
191
- values: {
192
- siteName: selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.displayName
193
- }
194
- })), jsx(JiraSiteSelector, {
195
- testId: `jira-jql-datasource-modal--site-selector`,
196
- availableSites: availableSites,
197
- onSiteSelection: onSiteSelection,
198
- selectedJiraSite: selectedJiraSite
199
- }))), jsx(ModeSwitcher, {
200
- isCompact: true,
201
- options: [{
202
- label: formatMessage(modalMessages.issueViewModeLabel),
203
- value: 'issue'
204
- }, {
205
- label: formatMessage(modalMessages.countViewModeLabel),
206
- value: 'count'
207
- }],
208
- onOptionValueChange: handleViewModeChange,
209
- selectedOptionValue: currentViewMode
210
- })), jsx(ModalBody, null, jsx(JiraSearchContainer, {
211
- parameters: parameters,
212
- onSearch: onSearch
213
- }), jsx("div", {
214
- css: contentContainerStyles
215
- }, currentViewMode === 'count' ? renderCountModeContent() : renderIssuesModeContent())), jsx(ModalFooter, null, jsx(Button, {
216
- appearance: "default",
217
- onClick: onCancel
218
- }, jsx(FormattedMessage, modalMessages.cancelButtonText)), jsx(Button, {
219
- appearance: "primary",
220
- onClick: onInsertPressed,
221
- isDisabled: !isParametersSet,
222
- testId: 'jira-jql-datasource-modal--insert-button'
223
- }, jsx(FormattedMessage, modalMessages.insertIssuesButtonText))))));
224
- };
7
+ //
8
+ const JiraIssuesConfigModalWithWrappers = props => {
9
+ return /*#__PURE__*/React.createElement(Suspense, {
10
+ fallback: /*#__PURE__*/React.createElement("div", {
11
+ "data-testid": 'jira-jql-datasource-table-suspense'
12
+ })
13
+ }, /*#__PURE__*/React.createElement(LazyJiraIssuesConfigModal, props));
14
+ };
15
+ export default JiraIssuesConfigModalWithWrappers;