@atlaskit/link-datasource 1.20.0 → 1.21.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 (26) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cjs/hooks/useDatasourceTableState.js +91 -88
  3. package/dist/cjs/ui/common/error-state/messages.js +20 -0
  4. package/dist/cjs/ui/common/error-state/provider-auth-required-svg.js +449 -0
  5. package/dist/cjs/ui/common/error-state/provider-auth-required.js +96 -0
  6. package/dist/cjs/ui/datasource-table-view/datasourceTableView.js +16 -7
  7. package/dist/es2019/hooks/useDatasourceTableState.js +26 -24
  8. package/dist/es2019/ui/common/error-state/messages.js +20 -0
  9. package/dist/es2019/ui/common/error-state/provider-auth-required-svg.js +442 -0
  10. package/dist/es2019/ui/common/error-state/provider-auth-required.js +62 -0
  11. package/dist/es2019/ui/datasource-table-view/datasourceTableView.js +16 -7
  12. package/dist/esm/hooks/useDatasourceTableState.js +91 -88
  13. package/dist/esm/ui/common/error-state/messages.js +20 -0
  14. package/dist/esm/ui/common/error-state/provider-auth-required-svg.js +442 -0
  15. package/dist/esm/ui/common/error-state/provider-auth-required.js +85 -0
  16. package/dist/esm/ui/datasource-table-view/datasourceTableView.js +16 -7
  17. package/dist/types/hooks/useDatasourceTableState.d.ts +3 -1
  18. package/dist/types/ui/common/error-state/messages.d.ts +20 -0
  19. package/dist/types/ui/common/error-state/provider-auth-required-svg.d.ts +3 -0
  20. package/dist/types/ui/common/error-state/provider-auth-required.d.ts +9 -0
  21. package/dist/types-ts4.5/hooks/useDatasourceTableState.d.ts +3 -1
  22. package/dist/types-ts4.5/ui/common/error-state/messages.d.ts +20 -0
  23. package/dist/types-ts4.5/ui/common/error-state/provider-auth-required-svg.d.ts +3 -0
  24. package/dist/types-ts4.5/ui/common/error-state/provider-auth-required.d.ts +9 -0
  25. package/examples-helpers/buildJiraIssuesTable.tsx +34 -6
  26. package/package.json +4 -3
@@ -16,6 +16,7 @@ import { ScrollableContainerHeight } from '../../ui/issue-like-table/styled';
16
16
  import { AccessRequired } from '../common/error-state/access-required';
17
17
  import { LoadingError } from '../common/error-state/loading-error';
18
18
  import { NoResults } from '../common/error-state/no-results';
19
+ import { ProviderAuthRequired } from '../common/error-state/provider-auth-required';
19
20
  import { IssueLikeDataTableView } from '../issue-like-table';
20
21
  import EmptyState from '../issue-like-table/empty-state';
21
22
  import { TableFooter } from '../table-footer';
@@ -42,7 +43,8 @@ const DatasourceTableViewWithoutAnalytics = ({
42
43
  totalCount,
43
44
  loadDatasourceDetails,
44
45
  extensionKey = null,
45
- destinationObjectTypes
46
+ destinationObjectTypes,
47
+ authDetails
46
48
  } = useDatasourceTableState({
47
49
  datasourceId,
48
50
  parameters,
@@ -103,14 +105,17 @@ const DatasourceTableViewWithoutAnalytics = ({
103
105
  extensionKey
104
106
  });
105
107
  const forcedReset = useCallback(() => {
108
+ reset({
109
+ shouldForceRequest: true
110
+ });
111
+ }, [reset]);
112
+ const onRefresh = useCallback(() => {
106
113
  fireEvent('ui.button.clicked.sync', {
107
114
  extensionKey,
108
115
  destinationObjectTypes
109
116
  });
110
- reset({
111
- shouldForceRequest: true
112
- });
113
- }, [destinationObjectTypes, extensionKey, fireEvent, reset]);
117
+ forcedReset();
118
+ }, [destinationObjectTypes, extensionKey, fireEvent, forcedReset]);
114
119
  const handleErrorRefresh = useCallback(() => {
115
120
  reset({
116
121
  shouldForceRequest: true
@@ -122,7 +127,11 @@ const DatasourceTableViewWithoutAnalytics = ({
122
127
  });
123
128
  }
124
129
  if (status === 'unauthorized') {
125
- return jsx(AccessRequired, {
130
+ return authDetails !== null && authDetails !== void 0 && authDetails.length && authDetails.length > 0 ? jsx(ProviderAuthRequired, {
131
+ auth: authDetails,
132
+ onAuthSuccess: forcedReset,
133
+ onAuthError: forcedReset
134
+ }) : jsx(AccessRequired, {
126
135
  url: url
127
136
  });
128
137
  }
@@ -157,7 +166,7 @@ const DatasourceTableViewWithoutAnalytics = ({
157
166
  isCompact: true
158
167
  }), jsx(TableFooter, {
159
168
  itemCount: isDataReady ? totalCount : undefined,
160
- onRefresh: forcedReset,
169
+ onRefresh: onRefresh,
161
170
  isLoading: !isDataReady || status === 'loading',
162
171
  url: url
163
172
  })));
@@ -19,60 +19,67 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
19
19
  var idFieldCount = 1;
20
20
  var keyFieldCount = 1;
21
21
  var _useState = useState([]),
22
- _useState2 = _slicedToArray(_useState, 2),
23
- defaultVisibleColumnKeys = _useState2[0],
24
- setDefaultVisibleColumnKeys = _useState2[1];
22
+ _useState2 = _slicedToArray(_useState, 1),
23
+ initialEmptyArray = _useState2[0];
25
24
  var _useState3 = useState([]),
26
25
  _useState4 = _slicedToArray(_useState3, 2),
27
- lastRequestedFieldKeys = _useState4[0],
28
- setLastRequestedFieldKeys = _useState4[1];
29
- var _useState5 = useState({
26
+ defaultVisibleColumnKeys = _useState4[0],
27
+ setDefaultVisibleColumnKeys = _useState4[1];
28
+ var _useState5 = useState([]),
29
+ _useState6 = _slicedToArray(_useState5, 2),
30
+ lastRequestedFieldKeys = _useState6[0],
31
+ setLastRequestedFieldKeys = _useState6[1];
32
+ var _useState7 = useState({
30
33
  properties: []
31
34
  }),
32
- _useState6 = _slicedToArray(_useState5, 2),
33
- fullSchema = _useState6[0],
34
- setFullSchema = _useState6[1];
35
- var _useState7 = useState('empty'),
36
35
  _useState8 = _slicedToArray(_useState7, 2),
37
- status = _useState8[0],
38
- setStatus = _useState8[1];
39
- var _useState9 = useState([]),
36
+ fullSchema = _useState8[0],
37
+ setFullSchema = _useState8[1];
38
+ var _useState9 = useState('empty'),
40
39
  _useState10 = _slicedToArray(_useState9, 2),
41
- responseItems = _useState10[0],
42
- setResponseItems = _useState10[1];
43
- var _useState11 = useState(true),
40
+ status = _useState10[0],
41
+ setStatus = _useState10[1];
42
+ var _useState11 = useState([]),
44
43
  _useState12 = _slicedToArray(_useState11, 2),
45
- hasNextPage = _useState12[0],
46
- setHasNextPage = _useState12[1];
47
- var _useState13 = useState(undefined),
44
+ authDetails = _useState12[0],
45
+ setAuthDetails = _useState12[1];
46
+ var _useState13 = useState([]),
48
47
  _useState14 = _slicedToArray(_useState13, 2),
49
- nextCursor = _useState14[0],
50
- setNextCursor = _useState14[1];
51
- var _useState15 = useState([]),
48
+ responseItems = _useState14[0],
49
+ setResponseItems = _useState14[1];
50
+ var _useState15 = useState(true),
52
51
  _useState16 = _slicedToArray(_useState15, 2),
53
- columns = _useState16[0],
54
- setColumns = _useState16[1];
52
+ hasNextPage = _useState16[0],
53
+ setHasNextPage = _useState16[1];
55
54
  var _useState17 = useState(undefined),
56
55
  _useState18 = _slicedToArray(_useState17, 2),
57
- totalCount = _useState18[0],
58
- setTotalCount = _useState18[1];
59
- var _useState19 = useState(false),
56
+ nextCursor = _useState18[0],
57
+ setNextCursor = _useState18[1];
58
+ var _useState19 = useState([]),
60
59
  _useState20 = _slicedToArray(_useState19, 2),
61
- shouldForceRequest = _useState20[0],
62
- setShouldForceRequest = _useState20[1];
63
- var _useState21 = useState([]),
60
+ columns = _useState20[0],
61
+ setColumns = _useState20[1];
62
+ var _useState21 = useState(undefined),
64
63
  _useState22 = _slicedToArray(_useState21, 2),
65
- destinationObjectTypes = _useState22[0],
66
- setDestinationObjectTypes = _useState22[1];
67
- var _useState23 = useState(),
64
+ totalCount = _useState22[0],
65
+ setTotalCount = _useState22[1];
66
+ var _useState23 = useState(false),
68
67
  _useState24 = _slicedToArray(_useState23, 2),
69
- extensionKey = _useState24[0],
70
- setExtensionKey = _useState24[1];
68
+ shouldForceRequest = _useState24[0],
69
+ setShouldForceRequest = _useState24[1];
70
+ var _useState25 = useState([]),
71
+ _useState26 = _slicedToArray(_useState25, 2),
72
+ destinationObjectTypes = _useState26[0],
73
+ setDestinationObjectTypes = _useState26[1];
74
+ var _useState27 = useState(),
75
+ _useState28 = _slicedToArray(_useState27, 2),
76
+ extensionKey = _useState28[0],
77
+ setExtensionKey = _useState28[1];
71
78
  var _useDatasourceClientE = useDatasourceClientExtension(),
72
79
  getDatasourceData = _useDatasourceClientE.getDatasourceData,
73
80
  getDatasourceDetails = _useDatasourceClientE.getDatasourceDetails;
74
81
  var loadDatasourceDetails = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
75
- var _yield$getDatasourceD, access, schema, isColumnNotPresentInCurrentColumnsList, allColumns, newColumns;
82
+ var _yield$getDatasourceD, _yield$getDatasourceD2, access, auth, schema, isColumnNotPresentInCurrentColumnsList, allColumns, newColumns;
76
83
  return _regeneratorRuntime.wrap(function _callee$(_context) {
77
84
  while (1) switch (_context.prev = _context.next) {
78
85
  case 0:
@@ -89,20 +96,16 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
89
96
  });
90
97
  case 5:
91
98
  _yield$getDatasourceD = _context.sent;
92
- access = _yield$getDatasourceD.meta.access;
99
+ _yield$getDatasourceD2 = _yield$getDatasourceD.meta;
100
+ access = _yield$getDatasourceD2.access;
101
+ auth = _yield$getDatasourceD2.auth;
93
102
  schema = _yield$getDatasourceD.data.schema;
94
- if (!(access === 'unauthorized')) {
95
- _context.next = 11;
96
- break;
97
- }
98
- setStatus('unauthorized');
99
- return _context.abrupt("return");
100
- case 11:
101
- if (!(access === 'forbidden')) {
103
+ if (!(access === 'unauthorized' || access === 'forbidden')) {
102
104
  _context.next = 14;
103
105
  break;
104
106
  }
105
- setStatus('forbidden');
107
+ setStatus(access);
108
+ setAuthDetails(auth || initialEmptyArray);
106
109
  return _context.abrupt("return");
107
110
  case 14:
108
111
  isColumnNotPresentInCurrentColumnsList = function isColumnNotPresentInCurrentColumnsList(col) {
@@ -139,7 +142,7 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
139
142
  return _context.stop();
140
143
  }
141
144
  }, _callee, null, [[2, 20]]);
142
- })), [captureError, columns, datasourceId, getDatasourceDetails, parameters]);
145
+ })), [captureError, columns, datasourceId, getDatasourceDetails, parameters, initialEmptyArray]);
143
146
  var applySchemaProperties = useCallback(function (schema, fieldKeys) {
144
147
  var properties = schema.properties,
145
148
  _schema$defaultProper = schema.defaultProperties,
@@ -184,12 +187,13 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
184
187
  shouldForceRequest,
185
188
  isFullSchemaLoaded,
186
189
  datasourceDataRequest,
187
- _yield$getDatasourceD2,
188
190
  _yield$getDatasourceD3,
191
+ _yield$getDatasourceD4,
189
192
  access,
190
193
  _destinationObjectTypes,
191
194
  _extensionKey,
192
- _yield$getDatasourceD4,
195
+ auth,
196
+ _yield$getDatasourceD5,
193
197
  items,
194
198
  nextPageCursor,
195
199
  _totalCount,
@@ -222,30 +226,25 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
222
226
  _context2.next = 10;
223
227
  return getDatasourceData(datasourceId, datasourceDataRequest, shouldForceRequest);
224
228
  case 10:
225
- _yield$getDatasourceD2 = _context2.sent;
226
- _yield$getDatasourceD3 = _yield$getDatasourceD2.meta;
227
- access = _yield$getDatasourceD3.access;
228
- _destinationObjectTypes = _yield$getDatasourceD3.destinationObjectTypes;
229
- _extensionKey = _yield$getDatasourceD3.extensionKey;
230
- _yield$getDatasourceD4 = _yield$getDatasourceD2.data;
231
- items = _yield$getDatasourceD4.items;
232
- nextPageCursor = _yield$getDatasourceD4.nextPageCursor;
233
- _totalCount = _yield$getDatasourceD4.totalCount;
234
- schema = _yield$getDatasourceD4.schema;
235
- if (!(access === 'unauthorized')) {
236
- _context2.next = 23;
229
+ _yield$getDatasourceD3 = _context2.sent;
230
+ _yield$getDatasourceD4 = _yield$getDatasourceD3.meta;
231
+ access = _yield$getDatasourceD4.access;
232
+ _destinationObjectTypes = _yield$getDatasourceD4.destinationObjectTypes;
233
+ _extensionKey = _yield$getDatasourceD4.extensionKey;
234
+ auth = _yield$getDatasourceD4.auth;
235
+ _yield$getDatasourceD5 = _yield$getDatasourceD3.data;
236
+ items = _yield$getDatasourceD5.items;
237
+ nextPageCursor = _yield$getDatasourceD5.nextPageCursor;
238
+ _totalCount = _yield$getDatasourceD5.totalCount;
239
+ schema = _yield$getDatasourceD5.schema;
240
+ if (!(access === 'unauthorized' || access === 'forbidden')) {
241
+ _context2.next = 25;
237
242
  break;
238
243
  }
239
- setStatus('unauthorized');
244
+ setStatus(access);
245
+ setAuthDetails(auth || initialEmptyArray);
240
246
  return _context2.abrupt("return");
241
- case 23:
242
- if (!(access === 'forbidden')) {
243
- _context2.next = 26;
244
- break;
245
- }
246
- setStatus('forbidden');
247
- return _context2.abrupt("return");
248
- case 26:
247
+ case 25:
249
248
  setExtensionKey(_extensionKey);
250
249
  setDestinationObjectTypes(_destinationObjectTypes);
251
250
  setTotalCount(_totalCount);
@@ -278,49 +277,52 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
278
277
  });
279
278
  }
280
279
  setStatus('resolved');
281
- _context2.next = 49;
280
+ _context2.next = 48;
282
281
  break;
283
- case 39:
284
- _context2.prev = 39;
282
+ case 38:
283
+ _context2.prev = 38;
285
284
  _context2.t0 = _context2["catch"](7);
286
285
  captureError('onNextPage', _context2.t0);
287
286
  if (!(_context2.t0 instanceof Response && _context2.t0.status === 401)) {
288
- _context2.next = 45;
287
+ _context2.next = 44;
289
288
  break;
290
289
  }
291
290
  setStatus('unauthorized');
292
291
  return _context2.abrupt("return");
293
- case 45:
292
+ case 44:
294
293
  if (!(_context2.t0 instanceof Response && _context2.t0.status === 403)) {
295
- _context2.next = 48;
294
+ _context2.next = 47;
296
295
  break;
297
296
  }
298
297
  setStatus('forbidden');
299
298
  return _context2.abrupt("return");
300
- case 48:
299
+ case 47:
301
300
  setStatus('rejected');
302
- case 49:
301
+ case 48:
303
302
  case "end":
304
303
  return _context2.stop();
305
304
  }
306
- }, _callee2, null, [[7, 39]]);
307
- })), [captureError, parameters, fieldKeys, nextCursor, getDatasourceData, datasourceId, responseItems, applySchemaProperties, fireEvent, fullSchema]);
305
+ }, _callee2, null, [[7, 38]]);
306
+ })), [captureError, parameters, fieldKeys, nextCursor, getDatasourceData, datasourceId, responseItems, applySchemaProperties, fireEvent, fullSchema, initialEmptyArray]);
308
307
  var reset = useCallback(function (options) {
309
- setStatus('empty');
310
- setResponseItems([]);
308
+ setResponseItems(initialEmptyArray);
311
309
  setHasNextPage(true);
312
310
  setNextCursor(undefined);
313
311
  setTotalCount(undefined);
314
- setLastRequestedFieldKeys([]);
312
+ setLastRequestedFieldKeys(initialEmptyArray);
313
+ setAuthDetails(initialEmptyArray);
315
314
  setFullSchema({
316
- properties: []
315
+ properties: initialEmptyArray
317
316
  });
318
317
  setShouldForceRequest((options === null || options === void 0 ? void 0 : options.shouldForceRequest) || false);
319
318
  if (options !== null && options !== void 0 && options.shouldResetColumns) {
320
- setColumns([]);
321
- setDefaultVisibleColumnKeys([]);
319
+ setColumns(initialEmptyArray);
320
+ setDefaultVisibleColumnKeys(initialEmptyArray);
322
321
  }
323
- }, []);
322
+
323
+ // setting the status earlier is triggering useEffects without all reset state values, hence placing this as the last state reset item
324
+ setStatus('empty');
325
+ }, [initialEmptyArray]);
324
326
 
325
327
  // this takes care of requesting /data initially
326
328
  useEffect(function () {
@@ -371,6 +373,7 @@ export var useDatasourceTableState = function useDatasourceTableState(_ref) {
371
373
  defaultVisibleColumnKeys: defaultVisibleColumnKeys,
372
374
  totalCount: totalCount,
373
375
  extensionKey: extensionKey,
374
- destinationObjectTypes: destinationObjectTypes
376
+ destinationObjectTypes: destinationObjectTypes,
377
+ authDetails: authDetails
375
378
  };
376
379
  };
@@ -54,5 +54,25 @@ export var loadingErrorMessages = defineMessages({
54
54
  id: 'linkDataSource.jira-issues.no.jira.sites.access.description',
55
55
  description: 'Description that shows in the modal when user has no access to any Jira sites',
56
56
  defaultMessage: 'To request access, contact your admin.'
57
+ },
58
+ authScreenHeaderText: {
59
+ id: 'linkDataSource.datasource.table.authScreenHeaderText',
60
+ defaultMessage: 'Connect your account',
61
+ description: 'Header text to be displayed in the auth screen UI.'
62
+ },
63
+ authScreenDescriptionText: {
64
+ id: 'linkDataSource.datasource.table.authScreenDescriptionText',
65
+ defaultMessage: 'Connect your account to collaborate on work across Atlassian products.',
66
+ description: 'Description text to be displayed in the auth screen UI.'
67
+ },
68
+ learnMoreAboutSmartLinks: {
69
+ id: 'linkDataSource.datasource.table.learnMoreAboutSmartLinks',
70
+ defaultMessage: 'Learn more about Smart Links.',
71
+ description: 'An anchor link to redirect user to a page about Smart Links.'
72
+ },
73
+ authConnectButtonText: {
74
+ id: 'linkDataSource.datasource.table.authConnectButtonText',
75
+ defaultMessage: 'Connect',
76
+ description: 'Label for the authentication button.'
57
77
  }
58
78
  });