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