@atlaskit/share 4.2.3 → 4.3.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 (54) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/clients/ShareServiceClient.js +24 -15
  3. package/dist/cjs/components/ShareDialogWithTrigger.js +84 -13
  4. package/dist/cjs/components/ShareForm.js +10 -5
  5. package/dist/cjs/components/UserPickerField.js +14 -7
  6. package/dist/cjs/components/analytics/analytics.js +1 -1
  7. package/dist/cjs/i18n/da.js +1 -1
  8. package/dist/cjs/i18n/en_ZZ.js +5 -1
  9. package/dist/cjs/i18n/es.js +1 -1
  10. package/dist/cjs/i18n/nl.js +1 -1
  11. package/dist/cjs/i18n/pt_BR.js +1 -1
  12. package/dist/cjs/i18n/tr.js +1 -1
  13. package/dist/cjs/i18n/uk.js +1 -1
  14. package/dist/cjs/i18n.js +1 -1
  15. package/dist/cjs/version.json +1 -1
  16. package/dist/es2019/clients/ShareServiceClient.js +24 -15
  17. package/dist/es2019/components/ShareDialogWithTrigger.js +29 -6
  18. package/dist/es2019/components/ShareForm.js +10 -5
  19. package/dist/es2019/components/UserPickerField.js +14 -7
  20. package/dist/es2019/components/analytics/analytics.js +1 -1
  21. package/dist/es2019/i18n/da.js +1 -1
  22. package/dist/es2019/i18n/en_ZZ.js +5 -1
  23. package/dist/es2019/i18n/es.js +1 -1
  24. package/dist/es2019/i18n/nl.js +1 -1
  25. package/dist/es2019/i18n/pt_BR.js +1 -1
  26. package/dist/es2019/i18n/tr.js +1 -1
  27. package/dist/es2019/i18n/uk.js +1 -1
  28. package/dist/es2019/i18n.js +1 -1
  29. package/dist/es2019/version.json +1 -1
  30. package/dist/esm/clients/ShareServiceClient.js +24 -15
  31. package/dist/esm/components/ShareDialogWithTrigger.js +84 -13
  32. package/dist/esm/components/ShareForm.js +10 -5
  33. package/dist/esm/components/UserPickerField.js +14 -7
  34. package/dist/esm/components/analytics/analytics.js +1 -1
  35. package/dist/esm/i18n/da.js +1 -1
  36. package/dist/esm/i18n/en_ZZ.js +5 -1
  37. package/dist/esm/i18n/es.js +1 -1
  38. package/dist/esm/i18n/nl.js +1 -1
  39. package/dist/esm/i18n/pt_BR.js +1 -1
  40. package/dist/esm/i18n/tr.js +1 -1
  41. package/dist/esm/i18n/uk.js +1 -1
  42. package/dist/esm/i18n.js +1 -1
  43. package/dist/esm/version.json +1 -1
  44. package/dist/types/components/ShareDialogWithTrigger.d.ts +3 -0
  45. package/dist/types/components/UserPickerField.d.ts +3 -2
  46. package/dist/types/i18n/en_ZZ.d.ts +3 -0
  47. package/dist/types/types/ShareContentState.d.ts +3 -0
  48. package/dist/types-ts4.5/components/ShareDialogWithTrigger.d.ts +3 -0
  49. package/dist/types-ts4.5/components/UserPickerField.d.ts +3 -2
  50. package/dist/types-ts4.5/i18n/en_ZZ.d.ts +3 -0
  51. package/dist/types-ts4.5/types/ShareContentState.d.ts +3 -0
  52. package/package.json +9 -7
  53. package/report.api.md +3 -0
  54. package/tmp/api-report-tmp.d.ts +3 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/share
2
2
 
3
+ ## 4.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`6febf275a0a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6febf275a0a) - [ux] Rename Roadmap to Timeline in the shared success message for roadmap share content type
8
+
9
+ ## 4.3.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`1b0098b3680`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1b0098b3680) - [ux] Updated the Share dialog to handle errors relating to user, group, or team selection.
14
+
3
15
  ## 4.2.3
4
16
 
5
17
  ### Patch Changes
@@ -45,22 +45,31 @@ var ShareServiceClient = /*#__PURE__*/function () {
45
45
  }, {
46
46
  key: "share",
47
47
  value: function share(content, recipients, metadata, comment) {
48
- var options = {
49
- path: DEFAULT_SHARE_PATH,
50
- requestInit: {
51
- method: 'post',
52
- headers: {
53
- 'Content-Type': 'application/json; charset=UTF-8'
54
- },
55
- body: JSON.stringify({
56
- content: content,
57
- recipients: recipients,
58
- metadata: metadata,
59
- comment: comment
60
- })
48
+ return fetch("".concat(this.serviceConfig.url, "/").concat(DEFAULT_SHARE_PATH), {
49
+ method: 'post',
50
+ headers: {
51
+ 'Content-Type': 'application/json; charset=UTF-8'
52
+ },
53
+ credentials: 'include',
54
+ body: JSON.stringify({
55
+ content: content,
56
+ recipients: recipients,
57
+ metadata: metadata,
58
+ comment: comment
59
+ })
60
+ }).then(function (response) {
61
+ if (response.status === 204) {
62
+ return Promise.resolve();
63
+ } else if (response.ok) {
64
+ return response.json();
65
+ } else {
66
+ return Promise.reject({
67
+ code: response.status,
68
+ reason: response.statusText,
69
+ body: response.json()
70
+ });
61
71
  }
62
- };
63
- return _utilServiceSupport.utils.requestService(this.serviceConfig, options);
72
+ });
64
73
  }
65
74
  }]);
66
75
  return ShareServiceClient;
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.defaultShareContentState = exports.ShareDialogWithTriggerInternal = exports.ShareDialogWithTrigger = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
13
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
@@ -254,19 +256,40 @@ var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureComponent
254
256
  });
255
257
  showFlags(_this.getFlags());
256
258
  _ufoExperiences.shareSubmitExp.success();
257
- }).catch(function (err) {
258
- _this.setState({
259
- isSharing: false,
260
- shareError: {
261
- message: err.message
262
- }
263
- });
264
- (0, _ufoExperienceHelper.isValidFailedExperience)(_ufoExperiences.shareSubmitExp, err);
265
- });
259
+ }).catch( /*#__PURE__*/function () {
260
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(err) {
261
+ var shareError;
262
+ return _regenerator.default.wrap(function _callee$(_context) {
263
+ while (1) switch (_context.prev = _context.next) {
264
+ case 0:
265
+ _context.next = 2;
266
+ return _this.generateShareError(err).catch(function (errorGenFailed) {
267
+ return {
268
+ message: err.message || errorGenFailed.message || 'Unknown error',
269
+ retryable: true
270
+ };
271
+ });
272
+ case 2:
273
+ shareError = _context.sent;
274
+ _this.setState({
275
+ isSharing: false,
276
+ shareError: shareError
277
+ });
278
+ (0, _ufoExperienceHelper.isValidFailedExperience)(_ufoExperiences.shareSubmitExp, err);
279
+ case 5:
280
+ case "end":
281
+ return _context.stop();
282
+ }
283
+ }, _callee);
284
+ }));
285
+ return function (_x) {
286
+ return _ref.apply(this, arguments);
287
+ };
288
+ }());
266
289
  });
267
290
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleFormDismiss", function (data) {
268
- _this.setState(function (_ref) {
269
- var ignoreIntermediateState = _ref.ignoreIntermediateState;
291
+ _this.setState(function (_ref2) {
292
+ var ignoreIntermediateState = _ref2.ignoreIntermediateState;
270
293
  return ignoreIntermediateState ? null : {
271
294
  defaultValue: data
272
295
  };
@@ -370,6 +393,13 @@ var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureComponent
370
393
  isUsingSplitButton: false
371
394
  });
372
395
  });
396
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleOnUserSelectionChange", function (value) {
397
+ var onUserSelectionChange = _this.props.onUserSelectionChange;
398
+ _this.setState({
399
+ shareError: undefined
400
+ });
401
+ onUserSelectionChange === null || onUserSelectionChange === void 0 ? void 0 : onUserSelectionChange(value);
402
+ });
373
403
  return _this;
374
404
  }
375
405
  (0, _createClass2.default)(ShareDialogWithTriggerInternal, [{
@@ -386,6 +416,48 @@ var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureComponent
386
416
  this.handleDialogOpen();
387
417
  }
388
418
  }
419
+ }, {
420
+ key: "generateShareError",
421
+ value: function () {
422
+ var _generateShareError = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(err) {
423
+ var _errorBody$messagesDe;
424
+ var errorBody, firstErrorFromBody;
425
+ return _regenerator.default.wrap(function _callee2$(_context2) {
426
+ while (1) switch (_context2.prev = _context2.next) {
427
+ case 0:
428
+ if (!err.body) {
429
+ _context2.next = 6;
430
+ break;
431
+ }
432
+ _context2.next = 3;
433
+ return err.body;
434
+ case 3:
435
+ _context2.t0 = _context2.sent;
436
+ _context2.next = 7;
437
+ break;
438
+ case 6:
439
+ _context2.t0 = {};
440
+ case 7:
441
+ errorBody = _context2.t0;
442
+ // We'll only try and deal with the first error, sorry
443
+ firstErrorFromBody = (_errorBody$messagesDe = errorBody.messagesDetails) === null || _errorBody$messagesDe === void 0 ? void 0 : _errorBody$messagesDe[0];
444
+ return _context2.abrupt("return", {
445
+ message: (firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.message) || err.message,
446
+ errorCode: firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.errorCode,
447
+ helpUrl: firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.helpUrl,
448
+ retryable: (firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.errorCode) === undefined
449
+ });
450
+ case 10:
451
+ case "end":
452
+ return _context2.stop();
453
+ }
454
+ }, _callee2);
455
+ }));
456
+ function generateShareError(_x2) {
457
+ return _generateShareError.apply(this, arguments);
458
+ }
459
+ return generateShareError;
460
+ }()
389
461
  }, {
390
462
  key: "render",
391
463
  value: function render() {
@@ -414,7 +486,6 @@ var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureComponent
414
486
  cloudId = _this$props7.cloudId,
415
487
  orgId = _this$props7.orgId,
416
488
  shareFieldsFooter = _this$props7.shareFieldsFooter,
417
- onUserSelectionChange = _this$props7.onUserSelectionChange,
418
489
  dialogZIndex = _this$props7.dialogZIndex,
419
490
  isPublicLink = _this$props7.isPublicLink,
420
491
  tabIndex = _this$props7.tabIndex,
@@ -460,7 +531,7 @@ var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureComponent
460
531
  loggedInAccountId: loggedInAccountId,
461
532
  cloudId: cloudId,
462
533
  orgId: orgId,
463
- onUserSelectionChange: onUserSelectionChange,
534
+ onUserSelectionChange: _this2.handleOnUserSelectionChange,
464
535
  shareFieldsFooter: shareFieldsFooter,
465
536
  isPublicLink: isPublicLink,
466
537
  copyTooltipText: copyTooltipText,
@@ -97,7 +97,8 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
97
97
  helperMessage = _this$props.helperMessage,
98
98
  orgId = _this$props.orgId,
99
99
  isBrowseUsersDisabled = _this$props.isBrowseUsersDisabled,
100
- formatMessage = _this$props.intl.formatMessage;
100
+ formatMessage = _this$props.intl.formatMessage,
101
+ shareError = _this$props.shareError;
101
102
  return (0, _react2.jsx)(_analyticsNext.AnalyticsContext, {
102
103
  data: {
103
104
  source: _analytics.ANALYTICS_SOURCE
@@ -121,7 +122,8 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
121
122
  isPublicLink: isPublicLink,
122
123
  helperMessage: helperMessage,
123
124
  orgId: orgId,
124
- isBrowseUsersDisabled: isBrowseUsersDisabled
125
+ isBrowseUsersDisabled: isBrowseUsersDisabled,
126
+ shareError: shareError
125
127
  })), (0, _react2.jsx)("div", {
126
128
  css: formFieldStyles
127
129
  }, (0, _react2.jsx)(_CommentField.CommentField, {
@@ -147,13 +149,16 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
147
149
  isDisabled = _this$props2.isDisabled,
148
150
  isPublicLink = _this$props2.isPublicLink,
149
151
  integrationMode = _this$props2.integrationMode;
150
- var shouldShowWarning = shareError && !isSharing;
152
+ var isRetryableError = !!(shareError !== null && shareError !== void 0 && shareError.retryable);
153
+ var isNonRetryableError = shareError && !shareError.retryable;
154
+ var shouldShowWarning = isRetryableError && !isSharing;
151
155
  var buttonAppearance = !shouldShowWarning ? 'primary' : 'warning';
152
156
  var tabMode = integrationMode === 'tabs';
153
157
  var formPublicLabel = tabMode ? _i18n.messages.formSharePublic : _i18n.messages.formSendPublic;
154
158
  var formSendLabel = _i18n.messages.formShare;
155
159
  var sendLabel = isPublicLink ? formPublicLabel : formSendLabel;
156
- var buttonLabel = shareError ? _i18n.messages.formRetry : sendLabel;
160
+ var buttonLabel = isRetryableError ? _i18n.messages.formRetry : sendLabel;
161
+ var buttonDisabled = isDisabled || isNonRetryableError;
157
162
  var ButtonLabelWrapper = buttonAppearance === 'warning' ? 'strong' : _react.default.Fragment;
158
163
  return (0, _react2.jsx)("div", {
159
164
  css: submitButtonWrapperStyles
@@ -169,7 +174,7 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
169
174
  appearance: buttonAppearance,
170
175
  type: "submit",
171
176
  isLoading: isSharing,
172
- isDisabled: isDisabled
177
+ isDisabled: buttonDisabled
173
178
  }, (0, _react2.jsx)(ButtonLabelWrapper, null, submitButtonLabel || (0, _react2.jsx)(_reactIntlNext.FormattedMessage, buttonLabel))));
174
179
  });
175
180
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderMainTabTitle", function () {
@@ -103,7 +103,7 @@ var UserPickerFieldComponent = /*#__PURE__*/function (_React$Component) {
103
103
  return [];
104
104
  }
105
105
  });
106
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getInviteWarningMessage", function () {
106
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getHelperMessageOrDefault", function () {
107
107
  var _this$props = _this.props,
108
108
  product = _this$props.product,
109
109
  isPublicLink = _this$props.isPublicLink,
@@ -142,7 +142,8 @@ var UserPickerFieldComponent = /*#__PURE__*/function (_React$Component) {
142
142
  selectPortalRef = _this$props2.selectPortalRef,
143
143
  isPublicLink = _this$props2.isPublicLink,
144
144
  orgId = _this$props2.orgId,
145
- isBrowseUsersDisabled = _this$props2.isBrowseUsersDisabled;
145
+ isBrowseUsersDisabled = _this$props2.isBrowseUsersDisabled,
146
+ shareError = _this$props2.shareError;
146
147
  var smartUserPickerProps = enableSmartUserPicker && !isBrowseUsersDisabled ? {
147
148
  productKey: product,
148
149
  principalId: loggedInAccountId,
@@ -176,13 +177,19 @@ var UserPickerFieldComponent = /*#__PURE__*/function (_React$Component) {
176
177
  transform: this.handleUserPickerTransform
177
178
  }, function (_ref2) {
178
179
  var fieldProps = _ref2.fieldProps,
179
- error = _ref2.error,
180
- valid = _ref2.meta.valid;
181
- var inviteWarningMessage = _this2.getInviteWarningMessage();
180
+ fieldValidationError = _ref2.error,
181
+ fieldValid = _ref2.meta.valid;
182
+ var helperMessage = _this2.getHelperMessageOrDefault();
183
+ var addMoreMessage = shareError !== null && shareError !== void 0 && shareError.errorCode ? null : intl.formatMessage(_i18n.messages.userPickerAddMoreMessage);
184
+ var wasValidationOrShareError = !!fieldValidationError || !!shareError;
182
185
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(UserPickerComponent, (0, _extends2.default)({}, fieldProps, commonPickerProps, smartUserPickerProps, {
183
- addMoreMessage: intl.formatMessage(_i18n.messages.userPickerAddMoreMessage),
186
+ addMoreMessage: addMoreMessage,
184
187
  menuPortalTarget: menuPortalTarget
185
- })), inviteWarningMessage && /*#__PURE__*/_react.default.createElement(_form.HelperMessage, null, inviteWarningMessage), !valid && error === REQUIRED && /*#__PURE__*/_react.default.createElement(_form.ErrorMessage, null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, requiredMessage)));
188
+ })), helperMessage && !wasValidationOrShareError && /*#__PURE__*/_react.default.createElement(_form.HelperMessage, null, helperMessage), !fieldValid && fieldValidationError === REQUIRED && /*#__PURE__*/_react.default.createElement(_form.ErrorMessage, null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, requiredMessage)), shareError && shareError.errorCode && /*#__PURE__*/_react.default.createElement(_form.ErrorMessage, null, shareError.message, "\xA0", shareError.helpUrl && /*#__PURE__*/_react.default.createElement("a", {
189
+ target: "_blank",
190
+ href: shareError.helpUrl,
191
+ rel: "help"
192
+ }, "Learn why")));
186
193
  });
187
194
  }
188
195
  }]);
@@ -13,7 +13,7 @@ var buildAttributes = function buildAttributes() {
13
13
  var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
14
14
  return _objectSpread({
15
15
  packageName: "@atlaskit/share",
16
- packageVersion: "4.2.3"
16
+ packageVersion: "4.3.1"
17
17
  }, attributes);
18
18
  };
19
19
  var createEvent = function createEvent(eventType, source, action, actionSubject, actionSubjectId) {
@@ -44,7 +44,7 @@ var _default = {
44
44
  'fabric.elements.share.in.integration.button': 'Del i {integrationName}',
45
45
  'fabric.elements.share.main.tab.text.confluence': 'Del side',
46
46
  'fabric.elements.share.main.tab.text.jira': 'Del sag',
47
- 'fabric.elements.share.success.message': '{object, select,blogpost {Blogindlæg delt}board {Tavle delt}calendar {Kalender delt}draft {Udkast delt}filter {Filter delt}issue {Sag delt}summary {Oversigt delt}list {Liste delt}timeline {Tidslinje delt}form {Formular delt}media {Medier delt}page {Side delt}project {Projekt delt}pullrequest {Pullanmodning delt}question {Spørgsmål delt}report {Rapport delt}repository {Lager delt}request {Anmodning delt}roadmap {Køreplan delt}site {Websted delt}space {Område delt}other {Link delt}}',
47
+ 'fabric.elements.share.success.message': '{object, select,blogpost {Blogindlæg delt}board {Tavle delt}calendar {Kalender delt}draft {Udkast delt}filter {Filter delt}issue {Sag delt}summary {Oversigt delt}list {Liste delt}timeline {Tidslinje delt}form {Formular delt}media {Medier delt}page {Side delt}project {Projekt delt}pullrequest {Pull-anmodning delt}question {Spørgsmål delt}report {Rapport delt}repository {Lager delt}request {Anmodning delt}roadmap {Køreplan delt}site {Websted delt}space {Område delt}other {Link delt}}',
48
48
  'fabric.elements.share.to.integration.button': 'Del med {integrationName}',
49
49
  'fabric.elements.share.trigger.button.icon.label': 'Del ikon',
50
50
  'fabric.elements.share.trigger.button.invite.text': 'Invitér',
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ /* prettier-ignore */
7
8
  /**
8
9
  * NOTE:
9
10
  *
@@ -20,6 +21,7 @@ var _default = {
20
21
  'fabric.elements.share.form.comment.placeholder': '⁣⁢Add a message⁠⁡‌⁠⁠⁡‌‍⁡؜‌⁠⁣⁤',
21
22
  'fabric.elements.share.form.info.message.no.invite.confluence': '⁣⁢Recipients will see the name of the page and your message⁠‌‌؜⁠‌⁡؜⁠‌‌‌⁠‌⁣⁤',
22
23
  'fabric.elements.share.form.info.message.no.invite.jira': '⁣⁢Recipients will see the name of the issue and your message‍‍⁠؜⁡‍⁠⁣⁤',
24
+ 'fabric.elements.share.form.no-permissions': '⁣⁢You do not have the ability to share.؜⁠‍‍‍⁡⁠⁡⁣⁤',
23
25
  'fabric.elements.share.form.public.send': '⁣⁢Send public link⁠؜⁠‍⁠⁡؜‌⁡⁠⁣⁤',
24
26
  'fabric.elements.share.form.public.share': '⁣⁢Share public link⁠⁡‍‍‍‌⁠؜‍‌‍⁡⁡⁡؜⁣⁤',
25
27
  'fabric.elements.share.form.retry': '⁣⁢Retry‌‌⁡؜‌‌⁡⁡‌⁣⁤',
@@ -29,18 +31,20 @@ var _default = {
29
31
  'fabric.elements.share.form.user-picker.add-more': '⁣⁢Enter more⁠⁠⁡‍‌؜؜‌‍⁠؜‍⁠⁣⁤',
30
32
  'fabric.elements.share.form.user-picker.no-options.existingUserOnly': '⁣⁢We couldn’t find any results for "{inputValue}".⁡‌‌؜⁡⁡⁡⁠⁠‍‍⁣⁤',
31
33
  'fabric.elements.share.form.user-picker.no-options.generic': '⁣⁢We couldn’t find any results for "{inputValue}". Invite people by using an email address.⁡؜؜‍⁠؜⁠⁠⁡؜⁡⁠‍‍⁣⁤',
34
+ 'fabric.elements.share.form.user-picker.placeholder.emailOnly': '⁣⁢Enter email⁠⁠⁡⁡‍⁡‌⁣⁤',
32
35
  'fabric.elements.share.form.user-picker.placeholder.existingUserOnly': '⁣⁢Enter name or team⁡‍؜‍؜⁠‌⁡⁣⁤',
33
36
  'fabric.elements.share.form.user-picker.placeholder.generic': '⁣⁢Enter name, group, team or email⁡؜‌‍؜؜‍⁣⁤',
34
37
  'fabric.elements.share.form.user-picker.placeholder.jira': '⁣⁢Enter name, team or email‌‍⁠‌‌⁡⁠⁡؜‍؜⁣⁤',
35
38
  'fabric.elements.share.form.user-picker.placholder.generic.existingUserOnly': '⁣⁢Enter name, group or team‍‌‍⁠⁡‌⁡⁠‍⁡⁠⁠⁡⁣⁤',
36
39
  'fabric.elements.share.form.user-picker.validation.required': '⁣⁢Select at least one user, group, team or email.⁡⁡؜‌‍‌⁠؜⁣⁤',
40
+ 'fabric.elements.share.form.user-picker.validation.required.email-only': '⁣⁢Select at least one email.⁠‍‍⁠‌⁠⁡⁡‍⁠‌؜⁡‌⁣⁤',
37
41
  'fabric.elements.share.form.user-picker.validation.required.existingUserOnly': '⁣⁢Select at least one user, group or team.‍‌⁠⁡؜‌⁠⁠‌⁡‍‍⁣⁤',
38
42
  'fabric.elements.share.form.user-picker.validation.required.jira': '⁣⁢Select at least one user, team or email.؜⁠‍؜‍‍‌⁠⁠⁣⁤',
39
43
  'fabric.elements.share.form.user-picker.validation.required.jira.existingUserOnly': '⁣⁢Select at least one user or team.‌؜⁠‌‍⁡؜‌‍⁡‌⁠⁡⁣⁤',
40
44
  'fabric.elements.share.in.integration.button': '⁣⁢Share in {integrationName}⁠؜⁡⁡‌⁡؜‌‌‌⁣⁤',
41
45
  'fabric.elements.share.main.tab.text.confluence': '⁣⁢Share page‌‍‌‍⁠⁡؜‌⁣⁤',
42
46
  'fabric.elements.share.main.tab.text.jira': '⁣⁢Share issue؜‍‍؜‍⁡⁠⁠؜‍⁣⁤',
43
- 'fabric.elements.share.success.message': '{object, select, blogpost {⁣⁢Blog post shared⁡‌‍⁡⁠⁠⁡⁠⁡⁠⁣⁤} board {⁣⁢Board shared‍⁡‍؜⁠⁠‌⁣⁤} calendar {⁣⁢Calendar shared‌⁡⁠⁡⁡‍؜⁠⁠⁣⁤} draft {⁣⁢Draft shared⁠‌‍⁠‍‍‍؜‍⁠؜⁣⁤} filter {⁣⁢Filter shared‍؜؜‍؜⁡‍⁣⁤} issue {⁣⁢Issue shared⁡⁡‍⁡⁡‍⁠؜⁡⁠‌⁣⁤} media {⁣⁢Media shared؜‌‍‌⁠⁠⁣⁤} page {⁣⁢Page shared‍⁡‍‍‌؜‌؜‍⁣⁤} project {⁣⁢Project shared⁡‍⁠⁡‍؜⁡‍‌‌⁡⁣⁤} pullrequest {⁣⁢Pull Request shared‌⁡⁡؜⁠⁡؜‍⁠؜‌⁠؜⁣⁤} question {⁣⁢Question shared⁠‍⁠‍⁠؜‌‌⁣⁤} report {⁣⁢Report shared‍؜⁡⁠‍⁡⁠‍⁠‌⁣⁤} repository {⁣⁢Repository shared‍‌‌‌⁡⁡؜⁣⁤} request {⁣⁢Request shared⁡‌⁡⁡؜‍‌‌‌؜‌⁡⁣⁤} roadmap {⁣⁢Roadmap shared‍‍‌⁡⁡؜⁠⁡‌⁣⁤} site {⁣⁢Site shared؜⁡⁡؜⁡؜؜⁡؜⁠‍⁣⁤} space {⁣⁢Space shared⁡‍‍‍؜؜⁡⁡⁡⁣⁤} other {⁣⁢Link Shared‌‌‍‌‍⁡⁣⁤}}',
47
+ 'fabric.elements.share.success.message': '⁣⁢{object, select,blogpost {Blog post shared}board {Board shared}calendar {Calendar shared}draft {Draft shared}filter {Filter shared}issue {Issue shared}summary {Summary shared}list {List shared}timeline {Timeline shared}form {Form shared}media {Media shared}page {Page shared}project {Project shared}pullrequest {Pull Request shared}question {Question shared}report {Report shared}repository {Repository shared}request {Request shared}roadmap {Roadmap shared}site {Site shared}space {Space shared}other {Link Shared}}؜؜‍‍⁡‍‍⁠⁡⁡‌⁣⁤',
44
48
  'fabric.elements.share.to.integration.button': '⁣⁢Share to {integrationName}‌⁡‌⁠⁡⁡⁡⁠‍‍؜‌⁡⁣⁤',
45
49
  'fabric.elements.share.trigger.button.icon.label': '⁣⁢Share icon‌‍؜‍‍؜‌⁡⁣⁤',
46
50
  'fabric.elements.share.trigger.button.invite.text': '⁣⁢Invite⁡‍‍⁠؜⁡‌⁠؜؜؜؜⁣⁤',
@@ -44,7 +44,7 @@ var _default = {
44
44
  'fabric.elements.share.in.integration.button': 'Compartir en {integrationName}',
45
45
  'fabric.elements.share.main.tab.text.confluence': 'Compartir página',
46
46
  'fabric.elements.share.main.tab.text.jira': 'Compartir incidencia',
47
- 'fabric.elements.share.success.message': '{object, select,blogpost {Entrada de blog compartida}board {Tablero compartido}calendar {Calendario compartido}draft {Borrador compartido}filter {Filtro compartido}issue {Incidencia compartida}summary {Resumen compartido}list {Lista compartida}timeline {Cronograma compartido}form {Formulario compartido}media {Recursos multimedia compartidos}page {Página compartida}project {Proyecto compartido}pullrequest {Solicitud de incorporación de cambios compartida}question {Pregunta compartida}report {Informe compartido}repository {Repositorio compartido}request {Solicitud compartida}roadmap {Hoja de ruta compartida}site {Sitio compartido}space {Espacio compartido}other {Enlace compartido}}',
47
+ 'fabric.elements.share.success.message': '{object, select,blogpost {Entrada de blog compartida}board {Tablero compartido}calendar {Calendario compartido}draft {Borrador compartido}filter {Filtro compartido}issue {Incidencia compartida}summary {Resumen compartido}list {Lista compartida}timeline {Cronograma compartido}form {Formulario compartido}media {Medios compartidos}page {Página compartida}project {Proyecto compartido}pullrequest {Solicitud de incorporación de cambios compartida}question {Pregunta compartida}report {Informe compartido}repository {Repositorio compartido}request {Solicitud compartida}roadmap {Hoja de ruta compartida}site {Sitio compartido}space {Espacio compartido}other {Enlace compartido}}',
48
48
  'fabric.elements.share.to.integration.button': 'Compartir en {integrationName}',
49
49
  'fabric.elements.share.trigger.button.icon.label': 'Icono de compartir',
50
50
  'fabric.elements.share.trigger.button.invite.text': 'Invitar',
@@ -44,7 +44,7 @@ var _default = {
44
44
  'fabric.elements.share.in.integration.button': 'Delen in {integrationName}',
45
45
  'fabric.elements.share.main.tab.text.confluence': 'Pagina delen',
46
46
  'fabric.elements.share.main.tab.text.jira': 'Issue delen',
47
- 'fabric.elements.share.success.message': '{object, select,blogpost {blogpost gedeeld}board {bord gedeeld}calendar {agenda gedeeld}draft {concept gedeeld}filter {filter gedeeld}issue {issue gedeeld}summary {samenvatting gedeeld}list {lijst gedeeld}timeline {tijdlijn gedeeld}form {formulier gedeeld}media {media gedeeld}page {pagina gedeeld}project {project gedeeld}pullrequest {pull-request gedeeld}question {vraag gedeeld}report {rapport gedeeld}repository {repository gedeeld}request {aanvraag gedeeld}roadmap {roadmap gedeeld}site {site gedeeld}space {space gedeeld}other {link gedeeld}}',
47
+ 'fabric.elements.share.success.message': '{object, select,blogpost {blogpost gedeeld}board {bord gedeeld}calendar {agenda gedeeld}draft {concept gedeeld}filter {filter gedeeld}issue {issue gedeeld}summary {samenvatting gedeeld}list {lijst gedeeld}timeline {tijdlijn gedeeld}form {formulier gedeeld}media {media gedeeld}page {pagina gedeeld}project {project gedeeld}pullrequest {pull request gedeeld}question {vraag gedeeld}report {rapport gedeeld}repository {repository gedeeld}request {aanvraag gedeeld}roadmap {roadmap gedeeld}site {site gedeeld}space {space gedeeld}other {link gedeeld}}',
48
48
  'fabric.elements.share.to.integration.button': 'Delen met {integrationName}',
49
49
  'fabric.elements.share.trigger.button.icon.label': "Pictogram 'Delen'",
50
50
  'fabric.elements.share.trigger.button.invite.text': 'Uitnodigen',
@@ -44,7 +44,7 @@ var _default = {
44
44
  'fabric.elements.share.in.integration.button': 'Compartilhar em {integrationName}',
45
45
  'fabric.elements.share.main.tab.text.confluence': 'Compartilhar página',
46
46
  'fabric.elements.share.main.tab.text.jira': 'Compartilhar item',
47
- 'fabric.elements.share.success.message': '{object, select,blogpost {Blog compartilhado}board {Quadro compartilhado}calendar {Calendário compartilhado}draft {Rascunho compartilhado}filter {Filtro compartilhado}issue {Item compartilhado}summary {Resumo compartilhado}list {Lista compartilhada}timeline {Cronograma compartilhado}form {Formulário compartilhado}media {Mídia compartilhada}page {Página compartilhada}project {Projeto compartilhado}pullrequest {Pull request compartilhada}question {Pergunta compartilhada}report {Relatório compartilhado}repository {Repositório compartilhado}request {Solicitação compartilhada}roadmap {Roteiro compartilhado}site {Site compartilhado}space {Espaço compartilhado}other {Link compartilhado}}',
47
+ 'fabric.elements.share.success.message': '{object, select,blogpost {Blog compartilhado}board {Quadro compartilhado}calendar {Calendário compartilhado}draft {Rascunho compartilhado}filter {Filtro compartilhado}issue {Item compartilhado}summary {Resumo compartilhado}list {Lista compartilhada}timeline {Cronograma compartilhado}form {Formulário compartilhado}media {Mídia compartilhada}page {Página compartilhada}project {Projeto compartilhado}pullrequest {Solicitação pull compartilhada}question {Pergunta compartilhada}report {Relatório compartilhado}repository {Repositório compartilhado}request {Solicitação compartilhada}roadmap {Roteiro compartilhado}site {Site compartilhado}space {Espaço compartilhado}other {Link compartilhado}}',
48
48
  'fabric.elements.share.to.integration.button': 'Compartilhar em {integrationName}',
49
49
  'fabric.elements.share.trigger.button.icon.label': 'Ícone de compartilhamento',
50
50
  'fabric.elements.share.trigger.button.invite.text': 'Convidar',
@@ -44,7 +44,7 @@ var _default = {
44
44
  'fabric.elements.share.in.integration.button': '{integrationName} içinde paylaş',
45
45
  'fabric.elements.share.main.tab.text.confluence': 'Sayfayı paylaşın',
46
46
  'fabric.elements.share.main.tab.text.jira': 'Konuyu paylaşın',
47
- 'fabric.elements.share.success.message': '{object, select,blogpost {Blog gönderisi paylaşıldı}board {Pano paylaşıldı}calendar {Takvim paylaşıldı}draft {Taslak paylaşıldı}filter {Filtre paylaşıldı}issue {Konu paylaşıldı}summary {Özet paylaşıldı}list {Liste paylaşıldı}timeline {Zaman Çizelgesi paylaşıldı}form {Form paylaşıldı}media {Medya paylaşıldı}page {Sayfa paylaşıldı}project {Proje paylaşıldı}pullrequest {Çekme İsteği paylaşıldı}question {Soru paylaşıldı}report {Rapor paylaşıldı}repository {Depo paylaşıldı}request {Talep paylaşıldı}roadmap {Yol haritası paylaşıldı}site {Site paylaşıldı}space {Alan paylaşıldı}other {Bağlantı paylaşıldı}}',
47
+ 'fabric.elements.share.success.message': '{object, select,blogpost {Blog gönderisi paylaşıldı}board {Pano paylaşıldı}calendar {Takvim paylaşıldı}draft {Taslak paylaşıldı}filter {Filtre paylaşıldı}issue {Konu paylaşıldı}summary {Özet paylaşıldı}list {Liste paylaşıldı}timeline {Zaman Çizelgesi paylaşıldı}form {Form paylaşıldı}media {Medya paylaşıldı}page {Sayfa paylaşıldı}project {Proje paylaşıldı}pullrequest {Çekme İsteği paylaşıldı}question {Soru paylaşıldı}report {Rapor paylaşıldı}repository {Depo paylaşıldı}request {Talep paylaşıldı}roadmap {Yol haritası paylaşıldı}site {Site paylaşıldı}space {Alan paylaşıldı}other {Bağlantı Paylaşıldı}}',
48
48
  'fabric.elements.share.to.integration.button': '{integrationName} üzerinden paylaş',
49
49
  'fabric.elements.share.trigger.button.icon.label': 'Paylaşma simgesi',
50
50
  'fabric.elements.share.trigger.button.invite.text': 'Davet Et',
@@ -44,7 +44,7 @@ var _default = {
44
44
  'fabric.elements.share.in.integration.button': 'Поділитися в {integrationName}',
45
45
  'fabric.elements.share.main.tab.text.confluence': 'Поділитися сторінкою',
46
46
  'fabric.elements.share.main.tab.text.jira': 'Поділитися завданням',
47
- 'fabric.elements.share.success.message': '{object, select,blogpost {Надано доступ до допису в блозі}board {Надано доступ до дошки}calendar {Надано доступ до календаря}draft {Надано доступ до чернетки}filter {Надано доступ до фільтра}issue {Надано доступ до завдання}summary {Надано доступ до підсумку}list {Надано доступ до списку}timeline {Надано доступ до шкали}form {Надано доступ до форми}media {Надано доступ до медіафайлу}page {Надано доступ до сторінки}project {Надано доступ до проєкту}pullrequest {Надано доступ до запиту на внесення змін}question {Надано доступ до запитання}report {Надано доступ до звіту}repository {Надано доступ до репозиторію}request {Надано доступ до запиту}roadmap {Надано доступ до плану розробки}site {Надано доступ до сайту}space {Надано доступ до розділу}other {Надано доступ до посилання}}',
47
+ 'fabric.elements.share.success.message': '{object, select,blogpost {Надано доступ до допису у блозі}board {Надано доступ до дошки}calendar {Надано доступ до календаря}draft {Надано доступ до чернетки}filter {Надано доступ до фільтра}issue {Надано доступ до завдання}summary {Надано доступ до підсумку}list {Надано доступ до списку}timeline {Надано доступ до шкали}form {Надано доступ до форми}media {Надано доступ до медіафайлу}page {Надано доступ до сторінки}project {Надано доступ до проєкту}pullrequest {Надано доступ до запиту на внесення змін}question {Надано доступ до запитання}report {Надано доступ до звіту}repository {Надано доступ до репозиторію}request {Надано доступ до запиту}roadmap {Надано доступ до плану розробки}site {Надано доступ до сайту}space {Надано доступ до розділу}other {Надано доступ до посилання}}',
48
48
  'fabric.elements.share.to.integration.button': 'Надіслати в {integrationName}',
49
49
  'fabric.elements.share.trigger.button.icon.label': 'Надіслати піктограму',
50
50
  'fabric.elements.share.trigger.button.invite.text': 'Запросити',
package/dist/cjs/i18n.js CHANGED
@@ -170,7 +170,7 @@ var messages = (0, _reactIntlNext.defineMessages)({
170
170
  id: 'fabric.elements.share.success.message',
171
171
  defaultMessage: '{object, select,' + 'blogpost {Blog post shared}' + 'board {Board shared}' + 'calendar {Calendar shared}' + 'draft {Draft shared}' +
172
172
  // this is a placeholder for Invite to edit in Confluence
173
- 'filter {Filter shared}' + 'issue {Issue shared}' + 'summary {Summary shared}' + 'list {List shared}' + 'timeline {Timeline shared}' + 'form {Form shared}' + 'media {Media shared}' + 'page {Page shared}' + 'project {Project shared}' + 'pullrequest {Pull Request shared}' + 'question {Question shared}' + 'report {Report shared}' + 'repository {Repository shared}' + 'request {Request shared}' + 'roadmap {Roadmap shared}' + 'site {Site shared}' + 'space {Space shared}' + 'other {Link Shared}' + '}',
173
+ 'filter {Filter shared}' + 'issue {Issue shared}' + 'summary {Summary shared}' + 'list {List shared}' + 'timeline {Timeline shared}' + 'form {Form shared}' + 'media {Media shared}' + 'page {Page shared}' + 'project {Project shared}' + 'pullrequest {Pull Request shared}' + 'question {Question shared}' + 'report {Report shared}' + 'repository {Repository shared}' + 'request {Request shared}' + 'roadmap {Timeline shared}' + 'site {Site shared}' + 'space {Space shared}' + 'other {Link Shared}' + '}',
174
174
  description: 'Default text for share success message displayed in a flag'
175
175
  },
176
176
  shareToIntegrationButtonText: {
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/share",
3
- "version": "4.2.3"
3
+ "version": "4.3.1"
4
4
  }
@@ -26,21 +26,30 @@ export class ShareServiceClient {
26
26
  * To send a POST request to the share endpoint in Share service
27
27
  */
28
28
  share(content, recipients, metadata, comment) {
29
- const options = {
30
- path: DEFAULT_SHARE_PATH,
31
- requestInit: {
32
- method: 'post',
33
- headers: {
34
- 'Content-Type': 'application/json; charset=UTF-8'
35
- },
36
- body: JSON.stringify({
37
- content,
38
- recipients,
39
- metadata,
40
- comment
41
- })
29
+ return fetch(`${this.serviceConfig.url}/${DEFAULT_SHARE_PATH}`, {
30
+ method: 'post',
31
+ headers: {
32
+ 'Content-Type': 'application/json; charset=UTF-8'
33
+ },
34
+ credentials: 'include',
35
+ body: JSON.stringify({
36
+ content,
37
+ recipients,
38
+ metadata,
39
+ comment
40
+ })
41
+ }).then(response => {
42
+ if (response.status === 204) {
43
+ return Promise.resolve();
44
+ } else if (response.ok) {
45
+ return response.json();
46
+ } else {
47
+ return Promise.reject({
48
+ code: response.status,
49
+ reason: response.statusText,
50
+ body: response.json()
51
+ });
42
52
  }
43
- };
44
- return utils.requestService(this.serviceConfig, options);
53
+ });
45
54
  }
46
55
  }
@@ -249,12 +249,14 @@ export class ShareDialogWithTriggerInternal extends React.PureComponent {
249
249
  });
250
250
  showFlags(this.getFlags());
251
251
  shareSubmitExp.success();
252
- }).catch(err => {
252
+ }).catch(async err => {
253
+ const shareError = await this.generateShareError(err).catch(errorGenFailed => ({
254
+ message: err.message || errorGenFailed.message || 'Unknown error',
255
+ retryable: true
256
+ }));
253
257
  this.setState({
254
258
  isSharing: false,
255
- shareError: {
256
- message: err.message
257
- }
259
+ shareError
258
260
  });
259
261
  isValidFailedExperience(shareSubmitExp, err);
260
262
  });
@@ -369,6 +371,15 @@ export class ShareDialogWithTriggerInternal extends React.PureComponent {
369
371
  isUsingSplitButton: false
370
372
  });
371
373
  });
374
+ _defineProperty(this, "handleOnUserSelectionChange", value => {
375
+ const {
376
+ onUserSelectionChange
377
+ } = this.props;
378
+ this.setState({
379
+ shareError: undefined
380
+ });
381
+ onUserSelectionChange === null || onUserSelectionChange === void 0 ? void 0 : onUserSelectionChange(value);
382
+ });
372
383
  }
373
384
  componentDidMount() {
374
385
  if (this.props.isAutoOpenDialog) {
@@ -380,6 +391,19 @@ export class ShareDialogWithTriggerInternal extends React.PureComponent {
380
391
  this.handleDialogOpen();
381
392
  }
382
393
  }
394
+ async generateShareError(err) {
395
+ var _errorBody$messagesDe;
396
+ const errorBody = err.body ? await err.body : {};
397
+
398
+ // We'll only try and deal with the first error, sorry
399
+ const firstErrorFromBody = (_errorBody$messagesDe = errorBody.messagesDetails) === null || _errorBody$messagesDe === void 0 ? void 0 : _errorBody$messagesDe[0];
400
+ return {
401
+ message: (firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.message) || err.message,
402
+ errorCode: firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.errorCode,
403
+ helpUrl: firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.helpUrl,
404
+ retryable: (firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.errorCode) === undefined
405
+ };
406
+ }
383
407
  render() {
384
408
  const {
385
409
  isDialogOpen,
@@ -406,7 +430,6 @@ export class ShareDialogWithTriggerInternal extends React.PureComponent {
406
430
  cloudId,
407
431
  orgId,
408
432
  shareFieldsFooter,
409
- onUserSelectionChange,
410
433
  dialogZIndex,
411
434
  isPublicLink,
412
435
  tabIndex,
@@ -452,7 +475,7 @@ export class ShareDialogWithTriggerInternal extends React.PureComponent {
452
475
  loggedInAccountId: loggedInAccountId,
453
476
  cloudId: cloudId,
454
477
  orgId: orgId,
455
- onUserSelectionChange: onUserSelectionChange,
478
+ onUserSelectionChange: this.handleOnUserSelectionChange,
456
479
  shareFieldsFooter: shareFieldsFooter,
457
480
  isPublicLink: isPublicLink,
458
481
  copyTooltipText: copyTooltipText,
@@ -95,7 +95,8 @@ class InternalForm extends React.PureComponent {
95
95
  isBrowseUsersDisabled,
96
96
  intl: {
97
97
  formatMessage
98
- }
98
+ },
99
+ shareError
99
100
  } = this.props;
100
101
  return jsx(AnalyticsContext, {
101
102
  data: {
@@ -120,7 +121,8 @@ class InternalForm extends React.PureComponent {
120
121
  isPublicLink: isPublicLink,
121
122
  helperMessage: helperMessage,
122
123
  orgId: orgId,
123
- isBrowseUsersDisabled: isBrowseUsersDisabled
124
+ isBrowseUsersDisabled: isBrowseUsersDisabled,
125
+ shareError: shareError
124
126
  })), jsx("div", {
125
127
  css: formFieldStyles
126
128
  }, jsx(CommentField, {
@@ -149,13 +151,16 @@ class InternalForm extends React.PureComponent {
149
151
  isPublicLink,
150
152
  integrationMode
151
153
  } = this.props;
152
- const shouldShowWarning = shareError && !isSharing;
154
+ const isRetryableError = !!(shareError !== null && shareError !== void 0 && shareError.retryable);
155
+ const isNonRetryableError = shareError && !shareError.retryable;
156
+ const shouldShowWarning = isRetryableError && !isSharing;
153
157
  const buttonAppearance = !shouldShowWarning ? 'primary' : 'warning';
154
158
  const tabMode = integrationMode === 'tabs';
155
159
  const formPublicLabel = tabMode ? messages.formSharePublic : messages.formSendPublic;
156
160
  const formSendLabel = messages.formShare;
157
161
  const sendLabel = isPublicLink ? formPublicLabel : formSendLabel;
158
- const buttonLabel = shareError ? messages.formRetry : sendLabel;
162
+ const buttonLabel = isRetryableError ? messages.formRetry : sendLabel;
163
+ const buttonDisabled = isDisabled || isNonRetryableError;
159
164
  const ButtonLabelWrapper = buttonAppearance === 'warning' ? 'strong' : React.Fragment;
160
165
  return jsx("div", {
161
166
  css: submitButtonWrapperStyles
@@ -171,7 +176,7 @@ class InternalForm extends React.PureComponent {
171
176
  appearance: buttonAppearance,
172
177
  type: "submit",
173
178
  isLoading: isSharing,
174
- isDisabled: isDisabled
179
+ isDisabled: buttonDisabled
175
180
  }, jsx(ButtonLabelWrapper, null, submitButtonLabel || jsx(FormattedMessage, buttonLabel))));
176
181
  });
177
182
  _defineProperty(this, "renderMainTabTitle", () => {