@atlaskit/share 4.2.2 → 4.3.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 (60) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/clients/ShareServiceClient.js +24 -15
  3. package/dist/cjs/components/LazyShareForm/LazyShareForm.js +3 -1
  4. package/dist/cjs/components/ShareDialogWithTrigger.js +84 -13
  5. package/dist/cjs/components/ShareForm.js +11 -7
  6. package/dist/cjs/components/ShareFormWrapper/styled.js +2 -3
  7. package/dist/cjs/components/ShareHeader.js +1 -2
  8. package/dist/cjs/components/UserPickerField.js +14 -7
  9. package/dist/cjs/components/analytics/analytics.js +1 -1
  10. package/dist/cjs/i18n/da.js +1 -1
  11. package/dist/cjs/i18n/en_ZZ.js +5 -1
  12. package/dist/cjs/i18n/es.js +1 -1
  13. package/dist/cjs/i18n/nl.js +1 -1
  14. package/dist/cjs/i18n/pt_BR.js +1 -1
  15. package/dist/cjs/i18n/tr.js +1 -1
  16. package/dist/cjs/i18n/uk.js +1 -1
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/clients/ShareServiceClient.js +24 -15
  19. package/dist/es2019/components/LazyShareForm/LazyShareForm.js +2 -1
  20. package/dist/es2019/components/ShareDialogWithTrigger.js +29 -6
  21. package/dist/es2019/components/ShareForm.js +11 -7
  22. package/dist/es2019/components/ShareFormWrapper/styled.js +2 -3
  23. package/dist/es2019/components/ShareHeader.js +3 -4
  24. package/dist/es2019/components/UserPickerField.js +14 -7
  25. package/dist/es2019/components/analytics/analytics.js +1 -1
  26. package/dist/es2019/i18n/da.js +1 -1
  27. package/dist/es2019/i18n/en_ZZ.js +5 -1
  28. package/dist/es2019/i18n/es.js +1 -1
  29. package/dist/es2019/i18n/nl.js +1 -1
  30. package/dist/es2019/i18n/pt_BR.js +1 -1
  31. package/dist/es2019/i18n/tr.js +1 -1
  32. package/dist/es2019/i18n/uk.js +1 -1
  33. package/dist/es2019/version.json +1 -1
  34. package/dist/esm/clients/ShareServiceClient.js +24 -15
  35. package/dist/esm/components/LazyShareForm/LazyShareForm.js +2 -1
  36. package/dist/esm/components/ShareDialogWithTrigger.js +84 -13
  37. package/dist/esm/components/ShareForm.js +11 -7
  38. package/dist/esm/components/ShareFormWrapper/styled.js +2 -3
  39. package/dist/esm/components/ShareHeader.js +1 -2
  40. package/dist/esm/components/UserPickerField.js +14 -7
  41. package/dist/esm/components/analytics/analytics.js +1 -1
  42. package/dist/esm/i18n/da.js +1 -1
  43. package/dist/esm/i18n/en_ZZ.js +5 -1
  44. package/dist/esm/i18n/es.js +1 -1
  45. package/dist/esm/i18n/nl.js +1 -1
  46. package/dist/esm/i18n/pt_BR.js +1 -1
  47. package/dist/esm/i18n/tr.js +1 -1
  48. package/dist/esm/i18n/uk.js +1 -1
  49. package/dist/esm/version.json +1 -1
  50. package/dist/types/components/ShareDialogWithTrigger.d.ts +3 -0
  51. package/dist/types/components/UserPickerField.d.ts +3 -2
  52. package/dist/types/i18n/en_ZZ.d.ts +3 -0
  53. package/dist/types/types/ShareContentState.d.ts +3 -0
  54. package/dist/types-ts4.5/components/ShareDialogWithTrigger.d.ts +3 -0
  55. package/dist/types-ts4.5/components/UserPickerField.d.ts +3 -2
  56. package/dist/types-ts4.5/i18n/en_ZZ.d.ts +3 -0
  57. package/dist/types-ts4.5/types/ShareContentState.d.ts +3 -0
  58. package/package.json +8 -6
  59. package/report.api.md +3 -0
  60. package/tmp/api-report-tmp.d.ts +3 -0
@@ -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,
@@ -10,7 +10,6 @@ import Form from '@atlaskit/form';
10
10
  import ErrorIcon from '@atlaskit/icon/glyph/error';
11
11
  import Tabs, { Tab, TabList, TabPanel } from '@atlaskit/tabs';
12
12
  import { R400 } from '@atlaskit/theme/colors';
13
- import { gridSize } from '@atlaskit/theme/constants';
14
13
  import Tooltip from '@atlaskit/tooltip';
15
14
  import { messages } from '../i18n';
16
15
  import { TabType } from '../types';
@@ -34,7 +33,7 @@ const centerAlignedIconWrapperStyles = css`
34
33
  }
35
34
  `;
36
35
  export const formWrapperStyles = css`
37
- margin-top: ${gridSize()}px;
36
+ margin-top: ${"var(--ds-space-100, 8px)"};
38
37
  width: 100%;
39
38
 
40
39
  /* jira has a class override font settings on h1 in gh-custom-field-pickers.css */
@@ -96,7 +95,8 @@ class InternalForm extends React.PureComponent {
96
95
  isBrowseUsersDisabled,
97
96
  intl: {
98
97
  formatMessage
99
- }
98
+ },
99
+ shareError
100
100
  } = this.props;
101
101
  return jsx(AnalyticsContext, {
102
102
  data: {
@@ -121,7 +121,8 @@ class InternalForm extends React.PureComponent {
121
121
  isPublicLink: isPublicLink,
122
122
  helperMessage: helperMessage,
123
123
  orgId: orgId,
124
- isBrowseUsersDisabled: isBrowseUsersDisabled
124
+ isBrowseUsersDisabled: isBrowseUsersDisabled,
125
+ shareError: shareError
125
126
  })), jsx("div", {
126
127
  css: formFieldStyles
127
128
  }, jsx(CommentField, {
@@ -150,13 +151,16 @@ class InternalForm extends React.PureComponent {
150
151
  isPublicLink,
151
152
  integrationMode
152
153
  } = this.props;
153
- 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;
154
157
  const buttonAppearance = !shouldShowWarning ? 'primary' : 'warning';
155
158
  const tabMode = integrationMode === 'tabs';
156
159
  const formPublicLabel = tabMode ? messages.formSharePublic : messages.formSendPublic;
157
160
  const formSendLabel = messages.formShare;
158
161
  const sendLabel = isPublicLink ? formPublicLabel : formSendLabel;
159
- const buttonLabel = shareError ? messages.formRetry : sendLabel;
162
+ const buttonLabel = isRetryableError ? messages.formRetry : sendLabel;
163
+ const buttonDisabled = isDisabled || isNonRetryableError;
160
164
  const ButtonLabelWrapper = buttonAppearance === 'warning' ? 'strong' : React.Fragment;
161
165
  return jsx("div", {
162
166
  css: submitButtonWrapperStyles
@@ -172,7 +176,7 @@ class InternalForm extends React.PureComponent {
172
176
  appearance: buttonAppearance,
173
177
  type: "submit",
174
178
  isLoading: isSharing,
175
- isDisabled: isDisabled
179
+ isDisabled: buttonDisabled
176
180
  }, jsx(ButtonLabelWrapper, null, submitButtonLabel || jsx(FormattedMessage, buttonLabel))));
177
181
  });
178
182
  _defineProperty(this, "renderMainTabTitle", () => {
@@ -2,12 +2,11 @@
2
2
 
3
3
  import React from 'react';
4
4
  import { jsx } from '@emotion/react';
5
- import { gridSize } from '@atlaskit/theme/constants';
6
5
  export const InlineDialogFormWrapper = ({
7
6
  children
8
7
  }) => jsx("div", {
9
8
  css: {
10
- width: `${gridSize() * 44}px`
9
+ width: `${8 * 44}px`
11
10
  }
12
11
  }, children);
13
12
 
@@ -21,6 +20,6 @@ export const InlineDialogContentWrapper = ({
21
20
  children
22
21
  }) => jsx("div", {
23
22
  css: {
24
- padding: `${gridSize() * 2}px ${gridSize() * 3}px`
23
+ padding: `${"var(--ds-space-200, 16px)"} ${"var(--ds-space-300, 24px)"}`
25
24
  }
26
25
  }, children);
@@ -2,7 +2,6 @@
2
2
  import React from 'react';
3
3
  import { css, jsx, useTheme } from '@emotion/react';
4
4
  import { FormattedMessage } from 'react-intl-next';
5
- import { gridSize } from '@atlaskit/theme/constants';
6
5
  import { h500 } from '@atlaskit/theme/typography';
7
6
  import { messages } from '../i18n';
8
7
  const headerWrapperStyles = css`
@@ -11,9 +10,9 @@ const headerWrapperStyles = css`
11
10
  `;
12
11
  export const getFormHeaderTitleStyles = theme => css`
13
12
  ${h500(theme)}
14
- line-height: ${gridSize() * 4}px;
15
- margin-right: ${gridSize() * 4}px;
16
- margin-top: ${gridSize() * 4}px;
13
+ line-height: ${"var(--ds-font-lineHeight-500, 32px)"};
14
+ margin-right: ${"var(--ds-space-400, 32px)"};
15
+ margin-top: ${"var(--ds-space-400, 32px)"};
17
16
  overflow: hidden;
18
17
  text-overflow: ellipsis;
19
18
  white-space: nowrap;
@@ -73,7 +73,7 @@ export class UserPickerFieldComponent extends React.Component {
73
73
  return [];
74
74
  }
75
75
  });
76
- _defineProperty(this, "getInviteWarningMessage", () => {
76
+ _defineProperty(this, "getHelperMessageOrDefault", () => {
77
77
  const {
78
78
  product,
79
79
  isPublicLink,
@@ -111,7 +111,8 @@ export class UserPickerFieldComponent extends React.Component {
111
111
  selectPortalRef,
112
112
  isPublicLink,
113
113
  orgId,
114
- isBrowseUsersDisabled
114
+ isBrowseUsersDisabled,
115
+ shareError
115
116
  } = this.props;
116
117
  const smartUserPickerProps = enableSmartUserPicker && !isBrowseUsersDisabled ? {
117
118
  productKey: product,
@@ -146,16 +147,22 @@ export class UserPickerFieldComponent extends React.Component {
146
147
  transform: this.handleUserPickerTransform
147
148
  }, ({
148
149
  fieldProps,
149
- error,
150
+ error: fieldValidationError,
150
151
  meta: {
151
- valid
152
+ valid: fieldValid
152
153
  }
153
154
  }) => {
154
- const inviteWarningMessage = this.getInviteWarningMessage();
155
+ const helperMessage = this.getHelperMessageOrDefault();
156
+ const addMoreMessage = shareError !== null && shareError !== void 0 && shareError.errorCode ? null : intl.formatMessage(messages.userPickerAddMoreMessage);
157
+ const wasValidationOrShareError = !!fieldValidationError || !!shareError;
155
158
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UserPickerComponent, _extends({}, fieldProps, commonPickerProps, smartUserPickerProps, {
156
- addMoreMessage: intl.formatMessage(messages.userPickerAddMoreMessage),
159
+ addMoreMessage: addMoreMessage,
157
160
  menuPortalTarget: menuPortalTarget
158
- })), inviteWarningMessage && /*#__PURE__*/React.createElement(HelperMessage, null, inviteWarningMessage), !valid && error === REQUIRED && /*#__PURE__*/React.createElement(ErrorMessage, null, /*#__PURE__*/React.createElement(FormattedMessage, requiredMessage)));
161
+ })), helperMessage && !wasValidationOrShareError && /*#__PURE__*/React.createElement(HelperMessage, null, helperMessage), !fieldValid && fieldValidationError === REQUIRED && /*#__PURE__*/React.createElement(ErrorMessage, null, /*#__PURE__*/React.createElement(FormattedMessage, requiredMessage)), shareError && shareError.errorCode && /*#__PURE__*/React.createElement(ErrorMessage, null, shareError.message, "\xA0", shareError.helpUrl && /*#__PURE__*/React.createElement("a", {
162
+ target: "_blank",
163
+ href: shareError.helpUrl,
164
+ rel: "help"
165
+ }, "Learn why")));
159
166
  });
160
167
  }
161
168
  }
@@ -1,7 +1,7 @@
1
1
  import { isEmail, isTeam, isUser } from '@atlaskit/smart-user-picker';
2
2
  const buildAttributes = (attributes = {}) => ({
3
3
  packageName: "@atlaskit/share",
4
- packageVersion: "4.2.2",
4
+ packageVersion: "4.3.0",
5
5
  ...attributes
6
6
  });
7
7
  const createEvent = (eventType, source, action, actionSubject, actionSubjectId, attributes = {}) => ({
@@ -38,7 +38,7 @@ export default {
38
38
  'fabric.elements.share.in.integration.button': 'Del i {integrationName}',
39
39
  'fabric.elements.share.main.tab.text.confluence': 'Del side',
40
40
  'fabric.elements.share.main.tab.text.jira': 'Del sag',
41
- '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}}',
41
+ '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}}',
42
42
  'fabric.elements.share.to.integration.button': 'Del med {integrationName}',
43
43
  'fabric.elements.share.trigger.button.icon.label': 'Del ikon',
44
44
  'fabric.elements.share.trigger.button.invite.text': 'Invitér',
@@ -1,3 +1,4 @@
1
+ /* prettier-ignore */
1
2
  /**
2
3
  * NOTE:
3
4
  *
@@ -14,6 +15,7 @@ export default {
14
15
  'fabric.elements.share.form.comment.placeholder': '⁣⁢Add a message⁠⁡‌⁠⁠⁡‌‍⁡؜‌⁠⁣⁤',
15
16
  'fabric.elements.share.form.info.message.no.invite.confluence': '⁣⁢Recipients will see the name of the page and your message⁠‌‌؜⁠‌⁡؜⁠‌‌‌⁠‌⁣⁤',
16
17
  'fabric.elements.share.form.info.message.no.invite.jira': '⁣⁢Recipients will see the name of the issue and your message‍‍⁠؜⁡‍⁠⁣⁤',
18
+ 'fabric.elements.share.form.no-permissions': '⁣⁢You do not have the ability to share.؜⁠‍‍‍⁡⁠⁡⁣⁤',
17
19
  'fabric.elements.share.form.public.send': '⁣⁢Send public link⁠؜⁠‍⁠⁡؜‌⁡⁠⁣⁤',
18
20
  'fabric.elements.share.form.public.share': '⁣⁢Share public link⁠⁡‍‍‍‌⁠؜‍‌‍⁡⁡⁡؜⁣⁤',
19
21
  'fabric.elements.share.form.retry': '⁣⁢Retry‌‌⁡؜‌‌⁡⁡‌⁣⁤',
@@ -23,18 +25,20 @@ export default {
23
25
  'fabric.elements.share.form.user-picker.add-more': '⁣⁢Enter more⁠⁠⁡‍‌؜؜‌‍⁠؜‍⁠⁣⁤',
24
26
  'fabric.elements.share.form.user-picker.no-options.existingUserOnly': '⁣⁢We couldn’t find any results for "{inputValue}".⁡‌‌؜⁡⁡⁡⁠⁠‍‍⁣⁤',
25
27
  'fabric.elements.share.form.user-picker.no-options.generic': '⁣⁢We couldn’t find any results for "{inputValue}". Invite people by using an email address.⁡؜؜‍⁠؜⁠⁠⁡؜⁡⁠‍‍⁣⁤',
28
+ 'fabric.elements.share.form.user-picker.placeholder.emailOnly': '⁣⁢Enter email⁠⁠⁡⁡‍⁡‌⁣⁤',
26
29
  'fabric.elements.share.form.user-picker.placeholder.existingUserOnly': '⁣⁢Enter name or team⁡‍؜‍؜⁠‌⁡⁣⁤',
27
30
  'fabric.elements.share.form.user-picker.placeholder.generic': '⁣⁢Enter name, group, team or email⁡؜‌‍؜؜‍⁣⁤',
28
31
  'fabric.elements.share.form.user-picker.placeholder.jira': '⁣⁢Enter name, team or email‌‍⁠‌‌⁡⁠⁡؜‍؜⁣⁤',
29
32
  'fabric.elements.share.form.user-picker.placholder.generic.existingUserOnly': '⁣⁢Enter name, group or team‍‌‍⁠⁡‌⁡⁠‍⁡⁠⁠⁡⁣⁤',
30
33
  'fabric.elements.share.form.user-picker.validation.required': '⁣⁢Select at least one user, group, team or email.⁡⁡؜‌‍‌⁠؜⁣⁤',
34
+ 'fabric.elements.share.form.user-picker.validation.required.email-only': '⁣⁢Select at least one email.⁠‍‍⁠‌⁠⁡⁡‍⁠‌؜⁡‌⁣⁤',
31
35
  'fabric.elements.share.form.user-picker.validation.required.existingUserOnly': '⁣⁢Select at least one user, group or team.‍‌⁠⁡؜‌⁠⁠‌⁡‍‍⁣⁤',
32
36
  'fabric.elements.share.form.user-picker.validation.required.jira': '⁣⁢Select at least one user, team or email.؜⁠‍؜‍‍‌⁠⁠⁣⁤',
33
37
  'fabric.elements.share.form.user-picker.validation.required.jira.existingUserOnly': '⁣⁢Select at least one user or team.‌؜⁠‌‍⁡؜‌‍⁡‌⁠⁡⁣⁤',
34
38
  'fabric.elements.share.in.integration.button': '⁣⁢Share in {integrationName}⁠؜⁡⁡‌⁡؜‌‌‌⁣⁤',
35
39
  'fabric.elements.share.main.tab.text.confluence': '⁣⁢Share page‌‍‌‍⁠⁡؜‌⁣⁤',
36
40
  'fabric.elements.share.main.tab.text.jira': '⁣⁢Share issue؜‍‍؜‍⁡⁠⁠؜‍⁣⁤',
37
- '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‌‌‍‌‍⁡⁣⁤}}',
41
+ '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}}؜؜‍‍⁡‍‍⁠⁡⁡‌⁣⁤',
38
42
  'fabric.elements.share.to.integration.button': '⁣⁢Share to {integrationName}‌⁡‌⁠⁡⁡⁡⁠‍‍؜‌⁡⁣⁤',
39
43
  'fabric.elements.share.trigger.button.icon.label': '⁣⁢Share icon‌‍؜‍‍؜‌⁡⁣⁤',
40
44
  'fabric.elements.share.trigger.button.invite.text': '⁣⁢Invite⁡‍‍⁠؜⁡‌⁠؜؜؜؜⁣⁤',
@@ -38,7 +38,7 @@ export default {
38
38
  'fabric.elements.share.in.integration.button': 'Compartir en {integrationName}',
39
39
  'fabric.elements.share.main.tab.text.confluence': 'Compartir página',
40
40
  'fabric.elements.share.main.tab.text.jira': 'Compartir incidencia',
41
- '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}}',
41
+ '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}}',
42
42
  'fabric.elements.share.to.integration.button': 'Compartir en {integrationName}',
43
43
  'fabric.elements.share.trigger.button.icon.label': 'Icono de compartir',
44
44
  'fabric.elements.share.trigger.button.invite.text': 'Invitar',
@@ -38,7 +38,7 @@ export default {
38
38
  'fabric.elements.share.in.integration.button': 'Delen in {integrationName}',
39
39
  'fabric.elements.share.main.tab.text.confluence': 'Pagina delen',
40
40
  'fabric.elements.share.main.tab.text.jira': 'Issue delen',
41
- '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}}',
41
+ '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}}',
42
42
  'fabric.elements.share.to.integration.button': 'Delen met {integrationName}',
43
43
  'fabric.elements.share.trigger.button.icon.label': "Pictogram 'Delen'",
44
44
  'fabric.elements.share.trigger.button.invite.text': 'Uitnodigen',
@@ -38,7 +38,7 @@ export default {
38
38
  'fabric.elements.share.in.integration.button': 'Compartilhar em {integrationName}',
39
39
  'fabric.elements.share.main.tab.text.confluence': 'Compartilhar página',
40
40
  'fabric.elements.share.main.tab.text.jira': 'Compartilhar item',
41
- '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}}',
41
+ '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}}',
42
42
  'fabric.elements.share.to.integration.button': 'Compartilhar em {integrationName}',
43
43
  'fabric.elements.share.trigger.button.icon.label': 'Ícone de compartilhamento',
44
44
  'fabric.elements.share.trigger.button.invite.text': 'Convidar',
@@ -38,7 +38,7 @@ export default {
38
38
  'fabric.elements.share.in.integration.button': '{integrationName} içinde paylaş',
39
39
  'fabric.elements.share.main.tab.text.confluence': 'Sayfayı paylaşın',
40
40
  'fabric.elements.share.main.tab.text.jira': 'Konuyu paylaşın',
41
- '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ı}}',
41
+ '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ı}}',
42
42
  'fabric.elements.share.to.integration.button': '{integrationName} üzerinden paylaş',
43
43
  'fabric.elements.share.trigger.button.icon.label': 'Paylaşma simgesi',
44
44
  'fabric.elements.share.trigger.button.invite.text': 'Davet Et',
@@ -38,7 +38,7 @@ export default {
38
38
  'fabric.elements.share.in.integration.button': 'Поділитися в {integrationName}',
39
39
  'fabric.elements.share.main.tab.text.confluence': 'Поділитися сторінкою',
40
40
  'fabric.elements.share.main.tab.text.jira': 'Поділитися завданням',
41
- '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 {Надано доступ до посилання}}',
41
+ '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 {Надано доступ до посилання}}',
42
42
  'fabric.elements.share.to.integration.button': 'Надіслати в {integrationName}',
43
43
  'fabric.elements.share.trigger.button.icon.label': 'Надіслати піктограму',
44
44
  'fabric.elements.share.trigger.button.invite.text': 'Запросити',
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/share",
3
- "version": "4.2.2"
3
+ "version": "4.3.0"
4
4
  }
@@ -35,22 +35,31 @@ export var ShareServiceClient = /*#__PURE__*/function () {
35
35
  }, {
36
36
  key: "share",
37
37
  value: function share(content, recipients, metadata, comment) {
38
- var options = {
39
- path: DEFAULT_SHARE_PATH,
40
- requestInit: {
41
- method: 'post',
42
- headers: {
43
- 'Content-Type': 'application/json; charset=UTF-8'
44
- },
45
- body: JSON.stringify({
46
- content: content,
47
- recipients: recipients,
48
- metadata: metadata,
49
- comment: comment
50
- })
38
+ return fetch("".concat(this.serviceConfig.url, "/").concat(DEFAULT_SHARE_PATH), {
39
+ method: 'post',
40
+ headers: {
41
+ 'Content-Type': 'application/json; charset=UTF-8'
42
+ },
43
+ credentials: 'include',
44
+ body: JSON.stringify({
45
+ content: content,
46
+ recipients: recipients,
47
+ metadata: metadata,
48
+ comment: comment
49
+ })
50
+ }).then(function (response) {
51
+ if (response.status === 204) {
52
+ return Promise.resolve();
53
+ } else if (response.ok) {
54
+ return response.json();
55
+ } else {
56
+ return Promise.reject({
57
+ code: response.status,
58
+ reason: response.statusText,
59
+ body: response.json()
60
+ });
51
61
  }
52
- };
53
- return utils.requestService(this.serviceConfig, options);
62
+ });
54
63
  }
55
64
  }]);
56
65
  return ShareServiceClient;
@@ -4,6 +4,7 @@ import React from 'react';
4
4
  import { jsx } from '@emotion/react';
5
5
  import { FormattedMessage } from 'react-intl-next';
6
6
  import { AnalyticsContext } from '@atlaskit/analytics-next';
7
+ // eslint-disable-next-line @atlaskit/design-system/no-deprecated-imports
7
8
  import { gridSize } from '@atlaskit/theme/constants';
8
9
  import { messages } from '../../i18n';
9
10
  import { INTEGRATION_MODAL_SOURCE } from '../analytics/analytics';
@@ -56,7 +57,7 @@ function LazyShareForm(props) {
56
57
  }
57
58
  }, bottomMessage) : null, customFooter && selectedIntegration === null && jsx("div", {
58
59
  css: {
59
- margin: "0 ".concat(-gridSize() * 3, "px ").concat(-gridSize() * 2, "px ").concat(-gridSize() * 3, "px")
60
+ margin: "0 calc(-1 * ".concat("var(--ds-space-300, 24px)", ") calc(-1 * ", "var(--ds-space-200, 16px)", ") calc(-1 * ", "var(--ds-space-300, 24px)", ")")
60
61
  }
61
62
  }, customFooter));
62
63
  React.useEffect(function () {
@@ -1,4 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
4
  import _createClass from "@babel/runtime/helpers/createClass";
4
5
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
@@ -8,6 +9,7 @@ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
8
9
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
9
10
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
10
11
  var _templateObject;
12
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
11
13
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
14
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13
15
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
@@ -249,19 +251,40 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
249
251
  });
250
252
  showFlags(_this.getFlags());
251
253
  shareSubmitExp.success();
252
- }).catch(function (err) {
253
- _this.setState({
254
- isSharing: false,
255
- shareError: {
256
- message: err.message
257
- }
258
- });
259
- isValidFailedExperience(shareSubmitExp, err);
260
- });
254
+ }).catch( /*#__PURE__*/function () {
255
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(err) {
256
+ var shareError;
257
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
258
+ while (1) switch (_context.prev = _context.next) {
259
+ case 0:
260
+ _context.next = 2;
261
+ return _this.generateShareError(err).catch(function (errorGenFailed) {
262
+ return {
263
+ message: err.message || errorGenFailed.message || 'Unknown error',
264
+ retryable: true
265
+ };
266
+ });
267
+ case 2:
268
+ shareError = _context.sent;
269
+ _this.setState({
270
+ isSharing: false,
271
+ shareError: shareError
272
+ });
273
+ isValidFailedExperience(shareSubmitExp, err);
274
+ case 5:
275
+ case "end":
276
+ return _context.stop();
277
+ }
278
+ }, _callee);
279
+ }));
280
+ return function (_x) {
281
+ return _ref.apply(this, arguments);
282
+ };
283
+ }());
261
284
  });
262
285
  _defineProperty(_assertThisInitialized(_this), "handleFormDismiss", function (data) {
263
- _this.setState(function (_ref) {
264
- var ignoreIntermediateState = _ref.ignoreIntermediateState;
286
+ _this.setState(function (_ref2) {
287
+ var ignoreIntermediateState = _ref2.ignoreIntermediateState;
265
288
  return ignoreIntermediateState ? null : {
266
289
  defaultValue: data
267
290
  };
@@ -365,6 +388,13 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
365
388
  isUsingSplitButton: false
366
389
  });
367
390
  });
391
+ _defineProperty(_assertThisInitialized(_this), "handleOnUserSelectionChange", function (value) {
392
+ var onUserSelectionChange = _this.props.onUserSelectionChange;
393
+ _this.setState({
394
+ shareError: undefined
395
+ });
396
+ onUserSelectionChange === null || onUserSelectionChange === void 0 ? void 0 : onUserSelectionChange(value);
397
+ });
368
398
  return _this;
369
399
  }
370
400
  _createClass(ShareDialogWithTriggerInternal, [{
@@ -381,6 +411,48 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
381
411
  this.handleDialogOpen();
382
412
  }
383
413
  }
414
+ }, {
415
+ key: "generateShareError",
416
+ value: function () {
417
+ var _generateShareError = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(err) {
418
+ var _errorBody$messagesDe;
419
+ var errorBody, firstErrorFromBody;
420
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
421
+ while (1) switch (_context2.prev = _context2.next) {
422
+ case 0:
423
+ if (!err.body) {
424
+ _context2.next = 6;
425
+ break;
426
+ }
427
+ _context2.next = 3;
428
+ return err.body;
429
+ case 3:
430
+ _context2.t0 = _context2.sent;
431
+ _context2.next = 7;
432
+ break;
433
+ case 6:
434
+ _context2.t0 = {};
435
+ case 7:
436
+ errorBody = _context2.t0;
437
+ // We'll only try and deal with the first error, sorry
438
+ firstErrorFromBody = (_errorBody$messagesDe = errorBody.messagesDetails) === null || _errorBody$messagesDe === void 0 ? void 0 : _errorBody$messagesDe[0];
439
+ return _context2.abrupt("return", {
440
+ message: (firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.message) || err.message,
441
+ errorCode: firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.errorCode,
442
+ helpUrl: firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.helpUrl,
443
+ retryable: (firstErrorFromBody === null || firstErrorFromBody === void 0 ? void 0 : firstErrorFromBody.errorCode) === undefined
444
+ });
445
+ case 10:
446
+ case "end":
447
+ return _context2.stop();
448
+ }
449
+ }, _callee2);
450
+ }));
451
+ function generateShareError(_x2) {
452
+ return _generateShareError.apply(this, arguments);
453
+ }
454
+ return generateShareError;
455
+ }()
384
456
  }, {
385
457
  key: "render",
386
458
  value: function render() {
@@ -409,7 +481,6 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
409
481
  cloudId = _this$props7.cloudId,
410
482
  orgId = _this$props7.orgId,
411
483
  shareFieldsFooter = _this$props7.shareFieldsFooter,
412
- onUserSelectionChange = _this$props7.onUserSelectionChange,
413
484
  dialogZIndex = _this$props7.dialogZIndex,
414
485
  isPublicLink = _this$props7.isPublicLink,
415
486
  tabIndex = _this$props7.tabIndex,
@@ -455,7 +526,7 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
455
526
  loggedInAccountId: loggedInAccountId,
456
527
  cloudId: cloudId,
457
528
  orgId: orgId,
458
- onUserSelectionChange: onUserSelectionChange,
529
+ onUserSelectionChange: _this2.handleOnUserSelectionChange,
459
530
  shareFieldsFooter: shareFieldsFooter,
460
531
  isPublicLink: isPublicLink,
461
532
  copyTooltipText: copyTooltipText,