@atlaskit/link-datasource 3.13.16 → 3.13.18

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 (69) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/hooks/useLoadOptions.js +20 -9
  3. package/dist/cjs/ui/confluence-search-modal/modal/index.js +8 -27
  4. package/dist/cjs/ui/issue-like-table/edit-type/icon/index.js +4 -1
  5. package/dist/cjs/ui/issue-like-table/edit-type/index.js +9 -4
  6. package/dist/cjs/ui/issue-like-table/edit-type/status/index.js +7 -1
  7. package/dist/cjs/ui/issue-like-table/edit-type/text/index.js +3 -1
  8. package/dist/cjs/ui/issue-like-table/edit-type/user/index.js +7 -1
  9. package/dist/cjs/ui/issue-like-table/index.js +6 -2
  10. package/dist/cjs/ui/issue-like-table/table-cell-content/index.js +5 -0
  11. package/dist/cjs/ui/issue-like-table/table-cell-content/inline-edit.js +31 -2
  12. package/dist/cjs/ui/issue-like-table/table-cell-content/messages.js +14 -0
  13. package/dist/cjs/ui/issue-like-table/utils.js +21 -1
  14. package/dist/cjs/ui/jira-issues-modal/modal/index.js +1 -18
  15. package/dist/es2019/hooks/useLoadOptions.js +15 -4
  16. package/dist/es2019/ui/confluence-search-modal/modal/index.js +12 -35
  17. package/dist/es2019/ui/issue-like-table/edit-type/icon/index.js +4 -1
  18. package/dist/es2019/ui/issue-like-table/edit-type/index.js +9 -4
  19. package/dist/es2019/ui/issue-like-table/edit-type/status/index.js +5 -1
  20. package/dist/es2019/ui/issue-like-table/edit-type/text/index.js +3 -1
  21. package/dist/es2019/ui/issue-like-table/edit-type/user/index.js +5 -1
  22. package/dist/es2019/ui/issue-like-table/index.js +7 -3
  23. package/dist/es2019/ui/issue-like-table/table-cell-content/index.js +5 -0
  24. package/dist/es2019/ui/issue-like-table/table-cell-content/inline-edit.js +33 -3
  25. package/dist/es2019/ui/issue-like-table/table-cell-content/messages.js +8 -0
  26. package/dist/es2019/ui/issue-like-table/utils.js +18 -1
  27. package/dist/es2019/ui/jira-issues-modal/modal/index.js +4 -25
  28. package/dist/esm/hooks/useLoadOptions.js +21 -10
  29. package/dist/esm/ui/confluence-search-modal/modal/index.js +9 -28
  30. package/dist/esm/ui/issue-like-table/edit-type/icon/index.js +4 -1
  31. package/dist/esm/ui/issue-like-table/edit-type/index.js +9 -4
  32. package/dist/esm/ui/issue-like-table/edit-type/status/index.js +7 -1
  33. package/dist/esm/ui/issue-like-table/edit-type/text/index.js +3 -1
  34. package/dist/esm/ui/issue-like-table/edit-type/user/index.js +7 -1
  35. package/dist/esm/ui/issue-like-table/index.js +7 -3
  36. package/dist/esm/ui/issue-like-table/table-cell-content/index.js +5 -0
  37. package/dist/esm/ui/issue-like-table/table-cell-content/inline-edit.js +32 -3
  38. package/dist/esm/ui/issue-like-table/table-cell-content/messages.js +8 -0
  39. package/dist/esm/ui/issue-like-table/utils.js +19 -0
  40. package/dist/esm/ui/jira-issues-modal/modal/index.js +4 -21
  41. package/dist/types/ui/issue-like-table/edit-type/icon/index.d.ts +1 -0
  42. package/dist/types/ui/issue-like-table/edit-type/index.d.ts +2 -1
  43. package/dist/types/ui/issue-like-table/edit-type/status/index.d.ts +1 -0
  44. package/dist/types/ui/issue-like-table/edit-type/text/index.d.ts +1 -0
  45. package/dist/types/ui/issue-like-table/edit-type/user/index.d.ts +1 -0
  46. package/dist/types/ui/issue-like-table/table-cell-content/index.d.ts +2 -1
  47. package/dist/types/ui/issue-like-table/table-cell-content/inline-edit.d.ts +2 -1
  48. package/dist/types/ui/issue-like-table/table-cell-content/messages.d.ts +7 -0
  49. package/dist/types/ui/issue-like-table/utils.d.ts +20 -0
  50. package/dist/types-ts4.5/ui/issue-like-table/edit-type/icon/index.d.ts +1 -0
  51. package/dist/types-ts4.5/ui/issue-like-table/edit-type/index.d.ts +2 -1
  52. package/dist/types-ts4.5/ui/issue-like-table/edit-type/status/index.d.ts +1 -0
  53. package/dist/types-ts4.5/ui/issue-like-table/edit-type/text/index.d.ts +1 -0
  54. package/dist/types-ts4.5/ui/issue-like-table/edit-type/user/index.d.ts +1 -0
  55. package/dist/types-ts4.5/ui/issue-like-table/table-cell-content/index.d.ts +2 -1
  56. package/dist/types-ts4.5/ui/issue-like-table/table-cell-content/inline-edit.d.ts +2 -1
  57. package/dist/types-ts4.5/ui/issue-like-table/table-cell-content/messages.d.ts +7 -0
  58. package/dist/types-ts4.5/ui/issue-like-table/utils.d.ts +20 -0
  59. package/package.json +3 -6
  60. package/dist/cjs/ui/confluence-search-modal/modal/ModalOld.js +0 -455
  61. package/dist/cjs/ui/jira-issues-modal/modal/ModalOld.js +0 -493
  62. package/dist/es2019/ui/confluence-search-modal/modal/ModalOld.js +0 -430
  63. package/dist/es2019/ui/jira-issues-modal/modal/ModalOld.js +0 -476
  64. package/dist/esm/ui/confluence-search-modal/modal/ModalOld.js +0 -451
  65. package/dist/esm/ui/jira-issues-modal/modal/ModalOld.js +0 -490
  66. package/dist/types/ui/confluence-search-modal/modal/ModalOld.d.ts +0 -3
  67. package/dist/types/ui/jira-issues-modal/modal/ModalOld.d.ts +0 -3
  68. package/dist/types-ts4.5/ui/confluence-search-modal/modal/ModalOld.d.ts +0 -3
  69. package/dist/types-ts4.5/ui/jira-issues-modal/modal/ModalOld.d.ts +0 -3
@@ -1,476 +0,0 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
- /* eslint-disable @atlaskit/platform/no-preconditioning */
3
- /**
4
- * @jsxRuntime classic
5
- * @jsx jsx
6
- */
7
- import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';
8
-
9
- // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
10
- import { jsx } from '@emotion/react';
11
- import { FormattedMessage } from 'react-intl-next';
12
- import Button from '@atlaskit/button/standard-button';
13
- import { IntlMessagesProvider } from '@atlaskit/intl-messages-provider';
14
- import { ModalBody, ModalFooter, ModalHeader, ModalTitle, ModalTransition } from '@atlaskit/modal-dialog';
15
- import { EVENT_CHANNEL, useDatasourceAnalyticsEvents } from '../../../analytics';
16
- import { DatasourceAction, DatasourceDisplay } from '../../../analytics/types';
17
- import { startUfoExperience } from '../../../analytics/ufoExperiences';
18
- import { useColumnPickerRenderedFailedUfoExperience } from '../../../analytics/ufoExperiences/hooks/useColumnPickerRenderedFailedUfoExperience';
19
- import { useDataRenderedUfoExperience } from '../../../analytics/ufoExperiences/hooks/useDataRenderedUfoExperience';
20
- import { mapSearchMethod } from '../../../analytics/utils';
21
- import { buildDatasourceAdf } from '../../../common/utils/adf';
22
- import { fetchMessagesForLocale } from '../../../common/utils/locale/fetch-messages-for-locale';
23
- import { useDatasourceExperienceId } from '../../../contexts/datasource-experience-id';
24
- import { useUserInteractions } from '../../../contexts/user-interactions';
25
- import { useDatasourceTableState } from '../../../hooks/useDatasourceTableState';
26
- import i18nEN from '../../../i18n/en';
27
- import { useAvailableSites } from '../../../services/useAvailableSites';
28
- import { AccessRequired } from '../../common/error-state/access-required';
29
- import { loadingErrorMessages } from '../../common/error-state/messages';
30
- import { ModalLoadingError } from '../../common/error-state/modal-loading-error';
31
- import { NoInstancesView } from '../../common/error-state/no-instances';
32
- import { NoResults } from '../../common/error-state/no-results';
33
- import { InitialStateView } from '../../common/initial-state-view';
34
- import { initialStateViewMessages } from '../../common/initial-state-view/messages';
35
- import { CancelButton } from '../../common/modal/cancel-button';
36
- import { ContentContainer } from '../../common/modal/content-container';
37
- import { SmartCardPlaceholder, SmartLink } from '../../common/modal/count-view-smart-link';
38
- import { DatasourceModal } from '../../common/modal/datasource-modal';
39
- import { useColumnResize } from '../../common/modal/datasources-table-in-modal-preview/use-column-resize';
40
- import { useColumnWrapping } from '../../common/modal/datasources-table-in-modal-preview/use-column-wrapping';
41
- import { DisplayViewDropDown } from '../../common/modal/display-view-dropdown/display-view-drop-down';
42
- import TableSearchCount from '../../common/modal/search-count';
43
- import { SiteSelector } from '../../common/modal/site-selector';
44
- import { EmptyState, IssueLikeDataTableView } from '../../issue-like-table';
45
- import { getColumnAction } from '../../issue-like-table/utils';
46
- import { availableBasicFilterTypes } from '../basic-filters/ui';
47
- import { isQueryTooComplex } from '../basic-filters/utils/isQueryTooComplex';
48
- import { JiraSearchContainer } from '../jira-search-container';
49
- import { JiraInitialStateSVG } from './jira-issues-initial-state-svg';
50
- import { modalMessages } from './messages';
51
- const getDisplayValue = (currentViewMode, itemCount) => {
52
- if (currentViewMode === 'table') {
53
- return DatasourceDisplay.DATASOURCE_TABLE;
54
- }
55
- return itemCount === 1 ? DatasourceDisplay.INLINE : DatasourceDisplay.DATASOURCE_INLINE;
56
- };
57
- const jqlSupportDocumentLink = 'https://support.atlassian.com/jira-service-management-cloud/docs/use-advanced-search-with-jira-query-language-jql/';
58
- export const PlainJiraIssuesConfigModalOld = props => {
59
- const {
60
- datasourceId,
61
- columnCustomSizes: initialColumnCustomSizes,
62
- wrappedColumnKeys: initialWrappedColumnKeys,
63
- onCancel,
64
- onInsert,
65
- viewMode = 'table',
66
- parameters: initialParameters,
67
- url: urlBeingEdited,
68
- visibleColumnKeys: initialVisibleColumnKeys,
69
- disableDisplayDropdown = false
70
- } = props;
71
- const [currentViewMode, setCurrentViewMode] = useState(viewMode);
72
- const [cloudId, setCloudId] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.cloudId);
73
- const {
74
- availableSites,
75
- selectedSite: selectedJiraSite
76
- } = useAvailableSites('jira', cloudId);
77
- const [jql, setJql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql);
78
- const [searchBarJql, setSearchBarJql] = useState(initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql);
79
- const [visibleColumnKeys, setVisibleColumnKeys] = useState(initialVisibleColumnKeys);
80
-
81
- // analytics related parameters
82
- const searchCount = useRef(0);
83
- const userInteractions = useUserInteractions();
84
- const initialSearchMethod = !isQueryTooComplex((initialParameters === null || initialParameters === void 0 ? void 0 : initialParameters.jql) || '') ? 'basic' : 'jql';
85
- const [currentSearchMethod, setCurrentSearchMethod] = useState(initialSearchMethod);
86
- const searchMethodSearchedWith = useRef(null);
87
- const visibleColumnCount = useRef((visibleColumnKeys === null || visibleColumnKeys === void 0 ? void 0 : visibleColumnKeys.length) || 0);
88
- const basicFilterSelectionsSearchedWith = useRef({});
89
- const isSearchedWithComplexQuery = useRef(false);
90
- const parameters = useMemo(() => !!cloudId ? {
91
- cloudId,
92
- jql: jql || ''
93
- } : undefined, [cloudId, jql]);
94
- const isParametersSet = !!(jql && cloudId);
95
- const {
96
- columnCustomSizes,
97
- onColumnResize
98
- } = useColumnResize(initialColumnCustomSizes);
99
- const {
100
- wrappedColumnKeys,
101
- onWrappedColumnChange
102
- } = useColumnWrapping(initialWrappedColumnKeys);
103
- const {
104
- reset,
105
- status,
106
- onNextPage,
107
- responseItems,
108
- responseItemIds,
109
- hasNextPage,
110
- columns,
111
- defaultVisibleColumnKeys,
112
- loadDatasourceDetails,
113
- totalCount,
114
- extensionKey = null,
115
- destinationObjectTypes
116
- } = useDatasourceTableState({
117
- datasourceId,
118
- parameters: isParametersSet ? parameters : undefined,
119
- fieldKeys: visibleColumnKeys
120
- });
121
- const {
122
- fireEvent
123
- } = useDatasourceAnalyticsEvents();
124
- const experienceId = useDatasourceExperienceId();
125
- const analyticsPayload = useMemo(() => ({
126
- extensionKey,
127
- destinationObjectTypes
128
- }), [destinationObjectTypes, extensionKey]);
129
- const resolvedWithNoResults = status === 'resolved' && !responseItems.length;
130
- const jqlUrl = selectedJiraSite && jql && `${selectedJiraSite.url}/issues/?jql=${encodeURI(jql)}`;
131
- const isInsertDisabled = !isParametersSet || status === 'rejected' || status === 'unauthorized' || status === 'loading';
132
- const shouldShowIssueCount = !!totalCount && totalCount !== 1 && currentViewMode === 'table';
133
- const isDataReady = (visibleColumnKeys || []).length > 0;
134
- const hasNoJiraSites = availableSites && availableSites.length === 0;
135
- useEffect(() => {
136
- if (availableSites) {
137
- fireEvent('ui.modal.ready.datasource', {
138
- instancesCount: availableSites.length,
139
- schemasCount: null
140
- });
141
- }
142
- }, [fireEvent, availableSites]);
143
- useEffect(() => {
144
- const shouldStartUfoExperience = status === 'loading';
145
- if (shouldStartUfoExperience) {
146
- startUfoExperience({
147
- name: 'datasource-rendered'
148
- }, experienceId);
149
- }
150
- }, [experienceId, status]);
151
- useDataRenderedUfoExperience({
152
- status,
153
- experienceId: experienceId,
154
- itemCount: responseItems.length,
155
- canBeLink: currentViewMode === 'inline',
156
- extensionKey
157
- });
158
- useEffect(() => {
159
- const newVisibleColumnKeys = !initialVisibleColumnKeys || (initialVisibleColumnKeys || []).length === 0 ? defaultVisibleColumnKeys : initialVisibleColumnKeys;
160
- visibleColumnCount.current = newVisibleColumnKeys.length;
161
- setVisibleColumnKeys(newVisibleColumnKeys);
162
- }, [initialVisibleColumnKeys, defaultVisibleColumnKeys]);
163
- useEffect(() => {
164
- if (selectedJiraSite && (!cloudId || cloudId !== selectedJiraSite.cloudId)) {
165
- setCloudId(selectedJiraSite.cloudId);
166
- }
167
- }, [cloudId, selectedJiraSite]);
168
- const fireSingleItemViewedEvent = useCallback(() => {
169
- fireEvent('ui.link.viewed.singleItem', {
170
- ...analyticsPayload,
171
- searchMethod: mapSearchMethod(searchMethodSearchedWith.current)
172
- });
173
- }, [analyticsPayload, fireEvent]);
174
- const fireCountViewedEvent = useCallback(() => {
175
- fireEvent('ui.link.viewed.count', {
176
- ...analyticsPayload,
177
- searchMethod: mapSearchMethod(searchMethodSearchedWith.current),
178
- totalItemCount: totalCount || 0
179
- });
180
- }, [analyticsPayload, fireEvent, totalCount]);
181
- const fireTableViewedEvent = useCallback(() => {
182
- if (isDataReady) {
183
- fireEvent('ui.table.viewed.datasourceConfigModal', {
184
- ...analyticsPayload,
185
- totalItemCount: totalCount || 0,
186
- searchMethod: mapSearchMethod(searchMethodSearchedWith.current),
187
- displayedColumnCount: visibleColumnCount.current
188
- });
189
- }
190
- }, [analyticsPayload, fireEvent, totalCount, isDataReady]);
191
- const fireIssueViewAnalytics = useCallback(() => {
192
- if (!totalCount) {
193
- return;
194
- }
195
- if (totalCount > 1) {
196
- fireTableViewedEvent();
197
- } else if (totalCount === 1) {
198
- fireSingleItemViewedEvent();
199
- }
200
- }, [fireSingleItemViewedEvent, fireTableViewedEvent, totalCount]);
201
- useEffect(() => {
202
- const isResolved = status === 'resolved';
203
- const isIssueViewMode = currentViewMode === 'table';
204
- const isCountViewMode = currentViewMode === 'inline';
205
- if (!isResolved) {
206
- return;
207
- }
208
- if (isIssueViewMode) {
209
- fireIssueViewAnalytics();
210
- } else if (isCountViewMode) {
211
- fireCountViewedEvent();
212
- }
213
- }, [currentViewMode, status, fireIssueViewAnalytics, fireCountViewedEvent]);
214
- useColumnPickerRenderedFailedUfoExperience(status, experienceId);
215
- const onSearch = useCallback((newParameters, {
216
- searchMethod,
217
- basicFilterSelections,
218
- isQueryComplex
219
- }) => {
220
- searchCount.current++;
221
- searchMethodSearchedWith.current = searchMethod;
222
- basicFilterSelectionsSearchedWith.current = basicFilterSelections;
223
- isSearchedWithComplexQuery.current = isQueryComplex;
224
- if (jql !== newParameters.jql) {
225
- userInteractions.add(DatasourceAction.QUERY_UPDATED);
226
- }
227
- setJql(newParameters.jql);
228
- reset({
229
- shouldForceRequest: true
230
- });
231
- }, [jql, reset, userInteractions]);
232
- const onSiteSelection = useCallback(site => {
233
- userInteractions.add(DatasourceAction.INSTANCE_UPDATED);
234
- setJql('');
235
- setCloudId(site.cloudId);
236
- reset({
237
- shouldForceRequest: true
238
- });
239
- }, [reset, userInteractions]);
240
- const retrieveUrlForSmartCardRender = useCallback(() => {
241
- var _data$key, _data$key$data;
242
- const [data] = responseItems;
243
- // agreement with BE that we will use `key` for rendering smartlink
244
- 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;
245
- }, [responseItems]);
246
- const onInsertPressed = useCallback((e, analyticsEvent) => {
247
- var _insertButtonClickedE;
248
- if (!isParametersSet || !jql || !selectedJiraSite) {
249
- return;
250
- }
251
- const upToDateJqlUrl = selectedJiraSite && jql && `${selectedJiraSite.url}/issues/?jql=${encodeURIComponent(jql)}`;
252
- const filterSelectionCount = availableBasicFilterTypes.reduce((current, filter) => {
253
- var _basicFilterSelection;
254
- return {
255
- ...current,
256
- [`${filter}BasicFilterSelectionCount`]: ((_basicFilterSelection = basicFilterSelectionsSearchedWith.current[filter]) === null || _basicFilterSelection === void 0 ? void 0 : _basicFilterSelection.length) || 0
257
- };
258
- }, {});
259
- const insertButtonClickedEvent = analyticsEvent.update({
260
- actionSubjectId: 'insert',
261
- attributes: {
262
- ...analyticsPayload,
263
- totalItemCount: totalCount || 0,
264
- displayedColumnCount: visibleColumnCount.current,
265
- display: getDisplayValue(currentViewMode, totalCount || 0),
266
- searchCount: searchCount.current,
267
- searchMethod: mapSearchMethod(searchMethodSearchedWith.current),
268
- actions: userInteractions.get(),
269
- isQueryComplex: isSearchedWithComplexQuery.current,
270
- ...(searchMethodSearchedWith.current === 'basic' ? {
271
- ...filterSelectionCount
272
- } : {})
273
- },
274
- eventType: 'ui'
275
- });
276
-
277
- // additional event for tracking in confluence against JIM
278
- const macroInsertedEvent = analyticsEvent.clone();
279
- macroInsertedEvent === null || macroInsertedEvent === void 0 ? void 0 : macroInsertedEvent.update({
280
- eventType: 'track',
281
- action: 'inserted',
282
- actionSubject: 'macro',
283
- actionSubjectId: 'jlol',
284
- attributes: {
285
- ...analyticsPayload,
286
- totalItemCount: totalCount || 0,
287
- displayedColumnCount: visibleColumnCount.current,
288
- display: getDisplayValue(currentViewMode, totalCount || 0),
289
- searchCount: searchCount.current,
290
- searchMethod: mapSearchMethod(searchMethodSearchedWith.current),
291
- actions: userInteractions.get()
292
- }
293
- });
294
- const consumerEvent = (_insertButtonClickedE = insertButtonClickedEvent.clone()) !== null && _insertButtonClickedE !== void 0 ? _insertButtonClickedE : undefined;
295
- insertButtonClickedEvent.fire(EVENT_CHANNEL);
296
- const firstIssueUrl = retrieveUrlForSmartCardRender();
297
- if (currentViewMode === 'inline') {
298
- macroInsertedEvent === null || macroInsertedEvent === void 0 ? void 0 : macroInsertedEvent.fire(EVENT_CHANNEL);
299
- const url = responseItems.length === 1 ? firstIssueUrl : upToDateJqlUrl;
300
- onInsert({
301
- type: 'inlineCard',
302
- attrs: {
303
- url
304
- }
305
- }, consumerEvent);
306
- } else {
307
- onInsert(buildDatasourceAdf({
308
- id: datasourceId,
309
- parameters: {
310
- cloudId,
311
- jql
312
- },
313
- views: [{
314
- type: 'table',
315
- properties: {
316
- columns: (visibleColumnKeys || []).map(key => {
317
- const width = columnCustomSizes === null || columnCustomSizes === void 0 ? void 0 : columnCustomSizes[key];
318
- const isWrapped = wrappedColumnKeys === null || wrappedColumnKeys === void 0 ? void 0 : wrappedColumnKeys.includes(key);
319
- return {
320
- key,
321
- ...(width ? {
322
- width
323
- } : {}),
324
- ...(isWrapped ? {
325
- isWrapped
326
- } : {})
327
- };
328
- })
329
- }
330
- }]
331
- }, upToDateJqlUrl), consumerEvent);
332
- }
333
- }, [isParametersSet, jql, selectedJiraSite, analyticsPayload, totalCount, currentViewMode, retrieveUrlForSmartCardRender, responseItems.length, onInsert, datasourceId, cloudId, visibleColumnKeys, columnCustomSizes, wrappedColumnKeys, userInteractions]);
334
- const handleViewModeChange = selectedMode => {
335
- userInteractions.add(DatasourceAction.DISPLAY_VIEW_CHANGED);
336
- setCurrentViewMode(selectedMode);
337
- };
338
- const handleOnNextPage = useCallback((onNextPageProps = {}) => {
339
- userInteractions.add(DatasourceAction.NEXT_PAGE_SCROLLED);
340
- onNextPage(onNextPageProps);
341
- }, [onNextPage, userInteractions]);
342
- const handleVisibleColumnKeysChange = useCallback((newVisibleColumnKeys = []) => {
343
- const columnAction = getColumnAction(visibleColumnKeys || [], newVisibleColumnKeys);
344
- userInteractions.add(columnAction);
345
- visibleColumnCount.current = newVisibleColumnKeys.length;
346
- setVisibleColumnKeys(newVisibleColumnKeys);
347
- }, [visibleColumnKeys, userInteractions]);
348
- const issueLikeDataTableView = useMemo(() => jsx(ContentContainer, {
349
- withTableBorder: true
350
- }, jsx(IssueLikeDataTableView, {
351
- testId: "jira-datasource-table",
352
- status: status,
353
- columns: columns,
354
- items: responseItems,
355
- itemIds: responseItemIds,
356
- hasNextPage: hasNextPage,
357
- visibleColumnKeys: visibleColumnKeys || defaultVisibleColumnKeys,
358
- onNextPage: handleOnNextPage,
359
- onLoadDatasourceDetails: loadDatasourceDetails,
360
- onVisibleColumnKeysChange: handleVisibleColumnKeysChange,
361
- extensionKey: extensionKey,
362
- columnCustomSizes: columnCustomSizes,
363
- onColumnResize: onColumnResize,
364
- wrappedColumnKeys: wrappedColumnKeys,
365
- onWrappedColumnChange: onWrappedColumnChange
366
- })), [status, columns, responseItems, responseItemIds, hasNextPage, visibleColumnKeys, defaultVisibleColumnKeys, handleOnNextPage, loadDatasourceDetails, handleVisibleColumnKeysChange, extensionKey, columnCustomSizes, onColumnResize, wrappedColumnKeys, onWrappedColumnChange]);
367
- const renderCountModeContent = useCallback(() => {
368
- const selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
369
- if (status === 'unauthorized') {
370
- return jsx(AccessRequired, {
371
- url: selectedJiraSiteUrl || urlBeingEdited
372
- });
373
- } else if (status === 'empty' || !jql || !selectedJiraSiteUrl) {
374
- return jsx(SmartCardPlaceholder, {
375
- placeholderText: modalMessages.issuesCountSmartCardPlaceholderText
376
- });
377
- } else {
378
- let url;
379
- if (responseItems.length === 1 && retrieveUrlForSmartCardRender()) {
380
- url = retrieveUrlForSmartCardRender();
381
- } else {
382
- url = `${selectedJiraSiteUrl}/issues/?jql=${encodeURIComponent(jql)}`;
383
- }
384
- return jsx(SmartLink, {
385
- url: url
386
- });
387
- }
388
- }, [jql, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited, responseItems, retrieveUrlForSmartCardRender]);
389
- const renderIssuesModeContent = useCallback(() => {
390
- const selectedJiraSiteUrl = selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url;
391
- if (status === 'rejected' && jqlUrl) {
392
- return jsx(ModalLoadingError, {
393
- errorMessage: jqlUrl ? jsx(FormattedMessage, _extends({}, modalMessages.checkConnectionWithSource, {
394
- values: {
395
- a: urlText => jsx("a", {
396
- href: jqlUrl
397
- }, urlText)
398
- }
399
- })) : undefined
400
- });
401
- } else if (status === 'unauthorized') {
402
- return jsx(AccessRequired, {
403
- url: selectedJiraSiteUrl || urlBeingEdited
404
- });
405
- } else if (resolvedWithNoResults || status === 'forbidden') {
406
- return jsx(NoResults, null);
407
- } else if (status === 'empty' || !columns.length) {
408
- // persist the empty state when making the initial /data request which contains the columns
409
- return jsx(ContentContainer, {
410
- withTableBorder: !!jql
411
- }, !!jql ? jsx(EmptyState, {
412
- testId: `jira-datasource-modal--empty-state`
413
- }) : jsx(InitialStateView, {
414
- icon: jsx(JiraInitialStateSVG, null),
415
- title: modalMessages.searchJiraTitle,
416
- description: currentSearchMethod === 'jql' ? initialStateViewMessages.searchDescriptionForJQLSearch : initialStateViewMessages.searchDescriptionForBasicSearch,
417
- learnMoreLink: currentSearchMethod === 'jql' ? {
418
- href: jqlSupportDocumentLink,
419
- text: initialStateViewMessages.learnMoreLink
420
- } : undefined
421
- }));
422
- }
423
- return issueLikeDataTableView;
424
- }, [columns.length, currentSearchMethod, issueLikeDataTableView, jql, jqlUrl, resolvedWithNoResults, selectedJiraSite === null || selectedJiraSite === void 0 ? void 0 : selectedJiraSite.url, status, urlBeingEdited]);
425
- const siteSelectorLabel = availableSites && availableSites.length > 1 ? modalMessages.insertIssuesTitleManySites : modalMessages.insertIssuesTitle;
426
- const getCancelButtonAnalyticsPayload = useCallback(() => {
427
- return {
428
- ...analyticsPayload,
429
- searchCount: searchCount.current,
430
- actions: userInteractions.get()
431
- };
432
- }, [analyticsPayload, userInteractions]);
433
- return jsx(IntlMessagesProvider, {
434
- defaultMessages: i18nEN,
435
- loaderFn: fetchMessagesForLocale
436
- }, jsx(ModalTransition, null, jsx(DatasourceModal, {
437
- testId: "jira-datasource-modal",
438
- onClose: onCancel
439
- }, jsx(ModalHeader, null, jsx(ModalTitle, null, jsx(SiteSelector, {
440
- availableSites: availableSites,
441
- onSiteSelection: onSiteSelection,
442
- selectedSite: selectedJiraSite,
443
- testId: "jira-datasource-modal--site-selector",
444
- label: siteSelectorLabel
445
- })), !hasNoJiraSites && !disableDisplayDropdown && jsx(DisplayViewDropDown, {
446
- onViewModeChange: handleViewModeChange,
447
- viewMode: currentViewMode
448
- })), jsx(ModalBody, null, !hasNoJiraSites ? jsx(Fragment, null, jsx(JiraSearchContainer, {
449
- setSearchBarJql: setSearchBarJql,
450
- searchBarJql: searchBarJql,
451
- isSearching: status === 'loading',
452
- parameters: parameters,
453
- onSearch: onSearch,
454
- initialSearchMethod: initialSearchMethod,
455
- onSearchMethodChange: setCurrentSearchMethod,
456
- site: selectedJiraSite
457
- }), currentViewMode === 'inline' ? renderCountModeContent() : renderIssuesModeContent()) : jsx(NoInstancesView, {
458
- title: loadingErrorMessages.noAccessToJiraSitesTitle,
459
- description: loadingErrorMessages.noAccessToJiraSitesDescription,
460
- testId: `no-jira-instances-content`
461
- })), jsx(ModalFooter, null, shouldShowIssueCount && jsx(TableSearchCount, {
462
- searchCount: totalCount,
463
- url: jqlUrl,
464
- prefixTextType: "issue",
465
- testId: "jira-datasource-modal-total-issues-count"
466
- }), jsx(CancelButton, {
467
- onCancel: onCancel,
468
- getAnalyticsPayload: getCancelButtonAnalyticsPayload,
469
- testId: "jira-datasource-modal--cancel-button"
470
- }), !hasNoJiraSites && jsx(Button, {
471
- appearance: "primary",
472
- onClick: onInsertPressed,
473
- isDisabled: isInsertDisabled,
474
- testId: "jira-datasource-modal--insert-button"
475
- }, jsx(FormattedMessage, modalMessages.insertIssuesButtonText))))));
476
- };