@atlaskit/emoji 67.0.3 → 67.0.5
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.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/admin.js +0 -2
- package/dist/cjs/api/EmojiLoader.js +1 -8
- package/dist/cjs/api/EmojiRepository.js +16 -80
- package/dist/cjs/api/EmojiRepositoryRegex.js +2 -0
- package/dist/cjs/api/EmojiResource.js +20 -170
- package/dist/cjs/api/EmojiUtils.js +27 -67
- package/dist/cjs/api/internal/Comparators.js +8 -62
- package/dist/cjs/api/internal/UsageFrequencyTracker.js +4 -34
- package/dist/cjs/api/media/MediaEmojiCache.js +8 -58
- package/dist/cjs/api/media/MediaImageLoader.js +4 -28
- package/dist/cjs/api/media/SiteEmojiResource.js +14 -55
- package/dist/cjs/api/media/TokenManager.js +4 -18
- package/dist/cjs/components/common/CachingEmoji.js +18 -52
- package/dist/cjs/components/common/DeleteButton.js +0 -10
- package/dist/cjs/components/common/Emoji.js +44 -102
- package/dist/cjs/components/common/EmojiActions.js +25 -61
- package/dist/cjs/components/common/EmojiButton.js +5 -18
- package/dist/cjs/components/common/EmojiDeletePreview.js +7 -38
- package/dist/cjs/components/common/EmojiErrorMessage.js +3 -9
- package/dist/cjs/components/common/EmojiPlaceholder.js +7 -16
- package/dist/cjs/components/common/EmojiPreviewComponent.js +1 -6
- package/dist/cjs/components/common/EmojiUploadPicker.js +31 -86
- package/dist/cjs/components/common/EmojiUploadPreview.js +7 -36
- package/dist/cjs/components/common/FileChooser.js +5 -18
- package/dist/cjs/components/common/LoadingEmojiComponent.js +5 -24
- package/dist/cjs/components/common/Popup.js +16 -44
- package/dist/cjs/components/common/RecordSelectionDefault.js +0 -7
- package/dist/cjs/components/common/ResourcedEmoji.js +0 -15
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +29 -69
- package/dist/cjs/components/common/RetryableButton.js +4 -19
- package/dist/cjs/components/common/Scrollable.js +6 -36
- package/dist/cjs/components/common/ToneSelector.js +3 -24
- package/dist/cjs/components/common/UfoErrorBoundary.js +1 -19
- package/dist/cjs/components/common/UploadEmoji.js +2 -13
- package/dist/cjs/components/common/internal-types.js +0 -1
- package/dist/cjs/components/common/setSkinToneAriaLabelText.js +0 -6
- package/dist/cjs/components/common/styles.js +9 -17
- package/dist/cjs/components/hooks.js +0 -2
- package/dist/cjs/components/i18n.js +0 -2
- package/dist/cjs/components/picker/CategorySelector.js +4 -50
- package/dist/cjs/components/picker/CategoryTracker.js +3 -14
- package/dist/cjs/components/picker/EmojiPicker.js +3 -42
- package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +2 -10
- package/dist/cjs/components/picker/EmojiPickerComponent.js +59 -140
- package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +7 -14
- package/dist/cjs/components/picker/EmojiPickerFooter.js +1 -8
- package/dist/cjs/components/picker/EmojiPickerList.js +32 -83
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +11 -48
- package/dist/cjs/components/picker/EmojiPickerSizes.js +1 -2
- package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +1 -38
- package/dist/cjs/components/picker/VirtualList.js +11 -41
- package/dist/cjs/components/picker/categories.js +0 -14
- package/dist/cjs/components/picker/styles.js +15 -20
- package/dist/cjs/components/picker/utils.js +0 -4
- package/dist/cjs/components/typeahead/EmojiTypeAhead.js +10 -45
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +11 -74
- package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +7 -37
- package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +10 -63
- package/dist/cjs/components/typeahead/styles.js +2 -4
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +6 -42
- package/dist/cjs/components/uploader/EmojiUploader.js +3 -31
- package/dist/cjs/components/uploader/styles.js +3 -4
- package/dist/cjs/context/EmojiCommonProvider.js +0 -6
- package/dist/cjs/context/EmojiContext.js +0 -2
- package/dist/cjs/context/EmojiContextProvider.js +1 -17
- package/dist/cjs/element.js +0 -4
- package/dist/cjs/hooks/useEmoji.js +5 -20
- package/dist/cjs/hooks/useEmojiContext.js +0 -4
- package/dist/cjs/hooks/usePrevious.js +0 -2
- package/dist/cjs/i18n/cs.js +0 -1
- package/dist/cjs/i18n/da.js +0 -1
- package/dist/cjs/i18n/de.js +0 -1
- package/dist/cjs/i18n/en.js +0 -1
- package/dist/cjs/i18n/en_GB.js +0 -1
- package/dist/cjs/i18n/en_ZZ.js +0 -1
- package/dist/cjs/i18n/es.js +0 -1
- package/dist/cjs/i18n/et.js +0 -1
- package/dist/cjs/i18n/fi.js +0 -1
- package/dist/cjs/i18n/fr.js +0 -1
- package/dist/cjs/i18n/hu.js +0 -1
- package/dist/cjs/i18n/index.js +0 -30
- package/dist/cjs/i18n/it.js +0 -1
- package/dist/cjs/i18n/ja.js +0 -1
- package/dist/cjs/i18n/ko.js +0 -1
- package/dist/cjs/i18n/nb.js +0 -1
- package/dist/cjs/i18n/nl.js +0 -1
- package/dist/cjs/i18n/pl.js +0 -1
- package/dist/cjs/i18n/pt_BR.js +0 -1
- package/dist/cjs/i18n/pt_PT.js +0 -1
- package/dist/cjs/i18n/ru.js +0 -1
- package/dist/cjs/i18n/sk.js +0 -1
- package/dist/cjs/i18n/sv.js +0 -1
- package/dist/cjs/i18n/th.js +0 -1
- package/dist/cjs/i18n/tr.js +0 -1
- package/dist/cjs/i18n/uk.js +0 -1
- package/dist/cjs/i18n/vi.js +0 -1
- package/dist/cjs/i18n/zh.js +0 -1
- package/dist/cjs/i18n/zh_TW.js +0 -1
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/picker.js +0 -2
- package/dist/cjs/resource.js +0 -5
- package/dist/cjs/typeahead.js +0 -3
- package/dist/cjs/types.js +0 -17
- package/dist/cjs/util/DuplicateLimitedQueue.js +13 -31
- package/dist/cjs/util/StoredDuplicateLimitedQueue.js +4 -26
- package/dist/cjs/util/analytics/analytics.js +14 -97
- package/dist/cjs/util/analytics/index.js +0 -4
- package/dist/cjs/util/analytics/samplingUfo.js +3 -59
- package/dist/cjs/util/analytics/ufoExperiences.js +0 -12
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +3 -10
- package/dist/cjs/util/constants.js +5 -5
- package/dist/cjs/util/filters.js +0 -4
- package/dist/cjs/util/image.js +3 -18
- package/dist/cjs/util/logger.js +0 -6
- package/dist/cjs/util/mouse.js +3 -6
- package/dist/cjs/util/shared-styles.js +0 -4
- package/dist/cjs/util/storage-available.js +10 -8
- package/dist/cjs/util/type-helpers.js +2 -57
- package/dist/cjs/util/useInView.js +0 -6
- package/dist/cjs/utils.js +0 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiLoader.js +2 -4
- package/dist/es2019/api/EmojiRepository.js +15 -82
- package/dist/es2019/api/EmojiRepositoryRegex.js +2 -0
- package/dist/es2019/api/EmojiResource.js +21 -114
- package/dist/es2019/api/EmojiUtils.js +11 -18
- package/dist/es2019/api/internal/Comparators.js +12 -48
- package/dist/es2019/api/internal/UsageFrequencyTracker.js +7 -24
- package/dist/es2019/api/media/MediaEmojiCache.js +9 -52
- package/dist/es2019/api/media/MediaImageLoader.js +2 -16
- package/dist/es2019/api/media/SiteEmojiResource.js +11 -31
- package/dist/es2019/api/media/TokenManager.js +4 -14
- package/dist/es2019/components/common/CachingEmoji.js +5 -12
- package/dist/es2019/components/common/DeleteButton.js +2 -3
- package/dist/es2019/components/common/Emoji.js +19 -47
- package/dist/es2019/components/common/EmojiActions.js +3 -16
- package/dist/es2019/components/common/EmojiButton.js +0 -5
- package/dist/es2019/components/common/EmojiDeletePreview.js +0 -11
- package/dist/es2019/components/common/EmojiErrorMessage.js +1 -2
- package/dist/es2019/components/common/EmojiPlaceholder.js +0 -5
- package/dist/es2019/components/common/EmojiPreviewComponent.js +1 -0
- package/dist/es2019/components/common/EmojiUploadPicker.js +2 -25
- package/dist/es2019/components/common/EmojiUploadPreview.js +0 -6
- package/dist/es2019/components/common/FileChooser.js +0 -6
- package/dist/es2019/components/common/LoadingEmojiComponent.js +2 -14
- package/dist/es2019/components/common/Popup.js +4 -22
- package/dist/es2019/components/common/RecordSelectionDefault.js +1 -1
- package/dist/es2019/components/common/ResourcedEmoji.js +1 -6
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +2 -13
- package/dist/es2019/components/common/RetryableButton.js +1 -8
- package/dist/es2019/components/common/Scrollable.js +2 -12
- package/dist/es2019/components/common/ToneSelector.js +2 -8
- package/dist/es2019/components/common/UfoErrorBoundary.js +0 -2
- package/dist/es2019/components/common/UploadEmoji.js +2 -3
- package/dist/es2019/components/common/internal-types.js +0 -1
- package/dist/es2019/components/common/styles.js +12 -8
- package/dist/es2019/components/picker/CategorySelector.js +0 -22
- package/dist/es2019/components/picker/CategoryTracker.js +3 -13
- package/dist/es2019/components/picker/EmojiPicker.js +3 -17
- package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +2 -3
- package/dist/es2019/components/picker/EmojiPickerComponent.js +10 -43
- package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +0 -2
- package/dist/es2019/components/picker/EmojiPickerFooter.js +0 -2
- package/dist/es2019/components/picker/EmojiPickerList.js +10 -45
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +2 -19
- package/dist/es2019/components/picker/EmojiPickerSizes.js +1 -0
- package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +1 -8
- package/dist/es2019/components/picker/VirtualList.js +3 -24
- package/dist/es2019/components/picker/styles.js +22 -10
- package/dist/es2019/components/picker/utils.js +0 -1
- package/dist/es2019/components/typeahead/EmojiTypeAhead.js +4 -21
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +0 -42
- package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +0 -7
- package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +4 -45
- package/dist/es2019/components/typeahead/styles.js +2 -1
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +2 -15
- package/dist/es2019/components/uploader/EmojiUploader.js +2 -10
- package/dist/es2019/components/uploader/styles.js +5 -2
- package/dist/es2019/context/EmojiCommonProvider.js +0 -2
- package/dist/es2019/context/EmojiContextProvider.js +0 -1
- package/dist/es2019/hooks/useEmoji.js +2 -6
- package/dist/es2019/hooks/useEmojiContext.js +1 -1
- package/dist/es2019/index.js +12 -6
- package/dist/es2019/types.js +1 -11
- package/dist/es2019/util/DuplicateLimitedQueue.js +13 -35
- package/dist/es2019/util/StoredDuplicateLimitedQueue.js +5 -12
- package/dist/es2019/util/analytics/analytics.js +7 -23
- package/dist/es2019/util/analytics/samplingUfo.js +6 -32
- package/dist/es2019/util/analytics/ufoExperiences.js +0 -3
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +3 -7
- package/dist/es2019/util/constants.js +5 -4
- package/dist/es2019/util/filters.js +0 -3
- package/dist/es2019/util/image.js +3 -8
- package/dist/es2019/util/mouse.js +3 -3
- package/dist/es2019/util/storage-available.js +10 -7
- package/dist/es2019/util/type-helpers.js +6 -9
- package/dist/es2019/util/useInView.js +0 -2
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiLoader.js +2 -6
- package/dist/esm/api/EmojiRepository.js +16 -71
- package/dist/esm/api/EmojiRepositoryRegex.js +2 -0
- package/dist/esm/api/EmojiResource.js +20 -158
- package/dist/esm/api/EmojiUtils.js +27 -47
- package/dist/esm/api/internal/Comparators.js +12 -53
- package/dist/esm/api/internal/UsageFrequencyTracker.js +5 -29
- package/dist/esm/api/media/MediaEmojiCache.js +9 -55
- package/dist/esm/api/media/MediaImageLoader.js +4 -27
- package/dist/esm/api/media/SiteEmojiResource.js +14 -43
- package/dist/esm/api/media/TokenManager.js +6 -16
- package/dist/esm/components/common/CachingEmoji.js +18 -30
- package/dist/esm/components/common/DeleteButton.js +2 -3
- package/dist/esm/components/common/Emoji.js +44 -78
- package/dist/esm/components/common/EmojiActions.js +25 -40
- package/dist/esm/components/common/EmojiButton.js +4 -9
- package/dist/esm/components/common/EmojiDeletePreview.js +7 -24
- package/dist/esm/components/common/EmojiErrorMessage.js +3 -4
- package/dist/esm/components/common/EmojiPlaceholder.js +6 -11
- package/dist/esm/components/common/EmojiPreviewComponent.js +1 -0
- package/dist/esm/components/common/EmojiUploadPicker.js +30 -64
- package/dist/esm/components/common/EmojiUploadPreview.js +7 -19
- package/dist/esm/components/common/FileChooser.js +5 -11
- package/dist/esm/components/common/LoadingEmojiComponent.js +4 -20
- package/dist/esm/components/common/Popup.js +16 -36
- package/dist/esm/components/common/RecordSelectionDefault.js +1 -1
- package/dist/esm/components/common/ResourcedEmoji.js +1 -6
- package/dist/esm/components/common/ResourcedEmojiComponent.js +29 -51
- package/dist/esm/components/common/RetryableButton.js +4 -11
- package/dist/esm/components/common/Scrollable.js +6 -29
- package/dist/esm/components/common/ToneSelector.js +3 -13
- package/dist/esm/components/common/UfoErrorBoundary.js +1 -13
- package/dist/esm/components/common/UploadEmoji.js +2 -3
- package/dist/esm/components/common/internal-types.js +0 -1
- package/dist/esm/components/common/setSkinToneAriaLabelText.js +0 -2
- package/dist/esm/components/common/styles.js +12 -9
- package/dist/esm/components/picker/CategorySelector.js +4 -32
- package/dist/esm/components/picker/CategoryTracker.js +3 -13
- package/dist/esm/components/picker/EmojiPicker.js +5 -27
- package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +4 -5
- package/dist/esm/components/picker/EmojiPickerComponent.js +60 -114
- package/dist/esm/components/picker/EmojiPickerEmojiRow.js +6 -8
- package/dist/esm/components/picker/EmojiPickerFooter.js +0 -2
- package/dist/esm/components/picker/EmojiPickerList.js +32 -77
- package/dist/esm/components/picker/EmojiPickerListSearch.js +11 -35
- package/dist/esm/components/picker/EmojiPickerSizes.js +1 -0
- package/dist/esm/components/picker/EmojiPickerVirtualItems.js +2 -26
- package/dist/esm/components/picker/VirtualList.js +11 -28
- package/dist/esm/components/picker/styles.js +22 -11
- package/dist/esm/components/picker/utils.js +0 -1
- package/dist/esm/components/typeahead/EmojiTypeAhead.js +11 -39
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +11 -65
- package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +7 -24
- package/dist/esm/components/typeahead/EmojiTypeAheadList.js +10 -53
- package/dist/esm/components/typeahead/styles.js +2 -1
- package/dist/esm/components/uploader/EmojiUploadComponent.js +5 -25
- package/dist/esm/components/uploader/EmojiUploader.js +4 -22
- package/dist/esm/components/uploader/styles.js +5 -2
- package/dist/esm/context/EmojiCommonProvider.js +0 -2
- package/dist/esm/context/EmojiContextProvider.js +1 -6
- package/dist/esm/hooks/useEmoji.js +5 -13
- package/dist/esm/hooks/useEmojiContext.js +1 -1
- package/dist/esm/index.js +12 -6
- package/dist/esm/types.js +1 -11
- package/dist/esm/util/DuplicateLimitedQueue.js +13 -29
- package/dist/esm/util/StoredDuplicateLimitedQueue.js +5 -22
- package/dist/esm/util/analytics/analytics.js +14 -50
- package/dist/esm/util/analytics/samplingUfo.js +3 -51
- package/dist/esm/util/analytics/ufoExperiences.js +0 -3
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +3 -7
- package/dist/esm/util/constants.js +5 -4
- package/dist/esm/util/filters.js +0 -3
- package/dist/esm/util/image.js +3 -8
- package/dist/esm/util/logger.js +0 -2
- package/dist/esm/util/mouse.js +3 -3
- package/dist/esm/util/storage-available.js +10 -7
- package/dist/esm/util/type-helpers.js +2 -12
- package/dist/esm/util/useInView.js +0 -2
- package/dist/esm/version.json +1 -1
- package/dist/types/types.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
-
|
|
4
3
|
/** @jsx jsx */
|
|
5
4
|
import { Component } from 'react';
|
|
6
5
|
import { jsx } from '@emotion/react';
|
|
@@ -12,18 +11,15 @@ import EmojiErrorMessage from './EmojiErrorMessage';
|
|
|
12
11
|
import RetryableButton from './RetryableButton';
|
|
13
12
|
import { cancelButton, deleteFooter, deletePreview, deleteText, emojiDeleteErrorMessage, previewButtonGroup } from './styles';
|
|
14
13
|
export const emojiDeletePreviewTestId = 'emoji-delete-preview';
|
|
15
|
-
|
|
16
14
|
class EmojiDeletePreview extends Component {
|
|
17
15
|
constructor(props) {
|
|
18
16
|
super(props);
|
|
19
|
-
|
|
20
17
|
_defineProperty(this, "onSubmit", () => {
|
|
21
18
|
const {
|
|
22
19
|
emoji,
|
|
23
20
|
onDeleteEmoji,
|
|
24
21
|
onCloseDelete
|
|
25
22
|
} = this.props;
|
|
26
|
-
|
|
27
23
|
if (!this.state.loading) {
|
|
28
24
|
this.setState({
|
|
29
25
|
loading: true
|
|
@@ -33,7 +29,6 @@ class EmojiDeletePreview extends Component {
|
|
|
33
29
|
onCloseDelete();
|
|
34
30
|
return;
|
|
35
31
|
}
|
|
36
|
-
|
|
37
32
|
this.setState({
|
|
38
33
|
loading: false,
|
|
39
34
|
error: true
|
|
@@ -41,17 +36,14 @@ class EmojiDeletePreview extends Component {
|
|
|
41
36
|
});
|
|
42
37
|
}
|
|
43
38
|
});
|
|
44
|
-
|
|
45
39
|
_defineProperty(this, "onCancel", () => {
|
|
46
40
|
this.props.onCloseDelete();
|
|
47
41
|
});
|
|
48
|
-
|
|
49
42
|
this.state = {
|
|
50
43
|
loading: false,
|
|
51
44
|
error: false
|
|
52
45
|
};
|
|
53
46
|
}
|
|
54
|
-
|
|
55
47
|
UNSAFE_componentWillUpdate(nextProps) {
|
|
56
48
|
if (nextProps.emoji.id !== this.props.emoji.id) {
|
|
57
49
|
this.setState({
|
|
@@ -59,7 +51,6 @@ class EmojiDeletePreview extends Component {
|
|
|
59
51
|
});
|
|
60
52
|
}
|
|
61
53
|
}
|
|
62
|
-
|
|
63
54
|
render() {
|
|
64
55
|
const {
|
|
65
56
|
emoji,
|
|
@@ -103,7 +94,5 @@ class EmojiDeletePreview extends Component {
|
|
|
103
94
|
css: cancelButton
|
|
104
95
|
}, jsx(FormattedMessage, messages.cancelLabel)))));
|
|
105
96
|
}
|
|
106
|
-
|
|
107
97
|
}
|
|
108
|
-
|
|
109
98
|
export default injectIntl(EmojiDeletePreview);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
|
+
|
|
2
3
|
import { jsx } from '@emotion/react';
|
|
3
4
|
import Tooltip from '@atlaskit/tooltip';
|
|
4
5
|
import ErrorIcon from '@atlaskit/icon/glyph/error';
|
|
5
6
|
export const emojiErrorMessageTestId = 'emoji-error-message';
|
|
6
7
|
export const emojiErrorMessageTooltipTestId = 'emoji-error-message-tooltip';
|
|
7
8
|
export const emojiErrorIconTestId = 'emoji-error-icon';
|
|
8
|
-
|
|
9
9
|
const EmojiErrorMessage = props => {
|
|
10
10
|
const {
|
|
11
11
|
messageStyles,
|
|
@@ -31,5 +31,4 @@ const EmojiErrorMessage = props => {
|
|
|
31
31
|
size: "small"
|
|
32
32
|
}), " ", message);
|
|
33
33
|
};
|
|
34
|
-
|
|
35
34
|
export default EmojiErrorMessage;
|
|
@@ -3,7 +3,6 @@ import { jsx } from '@emotion/react';
|
|
|
3
3
|
import { defaultEmojiHeight } from '../../util/constants';
|
|
4
4
|
import { placeholder, placeholderContainer, placeholderContainerAnimated } from './styles';
|
|
5
5
|
export const emojiPlaceholderTestId = shortName => `emoji-placeholder-${shortName}`;
|
|
6
|
-
|
|
7
6
|
const EmojiPlaceholder = props => {
|
|
8
7
|
const {
|
|
9
8
|
shortName,
|
|
@@ -14,17 +13,14 @@ const EmojiPlaceholder = props => {
|
|
|
14
13
|
} = props;
|
|
15
14
|
let scaledWidth;
|
|
16
15
|
let scaledHeight;
|
|
17
|
-
|
|
18
16
|
if (representation && size) {
|
|
19
17
|
const width = representation.width;
|
|
20
18
|
const height = representation.height;
|
|
21
|
-
|
|
22
19
|
if (width && height) {
|
|
23
20
|
scaledWidth = size / height * width;
|
|
24
21
|
scaledHeight = size;
|
|
25
22
|
}
|
|
26
23
|
}
|
|
27
|
-
|
|
28
24
|
const width = scaledWidth || size;
|
|
29
25
|
const height = scaledHeight || size;
|
|
30
26
|
const style = {
|
|
@@ -43,5 +39,4 @@ const EmojiPlaceholder = props => {
|
|
|
43
39
|
title: showTooltip ? shortName : ''
|
|
44
40
|
});
|
|
45
41
|
};
|
|
46
|
-
|
|
47
42
|
export default EmojiPlaceholder;
|
|
@@ -15,7 +15,6 @@ import { UploadStatus } from './internal-types';
|
|
|
15
15
|
import { closeEmojiUploadButton, emojiChooseFileErrorMessage, emojiUpload, emojiUploadBottom, emojiUploadTop, uploadChooseFileBrowse, uploadChooseFileEmojiName, uploadChooseFileMessage, uploadChooseFileRow } from './styles';
|
|
16
16
|
export const uploadEmojiNameInputTestId = 'upload-emoji-name-input';
|
|
17
17
|
const disallowedReplacementsMap = new Map([[':', ''], ['!', ''], ['@', ''], ['#', ''], ['%', ''], ['^', ''], ['&', ''], ['*', ''], ['(', ''], [')', ''], [' ', '_']]);
|
|
18
|
-
|
|
19
18
|
const sanitizeName = name => {
|
|
20
19
|
// prevent / replace certain characters, allow others
|
|
21
20
|
disallowedReplacementsMap.forEach((replaceWith, exclude) => {
|
|
@@ -23,14 +22,11 @@ const sanitizeName = name => {
|
|
|
23
22
|
});
|
|
24
23
|
return name;
|
|
25
24
|
};
|
|
26
|
-
|
|
27
25
|
const maxNameLength = 50;
|
|
28
|
-
|
|
29
26
|
const toEmojiName = uploadName => {
|
|
30
27
|
const name = uploadName.split('_').join(' ');
|
|
31
28
|
return `${name.substr(0, 1).toLocaleUpperCase()}${name.substr(1)}`;
|
|
32
29
|
};
|
|
33
|
-
|
|
34
30
|
const ChooseEmojiFile = props => {
|
|
35
31
|
const {
|
|
36
32
|
name = '',
|
|
@@ -46,13 +42,11 @@ const ChooseEmojiFile = props => {
|
|
|
46
42
|
} = intl;
|
|
47
43
|
const disableChooser = !name;
|
|
48
44
|
const fileChooserButtonDescriptionId = 'choose.emoji.file.button.screen.reader.description.id';
|
|
49
|
-
|
|
50
45
|
const onKeyDownHandler = event => {
|
|
51
46
|
if (event.key === 'Escape') {
|
|
52
47
|
onUploadCancelled();
|
|
53
48
|
}
|
|
54
49
|
};
|
|
55
|
-
|
|
56
50
|
return jsx("div", {
|
|
57
51
|
css: emojiUpload
|
|
58
52
|
}, jsx("div", {
|
|
@@ -103,7 +97,6 @@ const ChooseEmojiFile = props => {
|
|
|
103
97
|
message: errorMessage
|
|
104
98
|
})));
|
|
105
99
|
};
|
|
106
|
-
|
|
107
100
|
const EmojiUploadPicker = props => {
|
|
108
101
|
const {
|
|
109
102
|
errorMessage,
|
|
@@ -133,20 +126,16 @@ const EmojiUploadPicker = props => {
|
|
|
133
126
|
setName(sanitizeName(initialUploadName));
|
|
134
127
|
}
|
|
135
128
|
}, [initialUploadName]);
|
|
136
|
-
|
|
137
129
|
const onNameChange = event => {
|
|
138
130
|
let newName = sanitizeName(event.target.value);
|
|
139
|
-
|
|
140
131
|
if (name !== newName) {
|
|
141
132
|
setName(newName);
|
|
142
133
|
}
|
|
143
134
|
};
|
|
144
|
-
|
|
145
135
|
const onAddEmoji = () => {
|
|
146
136
|
if (uploadStatus === UploadStatus.Uploading) {
|
|
147
137
|
return;
|
|
148
138
|
}
|
|
149
|
-
|
|
150
139
|
if (filename && name && previewImage) {
|
|
151
140
|
const notifyUpload = size => {
|
|
152
141
|
const {
|
|
@@ -163,13 +152,12 @@ const EmojiUploadPicker = props => {
|
|
|
163
152
|
height
|
|
164
153
|
}, uploadStatus === UploadStatus.Error, clearUploadPicker);
|
|
165
154
|
};
|
|
166
|
-
|
|
167
155
|
ImageUtil.getNaturalImageSize(previewImage).then(size => {
|
|
168
156
|
notifyUpload(size);
|
|
169
157
|
}).catch(error => {
|
|
170
|
-
debug('getNaturalImageSize error', error);
|
|
158
|
+
debug('getNaturalImageSize error', error);
|
|
159
|
+
// Just set arbitrary size, worse case is it may render
|
|
171
160
|
// in wrong aspect ratio in some circumstances.
|
|
172
|
-
|
|
173
161
|
notifyUpload({
|
|
174
162
|
width: 32,
|
|
175
163
|
height: 32
|
|
@@ -177,13 +165,11 @@ const EmojiUploadPicker = props => {
|
|
|
177
165
|
});
|
|
178
166
|
}
|
|
179
167
|
};
|
|
180
|
-
|
|
181
168
|
const errorOnUpload = event => {
|
|
182
169
|
debug('File load error: ', event);
|
|
183
170
|
setChooseEmojiErrorMessage(messages.emojiUploadFailed);
|
|
184
171
|
cancelChooseFile();
|
|
185
172
|
};
|
|
186
|
-
|
|
187
173
|
const onFileLoad = file => async f => {
|
|
188
174
|
try {
|
|
189
175
|
setFilename(file.name);
|
|
@@ -194,24 +180,19 @@ const EmojiUploadPicker = props => {
|
|
|
194
180
|
cancelChooseFile();
|
|
195
181
|
}
|
|
196
182
|
};
|
|
197
|
-
|
|
198
183
|
const cancelChooseFile = () => {
|
|
199
184
|
setPreviewImage(undefined);
|
|
200
185
|
};
|
|
201
|
-
|
|
202
186
|
const onChooseFile = event => {
|
|
203
187
|
const files = event.target.files;
|
|
204
|
-
|
|
205
188
|
if (files.length) {
|
|
206
189
|
const reader = new FileReader();
|
|
207
190
|
const file = files[0];
|
|
208
|
-
|
|
209
191
|
if (ImageUtil.hasFileExceededSize(file)) {
|
|
210
192
|
setChooseEmojiErrorMessage(messages.emojiImageTooBig);
|
|
211
193
|
cancelChooseFile();
|
|
212
194
|
return;
|
|
213
195
|
}
|
|
214
|
-
|
|
215
196
|
reader.addEventListener('load', onFileLoad(file));
|
|
216
197
|
reader.addEventListener('abort', errorOnUpload);
|
|
217
198
|
reader.addEventListener('error', errorOnUpload);
|
|
@@ -220,18 +201,15 @@ const EmojiUploadPicker = props => {
|
|
|
220
201
|
cancelChooseFile();
|
|
221
202
|
}
|
|
222
203
|
};
|
|
223
|
-
|
|
224
204
|
const clearUploadPicker = () => {
|
|
225
205
|
setName(undefined);
|
|
226
206
|
setPreviewImage(undefined);
|
|
227
207
|
setUploadStatus(UploadStatus.Waiting);
|
|
228
208
|
};
|
|
229
|
-
|
|
230
209
|
const cancelUpload = () => {
|
|
231
210
|
clearUploadPicker();
|
|
232
211
|
onUploadCancelled();
|
|
233
212
|
};
|
|
234
|
-
|
|
235
213
|
return jsx(React.Fragment, null, name && previewImage ? jsx(EmojiUploadPreview, {
|
|
236
214
|
errorMessage: errorMessage,
|
|
237
215
|
name: name,
|
|
@@ -249,5 +227,4 @@ const EmojiUploadPicker = props => {
|
|
|
249
227
|
intl: intl
|
|
250
228
|
}));
|
|
251
229
|
};
|
|
252
|
-
|
|
253
230
|
export default injectIntl(EmojiUploadPicker);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
|
|
3
2
|
/** @jsx jsx */
|
|
4
3
|
import { PureComponent } from 'react';
|
|
5
4
|
import { jsx } from '@emotion/react';
|
|
@@ -14,7 +13,6 @@ import RetryableButton from './RetryableButton';
|
|
|
14
13
|
import { bigEmojiPreview, cancelButton, emojiPreviewErrorMessage, uploadAddRow, uploadPreview, uploadPreviewFooter, uploadPreviewText } from './styles';
|
|
15
14
|
export const uploadPreviewTestId = 'upload-preview';
|
|
16
15
|
export const cancelUploadButtonTestId = 'cancel-upload-button';
|
|
17
|
-
|
|
18
16
|
class EmojiUploadPreview extends PureComponent {
|
|
19
17
|
render() {
|
|
20
18
|
const {
|
|
@@ -30,7 +28,6 @@ class EmojiUploadPreview extends PureComponent {
|
|
|
30
28
|
formatMessage
|
|
31
29
|
} = intl;
|
|
32
30
|
let emojiComponent;
|
|
33
|
-
|
|
34
31
|
if (previewImage) {
|
|
35
32
|
const emoji = {
|
|
36
33
|
shortName: `:${name}:`,
|
|
@@ -47,7 +44,6 @@ class EmojiUploadPreview extends PureComponent {
|
|
|
47
44
|
emoji: emoji
|
|
48
45
|
});
|
|
49
46
|
}
|
|
50
|
-
|
|
51
47
|
const uploading = uploadStatus === UploadStatus.Uploading;
|
|
52
48
|
return jsx("div", {
|
|
53
49
|
css: uploadPreviewFooter
|
|
@@ -82,7 +78,5 @@ class EmojiUploadPreview extends PureComponent {
|
|
|
82
78
|
testId: cancelUploadButtonTestId
|
|
83
79
|
}, jsx(FormattedMessage, messages.cancelLabel))));
|
|
84
80
|
}
|
|
85
|
-
|
|
86
81
|
}
|
|
87
|
-
|
|
88
82
|
export default injectIntl(EmojiUploadPreview);
|
|
@@ -2,7 +2,6 @@ import React, { useRef } from 'react';
|
|
|
2
2
|
import AkButton from '@atlaskit/button/custom-theme-button';
|
|
3
3
|
export const chooseFileButtonTestId = 'choose-file-button';
|
|
4
4
|
export const fileUploadInputTestId = 'file-upload';
|
|
5
|
-
|
|
6
5
|
const FileChooser = props => {
|
|
7
6
|
const {
|
|
8
7
|
accept,
|
|
@@ -13,19 +12,15 @@ const FileChooser = props => {
|
|
|
13
12
|
onClick
|
|
14
13
|
} = props;
|
|
15
14
|
const filePickerRef = useRef(null);
|
|
16
|
-
|
|
17
15
|
const handleOnChooseFile = () => {
|
|
18
16
|
if (!filePickerRef.current) {
|
|
19
17
|
return;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
if (onClick) {
|
|
23
20
|
onClick();
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
filePickerRef.current.click();
|
|
27
23
|
};
|
|
28
|
-
|
|
29
24
|
return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(AkButton, {
|
|
30
25
|
onClick: handleOnChooseFile,
|
|
31
26
|
isDisabled: isDisabled,
|
|
@@ -43,5 +38,4 @@ const FileChooser = props => {
|
|
|
43
38
|
"data-testid": fileUploadInputTestId
|
|
44
39
|
}));
|
|
45
40
|
};
|
|
46
|
-
|
|
47
41
|
export default FileChooser;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import { Component } from 'react';
|
|
3
|
-
|
|
4
3
|
/**
|
|
5
4
|
* A base class for components that don't want to start rendering
|
|
6
5
|
* until the EmojiProvider is resolved.
|
|
@@ -10,17 +9,14 @@ import { Component } from 'react';
|
|
|
10
9
|
export default class LoadingEmojiComponent extends Component {
|
|
11
10
|
constructor(props, _state) {
|
|
12
11
|
super(props);
|
|
13
|
-
|
|
14
12
|
_defineProperty(this, "isUnmounted", false);
|
|
15
|
-
|
|
16
13
|
_defineProperty(this, "loaded", state => !!state.asyncLoadedComponent && !!state.loadedEmojiProvider);
|
|
14
|
+
this.state = _state;
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
// initializing here instead of componentDidMount to avoid needless
|
|
19
17
|
// rerendering if emojiProvider resolves immediately.
|
|
20
|
-
|
|
21
18
|
this.loadEmojiProvider(this.props.emojiProvider);
|
|
22
19
|
}
|
|
23
|
-
|
|
24
20
|
componentDidMount() {
|
|
25
21
|
// check for the module has not yet been loaded
|
|
26
22
|
// state.asyncLoadedComponent should be initialised
|
|
@@ -29,15 +25,12 @@ export default class LoadingEmojiComponent extends Component {
|
|
|
29
25
|
this.asyncLoadComponent();
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
|
-
|
|
33
28
|
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
34
29
|
this.loadEmojiProvider(nextProps.emojiProvider);
|
|
35
30
|
}
|
|
36
|
-
|
|
37
31
|
componentWillUnmount() {
|
|
38
32
|
this.isUnmounted = true;
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
loadEmojiProvider(futureEmojiProvider) {
|
|
42
35
|
futureEmojiProvider.then(loadedEmojiProvider => {
|
|
43
36
|
if (!this.isUnmounted) {
|
|
@@ -53,7 +46,6 @@ export default class LoadingEmojiComponent extends Component {
|
|
|
53
46
|
}
|
|
54
47
|
});
|
|
55
48
|
}
|
|
56
|
-
|
|
57
49
|
setAsyncState(asyncLoadedComponent) {
|
|
58
50
|
if (!this.isUnmounted) {
|
|
59
51
|
this.setState({
|
|
@@ -61,11 +53,9 @@ export default class LoadingEmojiComponent extends Component {
|
|
|
61
53
|
});
|
|
62
54
|
}
|
|
63
55
|
}
|
|
64
|
-
|
|
65
56
|
renderLoading() {
|
|
66
57
|
return null;
|
|
67
58
|
}
|
|
68
|
-
|
|
69
59
|
render() {
|
|
70
60
|
if (this.loaded(this.state)) {
|
|
71
61
|
const {
|
|
@@ -74,8 +64,6 @@ export default class LoadingEmojiComponent extends Component {
|
|
|
74
64
|
} = this.state;
|
|
75
65
|
return this.renderLoaded(loadedEmojiProvider, asyncLoadedComponent);
|
|
76
66
|
}
|
|
77
|
-
|
|
78
67
|
return this.renderLoading();
|
|
79
68
|
}
|
|
80
|
-
|
|
81
69
|
}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import ReactDOM from 'react-dom';
|
|
3
|
-
|
|
4
3
|
const getTargetNode = target => {
|
|
5
4
|
if (typeof target === 'string') {
|
|
6
5
|
return document.querySelector(target);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
}
|
|
7
|
+
// Expect to be an element
|
|
10
8
|
return target;
|
|
11
9
|
};
|
|
12
|
-
|
|
13
10
|
const Popup = props => {
|
|
14
11
|
const {
|
|
15
12
|
relativePosition = 'auto',
|
|
@@ -23,7 +20,6 @@ const Popup = props => {
|
|
|
23
20
|
const [debounced, setDebounced] = useState(null);
|
|
24
21
|
const applyBelowPosition = useCallback(() => {
|
|
25
22
|
const targetNode = getTargetNode(target);
|
|
26
|
-
|
|
27
23
|
if (targetNode && popup.current) {
|
|
28
24
|
const box = targetNode.getBoundingClientRect();
|
|
29
25
|
const top = box.bottom + (offsetY || 0);
|
|
@@ -37,9 +33,7 @@ const Popup = props => {
|
|
|
37
33
|
if (typeof window === 'undefined') {
|
|
38
34
|
return;
|
|
39
35
|
}
|
|
40
|
-
|
|
41
36
|
const targetNode = getTargetNode(target);
|
|
42
|
-
|
|
43
37
|
if (targetNode && popup.current) {
|
|
44
38
|
const box = targetNode.getBoundingClientRect();
|
|
45
39
|
const bottom = window.innerHeight - box.top + (offsetY || 0);
|
|
@@ -53,18 +47,15 @@ const Popup = props => {
|
|
|
53
47
|
if (typeof window === 'undefined') {
|
|
54
48
|
return;
|
|
55
49
|
}
|
|
56
|
-
|
|
57
50
|
if (relativePosition === 'above') {
|
|
58
51
|
applyAbovePosition();
|
|
59
52
|
} else if (relativePosition === 'below') {
|
|
60
53
|
applyBelowPosition();
|
|
61
54
|
} else {
|
|
62
55
|
const targetNode = getTargetNode(target);
|
|
63
|
-
|
|
64
56
|
if (targetNode) {
|
|
65
57
|
const box = targetNode.getBoundingClientRect();
|
|
66
58
|
const viewPortHeight = window.innerHeight;
|
|
67
|
-
|
|
68
59
|
if (box.top < viewPortHeight / 2) {
|
|
69
60
|
applyBelowPosition();
|
|
70
61
|
} else {
|
|
@@ -72,7 +63,6 @@ const Popup = props => {
|
|
|
72
63
|
}
|
|
73
64
|
}
|
|
74
65
|
}
|
|
75
|
-
|
|
76
66
|
if (zIndex && popup.current) {
|
|
77
67
|
popup.current.style.zIndex = `${zIndex}`;
|
|
78
68
|
}
|
|
@@ -82,12 +72,10 @@ const Popup = props => {
|
|
|
82
72
|
clearTimeout(debounced);
|
|
83
73
|
setDebounced(null);
|
|
84
74
|
}
|
|
85
|
-
|
|
86
75
|
if (typeof window === 'undefined') {
|
|
87
76
|
return;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
77
|
+
}
|
|
78
|
+
// Timeout set to 30ms as to not throttle IE11
|
|
91
79
|
const debounceId = window.setTimeout(() => {
|
|
92
80
|
applyAbsolutePosition();
|
|
93
81
|
setDebounced(null);
|
|
@@ -98,27 +86,22 @@ const Popup = props => {
|
|
|
98
86
|
if (!popup.current) {
|
|
99
87
|
return;
|
|
100
88
|
}
|
|
101
|
-
|
|
102
89
|
ReactDOM.render(children, popup.current);
|
|
103
90
|
}, [children]);
|
|
104
91
|
useEffect(() => {
|
|
105
92
|
popup.current = document.createElement('div');
|
|
106
93
|
document.body.appendChild(popup.current);
|
|
107
94
|
popup.current.style.position = 'absolute';
|
|
108
|
-
|
|
109
95
|
if (typeof window !== 'undefined') {
|
|
110
96
|
window.addEventListener('resize', handleResize);
|
|
111
97
|
}
|
|
112
|
-
|
|
113
98
|
applyAbsolutePosition();
|
|
114
99
|
renderPopup();
|
|
115
100
|
return () => {
|
|
116
101
|
if (typeof window === 'undefined') {
|
|
117
102
|
return;
|
|
118
103
|
}
|
|
119
|
-
|
|
120
104
|
window.removeEventListener('resize', handleResize);
|
|
121
|
-
|
|
122
105
|
if (popup.current) {
|
|
123
106
|
ReactDOM.unmountComponentAtNode(popup.current);
|
|
124
107
|
document.body.removeChild(popup.current);
|
|
@@ -127,5 +110,4 @@ const Popup = props => {
|
|
|
127
110
|
}, [applyAbsolutePosition, handleResize, renderPopup]);
|
|
128
111
|
return /*#__PURE__*/React.createElement("div", null);
|
|
129
112
|
};
|
|
130
|
-
|
|
131
113
|
export default Popup;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { recordFailed, recordSucceeded, ufoExperiences } from '../../util/analytics';
|
|
2
2
|
import { extractErrorInfo } from '../../util/analytics/analytics';
|
|
3
|
+
|
|
3
4
|
/**
|
|
4
5
|
* A function that will wrap any configured Emoji 'onSelection' function to ensure recordSelection is always
|
|
5
6
|
* called.
|
|
@@ -8,7 +9,6 @@ import { extractErrorInfo } from '../../util/analytics/analytics';
|
|
|
8
9
|
* @param onSelect the onSelect function that is explicitly configured on the Emoji component.
|
|
9
10
|
* @param fireAnalytics a function used to fire analytics events.
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
12
|
export const createRecordSelectionDefault = (provider, onSelect, fireAnalytics) => {
|
|
13
13
|
return (emojiId, emoji, event) => {
|
|
14
14
|
try {
|
|
@@ -4,12 +4,9 @@ import { UfoErrorBoundary } from './UfoErrorBoundary';
|
|
|
4
4
|
import { sampledUfoRenderedEmoji, ufoExperiences } from '../../util/analytics';
|
|
5
5
|
import { SAMPLING_RATE_EMOJI_RENDERED_EXP } from '../../util/constants';
|
|
6
6
|
const ResourcedEmojiComponent = Loadable({
|
|
7
|
-
loader: () => import(
|
|
8
|
-
/* webpackChunkName: "@atlaskit-internal_resourcedEmojiComponent" */
|
|
9
|
-
'./ResourcedEmojiComponent').then(component => component.ResourcedEmojiComponent),
|
|
7
|
+
loader: () => import( /* webpackChunkName: "@atlaskit-internal_resourcedEmojiComponent" */'./ResourcedEmojiComponent').then(component => component.ResourcedEmojiComponent),
|
|
10
8
|
loading: () => null
|
|
11
9
|
});
|
|
12
|
-
|
|
13
10
|
const ResourcedEmoji = props => {
|
|
14
11
|
const {
|
|
15
12
|
emojiId
|
|
@@ -18,7 +15,6 @@ const ResourcedEmoji = props => {
|
|
|
18
15
|
if (!emojiId) {
|
|
19
16
|
return;
|
|
20
17
|
}
|
|
21
|
-
|
|
22
18
|
sampledUfoRenderedEmoji(emojiId).start({
|
|
23
19
|
samplingRate: SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
24
20
|
});
|
|
@@ -39,5 +35,4 @@ const ResourcedEmoji = props => {
|
|
|
39
35
|
experiences: [ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName)]
|
|
40
36
|
}, /*#__PURE__*/React.createElement(ResourcedEmojiComponent, props));
|
|
41
37
|
};
|
|
42
|
-
|
|
43
38
|
export default ResourcedEmoji;
|
|
@@ -8,13 +8,11 @@ import { sampledUfoRenderedEmoji } from '../../util/analytics';
|
|
|
8
8
|
import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
|
|
9
9
|
import { hasUfoMarked } from '../../util/analytics/ufoExperiences';
|
|
10
10
|
var ResourcedEmojiComponentRenderStatesEnum;
|
|
11
|
-
|
|
12
11
|
(function (ResourcedEmojiComponentRenderStatesEnum) {
|
|
13
12
|
ResourcedEmojiComponentRenderStatesEnum["INITIAL"] = "INITIAL";
|
|
14
13
|
ResourcedEmojiComponentRenderStatesEnum["FALLBACK"] = "FALLBACK";
|
|
15
14
|
ResourcedEmojiComponentRenderStatesEnum["EMOJI"] = "EMOJI";
|
|
16
15
|
})(ResourcedEmojiComponentRenderStatesEnum || (ResourcedEmojiComponentRenderStatesEnum = {}));
|
|
17
|
-
|
|
18
16
|
export const ResourcedEmojiComponent = props => {
|
|
19
17
|
const {
|
|
20
18
|
emojiProvider,
|
|
@@ -44,16 +42,12 @@ export const ResourcedEmojiComponent = props => {
|
|
|
44
42
|
}
|
|
45
43
|
});
|
|
46
44
|
}
|
|
47
|
-
|
|
48
45
|
const foundEmoji = _emojiProvider.fetchByEmojiId(emojiId, optimisticFetch);
|
|
49
|
-
|
|
50
46
|
sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_START);
|
|
51
|
-
|
|
52
47
|
if (isPromise(foundEmoji)) {
|
|
53
48
|
setLoaded(false);
|
|
54
49
|
foundEmoji.then(emoji => {
|
|
55
50
|
setEmoji(emoji);
|
|
56
|
-
|
|
57
51
|
if (!emoji) {
|
|
58
52
|
// emoji is undefined
|
|
59
53
|
sampledUfoRenderedEmoji(emojiId).failure({
|
|
@@ -97,7 +91,6 @@ export const ResourcedEmojiComponent = props => {
|
|
|
97
91
|
if (!emojiId) {
|
|
98
92
|
return;
|
|
99
93
|
}
|
|
100
|
-
|
|
101
94
|
if (!hasUfoMarked(sampledUfoRenderedEmoji(emojiId), UfoEmojiTimings.FMP_END)) {
|
|
102
95
|
sampledUfoRenderedEmoji(emojiId).markFMP();
|
|
103
96
|
}
|
|
@@ -106,7 +99,6 @@ export const ResourcedEmojiComponent = props => {
|
|
|
106
99
|
if (!resolvedEmojiProvider || !emojiId) {
|
|
107
100
|
return;
|
|
108
101
|
}
|
|
109
|
-
|
|
110
102
|
fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
|
|
111
103
|
}, [resolvedEmojiProvider, emojiId, optimistic, fetchOrGetEmoji]);
|
|
112
104
|
useEffect(() => {
|
|
@@ -120,7 +112,6 @@ export const ResourcedEmojiComponent = props => {
|
|
|
120
112
|
} else if (!emoji && loaded || imageLoadError) {
|
|
121
113
|
return ResourcedEmojiComponentRenderStatesEnum.FALLBACK;
|
|
122
114
|
}
|
|
123
|
-
|
|
124
115
|
return ResourcedEmojiComponentRenderStatesEnum.EMOJI;
|
|
125
116
|
}, [emoji, loaded, optimisticImageURL, imageLoadError]);
|
|
126
117
|
const optimisticEmojiDescription = useMemo(() => {
|
|
@@ -130,7 +121,8 @@ export const ResourcedEmojiComponent = props => {
|
|
|
130
121
|
width,
|
|
131
122
|
height
|
|
132
123
|
} = emoji.representation;
|
|
133
|
-
return {
|
|
124
|
+
return {
|
|
125
|
+
...emoji,
|
|
134
126
|
representation: {
|
|
135
127
|
width,
|
|
136
128
|
height,
|
|
@@ -153,10 +145,8 @@ export const ResourcedEmojiComponent = props => {
|
|
|
153
145
|
};
|
|
154
146
|
}
|
|
155
147
|
}
|
|
156
|
-
|
|
157
148
|
return emoji;
|
|
158
149
|
}, [emoji, optimisticImageURL, fallback, fitToHeight, id, shortName]);
|
|
159
|
-
|
|
160
150
|
const handleOnLoadError = emojiId => {
|
|
161
151
|
setImageLoadError(true);
|
|
162
152
|
sampledUfoRenderedEmoji(emojiId).failure({
|
|
@@ -167,7 +157,6 @@ export const ResourcedEmojiComponent = props => {
|
|
|
167
157
|
}
|
|
168
158
|
});
|
|
169
159
|
};
|
|
170
|
-
|
|
171
160
|
return /*#__PURE__*/React.createElement(EmojiCommonProvider, {
|
|
172
161
|
emojiProvider: resolvedEmojiProvider
|
|
173
162
|
}, /*#__PURE__*/React.createElement("span", {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @jsx jsx */
|
|
2
|
+
|
|
2
3
|
import { FormattedMessage } from 'react-intl-next';
|
|
3
4
|
import { jsx } from '@emotion/react';
|
|
4
5
|
import AkButton from '@atlaskit/button/custom-theme-button';
|
|
@@ -7,13 +8,11 @@ import { messages } from '../i18n';
|
|
|
7
8
|
import { buttonSpinner, uploadEmojiButton, uploadRetryButton } from './styles';
|
|
8
9
|
export const retryUploadButtonTestId = 'retry-upload-button';
|
|
9
10
|
export const uploadEmojiButtonTestId = 'upload-emoji-button';
|
|
10
|
-
|
|
11
11
|
const LoadingSpinner = () => {
|
|
12
12
|
return jsx("span", {
|
|
13
13
|
css: buttonSpinner
|
|
14
14
|
}, jsx(Spinner, null));
|
|
15
15
|
};
|
|
16
|
-
|
|
17
16
|
const RetryButton = props => {
|
|
18
17
|
const {
|
|
19
18
|
onSubmit
|
|
@@ -25,7 +24,6 @@ const RetryButton = props => {
|
|
|
25
24
|
testId: retryUploadButtonTestId
|
|
26
25
|
}, retryLabel));
|
|
27
26
|
};
|
|
28
|
-
|
|
29
27
|
const UploadButton = props => {
|
|
30
28
|
const {
|
|
31
29
|
appearance,
|
|
@@ -39,22 +37,17 @@ const UploadButton = props => {
|
|
|
39
37
|
testId: uploadEmojiButtonTestId
|
|
40
38
|
}, label);
|
|
41
39
|
};
|
|
42
|
-
|
|
43
40
|
const RetryableButton = props => {
|
|
44
41
|
const {
|
|
45
42
|
loading,
|
|
46
43
|
error
|
|
47
44
|
} = props;
|
|
48
|
-
|
|
49
45
|
if (loading) {
|
|
50
46
|
return jsx(LoadingSpinner, null);
|
|
51
47
|
}
|
|
52
|
-
|
|
53
48
|
if (error) {
|
|
54
49
|
return jsx(RetryButton, props);
|
|
55
50
|
}
|
|
56
|
-
|
|
57
51
|
return jsx(UploadButton, props);
|
|
58
52
|
};
|
|
59
|
-
|
|
60
53
|
export default RetryableButton;
|