@atlaskit/emoji 65.1.1 → 65.2.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 (95) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/components/common/CachingEmoji.js +84 -151
  3. package/dist/cjs/components/common/Emoji.js +2 -2
  4. package/dist/cjs/components/common/EmojiActions.js +129 -175
  5. package/dist/cjs/components/common/EmojiErrorMessage.js +23 -59
  6. package/dist/cjs/components/common/EmojiPreviewComponent.js +1 -0
  7. package/dist/cjs/components/common/EmojiUploadPicker.js +235 -293
  8. package/dist/cjs/components/common/FileChooser.js +34 -71
  9. package/dist/cjs/components/common/Popup.js +105 -154
  10. package/dist/cjs/components/common/RetryableButton.js +43 -64
  11. package/dist/cjs/components/common/ToneSelector.js +50 -89
  12. package/dist/cjs/components/common/styles.js +14 -16
  13. package/dist/cjs/components/hooks.js +16 -0
  14. package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +16 -48
  15. package/dist/cjs/components/picker/EmojiPickerComponent.js +496 -516
  16. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +33 -60
  17. package/dist/cjs/components/picker/EmojiPickerFooter.js +13 -48
  18. package/dist/cjs/components/uploader/EmojiUploadComponent.js +124 -109
  19. package/dist/cjs/hooks/useEmojiContext.js +16 -0
  20. package/dist/cjs/hooks/{index.js → usePrevious.js} +0 -0
  21. package/dist/cjs/index.js +16 -0
  22. package/dist/cjs/version.json +1 -1
  23. package/dist/es2019/components/common/CachingEmoji.js +65 -112
  24. package/dist/es2019/components/common/Emoji.js +2 -2
  25. package/dist/es2019/components/common/EmojiActions.js +124 -150
  26. package/dist/es2019/components/common/EmojiErrorMessage.js +22 -26
  27. package/dist/es2019/components/common/EmojiPreviewComponent.js +1 -0
  28. package/dist/es2019/components/common/EmojiUploadPicker.js +190 -253
  29. package/dist/es2019/components/common/FileChooser.js +37 -40
  30. package/dist/es2019/components/common/Popup.js +89 -109
  31. package/dist/es2019/components/common/RetryableButton.js +43 -34
  32. package/dist/es2019/components/common/ToneSelector.js +46 -59
  33. package/dist/es2019/components/common/styles.js +9 -9
  34. package/dist/es2019/components/hooks.js +8 -0
  35. package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +13 -17
  36. package/dist/es2019/components/picker/EmojiPickerComponent.js +417 -506
  37. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +32 -35
  38. package/dist/es2019/components/picker/EmojiPickerFooter.js +11 -21
  39. package/dist/es2019/components/uploader/EmojiUploadComponent.js +81 -91
  40. package/dist/es2019/hooks/useEmojiContext.js +3 -0
  41. package/dist/es2019/hooks/{index.js → usePrevious.js} +0 -0
  42. package/dist/es2019/index.js +4 -1
  43. package/dist/es2019/version.json +1 -1
  44. package/dist/esm/components/common/CachingEmoji.js +86 -156
  45. package/dist/esm/components/common/Emoji.js +2 -2
  46. package/dist/esm/components/common/EmojiActions.js +129 -176
  47. package/dist/esm/components/common/EmojiErrorMessage.js +21 -56
  48. package/dist/esm/components/common/EmojiPreviewComponent.js +1 -0
  49. package/dist/esm/components/common/EmojiUploadPicker.js +233 -299
  50. package/dist/esm/components/common/FileChooser.js +34 -70
  51. package/dist/esm/components/common/Popup.js +104 -155
  52. package/dist/esm/components/common/RetryableButton.js +40 -60
  53. package/dist/esm/components/common/ToneSelector.js +50 -87
  54. package/dist/esm/components/common/styles.js +10 -10
  55. package/dist/esm/components/hooks.js +8 -0
  56. package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +14 -43
  57. package/dist/esm/components/picker/EmojiPickerComponent.js +486 -535
  58. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +31 -59
  59. package/dist/esm/components/picker/EmojiPickerFooter.js +14 -49
  60. package/dist/esm/components/uploader/EmojiUploadComponent.js +119 -113
  61. package/dist/esm/hooks/useEmojiContext.js +5 -0
  62. package/dist/esm/hooks/{index.js → usePrevious.js} +0 -0
  63. package/dist/esm/index.js +4 -1
  64. package/dist/esm/version.json +1 -1
  65. package/dist/types/components/common/CachingEmoji.d.ts +3 -13
  66. package/dist/types/components/common/Emoji.d.ts +1 -1
  67. package/dist/types/components/common/EmojiActions.d.ts +6 -17
  68. package/dist/types/components/common/EmojiErrorMessage.d.ts +3 -6
  69. package/dist/types/components/common/EmojiPreviewComponent.d.ts +2 -2
  70. package/dist/types/components/common/EmojiUploadPicker.d.ts +3 -27
  71. package/dist/types/components/common/FileChooser.d.ts +3 -5
  72. package/dist/types/components/common/Popup.d.ts +3 -20
  73. package/dist/types/components/common/RetryableButton.d.ts +3 -7
  74. package/dist/types/components/common/ToneSelector.d.ts +4 -10
  75. package/dist/types/components/common/setSkinToneAriaLabelText.d.ts +1 -1
  76. package/dist/types/components/common/styles.d.ts +1 -3
  77. package/dist/types/components/hooks.d.ts +1 -0
  78. package/dist/types/components/picker/CategorySelector.d.ts +1 -1
  79. package/dist/types/components/picker/EmojiPicker.d.ts +3 -3
  80. package/dist/types/components/picker/EmojiPickerCategoryHeading.d.ts +3 -4
  81. package/dist/types/components/picker/EmojiPickerComponent.d.ts +4 -80
  82. package/dist/types/components/picker/EmojiPickerEmojiRow.d.ts +3 -4
  83. package/dist/types/components/picker/EmojiPickerFooter.d.ts +3 -6
  84. package/dist/types/components/uploader/EmojiUploadComponent.d.ts +3 -17
  85. package/dist/types/components/uploader/EmojiUploader.d.ts +5 -7
  86. package/dist/types/hooks/useEmojiContext.d.ts +1 -0
  87. package/dist/types/hooks/{index.d.ts → usePrevious.d.ts} +0 -0
  88. package/dist/types/index.d.ts +3 -1
  89. package/dist/types/types.d.ts +2 -1
  90. package/local-config-example.ts +3 -1
  91. package/package.json +17 -4
  92. package/dist/cjs/components/common/EmojiPreview.js +0 -194
  93. package/dist/es2019/components/common/EmojiPreview.js +0 -152
  94. package/dist/esm/components/common/EmojiPreview.js +0 -170
  95. package/dist/types/components/common/EmojiPreview.d.ts +0 -31
@@ -7,68 +7,32 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
-
16
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
-
18
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19
-
20
10
  var _core = require("@emotion/core");
21
11
 
22
12
  var _error = _interopRequireDefault(require("@atlaskit/icon/glyph/error"));
23
13
 
24
- var _react = require("react");
25
-
26
14
  var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
27
15
 
28
- 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); }; }
29
-
30
- 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; } }
31
-
32
- var EmojiErrorMessage = /*#__PURE__*/function (_PureComponent) {
33
- (0, _inherits2.default)(EmojiErrorMessage, _PureComponent);
34
-
35
- var _super = _createSuper(EmojiErrorMessage);
36
-
37
- function EmojiErrorMessage() {
38
- (0, _classCallCheck2.default)(this, EmojiErrorMessage);
39
- return _super.apply(this, arguments);
40
- }
41
-
42
- (0, _createClass2.default)(EmojiErrorMessage, [{
43
- key: "renderWithTooltip",
44
- value: function renderWithTooltip() {
45
- return (0, _core.jsx)("div", {
46
- css: this.props.messageStyles
47
- }, (0, _core.jsx)(_tooltip.default, {
48
- content: this.props.message,
49
- position: "top"
50
- }, (0, _core.jsx)(_error.default, {
51
- label: "Error",
52
- size: "medium"
53
- })));
54
- }
55
- }, {
56
- key: "renderInline",
57
- value: function renderInline() {
58
- return (0, _core.jsx)("div", {
59
- css: this.props.messageStyles
60
- }, (0, _core.jsx)(_error.default, {
61
- label: "Error",
62
- size: "small"
63
- }), " ", this.props.message);
64
- }
65
- }, {
66
- key: "render",
67
- value: function render() {
68
- return this.props.tooltip ? this.renderWithTooltip() : this.renderInline();
69
- }
70
- }]);
71
- return EmojiErrorMessage;
72
- }(_react.PureComponent);
73
-
74
- exports.default = EmojiErrorMessage;
16
+ /** @jsx jsx */
17
+ var EmojiErrorMessage = function EmojiErrorMessage(props) {
18
+ var messageStyles = props.messageStyles,
19
+ message = props.message,
20
+ tooltip = props.tooltip;
21
+ return tooltip ? (0, _core.jsx)("div", {
22
+ css: messageStyles
23
+ }, (0, _core.jsx)(_tooltip.default, {
24
+ content: message,
25
+ position: "top"
26
+ }, (0, _core.jsx)(_error.default, {
27
+ label: "Error",
28
+ size: "medium"
29
+ }))) : (0, _core.jsx)("div", {
30
+ css: messageStyles
31
+ }, (0, _core.jsx)(_error.default, {
32
+ label: "Error",
33
+ size: "small"
34
+ }), " ", message);
35
+ };
36
+
37
+ var _default = EmojiErrorMessage;
38
+ exports.default = _default;
@@ -21,6 +21,7 @@ var EmojiPreviewComponent = function EmojiPreviewComponent(_ref) {
21
21
  }, (0, _core.jsx)("span", {
22
22
  css: _styles.previewImg
23
23
  }, (0, _core.jsx)(_CachingEmoji.default, {
24
+ key: emoji.id || emoji.shortName,
24
25
  emoji: emoji
25
26
  })), (0, _core.jsx)("div", {
26
27
  css: _styles.previewText
@@ -7,21 +7,13 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = exports.EmojiUploadPicker = void 0;
10
+ exports.default = void 0;
11
11
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
13
 
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
15
 
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
24
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
25
17
 
26
18
  var _core = require("@emotion/core");
27
19
 
@@ -51,10 +43,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
51
43
 
52
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
53
45
 
54
- 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); }; }
55
-
56
- 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; } }
57
-
46
+ /** @jsx jsx */
58
47
  var disallowedReplacementsMap = new Map([[':', ''], ['!', ''], ['@', ''], ['#', ''], ['%', ''], ['^', ''], ['&', ''], ['*', ''], ['(', ''], [')', ''], [' ', '_']]);
59
48
 
60
49
  var sanitizeName = function sanitizeName(name) {
@@ -72,302 +61,255 @@ var toEmojiName = function toEmojiName(uploadName) {
72
61
  return "".concat(name.substr(0, 1).toLocaleUpperCase()).concat(name.substr(1));
73
62
  };
74
63
 
75
- var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
76
- (0, _inherits2.default)(ChooseEmojiFile, _PureComponent);
77
-
78
- var _super = _createSuper(ChooseEmojiFile);
64
+ var ChooseEmojiFile = function ChooseEmojiFile(props) {
65
+ var _props$name = props.name,
66
+ name = _props$name === void 0 ? '' : _props$name,
67
+ onChooseFile = props.onChooseFile,
68
+ onClick = props.onClick,
69
+ onNameChange = props.onNameChange,
70
+ onUploadCancelled = props.onUploadCancelled,
71
+ errorMessage = props.errorMessage,
72
+ intl = props.intl;
73
+ var formatMessage = intl.formatMessage;
74
+ var disableChooser = !name;
75
+ var fileChooserButtonDescriptionId = 'choose.emoji.file.button.screen.reader.description.id';
76
+
77
+ var onKeyDownHandler = function onKeyDownHandler(event) {
78
+ if (event.key === 'Escape') {
79
+ onUploadCancelled();
80
+ }
81
+ };
82
+
83
+ return (0, _core.jsx)("div", {
84
+ css: _styles.emojiUpload
85
+ }, (0, _core.jsx)("div", {
86
+ css: _styles.uploadChooseFileMessage
87
+ }, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.addCustomEmojiLabel, function (message) {
88
+ return (0, _core.jsx)("h5", null, message);
89
+ })), (0, _core.jsx)("div", {
90
+ css: _styles.uploadChooseFileRow
91
+ }, (0, _core.jsx)("span", {
92
+ css: _styles.uploadChooseFileEmojiName
93
+ }, (0, _core.jsx)(_textfield.default, {
94
+ placeholder: formatMessage(_i18n.messages.emojiPlaceholder),
95
+ "aria-label": formatMessage(_i18n.messages.emojiNameAriaLabel),
96
+ maxLength: maxNameLength,
97
+ onChange: onNameChange,
98
+ onKeyDown: onKeyDownHandler,
99
+ value: name,
100
+ isCompact: true,
101
+ autoFocus: true
102
+ })), (0, _core.jsx)("span", {
103
+ css: _styles.uploadChooseFileBrowse
104
+ }, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.emojiChooseFileScreenReaderDescription, function (screenReaderDescription) {
105
+ return (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)("span", {
106
+ hidden: true,
107
+ id: fileChooserButtonDescriptionId
108
+ }, screenReaderDescription), (0, _core.jsx)(_FileChooser.default, {
109
+ label: formatMessage(_i18n.messages.emojiChooseFileTitle),
110
+ onChange: onChooseFile,
111
+ onClick: onClick,
112
+ accept: "image/png,image/jpeg,image/gif",
113
+ ariaDescribedBy: fileChooserButtonDescriptionId,
114
+ isDisabled: disableChooser
115
+ }));
116
+ }))), (0, _core.jsx)("div", {
117
+ css: _styles.emojiUploadBottom
118
+ }, !errorMessage ? (0, _core.jsx)("p", null, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.emojiImageRequirements)) : (0, _core.jsx)(_EmojiErrorMessage.default, {
119
+ messageStyles: _styles.emojiChooseFileErrorMessage,
120
+ message: errorMessage
121
+ })));
122
+ };
79
123
 
80
- function ChooseEmojiFile() {
81
- var _this;
124
+ var EmojiUploadPicker = function EmojiUploadPicker(props) {
125
+ var errorMessage = props.errorMessage,
126
+ initialUploadName = props.initialUploadName,
127
+ onUploadEmoji = props.onUploadEmoji,
128
+ onFileChooserClicked = props.onFileChooserClicked,
129
+ onUploadCancelled = props.onUploadCancelled,
130
+ intl = props.intl;
131
+
132
+ var _useState = (0, _react.useState)(errorMessage ? _internalTypes.UploadStatus.Error : _internalTypes.UploadStatus.Waiting),
133
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
134
+ uploadStatus = _useState2[0],
135
+ setUploadStatus = _useState2[1];
136
+
137
+ var _useState3 = (0, _react.useState)(),
138
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
139
+ chooseEmojiErrorMessage = _useState4[0],
140
+ setChooseEmojiErrorMessage = _useState4[1];
141
+
142
+ var _useState5 = (0, _react.useState)(initialUploadName && sanitizeName(initialUploadName)),
143
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
144
+ name = _useState6[0],
145
+ setName = _useState6[1];
146
+
147
+ var _useState7 = (0, _react.useState)(),
148
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
149
+ filename = _useState8[0],
150
+ setFilename = _useState8[1];
151
+
152
+ var _useState9 = (0, _react.useState)(),
153
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
154
+ previewImage = _useState10[0],
155
+ setPreviewImage = _useState10[1];
156
+
157
+ (0, _react.useEffect)(function () {
158
+ if (errorMessage) {
159
+ setUploadStatus(_internalTypes.UploadStatus.Error);
160
+ return;
161
+ } else {
162
+ if (uploadStatus === _internalTypes.UploadStatus.Error) {
163
+ setUploadStatus(_internalTypes.UploadStatus.Waiting);
164
+ }
165
+ }
166
+ }, [errorMessage, uploadStatus]);
167
+ (0, _react.useEffect)(function () {
168
+ if (initialUploadName) {
169
+ setName(sanitizeName(initialUploadName));
170
+ }
171
+ }, [initialUploadName]);
82
172
 
83
- (0, _classCallCheck2.default)(this, ChooseEmojiFile);
173
+ var onNameChange = function onNameChange(event) {
174
+ var newName = sanitizeName(event.target.value);
84
175
 
85
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
86
- args[_key] = arguments[_key];
176
+ if (name !== newName) {
177
+ setName(newName);
87
178
  }
179
+ };
88
180
 
89
- _this = _super.call.apply(_super, [this].concat(args));
90
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onKeyDown", function (event) {
91
- if (event.key === 'Escape') {
92
- _this.props.onUploadCancelled();
93
- }
94
- });
95
- return _this;
96
- }
97
-
98
- (0, _createClass2.default)(ChooseEmojiFile, [{
99
- key: "render",
100
- value: function render() {
101
- var _this$props = this.props,
102
- _this$props$name = _this$props.name,
103
- name = _this$props$name === void 0 ? '' : _this$props$name,
104
- onChooseFile = _this$props.onChooseFile,
105
- onClick = _this$props.onClick,
106
- onNameChange = _this$props.onNameChange,
107
- errorMessage = _this$props.errorMessage,
108
- intl = _this$props.intl;
109
- var formatMessage = intl.formatMessage;
110
- var disableChooser = !name;
111
- var fileChooserButtonDescriptionId = 'choose.emoji.file.button.screen.reader.description.id'; // Note: FileChooser.accept does not work in Electron due to a bug: https://product-fabric.atlassian.net/browse/FS-1626
112
-
113
- return (0, _core.jsx)("div", {
114
- css: _styles.emojiUpload
115
- }, (0, _core.jsx)("div", {
116
- css: _styles.uploadChooseFileMessage
117
- }, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.addCustomEmojiLabel, function (message) {
118
- return (0, _core.jsx)("h5", null, message);
119
- })), (0, _core.jsx)("div", {
120
- css: _styles.uploadChooseFileRow
121
- }, (0, _core.jsx)("span", {
122
- css: _styles.uploadChooseFileEmojiName
123
- }, (0, _core.jsx)(_textfield.default, {
124
- placeholder: formatMessage(_i18n.messages.emojiPlaceholder),
125
- "aria-label": formatMessage(_i18n.messages.emojiNameAriaLabel),
126
- maxLength: maxNameLength,
127
- onChange: onNameChange,
128
- onKeyDown: this.onKeyDown,
129
- value: name,
130
- isCompact: true,
131
- autoFocus: true
132
- })), (0, _core.jsx)("span", {
133
- css: _styles.uploadChooseFileBrowse
134
- }, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.emojiChooseFileScreenReaderDescription, function (screenReaderDescription) {
135
- return (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)("span", {
136
- hidden: true,
137
- id: fileChooserButtonDescriptionId
138
- }, screenReaderDescription), (0, _core.jsx)(_FileChooser.default, {
139
- label: formatMessage(_i18n.messages.emojiChooseFileTitle),
140
- onChange: onChooseFile,
141
- onClick: onClick,
142
- accept: "image/png,image/jpeg,image/gif",
143
- ariaDescribedBy: fileChooserButtonDescriptionId,
144
- isDisabled: disableChooser
145
- }));
146
- }))), (0, _core.jsx)("div", {
147
- css: _styles.emojiUploadBottom
148
- }, !errorMessage ? (0, _core.jsx)("p", null, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.emojiImageRequirements)) : (0, _core.jsx)(_EmojiErrorMessage.default, {
149
- messageStyles: _styles.emojiChooseFileErrorMessage,
150
- message: errorMessage
151
- })));
181
+ var onAddEmoji = function onAddEmoji() {
182
+ if (uploadStatus === _internalTypes.UploadStatus.Uploading) {
183
+ return;
152
184
  }
153
- }]);
154
- return ChooseEmojiFile;
155
- }(_react.PureComponent);
156
-
157
- var EmojiUploadPicker = /*#__PURE__*/function (_PureComponent2) {
158
- (0, _inherits2.default)(EmojiUploadPicker, _PureComponent2);
159
-
160
- var _super2 = _createSuper(EmojiUploadPicker);
161
-
162
- function EmojiUploadPicker(props) {
163
- var _this2;
164
-
165
- (0, _classCallCheck2.default)(this, EmojiUploadPicker);
166
- _this2 = _super2.call(this, props);
167
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "state", {
168
- uploadStatus: _internalTypes.UploadStatus.Waiting,
169
- chooseEmojiErrorMessage: undefined
170
- });
171
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "onNameChange", function (event) {
172
- var newName = sanitizeName(event.target.value);
173
-
174
- if (_this2.state.name !== newName) {
175
- _this2.setState({
176
- name: newName
177
- });
178
- }
179
- });
180
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "onAddEmoji", function () {
181
- var onUploadEmoji = _this2.props.onUploadEmoji;
182
- var _this2$state = _this2.state,
183
- filename = _this2$state.filename,
184
- name = _this2$state.name,
185
- previewImage = _this2$state.previewImage,
186
- uploadStatus = _this2$state.uploadStatus;
187
-
188
- if (uploadStatus === _internalTypes.UploadStatus.Uploading) {
189
- return;
190
- }
191
185
 
192
- if (filename && name && previewImage) {
193
- var notifyUpload = function notifyUpload(size) {
194
- var width = size.width,
195
- height = size.height;
196
-
197
- _this2.setState({
198
- uploadStatus: _internalTypes.UploadStatus.Uploading
199
- });
200
-
201
- onUploadEmoji({
202
- name: toEmojiName(name),
203
- shortName: ":".concat(name, ":"),
204
- filename: filename,
205
- dataURL: previewImage,
206
- width: width,
207
- height: height
208
- }, uploadStatus === _internalTypes.UploadStatus.Error);
209
- };
210
-
211
- ImageUtil.getNaturalImageSize(previewImage).then(function (size) {
212
- notifyUpload(size);
213
- }).catch(function (error) {
214
- (0, _logger.default)('getNaturalImageSize error', error); // Just set arbitrary size, worse case is it may render
215
- // in wrong aspect ratio in some circumstances.
216
-
217
- notifyUpload({
218
- width: 32,
219
- height: 32
220
- });
221
- });
222
- }
223
- });
224
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "errorOnUpload", function (event) {
225
- (0, _logger.default)('File load error: ', event);
186
+ if (filename && name && previewImage) {
187
+ var notifyUpload = function notifyUpload(size) {
188
+ var width = size.width,
189
+ height = size.height;
190
+ setUploadStatus(_internalTypes.UploadStatus.Uploading);
191
+ onUploadEmoji({
192
+ name: toEmojiName(name),
193
+ shortName: ":".concat(name, ":"),
194
+ filename: filename,
195
+ dataURL: previewImage,
196
+ width: width,
197
+ height: height
198
+ }, uploadStatus === _internalTypes.UploadStatus.Error, clearUploadPicker);
199
+ };
226
200
 
227
- _this2.setState({
228
- chooseEmojiErrorMessage: _i18n.messages.emojiUploadFailed
229
- });
201
+ ImageUtil.getNaturalImageSize(previewImage).then(function (size) {
202
+ notifyUpload(size);
203
+ }).catch(function (error) {
204
+ (0, _logger.default)('getNaturalImageSize error', error); // Just set arbitrary size, worse case is it may render
205
+ // in wrong aspect ratio in some circumstances.
230
206
 
231
- _this2.cancelChooseFile();
232
- });
233
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "onFileLoad", function (file) {
234
- return function (f) {
235
- return ImageUtil.parseImage(f.target.result).then(function () {
236
- var state = {
237
- previewImage: f.target.result,
238
- filename: file.name
239
- };
240
-
241
- _this2.setState(state);
242
- }).catch(function () {
243
- _this2.setState({
244
- chooseEmojiErrorMessage: _i18n.messages.emojiInvalidImage
245
- });
246
-
247
- _this2.cancelChooseFile();
207
+ notifyUpload({
208
+ width: 32,
209
+ height: 32
248
210
  });
249
- };
250
- });
251
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "cancelChooseFile", function () {
252
- _this2.setState({
253
- previewImage: undefined
254
211
  });
255
- });
256
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "onChooseFile", function (event) {
257
- var files = event.target.files;
258
-
259
- if (files.length) {
260
- var reader = new FileReader();
261
- var file = files[0];
262
-
263
- if (ImageUtil.hasFileExceededSize(file)) {
264
- _this2.setState({
265
- chooseEmojiErrorMessage: _i18n.messages.emojiImageTooBig
266
- });
267
-
268
- _this2.cancelChooseFile();
269
-
270
- return;
271
- }
272
-
273
- reader.addEventListener('load', _this2.onFileLoad(file));
274
- reader.addEventListener('abort', _this2.errorOnUpload);
275
- reader.addEventListener('error', _this2.errorOnUpload);
276
- reader.readAsDataURL(file);
277
- } else {
278
- _this2.cancelChooseFile();
279
- }
280
- });
281
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this2), "clearUploadPicker", function () {
282
- _this2.setState({
283
- name: undefined,
284
- previewImage: undefined,
285
- uploadStatus: _internalTypes.UploadStatus.Waiting
286
- });
287
- });
288
-
289
- if (props.errorMessage) {
290
- _this2.state.uploadStatus = _internalTypes.UploadStatus.Error;
291
212
  }
213
+ };
214
+
215
+ var errorOnUpload = function errorOnUpload(event) {
216
+ (0, _logger.default)('File load error: ', event);
217
+ setChooseEmojiErrorMessage(_i18n.messages.emojiUploadFailed);
218
+ cancelChooseFile();
219
+ };
220
+
221
+ var onFileLoad = function onFileLoad(file) {
222
+ return /*#__PURE__*/function () {
223
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(f) {
224
+ return _regenerator.default.wrap(function _callee$(_context) {
225
+ while (1) {
226
+ switch (_context.prev = _context.next) {
227
+ case 0:
228
+ _context.prev = 0;
229
+ setFilename(file.name);
230
+ _context.next = 4;
231
+ return ImageUtil.parseImage(f.target.result);
232
+
233
+ case 4:
234
+ setPreviewImage(f.target.result);
235
+ _context.next = 11;
236
+ break;
237
+
238
+ case 7:
239
+ _context.prev = 7;
240
+ _context.t0 = _context["catch"](0);
241
+ setChooseEmojiErrorMessage(_i18n.messages.emojiInvalidImage);
242
+ cancelChooseFile();
243
+
244
+ case 11:
245
+ case "end":
246
+ return _context.stop();
247
+ }
248
+ }
249
+ }, _callee, null, [[0, 7]]);
250
+ }));
251
+
252
+ return function (_x) {
253
+ return _ref.apply(this, arguments);
254
+ };
255
+ }();
256
+ };
292
257
 
293
- if (props.initialUploadName) {
294
- _this2.state.name = sanitizeName(props.initialUploadName);
295
- }
296
-
297
- return _this2;
298
- }
299
-
300
- (0, _createClass2.default)(EmojiUploadPicker, [{
301
- key: "UNSAFE_componentWillReceiveProps",
302
- value: function UNSAFE_componentWillReceiveProps(nextProps) {
303
- var updatedState = {};
304
-
305
- if (nextProps.errorMessage) {
306
- updatedState.uploadStatus = _internalTypes.UploadStatus.Error;
307
- } else {
308
- if (this.state.uploadStatus === _internalTypes.UploadStatus.Error) {
309
- updatedState.uploadStatus = _internalTypes.UploadStatus.Waiting;
310
- }
311
- }
258
+ var cancelChooseFile = function cancelChooseFile() {
259
+ setPreviewImage(undefined);
260
+ };
312
261
 
313
- if (nextProps.initialUploadName) {
314
- if (!this.state.name) {
315
- updatedState.name = sanitizeName(nextProps.initialUploadName);
316
- }
317
- }
262
+ var onChooseFile = function onChooseFile(event) {
263
+ var files = event.target.files;
318
264
 
319
- this.setState(updatedState);
320
- }
321
- }, {
322
- key: "render",
323
- value: function render() {
324
- var _this3 = this;
325
-
326
- var _this$props2 = this.props,
327
- errorMessage = _this$props2.errorMessage,
328
- onUploadCancelled = _this$props2.onUploadCancelled,
329
- intl = _this$props2.intl;
330
- var _this$state = this.state,
331
- name = _this$state.name,
332
- previewImage = _this$state.previewImage,
333
- uploadStatus = _this$state.uploadStatus,
334
- chooseEmojiErrorMessage = _this$state.chooseEmojiErrorMessage;
335
-
336
- var cancelUpload = function cancelUpload() {
337
- _this3.clearUploadPicker();
338
-
339
- onUploadCancelled();
340
- };
265
+ if (files.length) {
266
+ var reader = new FileReader();
267
+ var file = files[0];
341
268
 
342
- if (name && previewImage) {
343
- return (0, _core.jsx)(_EmojiUploadPreview.default, {
344
- errorMessage: errorMessage,
345
- name: name,
346
- onAddEmoji: this.onAddEmoji,
347
- onUploadCancelled: cancelUpload,
348
- previewImage: previewImage,
349
- uploadStatus: uploadStatus
350
- });
269
+ if (ImageUtil.hasFileExceededSize(file)) {
270
+ setChooseEmojiErrorMessage(_i18n.messages.emojiImageTooBig);
271
+ cancelChooseFile();
272
+ return;
351
273
  }
352
274
 
353
- return (0, _core.jsx)(ChooseEmojiFile, {
354
- name: name,
355
- onChooseFile: this.onChooseFile,
356
- onClick: this.props.onFileChooserClicked,
357
- onNameChange: this.onNameChange,
358
- onUploadCancelled: cancelUpload,
359
- errorMessage: chooseEmojiErrorMessage ? (0, _core.jsx)(_reactIntlNext.FormattedMessage, chooseEmojiErrorMessage) : undefined,
360
- intl: intl
361
- });
275
+ reader.addEventListener('load', onFileLoad(file));
276
+ reader.addEventListener('abort', errorOnUpload);
277
+ reader.addEventListener('error', errorOnUpload);
278
+ reader.readAsDataURL(file);
279
+ } else {
280
+ cancelChooseFile();
362
281
  }
363
- }]);
364
- return EmojiUploadPicker;
365
- }(_react.PureComponent);
366
-
367
- exports.EmojiUploadPicker = EmojiUploadPicker;
282
+ };
283
+
284
+ var clearUploadPicker = function clearUploadPicker() {
285
+ setName(undefined);
286
+ setPreviewImage(undefined);
287
+ setUploadStatus(_internalTypes.UploadStatus.Waiting);
288
+ };
289
+
290
+ var cancelUpload = function cancelUpload() {
291
+ clearUploadPicker();
292
+ onUploadCancelled();
293
+ };
294
+
295
+ return (0, _core.jsx)(_react.default.Fragment, null, name && previewImage ? (0, _core.jsx)(_EmojiUploadPreview.default, {
296
+ errorMessage: errorMessage,
297
+ name: name,
298
+ onAddEmoji: onAddEmoji,
299
+ onUploadCancelled: cancelUpload,
300
+ previewImage: previewImage,
301
+ uploadStatus: uploadStatus
302
+ }) : (0, _core.jsx)(ChooseEmojiFile, {
303
+ name: name,
304
+ onChooseFile: onChooseFile,
305
+ onClick: onFileChooserClicked,
306
+ onNameChange: onNameChange,
307
+ onUploadCancelled: cancelUpload,
308
+ errorMessage: chooseEmojiErrorMessage ? (0, _core.jsx)(_reactIntlNext.FormattedMessage, chooseEmojiErrorMessage) : undefined,
309
+ intl: intl
310
+ }));
311
+ };
368
312
 
369
- var _default = (0, _reactIntlNext.injectIntl)(EmojiUploadPicker, {
370
- forwardRef: true
371
- });
313
+ var _default = (0, _reactIntlNext.injectIntl)(EmojiUploadPicker);
372
314
 
373
315
  exports.default = _default;