@atlaskit/media-picker 65.0.0 → 65.1.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 (78) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/components/browser/browser.js +5 -1
  3. package/dist/cjs/components/clipboard/clipboard.js +6 -1
  4. package/dist/cjs/components/dropzone/dropzone.js +6 -1
  5. package/dist/cjs/components/localUploadReact.js +21 -1
  6. package/dist/cjs/components/uploadRejectionFlagGroup/UploadRejectionFlagGroup.js +86 -0
  7. package/dist/cjs/components/uploadRejectionFlagGroup/messages.js +20 -0
  8. package/dist/cjs/service/uploadServiceImpl.js +3 -3
  9. package/dist/cjs/util/analytics.js +1 -1
  10. package/dist/cjs/util/ufoExperiences.js +1 -1
  11. package/dist/cjs/version.json +1 -1
  12. package/dist/es2019/components/browser/browser.js +5 -1
  13. package/dist/es2019/components/clipboard/clipboard.js +6 -1
  14. package/dist/es2019/components/dropzone/dropzone.js +6 -1
  15. package/dist/es2019/components/localUploadReact.js +20 -1
  16. package/dist/es2019/components/uploadRejectionFlagGroup/UploadRejectionFlagGroup.js +78 -0
  17. package/dist/es2019/components/uploadRejectionFlagGroup/messages.js +13 -0
  18. package/dist/es2019/service/uploadServiceImpl.js +3 -3
  19. package/dist/es2019/util/analytics.js +1 -1
  20. package/dist/es2019/util/ufoExperiences.js +1 -1
  21. package/dist/es2019/version.json +1 -1
  22. package/dist/esm/components/browser/browser.js +5 -1
  23. package/dist/esm/components/clipboard/clipboard.js +6 -1
  24. package/dist/esm/components/dropzone/dropzone.js +6 -1
  25. package/dist/esm/components/localUploadReact.js +21 -1
  26. package/dist/esm/components/uploadRejectionFlagGroup/UploadRejectionFlagGroup.js +78 -0
  27. package/dist/esm/components/uploadRejectionFlagGroup/messages.js +13 -0
  28. package/dist/esm/service/uploadServiceImpl.js +3 -3
  29. package/dist/esm/util/analytics.js +1 -1
  30. package/dist/esm/util/ufoExperiences.js +1 -1
  31. package/dist/esm/version.json +1 -1
  32. package/dist/types/components/browser/browser.d.ts +4 -4
  33. package/dist/types/components/browser/index.d.ts +3 -3
  34. package/dist/types/components/clipboard/clipboard.d.ts +5 -5
  35. package/dist/types/components/clipboard/index.d.ts +3 -3
  36. package/dist/types/components/dropzone/dropzone.d.ts +6 -6
  37. package/dist/types/components/dropzone/index.d.ts +4 -4
  38. package/dist/types/components/localUploadReact.d.ts +13 -6
  39. package/dist/types/components/media-picker-analytics-error-boundary.d.ts +1 -1
  40. package/dist/types/components/types.d.ts +1 -6
  41. package/dist/types/components/uploadRejectionFlagGroup/UploadRejectionFlagGroup.d.ts +11 -0
  42. package/dist/types/components/uploadRejectionFlagGroup/messages.d.ts +12 -0
  43. package/dist/types/index.d.ts +1 -1
  44. package/dist/types/service/types.d.ts +4 -9
  45. package/dist/types/service/uploadServiceImpl.d.ts +3 -2
  46. package/dist/types/types.d.ts +28 -23
  47. package/dist/types/util/analytics.d.ts +1 -1
  48. package/dist/types/util/eventEmitter.d.ts +2 -2
  49. package/dist/types/util/ufoExperiences.d.ts +2 -2
  50. package/dist/types-ts4.5/components/browser/browser.d.ts +37 -0
  51. package/dist/types-ts4.5/components/browser/index.d.ts +24 -0
  52. package/dist/types-ts4.5/components/clipboard/clipboard.d.ts +41 -0
  53. package/dist/types-ts4.5/components/clipboard/index.d.ts +21 -0
  54. package/dist/types-ts4.5/components/component.d.ts +18 -0
  55. package/dist/types-ts4.5/components/dropzone/dropzone.d.ts +37 -0
  56. package/dist/types-ts4.5/components/dropzone/index.d.ts +23 -0
  57. package/dist/types-ts4.5/components/localUploadReact.d.ts +42 -0
  58. package/dist/types-ts4.5/components/media-picker-analytics-error-boundary.d.ts +10 -0
  59. package/dist/types-ts4.5/components/types.d.ts +13 -0
  60. package/dist/types-ts4.5/components/uploadRejectionFlagGroup/UploadRejectionFlagGroup.d.ts +11 -0
  61. package/dist/types-ts4.5/components/uploadRejectionFlagGroup/messages.d.ts +12 -0
  62. package/dist/types-ts4.5/config.d.ts +8 -0
  63. package/dist/types-ts4.5/domain/plugin.d.ts +8 -0
  64. package/dist/types-ts4.5/domain/preview.d.ts +2 -0
  65. package/dist/types-ts4.5/index.d.ts +6 -0
  66. package/dist/types-ts4.5/popup/domain/index.d.ts +14 -0
  67. package/dist/types-ts4.5/service/types.d.ts +31 -0
  68. package/dist/types-ts4.5/service/uploadServiceImpl.d.ts +38 -0
  69. package/dist/types-ts4.5/types.d.ts +129 -0
  70. package/dist/types-ts4.5/util/analytics.d.ts +5 -0
  71. package/dist/types-ts4.5/util/appendTimestamp.d.ts +1 -0
  72. package/dist/types-ts4.5/util/eventEmitter.d.ts +25 -0
  73. package/dist/types-ts4.5/util/getPreviewFromBlob.d.ts +4 -0
  74. package/dist/types-ts4.5/util/getPreviewFromImage.d.ts +3 -0
  75. package/dist/types-ts4.5/util/ufoExperiences.d.ts +13 -0
  76. package/package.json +17 -5
  77. package/report.api.md +9 -3
  78. package/types/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/media-picker
2
2
 
3
+ ## 65.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`4a6a812a4d2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/4a6a812a4d2) - [ux] Add a user friendly error message when uploading a file that is over the file size limit
8
+
9
+ ### Patch Changes
10
+
11
+ - [`1bd483e036d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1bd483e036d) - fix missing fallback IntlProvider for UploadRejectionFlagGroup
12
+ - Updated dependencies
13
+
14
+ ## 65.0.1
15
+
16
+ ### Patch Changes
17
+
18
+ - [`41fae2c6f68`](https://bitbucket.org/atlassian/atlassian-frontend/commits/41fae2c6f68) - Upgrade Typescript from `4.5.5` to `4.9.5`
19
+ - Updated dependencies
20
+
3
21
  ## 65.0.0
4
22
 
5
23
  ### Minor Changes
@@ -18,6 +18,7 @@ var _mediaCommon = require("@atlaskit/media-common");
18
18
  var _uuidValidate = _interopRequireDefault(require("uuid-validate"));
19
19
  var _localUploadReact = require("../localUploadReact");
20
20
  var _analytics = require("../../util/analytics");
21
+ var _UploadRejectionFlagGroup = _interopRequireDefault(require("../uploadRejectionFlagGroup/UploadRejectionFlagGroup"));
21
22
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
22
23
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
23
24
  var defaultConfig = {
@@ -138,7 +139,10 @@ var BrowserBase = /*#__PURE__*/function (_LocalUploadComponent) {
138
139
 
139
140
  accept: fileExtensions,
140
141
  onChange: this.onFilePicked
141
- }), children ? children(this.browse) : null);
142
+ }), children ? children(this.browse) : null, /*#__PURE__*/_react.default.createElement(_UploadRejectionFlagGroup.default, {
143
+ flagData: this.state.uploadRejectionFlags,
144
+ onFlagDismissed: this.dismissUploadRejectionFlag
145
+ }));
142
146
  }
143
147
  }]);
144
148
  return BrowserBase;
@@ -11,12 +11,14 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
11
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
+ var _react = _interopRequireDefault(require("react"));
14
15
  var _analyticsNext = require("@atlaskit/analytics-next");
15
16
  var _mediaCommon = require("@atlaskit/media-common");
16
17
  var _localUploadReact = require("../localUploadReact");
17
18
  var _types = require("../../service/types");
18
19
  var _analytics = require("../../util/analytics");
19
20
  var _appendTimestamp = require("../../util/appendTimestamp");
21
+ var _UploadRejectionFlagGroup = _interopRequireDefault(require("../uploadRejectionFlagGroup/UploadRejectionFlagGroup"));
20
22
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
21
23
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
22
24
  var getFilesFromClipboard = function getFilesFromClipboard(files) {
@@ -173,7 +175,10 @@ var ClipboardBase = /*#__PURE__*/function (_LocalUploadComponent) {
173
175
  }, {
174
176
  key: "render",
175
177
  value: function render() {
176
- return null;
178
+ return /*#__PURE__*/_react.default.createElement(_UploadRejectionFlagGroup.default, {
179
+ flagData: this.state.uploadRejectionFlags,
180
+ onFlagDismissed: this.dismissUploadRejectionFlag
181
+ });
177
182
  }
178
183
  }]);
179
184
  return ClipboardBase;
@@ -14,12 +14,14 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
14
14
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
15
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+ var _react = _interopRequireDefault(require("react"));
17
18
  var _analyticsNext = require("@atlaskit/analytics-next");
18
19
  var _mediaCommon = require("@atlaskit/media-common");
19
20
  var _browser = require("@atlaskit/media-ui/browser");
20
21
  var _flatFiles = require("flat-files");
21
22
  var _localUploadReact = require("../localUploadReact");
22
23
  var _analytics = require("../../util/analytics");
24
+ var _UploadRejectionFlagGroup = _interopRequireDefault(require("../uploadRejectionFlagGroup/UploadRejectionFlagGroup"));
23
25
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
24
26
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
25
27
  function dragContainsFiles(event) {
@@ -315,7 +317,10 @@ var DropzoneBase = /*#__PURE__*/function (_LocalUploadComponent) {
315
317
  }, {
316
318
  key: "render",
317
319
  value: function render() {
318
- return null;
320
+ return /*#__PURE__*/_react.default.createElement(_UploadRejectionFlagGroup.default, {
321
+ flagData: this.state.uploadRejectionFlags,
322
+ onFlagDismissed: this.dismissUploadRejectionFlag
323
+ });
319
324
  }
320
325
  }]);
321
326
  return DropzoneBase;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.LocalUploadComponentReact = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
13
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
@@ -32,6 +33,19 @@ var LocalUploadComponentReact = /*#__PURE__*/function (_Component) {
32
33
  (0, _classCallCheck2.default)(this, LocalUploadComponentReact);
33
34
  _this = _super.call(this, props);
34
35
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "uploadComponent", new _component.UploadComponent());
36
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
37
+ uploadRejectionFlags: []
38
+ });
39
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "addUploadRejectionFlag", function (rejectionData) {
40
+ _this.setState({
41
+ uploadRejectionFlags: [].concat((0, _toConsumableArray2.default)(_this.state.uploadRejectionFlags), [rejectionData])
42
+ });
43
+ });
44
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "dismissUploadRejectionFlag", function () {
45
+ _this.setState({
46
+ uploadRejectionFlags: _this.state.uploadRejectionFlags.slice(1)
47
+ });
48
+ });
35
49
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireCommencedEvent", function (payload) {
36
50
  var files = payload.files,
37
51
  traceContext = payload.traceContext;
@@ -175,7 +189,8 @@ var LocalUploadComponentReact = /*#__PURE__*/function (_Component) {
175
189
  onUploadsStart = _this$props.onUploadsStart,
176
190
  onPreviewUpdate = _this$props.onPreviewUpdate,
177
191
  onEnd = _this$props.onEnd,
178
- onError = _this$props.onError;
192
+ onError = _this$props.onError,
193
+ onFileRejection = _this$props.onFileRejection;
179
194
  var tenantUploadParams = config.uploadParams;
180
195
  var _config$shouldCopyFil = config.shouldCopyFileToRecents,
181
196
  shouldCopyFileToRecents = _config$shouldCopyFil === void 0 ? true : _config$shouldCopyFil;
@@ -199,6 +214,11 @@ var LocalUploadComponentReact = /*#__PURE__*/function (_Component) {
199
214
  _this.uploadService.on('file-preview-update', _this.onFilePreviewUpdate);
200
215
  _this.uploadService.on('file-converting', _this.onFileConverting);
201
216
  _this.uploadService.on('file-upload-error', _this.onUploadError);
217
+ if (onFileRejection) {
218
+ _this.uploadService.onFileRejection(onFileRejection);
219
+ } else {
220
+ _this.uploadService.onFileRejection(_this.addUploadRejectionFlag);
221
+ }
202
222
  return _this;
203
223
  }
204
224
  (0, _createClass2.default)(LocalUploadComponentReact, [{
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _flag = require("@atlaskit/flag");
11
+ var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/cross-circle"));
12
+ var _colors = require("@atlaskit/theme/colors");
13
+ var _messages = require("./messages");
14
+ var _reactIntlNext = require("react-intl-next");
15
+ 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; }
16
+ 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) { (0, _defineProperty2.default)(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; }
17
+ var defaultOptions = {
18
+ style: 'unit',
19
+ unitDisplay: 'short',
20
+ minimumFractionDigits: 2
21
+ };
22
+ var fileSizeFormatters = {
23
+ kilobyte: new Intl.NumberFormat('en', _objectSpread(_objectSpread({}, defaultOptions), {}, {
24
+ unit: 'kilobyte'
25
+ })),
26
+ megabyte: new Intl.NumberFormat('en', _objectSpread(_objectSpread({}, defaultOptions), {}, {
27
+ unit: 'megabyte'
28
+ })),
29
+ gigabyte: new Intl.NumberFormat('en', _objectSpread(_objectSpread({}, defaultOptions), {}, {
30
+ unit: 'gigabyte'
31
+ }))
32
+ };
33
+ var formatFileSize = function formatFileSize(size) {
34
+ var formattedSize;
35
+ if (size < 1000000) {
36
+ formattedSize = size / 1000;
37
+ return fileSizeFormatters.kilobyte.format(formattedSize);
38
+ } else if (size >= 1000000 && size < 1000000000) {
39
+ formattedSize = size / 1000000;
40
+ return fileSizeFormatters.megabyte.format(formattedSize);
41
+ } else {
42
+ formattedSize = size / 1000000000;
43
+ return fileSizeFormatters.gigabyte.format(formattedSize);
44
+ }
45
+ };
46
+ var FlagGroupContent = function FlagGroupContent(_ref) {
47
+ var flagData = _ref.flagData,
48
+ onFlagDismissed = _ref.onFlagDismissed;
49
+ var intl = (0, _reactIntlNext.useIntl)();
50
+ return /*#__PURE__*/_react.default.createElement(_flag.FlagGroup, {
51
+ onDismissed: onFlagDismissed
52
+ }, flagData.map(function (data, i) {
53
+ return /*#__PURE__*/_react.default.createElement(_flag.AutoDismissFlag, {
54
+ id: i,
55
+ icon: /*#__PURE__*/_react.default.createElement(_crossCircle.default, {
56
+ primaryColor: "var(--ds-icon-danger, ".concat(_colors.R300, ")"),
57
+ label: "Fail",
58
+ size: "medium"
59
+ }),
60
+ key: i,
61
+ title: intl.formatMessage(_messages.uploadRejectionFlagMessages.title),
62
+ description: intl.formatMessage(_messages.uploadRejectionFlagMessages.description, {
63
+ fileName: data.fileName,
64
+ limit: formatFileSize(data.limit)
65
+ })
66
+ });
67
+ }));
68
+ };
69
+ var UploadRejectionFlagGroup = function UploadRejectionFlagGroup(_ref2) {
70
+ var flagData = _ref2.flagData,
71
+ onFlagDismissed = _ref2.onFlagDismissed,
72
+ intl = _ref2.intl;
73
+ return intl ? /*#__PURE__*/_react.default.createElement(FlagGroupContent, {
74
+ flagData: flagData,
75
+ onFlagDismissed: onFlagDismissed
76
+ }) : /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
77
+ locale: "en"
78
+ }, /*#__PURE__*/_react.default.createElement(FlagGroupContent, {
79
+ flagData: flagData,
80
+ onFlagDismissed: onFlagDismissed
81
+ }));
82
+ };
83
+ var _default = (0, _reactIntlNext.injectIntl)(UploadRejectionFlagGroup, {
84
+ enforceContext: false
85
+ });
86
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.uploadRejectionFlagMessages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var uploadRejectionFlagMessages = (0, _reactIntlNext.defineMessages)({
9
+ title: {
10
+ id: 'fabric.media.uploadRejectionFlagTitle',
11
+ defaultMessage: 'Your file failed to upload',
12
+ description: 'a title for a flag that describes that a file failed to upload'
13
+ },
14
+ description: {
15
+ id: 'fabric.media.uploadRejectionFlagDescription',
16
+ defaultMessage: '{fileName} is too big to upload. Files must be less than {limit}.',
17
+ description: 'a description for a flag that details why a file failed to upload'
18
+ }
19
+ });
20
+ exports.uploadRejectionFlagMessages = uploadRejectionFlagMessages;
@@ -159,7 +159,7 @@ var UploadServiceImpl = /*#__PURE__*/function () {
159
159
  caughtError = _context2.t0;
160
160
  case 21:
161
161
  cancellableFileUploads = files.map(function (_ref2, i) {
162
- var _touchedFiles, _touchedFiles2;
162
+ var _touchedFiles, _touchedFiles2, _caughtError$metadata;
163
163
  var file = _ref2.file,
164
164
  source = _ref2.source;
165
165
  var _touchFileDescriptors = touchFileDescriptors[i],
@@ -175,7 +175,7 @@ var UploadServiceImpl = /*#__PURE__*/function () {
175
175
  if (_this2.fileRejectionHandler) {
176
176
  _this2.fileRejectionHandler({
177
177
  reason: 'fileSizeLimitExceeded',
178
- file: file,
178
+ fileName: file.name,
179
179
  limit: rejectedFile.error.limit
180
180
  });
181
181
  }
@@ -185,7 +185,7 @@ var UploadServiceImpl = /*#__PURE__*/function () {
185
185
  return touchedFile.fileId === id;
186
186
  });
187
187
  var deferredUploadId;
188
- var isIdConflictError = caughtError && caughtError instanceof _mediaClient.RequestError && caughtError.metadata && caughtError.metadata.statusCode === 409;
188
+ var isIdConflictError = caughtError instanceof _mediaClient.RequestError && ((_caughtError$metadata = caughtError.metadata) === null || _caughtError$metadata === void 0 ? void 0 : _caughtError$metadata.statusCode) === 409;
189
189
  if (touchedFile) {
190
190
  deferredUploadId = Promise.resolve(touchedFile.uploadId);
191
191
  } else if (isIdConflictError) {
@@ -9,7 +9,7 @@ var _mediaClient = require("@atlaskit/media-client");
9
9
  // Component name will be prefixed with "media-picker-" in logs. Check ufoExperiences in utils files
10
10
 
11
11
  var packageName = "@atlaskit/media-picker";
12
- var packageVersion = "65.0.0";
12
+ var packageVersion = "65.1.0";
13
13
  function getPackageAttributes(componentName) {
14
14
  return {
15
15
  packageName: packageName,
@@ -12,7 +12,7 @@ var _mediaClient = require("@atlaskit/media-client");
12
12
  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; }
13
13
  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) { (0, _defineProperty2.default)(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; }
14
14
  var packageName = "@atlaskit/media-picker";
15
- var packageVersion = "65.0.0";
15
+ var packageVersion = "65.1.0";
16
16
  var ufoExperience;
17
17
  var initExperience = function initExperience(id, componentName) {
18
18
  if (!ufoExperience) {
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/media-picker",
3
- "version": "65.0.0"
3
+ "version": "65.1.0"
4
4
  }
@@ -5,6 +5,7 @@ import { withMediaAnalyticsContext } from '@atlaskit/media-common';
5
5
  import isValidId from 'uuid-validate';
6
6
  import { LocalUploadComponentReact } from '../localUploadReact';
7
7
  import { getPackageAttributes } from '../../util/analytics';
8
+ import UploadRejectionFlagGroup from '../uploadRejectionFlagGroup/UploadRejectionFlagGroup';
8
9
  const defaultConfig = {
9
10
  uploadParams: {}
10
11
  };
@@ -130,7 +131,10 @@ export class BrowserBase extends LocalUploadComponentReact {
130
131
 
131
132
  accept: fileExtensions,
132
133
  onChange: this.onFilePicked
133
- }), children ? children(this.browse) : null);
134
+ }), children ? children(this.browse) : null, /*#__PURE__*/React.createElement(UploadRejectionFlagGroup, {
135
+ flagData: this.state.uploadRejectionFlags,
136
+ onFlagDismissed: this.dismissUploadRejectionFlag
137
+ }));
134
138
  }
135
139
  }
136
140
  _defineProperty(BrowserBase, "defaultProps", {
@@ -1,10 +1,12 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import React from 'react';
2
3
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
3
4
  import { ANALYTICS_MEDIA_CHANNEL, withMediaAnalyticsContext } from '@atlaskit/media-common';
4
5
  import { LocalUploadComponentReact } from '../localUploadReact';
5
6
  import { LocalFileSource } from '../../service/types';
6
7
  import { getPackageAttributes } from '../../util/analytics';
7
8
  import { appendTimestamp } from '../../util/appendTimestamp';
9
+ import UploadRejectionFlagGroup from '../uploadRejectionFlagGroup/UploadRejectionFlagGroup';
8
10
  export const getFilesFromClipboard = files => {
9
11
  return Array.from(files).map(file => {
10
12
  if (file.type.indexOf('image/') === 0) {
@@ -134,7 +136,10 @@ export class ClipboardBase extends LocalUploadComponentReact {
134
136
  this.clipboard.deactivate();
135
137
  }
136
138
  render() {
137
- return null;
139
+ return /*#__PURE__*/React.createElement(UploadRejectionFlagGroup, {
140
+ flagData: this.state.uploadRejectionFlags,
141
+ onFlagDismissed: this.dismissUploadRejectionFlag
142
+ });
138
143
  }
139
144
  }
140
145
  _defineProperty(ClipboardBase, "defaultProps", {
@@ -1,10 +1,12 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import React from 'react';
2
3
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
3
4
  import { ANALYTICS_MEDIA_CHANNEL, getMediaFeatureFlag, withMediaAnalyticsContext } from '@atlaskit/media-common';
4
5
  import { isWebkitSupported } from '@atlaskit/media-ui/browser';
5
6
  import { getFilesFromItems, getFilesFromFileSystemEntries } from 'flat-files';
6
7
  import { LocalUploadComponentReact } from '../localUploadReact';
7
8
  import { getPackageAttributes } from '../../util/analytics';
9
+ import UploadRejectionFlagGroup from '../uploadRejectionFlagGroup/UploadRejectionFlagGroup';
8
10
  function dragContainsFiles(event) {
9
11
  if (!event.dataTransfer) {
10
12
  return false;
@@ -252,7 +254,10 @@ export class DropzoneBase extends LocalUploadComponentReact {
252
254
  }
253
255
  }
254
256
  render() {
255
- return null;
257
+ return /*#__PURE__*/React.createElement(UploadRejectionFlagGroup, {
258
+ flagData: this.state.uploadRejectionFlags,
259
+ onFlagDismissed: this.dismissUploadRejectionFlag
260
+ });
256
261
  }
257
262
  }
258
263
  export default DropzoneBase;
@@ -11,6 +11,19 @@ export class LocalUploadComponentReact extends Component {
11
11
  constructor(props, componentName) {
12
12
  super(props);
13
13
  _defineProperty(this, "uploadComponent", new UploadComponent());
14
+ _defineProperty(this, "state", {
15
+ uploadRejectionFlags: []
16
+ });
17
+ _defineProperty(this, "addUploadRejectionFlag", rejectionData => {
18
+ this.setState({
19
+ uploadRejectionFlags: [...this.state.uploadRejectionFlags, rejectionData]
20
+ });
21
+ });
22
+ _defineProperty(this, "dismissUploadRejectionFlag", () => {
23
+ this.setState({
24
+ uploadRejectionFlags: this.state.uploadRejectionFlags.slice(1)
25
+ });
26
+ });
14
27
  _defineProperty(this, "fireCommencedEvent", payload => {
15
28
  const {
16
29
  files,
@@ -161,7 +174,8 @@ export class LocalUploadComponentReact extends Component {
161
174
  onUploadsStart,
162
175
  onPreviewUpdate,
163
176
  onEnd,
164
- onError
177
+ onError,
178
+ onFileRejection
165
179
  } = this.props;
166
180
  const tenantUploadParams = config.uploadParams;
167
181
  const {
@@ -187,6 +201,11 @@ export class LocalUploadComponentReact extends Component {
187
201
  this.uploadService.on('file-preview-update', this.onFilePreviewUpdate);
188
202
  this.uploadService.on('file-converting', this.onFileConverting);
189
203
  this.uploadService.on('file-upload-error', this.onUploadError);
204
+ if (onFileRejection) {
205
+ this.uploadService.onFileRejection(onFileRejection);
206
+ } else {
207
+ this.uploadService.onFileRejection(this.addUploadRejectionFlag);
208
+ }
190
209
  }
191
210
  setUploadParams(uploadParams) {
192
211
  this.uploadService.setUploadParams(uploadParams);
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import { AutoDismissFlag, FlagGroup } from '@atlaskit/flag';
3
+ import FailIcon from '@atlaskit/icon/glyph/cross-circle';
4
+ import { R300 } from '@atlaskit/theme/colors';
5
+ import { uploadRejectionFlagMessages } from './messages';
6
+ import { injectIntl, IntlProvider, useIntl } from 'react-intl-next';
7
+ const defaultOptions = {
8
+ style: 'unit',
9
+ unitDisplay: 'short',
10
+ minimumFractionDigits: 2
11
+ };
12
+ const fileSizeFormatters = {
13
+ kilobyte: new Intl.NumberFormat('en', {
14
+ ...defaultOptions,
15
+ unit: 'kilobyte'
16
+ }),
17
+ megabyte: new Intl.NumberFormat('en', {
18
+ ...defaultOptions,
19
+ unit: 'megabyte'
20
+ }),
21
+ gigabyte: new Intl.NumberFormat('en', {
22
+ ...defaultOptions,
23
+ unit: 'gigabyte'
24
+ })
25
+ };
26
+ const formatFileSize = size => {
27
+ let formattedSize;
28
+ if (size < 1_000_000) {
29
+ formattedSize = size / 1_000;
30
+ return fileSizeFormatters.kilobyte.format(formattedSize);
31
+ } else if (size >= 1_000_000 && size < 1_000_000_000) {
32
+ formattedSize = size / 1_000_000;
33
+ return fileSizeFormatters.megabyte.format(formattedSize);
34
+ } else {
35
+ formattedSize = size / 1_000_000_000;
36
+ return fileSizeFormatters.gigabyte.format(formattedSize);
37
+ }
38
+ };
39
+ const FlagGroupContent = ({
40
+ flagData,
41
+ onFlagDismissed
42
+ }) => {
43
+ const intl = useIntl();
44
+ return /*#__PURE__*/React.createElement(FlagGroup, {
45
+ onDismissed: onFlagDismissed
46
+ }, flagData.map((data, i) => /*#__PURE__*/React.createElement(AutoDismissFlag, {
47
+ id: i,
48
+ icon: /*#__PURE__*/React.createElement(FailIcon, {
49
+ primaryColor: `var(--ds-icon-danger, ${R300})`,
50
+ label: "Fail",
51
+ size: "medium"
52
+ }),
53
+ key: i,
54
+ title: intl.formatMessage(uploadRejectionFlagMessages.title),
55
+ description: intl.formatMessage(uploadRejectionFlagMessages.description, {
56
+ fileName: data.fileName,
57
+ limit: formatFileSize(data.limit)
58
+ })
59
+ })));
60
+ };
61
+ const UploadRejectionFlagGroup = ({
62
+ flagData,
63
+ onFlagDismissed,
64
+ intl
65
+ }) => {
66
+ return intl ? /*#__PURE__*/React.createElement(FlagGroupContent, {
67
+ flagData: flagData,
68
+ onFlagDismissed: onFlagDismissed
69
+ }) : /*#__PURE__*/React.createElement(IntlProvider, {
70
+ locale: "en"
71
+ }, /*#__PURE__*/React.createElement(FlagGroupContent, {
72
+ flagData: flagData,
73
+ onFlagDismissed: onFlagDismissed
74
+ }));
75
+ };
76
+ export default injectIntl(UploadRejectionFlagGroup, {
77
+ enforceContext: false
78
+ });
@@ -0,0 +1,13 @@
1
+ import { defineMessages } from 'react-intl-next';
2
+ export const uploadRejectionFlagMessages = defineMessages({
3
+ title: {
4
+ id: 'fabric.media.uploadRejectionFlagTitle',
5
+ defaultMessage: 'Your file failed to upload',
6
+ description: 'a title for a flag that describes that a file failed to upload'
7
+ },
8
+ description: {
9
+ id: 'fabric.media.uploadRejectionFlagDescription',
10
+ defaultMessage: '{fileName} is too big to upload. Files must be less than {limit}.',
11
+ description: 'a description for a flag that details why a file failed to upload'
12
+ }
13
+ });
@@ -118,7 +118,7 @@ export class UploadServiceImpl {
118
118
  file,
119
119
  source
120
120
  }, i) => {
121
- var _touchedFiles, _touchedFiles2;
121
+ var _touchedFiles, _touchedFiles2, _caughtError$metadata;
122
122
  const {
123
123
  fileId: id,
124
124
  occurrenceKey
@@ -132,7 +132,7 @@ export class UploadServiceImpl {
132
132
  if (this.fileRejectionHandler) {
133
133
  this.fileRejectionHandler({
134
134
  reason: 'fileSizeLimitExceeded',
135
- file,
135
+ fileName: file.name,
136
136
  limit: rejectedFile.error.limit
137
137
  });
138
138
  }
@@ -140,7 +140,7 @@ export class UploadServiceImpl {
140
140
  }
141
141
  const touchedFile = (_touchedFiles2 = touchedFiles) === null || _touchedFiles2 === void 0 ? void 0 : _touchedFiles2.created.find(touchedFile => touchedFile.fileId === id);
142
142
  let deferredUploadId;
143
- const isIdConflictError = caughtError && caughtError instanceof RequestError && caughtError.metadata && caughtError.metadata.statusCode === 409;
143
+ const isIdConflictError = caughtError instanceof RequestError && ((_caughtError$metadata = caughtError.metadata) === null || _caughtError$metadata === void 0 ? void 0 : _caughtError$metadata.statusCode) === 409;
144
144
  if (touchedFile) {
145
145
  deferredUploadId = Promise.resolve(touchedFile.uploadId);
146
146
  } else if (isIdConflictError) {
@@ -3,7 +3,7 @@ import { isRequestError } from '@atlaskit/media-client';
3
3
  // Component name will be prefixed with "media-picker-" in logs. Check ufoExperiences in utils files
4
4
 
5
5
  const packageName = "@atlaskit/media-picker";
6
- const packageVersion = "65.0.0";
6
+ const packageVersion = "65.1.0";
7
7
  export function getPackageAttributes(componentName) {
8
8
  return {
9
9
  packageName,
@@ -2,7 +2,7 @@ import { ConcurrentExperience, ExperiencePerformanceTypes, ExperienceTypes } fro
2
2
  import { getFeatureFlagKeysAllProducts } from '@atlaskit/media-common';
3
3
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
4
4
  const packageName = "@atlaskit/media-picker";
5
- const packageVersion = "65.0.0";
5
+ const packageVersion = "65.1.0";
6
6
  let ufoExperience;
7
7
  const initExperience = (id, componentName) => {
8
8
  if (!ufoExperience) {
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/media-picker",
3
- "version": "65.0.0"
3
+ "version": "65.1.0"
4
4
  }
@@ -13,6 +13,7 @@ import { withMediaAnalyticsContext } from '@atlaskit/media-common';
13
13
  import isValidId from 'uuid-validate';
14
14
  import { LocalUploadComponentReact } from '../localUploadReact';
15
15
  import { getPackageAttributes } from '../../util/analytics';
16
+ import UploadRejectionFlagGroup from '../uploadRejectionFlagGroup/UploadRejectionFlagGroup';
16
17
  var defaultConfig = {
17
18
  uploadParams: {}
18
19
  };
@@ -131,7 +132,10 @@ export var BrowserBase = /*#__PURE__*/function (_LocalUploadComponent) {
131
132
 
132
133
  accept: fileExtensions,
133
134
  onChange: this.onFilePicked
134
- }), children ? children(this.browse) : null);
135
+ }), children ? children(this.browse) : null, /*#__PURE__*/React.createElement(UploadRejectionFlagGroup, {
136
+ flagData: this.state.uploadRejectionFlags,
137
+ onFlagDismissed: this.dismissUploadRejectionFlag
138
+ }));
135
139
  }
136
140
  }]);
137
141
  return BrowserBase;
@@ -6,12 +6,14 @@ import _createClass from "@babel/runtime/helpers/createClass";
6
6
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
7
  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); }; }
8
8
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
9
+ import React from 'react';
9
10
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
10
11
  import { ANALYTICS_MEDIA_CHANNEL, withMediaAnalyticsContext } from '@atlaskit/media-common';
11
12
  import { LocalUploadComponentReact } from '../localUploadReact';
12
13
  import { LocalFileSource } from '../../service/types';
13
14
  import { getPackageAttributes } from '../../util/analytics';
14
15
  import { appendTimestamp } from '../../util/appendTimestamp';
16
+ import UploadRejectionFlagGroup from '../uploadRejectionFlagGroup/UploadRejectionFlagGroup';
15
17
  export var getFilesFromClipboard = function getFilesFromClipboard(files) {
16
18
  return Array.from(files).map(function (file) {
17
19
  if (file.type.indexOf('image/') === 0) {
@@ -165,7 +167,10 @@ export var ClipboardBase = /*#__PURE__*/function (_LocalUploadComponent) {
165
167
  }, {
166
168
  key: "render",
167
169
  value: function render() {
168
- return null;
170
+ return /*#__PURE__*/React.createElement(UploadRejectionFlagGroup, {
171
+ flagData: this.state.uploadRejectionFlags,
172
+ onFlagDismissed: this.dismissUploadRejectionFlag
173
+ });
169
174
  }
170
175
  }]);
171
176
  return ClipboardBase;