@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.
- package/CHANGELOG.md +17 -0
- package/dist/cjs/index.js +8 -4
- package/dist/cjs/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js} +3 -3
- package/dist/cjs/ui/datasource-table-view/index.js +29 -0
- package/dist/cjs/ui/datasource-table-view/types.js +5 -0
- package/dist/cjs/ui/jira-issues-modal/index.js +22 -266
- package/dist/cjs/ui/jira-issues-modal/modal/index.js +275 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +2 -2
- package/dist/es2019/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js} +3 -3
- package/dist/es2019/ui/datasource-table-view/index.js +12 -0
- package/dist/es2019/ui/datasource-table-view/types.js +1 -0
- package/dist/es2019/ui/jira-issues-modal/index.js +13 -222
- package/dist/es2019/ui/jira-issues-modal/modal/index.js +223 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js} +3 -3
- package/dist/esm/ui/datasource-table-view/index.js +16 -0
- package/dist/esm/ui/datasource-table-view/types.js +1 -0
- package/dist/esm/ui/jira-issues-modal/index.js +17 -262
- package/dist/esm/ui/jira-issues-modal/modal/index.js +263 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/ui/datasource-table-view/datasourceTableView.d.ts +3 -0
- package/dist/types/ui/datasource-table-view/index.d.ts +4 -0
- package/dist/types/ui/{datasourceTableView.d.ts → datasource-table-view/types.d.ts} +0 -2
- package/dist/types/ui/jira-issues-modal/index.d.ts +4 -11
- package/dist/types/ui/jira-issues-modal/modal/index.d.ts +3 -0
- package/dist/types/ui/jira-issues-modal/types.d.ts +8 -1
- package/dist/types-ts4.5/index.d.ts +3 -2
- package/dist/types-ts4.5/ui/datasource-table-view/datasourceTableView.d.ts +3 -0
- package/dist/types-ts4.5/ui/datasource-table-view/index.d.ts +4 -0
- package/dist/types-ts4.5/ui/{datasourceTableView.d.ts → datasource-table-view/types.d.ts} +0 -2
- package/dist/types-ts4.5/ui/jira-issues-modal/index.d.ts +4 -11
- package/dist/types-ts4.5/ui/jira-issues-modal/modal/index.d.ts +3 -0
- package/dist/types-ts4.5/ui/jira-issues-modal/types.d.ts +8 -1
- package/examples-helpers/buildJiraIssuesTable.tsx +1 -1
- package/package.json +3 -3
- package/report.api.md +14 -8
- package/tmp/api-report-tmp.d.ts +12 -3
- /package/dist/cjs/ui/jira-issues-modal/{messages.js → modal/messages.js} +0 -0
- /package/dist/es2019/ui/jira-issues-modal/{messages.js → modal/messages.js} +0 -0
- /package/dist/esm/ui/jira-issues-modal/{messages.js → modal/messages.js} +0 -0
- /package/dist/types/ui/jira-issues-modal/{messages.d.ts → modal/messages.d.ts} +0 -0
- /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;
|
package/dist/cjs/version.json
CHANGED
package/dist/es2019/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { JiraIssuesConfigModal } from './ui/jira-issues-modal';
|
|
2
|
-
export { DatasourceTableView } from './ui/
|
|
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';
|
package/dist/es2019/ui/{datasourceTableView.js → datasource-table-view/datasourceTableView.js}
RENAMED
|
@@ -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 '
|
|
6
|
-
import { IssueLikeDataTableView } from '
|
|
7
|
-
import { TableFooter } from '
|
|
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
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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;
|