@atlaskit/emoji 64.7.1 → 65.0.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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/api/EmojiResource.js +250 -91
- package/dist/cjs/api/media/SiteEmojiResource.js +4 -2
- package/dist/cjs/api/media/TokenManager.js +13 -12
- package/dist/cjs/components/common/EmojiImage.js +99 -0
- package/dist/cjs/components/common/EmojiPlaceholder.js +7 -5
- package/dist/cjs/components/common/ResourcedEmoji.js +1 -1
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +159 -165
- package/dist/cjs/components/common/UploadEmoji.js +3 -14
- package/dist/cjs/components/common/styles.js +26 -9
- package/dist/cjs/components/picker/EmojiPickerComponent.js +3 -3
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +1 -1
- package/dist/cjs/context/EmojiContextProvider.js +33 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/util/analytics/samplingUfo.js +13 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +116 -40
- package/dist/es2019/api/media/SiteEmojiResource.js +2 -2
- package/dist/es2019/api/media/TokenManager.js +12 -12
- package/dist/es2019/components/common/EmojiImage.js +74 -0
- package/dist/es2019/components/common/EmojiPlaceholder.js +7 -5
- package/dist/es2019/components/common/ResourcedEmoji.js +1 -1
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +117 -104
- package/dist/es2019/components/common/UploadEmoji.js +3 -7
- package/dist/es2019/components/common/styles.js +30 -9
- package/dist/es2019/components/picker/EmojiPickerComponent.js +2 -2
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +1 -1
- package/dist/es2019/context/EmojiContextProvider.js +9 -1
- package/dist/es2019/index.js +5 -4
- package/dist/es2019/types.js +1 -0
- package/dist/es2019/util/analytics/samplingUfo.js +11 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +257 -93
- package/dist/esm/api/media/SiteEmojiResource.js +5 -3
- package/dist/esm/api/media/TokenManager.js +13 -12
- package/dist/esm/components/common/EmojiImage.js +84 -0
- package/dist/esm/components/common/EmojiPlaceholder.js +8 -5
- package/dist/esm/components/common/ResourcedEmoji.js +1 -1
- package/dist/esm/components/common/ResourcedEmojiComponent.js +155 -165
- package/dist/esm/components/common/UploadEmoji.js +3 -12
- package/dist/esm/components/common/styles.js +25 -10
- package/dist/esm/components/picker/EmojiPickerComponent.js +2 -2
- package/dist/esm/components/uploader/EmojiUploadComponent.js +1 -1
- package/dist/esm/context/EmojiContextProvider.js +30 -1
- package/dist/esm/index.js +5 -4
- package/dist/esm/types.js +1 -0
- package/dist/esm/util/analytics/samplingUfo.js +13 -2
- package/dist/esm/version.json +1 -1
- package/dist/types/api/EmojiResource.d.ts +20 -2
- package/dist/types/api/EmojiUtils.d.ts +7 -1
- package/dist/types/api/media/SiteEmojiResource.d.ts +1 -1
- package/dist/types/api/media/TokenManager.d.ts +1 -0
- package/dist/types/components/common/EmojiImage.d.ts +13 -0
- package/dist/types/components/common/EmojiPlaceholder.d.ts +1 -0
- package/dist/types/components/common/LoadingEmojiComponent.d.ts +4 -4
- package/dist/types/components/common/ResourcedEmoji.d.ts +3 -3
- package/dist/types/components/common/ResourcedEmojiComponent.d.ts +21 -12
- package/dist/types/components/common/UploadEmoji.d.ts +1 -1
- package/dist/types/components/common/styles.d.ts +1 -0
- package/dist/types/index.d.ts +5 -4
- package/dist/types/types.d.ts +12 -2
- package/dist/types/util/analytics/index.d.ts +1 -1
- package/dist/types/util/analytics/samplingUfo.d.ts +1 -8
- package/dist/types/util/analytics/ufoExperiences.d.ts +2 -2
- package/local-config-example.ts +22 -1
- package/package.json +4 -4
- package/report.api.md +1287 -0
|
@@ -1,40 +1,67 @@
|
|
|
1
|
-
import
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Component } from 'react';
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
4
2
|
import { defaultEmojiHeight } from '../../util/constants';
|
|
5
3
|
import { isPromise } from '../../util/type-helpers';
|
|
6
4
|
import { UfoEmojiTimings } from '../../types';
|
|
7
|
-
import
|
|
5
|
+
import Emoji from './Emoji';
|
|
8
6
|
import EmojiPlaceholder from './EmojiPlaceholder';
|
|
9
7
|
import { sampledUfoRenderedEmoji } from '../../util/analytics';
|
|
10
8
|
import LegacyEmojiContextProvider from '../../context/LegacyEmojiContextProvider';
|
|
9
|
+
import { EmojiImage } from './EmojiImage';
|
|
11
10
|
import { hasUfoMarked } from '../../util/analytics/ufoExperiences';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
var ResourcedEmojiComponentRenderStatesEnum;
|
|
12
|
+
|
|
13
|
+
(function (ResourcedEmojiComponentRenderStatesEnum) {
|
|
14
|
+
ResourcedEmojiComponentRenderStatesEnum["INITIAL"] = "INITIAL";
|
|
15
|
+
ResourcedEmojiComponentRenderStatesEnum["OPTIMISTIC"] = "OPTIMISTIC";
|
|
16
|
+
ResourcedEmojiComponentRenderStatesEnum["FALLBACK"] = "FALLBACK";
|
|
17
|
+
ResourcedEmojiComponentRenderStatesEnum["EMOJI"] = "EMOJI";
|
|
18
|
+
})(ResourcedEmojiComponentRenderStatesEnum || (ResourcedEmojiComponentRenderStatesEnum = {}));
|
|
19
|
+
|
|
20
|
+
export const ResourcedEmojiComponent = ({
|
|
21
|
+
emojiProvider,
|
|
22
|
+
emojiId,
|
|
23
|
+
showTooltip,
|
|
24
|
+
customFallback,
|
|
25
|
+
fitToHeight = defaultEmojiHeight,
|
|
26
|
+
optimistic = false,
|
|
27
|
+
optimisticImageURL
|
|
28
|
+
}) => {
|
|
29
|
+
const {
|
|
30
|
+
shortName,
|
|
31
|
+
id,
|
|
32
|
+
fallback
|
|
33
|
+
} = emojiId;
|
|
34
|
+
const emojiContextValue = {
|
|
35
|
+
emoji: {
|
|
36
|
+
emojiProvider
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const [emoji, setEmoji] = useState();
|
|
40
|
+
const [loaded, setLoaded] = useState(false);
|
|
23
41
|
|
|
24
|
-
|
|
25
|
-
|
|
42
|
+
const fetchOrGetEmoji = (emojiProvider, emojiId, optimisticFetch = false) => {
|
|
43
|
+
// TODO: Pass in optimistic into findByEmojiId to allow a single emoji meta fetch
|
|
44
|
+
const foundEmoji = emojiProvider.fetchByEmojiId(emojiId, optimisticFetch);
|
|
26
45
|
sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_START);
|
|
27
46
|
|
|
28
47
|
if (isPromise(foundEmoji)) {
|
|
29
|
-
|
|
30
|
-
loaded: false
|
|
31
|
-
});
|
|
48
|
+
setLoaded(false);
|
|
32
49
|
foundEmoji.then(emoji => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
setEmoji(emoji);
|
|
51
|
+
|
|
52
|
+
if (!emoji) {
|
|
53
|
+
// emoji is undefined
|
|
54
|
+
sampledUfoRenderedEmoji(emojiId).failure({
|
|
55
|
+
metadata: {
|
|
56
|
+
reason: 'failed to find',
|
|
57
|
+
source: 'ResourcedEmojiComponent',
|
|
58
|
+
data: {
|
|
59
|
+
emoji: {
|
|
60
|
+
id: emojiId.id,
|
|
61
|
+
shortName: emojiId.shortName
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
38
65
|
});
|
|
39
66
|
sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_END);
|
|
40
67
|
|
|
@@ -55,6 +82,7 @@ export default class ResourcedEmojiComponent extends Component {
|
|
|
55
82
|
}
|
|
56
83
|
}
|
|
57
84
|
}).catch(() => {
|
|
85
|
+
setEmoji(undefined);
|
|
58
86
|
sampledUfoRenderedEmoji(emojiId).failure({
|
|
59
87
|
metadata: {
|
|
60
88
|
reason: 'failed to load',
|
|
@@ -67,94 +95,79 @@ export default class ResourcedEmojiComponent extends Component {
|
|
|
67
95
|
}
|
|
68
96
|
}
|
|
69
97
|
});
|
|
98
|
+
}).finally(() => {
|
|
99
|
+
setLoaded(true);
|
|
100
|
+
sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_END);
|
|
70
101
|
});
|
|
71
102
|
} else {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
emoji: foundEmoji,
|
|
76
|
-
loaded: true
|
|
77
|
-
});
|
|
103
|
+
setEmoji(foundEmoji);
|
|
104
|
+
setLoaded(true);
|
|
105
|
+
sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_END);
|
|
78
106
|
}
|
|
79
|
-
}
|
|
107
|
+
};
|
|
80
108
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (!this.state.emoji) {
|
|
85
|
-
// using UNSAFE_componentWillMount instead of componentDidMount to avoid needless
|
|
86
|
-
// rerendering.
|
|
87
|
-
this.refreshEmoji(this.props.emojiProvider, this.props.emojiId);
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
if (!emojiId) {
|
|
111
|
+
return;
|
|
88
112
|
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
componentWillUnmount() {
|
|
92
|
-
this.ready = false;
|
|
93
|
-
}
|
|
94
113
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
sampledUfoRenderedEmoji(this.props.emojiId).markFMP();
|
|
114
|
+
if (!hasUfoMarked(sampledUfoRenderedEmoji(emojiId), UfoEmojiTimings.FMP_END)) {
|
|
115
|
+
sampledUfoRenderedEmoji(emojiId).markFMP();
|
|
98
116
|
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this.refreshEmoji(nextProps.emojiProvider, nextProps.emojiId);
|
|
117
|
+
}, [emojiId]);
|
|
118
|
+
useMemo(() => {
|
|
119
|
+
if (!emojiProvider || !emojiId) {
|
|
120
|
+
return;
|
|
104
121
|
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
render() {
|
|
108
|
-
const {
|
|
109
|
-
emojiId,
|
|
110
|
-
fitToHeight = defaultEmojiHeight,
|
|
111
|
-
showTooltip
|
|
112
|
-
} = this.props;
|
|
113
|
-
const {
|
|
114
|
-
emoji,
|
|
115
|
-
loaded
|
|
116
|
-
} = this.state;
|
|
117
|
-
const {
|
|
118
|
-
shortName,
|
|
119
|
-
fallback
|
|
120
|
-
} = emojiId;
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return
|
|
123
|
+
fetchOrGetEmoji(emojiProvider, emojiId, optimistic);
|
|
124
|
+
}, [emojiProvider, emojiId, optimistic]);
|
|
125
|
+
const emojiRenderState = useMemo(() => {
|
|
126
|
+
if (!emoji && !loaded && !optimisticImageURL) {
|
|
127
|
+
return ResourcedEmojiComponentRenderStatesEnum.INITIAL;
|
|
128
|
+
} else if (!emoji && !loaded && optimisticImageURL) {
|
|
129
|
+
return ResourcedEmojiComponentRenderStatesEnum.OPTIMISTIC;
|
|
130
|
+
} else if (!emoji && loaded) {
|
|
131
|
+
return ResourcedEmojiComponentRenderStatesEnum.FALLBACK;
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
return
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
emoji: {
|
|
148
|
-
emojiProvider: this.props.emojiProvider
|
|
134
|
+
return ResourcedEmojiComponentRenderStatesEnum.EMOJI;
|
|
135
|
+
}, [emoji, loaded, optimisticImageURL]);
|
|
136
|
+
|
|
137
|
+
const handleOnLoadError = emojiId => {
|
|
138
|
+
sampledUfoRenderedEmoji(emojiId).failure({
|
|
139
|
+
metadata: {
|
|
140
|
+
reason: 'load error',
|
|
141
|
+
source: 'ResourcedEmojiComponent',
|
|
142
|
+
data: {
|
|
143
|
+
emoji: {
|
|
144
|
+
id: emojiId.id,
|
|
145
|
+
shortName: emojiId.shortName
|
|
146
|
+
}
|
|
147
|
+
}
|
|
149
148
|
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
return /*#__PURE__*/React.createElement(LegacyEmojiContextProvider, {
|
|
153
|
+
emojiContextValue: emojiContextValue
|
|
154
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
155
|
+
"data-emoji-id": id,
|
|
156
|
+
"data-emoji-short-name": shortName,
|
|
157
|
+
"data-emoji-text": fallback || shortName
|
|
158
|
+
}, emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.INITIAL && /*#__PURE__*/React.createElement(EmojiPlaceholder, {
|
|
159
|
+
shortName: shortName,
|
|
160
|
+
showTooltip: showTooltip,
|
|
161
|
+
size: fitToHeight || defaultEmojiHeight,
|
|
162
|
+
loading: true
|
|
163
|
+
}), emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.OPTIMISTIC && optimisticImageURL && /*#__PURE__*/React.createElement(EmojiImage, {
|
|
164
|
+
emojiId: emojiId,
|
|
165
|
+
imageUrl: optimisticImageURL,
|
|
166
|
+
maxSize: fitToHeight || defaultEmojiHeight
|
|
167
|
+
}), emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.FALLBACK && /*#__PURE__*/React.createElement(React.Fragment, null, customFallback || fallback || shortName), emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.EMOJI && emoji && /*#__PURE__*/React.createElement(Emoji, {
|
|
168
|
+
emoji: emoji,
|
|
169
|
+
onLoadError: handleOnLoadError,
|
|
170
|
+
showTooltip: showTooltip,
|
|
171
|
+
fitToHeight: fitToHeight
|
|
172
|
+
})));
|
|
173
|
+
};
|
|
@@ -2,13 +2,13 @@ import { supportsUploadFeature } from '../../api/EmojiResource';
|
|
|
2
2
|
import { uploadFailedEvent, uploadSucceededEvent } from '../../util/analytics';
|
|
3
3
|
import { messages } from '../i18n';
|
|
4
4
|
import { ufoExperiences } from '../../util/analytics/ufoExperiences';
|
|
5
|
-
export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) => {
|
|
5
|
+
export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireAnalytics, retry) => {
|
|
6
6
|
const startTime = Date.now();
|
|
7
7
|
errorSetter(undefined);
|
|
8
8
|
|
|
9
9
|
if (supportsUploadFeature(emojiProvider)) {
|
|
10
10
|
ufoExperiences['emoji-uploaded'].start();
|
|
11
|
-
emojiProvider.uploadCustomEmoji(upload).then(emojiDescription => {
|
|
11
|
+
emojiProvider.uploadCustomEmoji(upload, retry).then(emojiDescription => {
|
|
12
12
|
fireAnalytics(uploadSucceededEvent({
|
|
13
13
|
duration: Date.now() - startTime
|
|
14
14
|
}));
|
|
@@ -25,11 +25,7 @@ export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireA
|
|
|
25
25
|
ufoExperiences['emoji-uploaded'].failure({
|
|
26
26
|
metadata: {
|
|
27
27
|
source: 'UploadEmoji',
|
|
28
|
-
error: err
|
|
29
|
-
data: {
|
|
30
|
-
upload: { ...upload
|
|
31
|
-
}
|
|
32
|
-
}
|
|
28
|
+
error: err
|
|
33
29
|
}
|
|
34
30
|
});
|
|
35
31
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { css } from '@emotion/core';
|
|
1
|
+
import { css, keyframes } from '@emotion/core';
|
|
2
2
|
import { borderRadius } from '@atlaskit/theme/constants';
|
|
3
3
|
import { token } from '@atlaskit/tokens';
|
|
4
4
|
import { defaultEmojiHeight } from '../../util/constants';
|
|
5
5
|
import { akEmojiSelectedBackgroundColor } from '../../util/shared-styles';
|
|
6
|
-
import { N20, N200, N300, N900, R300, R400 } from '@atlaskit/theme/colors';
|
|
6
|
+
import { N20, N200, N20A, N300, N900, R300, R400 } from '@atlaskit/theme/colors';
|
|
7
7
|
export const commonSelectedStyles = 'emoji-common-selected';
|
|
8
8
|
export const selectOnHoverStyles = 'emoji-common-select-on-hover';
|
|
9
9
|
export const emojiSprite = 'emoji-common-emoji-sprite';
|
|
@@ -31,7 +31,7 @@ export const emojiToneSelectorContainer = css({
|
|
|
31
31
|
padding: '8px 10px 8px 0'
|
|
32
32
|
});
|
|
33
33
|
export const emojiStyles = css({
|
|
34
|
-
borderRadius:
|
|
34
|
+
borderRadius: `${borderRadius()}px`,
|
|
35
35
|
backgroundColor: 'transparent',
|
|
36
36
|
display: 'inline-block',
|
|
37
37
|
verticalAlign: 'middle',
|
|
@@ -60,20 +60,41 @@ export const emojiContainer = css({
|
|
|
60
60
|
[`.${emojiSprite}`]: {
|
|
61
61
|
background: 'transparent no-repeat',
|
|
62
62
|
display: 'inline-block',
|
|
63
|
-
verticalAlign: 'middle',
|
|
64
63
|
minHeight: `${defaultEmojiHeight}px`,
|
|
65
|
-
minWidth: `${defaultEmojiHeight}px
|
|
64
|
+
minWidth: `${defaultEmojiHeight}px`,
|
|
65
|
+
verticalAlign: 'middle'
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
export const placeholder = 'emoji-common-placeholder';
|
|
69
69
|
export const placeholderContainer = css({
|
|
70
|
-
|
|
70
|
+
position: 'relative',
|
|
71
71
|
margin: '-1px 0',
|
|
72
72
|
display: 'inline-block',
|
|
73
73
|
background: token('color.border', '#f7f7f7'),
|
|
74
|
-
borderRadius:
|
|
74
|
+
borderRadius: `${borderRadius()}px`,
|
|
75
|
+
overflow: 'hidden',
|
|
75
76
|
verticalAlign: 'middle',
|
|
76
|
-
whiteSpace: 'nowrap'
|
|
77
|
+
whiteSpace: 'nowrap',
|
|
78
|
+
textAlign: 'center'
|
|
79
|
+
});
|
|
80
|
+
const easeSweep = keyframes`
|
|
81
|
+
from {
|
|
82
|
+
transform: translateX(-100%);
|
|
83
|
+
}
|
|
84
|
+
to {
|
|
85
|
+
transform: translateX(100%);
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
export const placeholderContainerAnimated = css({
|
|
89
|
+
'&::before': {
|
|
90
|
+
content: '""',
|
|
91
|
+
display: 'block',
|
|
92
|
+
position: 'absolute',
|
|
93
|
+
background: token('color.background.neutral', N20A),
|
|
94
|
+
height: '100%',
|
|
95
|
+
width: '100%',
|
|
96
|
+
animation: `${easeSweep} 1s cubic-bezier(0.4, 0.0, 0.2, 1) infinite`
|
|
97
|
+
}
|
|
77
98
|
});
|
|
78
99
|
export const emojiButton = css({
|
|
79
100
|
backgroundColor: 'transparent',
|
|
@@ -87,7 +108,7 @@ export const emojiButton = css({
|
|
|
87
108
|
padding: 0
|
|
88
109
|
},
|
|
89
110
|
'&>span': {
|
|
90
|
-
borderRadius:
|
|
111
|
+
borderRadius: `${borderRadius()}px`,
|
|
91
112
|
padding: '8px',
|
|
92
113
|
// Scale sprite to fit regardless of default emoji size
|
|
93
114
|
[`&>.${emojiSprite}`]: {
|
|
@@ -247,7 +247,7 @@ export default class EmojiPickerComponent extends PureComponent {
|
|
|
247
247
|
this.scrollToEndOfList();
|
|
248
248
|
};
|
|
249
249
|
|
|
250
|
-
uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, this.fireAnalytics);
|
|
250
|
+
uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, this.fireAnalytics, retry);
|
|
251
251
|
});
|
|
252
252
|
|
|
253
253
|
_defineProperty(this, "onTriggerDelete", (_emojiId, emoji) => {
|
|
@@ -359,12 +359,12 @@ export default class EmojiPickerComponent extends PureComponent {
|
|
|
359
359
|
}
|
|
360
360
|
|
|
361
361
|
UNSAFE_componentWillMount() {
|
|
362
|
+
ufoExperiences['emoji-picker-opened'].success();
|
|
362
363
|
this.openTime = Date.now();
|
|
363
364
|
this.fireAnalytics(openedPickerEvent());
|
|
364
365
|
}
|
|
365
366
|
|
|
366
367
|
componentDidMount() {
|
|
367
|
-
ufoExperiences['emoji-picker-opened'].success();
|
|
368
368
|
const {
|
|
369
369
|
emojiProvider,
|
|
370
370
|
hideToneSelector
|
|
@@ -32,7 +32,7 @@ export default class EmojiUploadComponent extends PureComponent {
|
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
uploadEmoji(upload, emojiProvider, errorSetter, this.prepareForUpload, this.fireAnalytics);
|
|
35
|
+
uploadEmoji(upload, emojiProvider, errorSetter, this.prepareForUpload, this.fireAnalytics, retry);
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
_defineProperty(this, "prepareForUpload", () => {
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import React, { useMemo } from 'react';
|
|
1
|
+
import React, { useMemo, useEffect } from 'react';
|
|
2
2
|
import { EmojiContext } from './EmojiContext';
|
|
3
3
|
export const EmojiContextProvider = ({
|
|
4
4
|
children,
|
|
5
5
|
emojiContextValue
|
|
6
6
|
}) => {
|
|
7
7
|
const memoizedEmojiContextValue = useMemo(() => emojiContextValue, [emojiContextValue]);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
// trigger emoji fetching
|
|
10
|
+
async function fetchEmojiProvider() {
|
|
11
|
+
await (memoizedEmojiContextValue === null || memoizedEmojiContextValue === void 0 ? void 0 : memoizedEmojiContextValue.emoji.emojiProvider.fetchEmojiProvider());
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
fetchEmojiProvider();
|
|
15
|
+
}, [memoizedEmojiContextValue]);
|
|
8
16
|
return /*#__PURE__*/React.createElement(EmojiContext.Provider, {
|
|
9
17
|
value: memoizedEmojiContextValue
|
|
10
18
|
}, children);
|
package/dist/es2019/index.js
CHANGED
|
@@ -6,19 +6,20 @@ import EmojiPicker from './components/picker/EmojiPicker';
|
|
|
6
6
|
import EmojiUploader from './components/uploader/EmojiUploader';
|
|
7
7
|
import EmojiTypeAhead from './components/typeahead/EmojiTypeAhead';
|
|
8
8
|
import EmojiTypeAheadItem from './components/typeahead/EmojiTypeAheadItem';
|
|
9
|
+
import { EmojiImage } from './components/common/EmojiImage';
|
|
9
10
|
export { // renaming exports to prevent breaking changes due to renaming
|
|
10
|
-
commonSelectedStyles as selected, selectOnHoverStyles as selectOnHover, emojiSprite, emojiNodeStyles as emojiNode, emojiImage } from './components/common/styles';
|
|
11
|
+
commonSelectedStyles as selected, selectOnHoverStyles as selectOnHover, emojiSprite, emojiNodeStyles as emojiNode, emojiImage, placeholder as emojiPlaceholder } from './components/common/styles';
|
|
11
12
|
import EmojiResource from './api/EmojiResource';
|
|
12
13
|
import EmojiRepository from './api/EmojiRepository';
|
|
13
14
|
import EmojiLoader from './api/EmojiLoader';
|
|
14
15
|
import { denormaliseEmojiServiceResponse } from './api/EmojiUtils';
|
|
15
16
|
import { toEmojiId, toOptionalEmojiId } from './util/type-helpers';
|
|
16
|
-
import { recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences } from './util/analytics';
|
|
17
|
+
import { recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences, withSampling } from './util/analytics';
|
|
17
18
|
import { customCategory, defaultEmojiHeight, emojiPickerWidth, emojiPickerHeight } from './util/constants';
|
|
18
19
|
import { UsageFrequencyTracker } from './api/internal/UsageFrequencyTracker';
|
|
19
20
|
export { // Classes
|
|
20
|
-
AbstractResource, Emoji, EmojiPlaceholder, EmojiLoader, EmojiPicker, EmojiUploader, EmojiResource, EmojiRepository, EmojiTypeAhead, ResourcedEmoji, // functions
|
|
21
|
-
denormaliseEmojiServiceResponse, toEmojiId, toOptionalEmojiId, recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences, // Constants
|
|
21
|
+
AbstractResource, Emoji, EmojiPlaceholder, EmojiLoader, EmojiPicker, EmojiUploader, EmojiResource, EmojiRepository, EmojiTypeAhead, EmojiImage, ResourcedEmoji, // functions
|
|
22
|
+
denormaliseEmojiServiceResponse, toEmojiId, toOptionalEmojiId, recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences, withSampling, // Constants
|
|
22
23
|
emojiPickerWidth, emojiPickerHeight, defaultEmojiHeight, customCategory, UsageFrequencyTracker, EmojiTypeAheadItem };
|
|
23
24
|
export { // Enums
|
|
24
25
|
SearchSort, UfoExperienceName, UfoComponentName } from './types';
|
package/dist/es2019/types.js
CHANGED
|
@@ -42,6 +42,7 @@ export let ProviderTypes;
|
|
|
42
42
|
ProviderTypes["STANDARD"] = "STANDARD";
|
|
43
43
|
ProviderTypes["ATLASSIAN"] = "ATLASSIAN";
|
|
44
44
|
ProviderTypes["UNKNOWN"] = "UNKNOWN";
|
|
45
|
+
ProviderTypes["SINGLE"] = "SINGLE";
|
|
45
46
|
})(ProviderTypes || (ProviderTypes = {}));
|
|
46
47
|
|
|
47
48
|
export let UfoExperienceName;
|
|
@@ -42,7 +42,6 @@ const hasSampledFromStart = experience => {
|
|
|
42
42
|
|
|
43
43
|
return ufoExperiencesSampled[experience.id].sampled;
|
|
44
44
|
};
|
|
45
|
-
|
|
46
45
|
/**
|
|
47
46
|
* This function is a temp solution to reduce the event traffic, as UFO package does not support it.
|
|
48
47
|
*
|
|
@@ -50,6 +49,8 @@ const hasSampledFromStart = experience => {
|
|
|
50
49
|
* @param ufoExperience
|
|
51
50
|
* @returns
|
|
52
51
|
*/
|
|
52
|
+
|
|
53
|
+
|
|
53
54
|
export const withSampling = ufoExperience => {
|
|
54
55
|
const init = () => {
|
|
55
56
|
if (!ufoExperiencesSampled[ufoExperience.id]) {
|
|
@@ -110,6 +111,14 @@ export const withSampling = ufoExperience => {
|
|
|
110
111
|
return ufoExperience.abort(config);
|
|
111
112
|
};
|
|
112
113
|
|
|
114
|
+
const addMetadata = data => {
|
|
115
|
+
if (!hasSampledFromStart(ufoExperience)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return ufoExperience.addMetadata(data);
|
|
120
|
+
};
|
|
121
|
+
|
|
113
122
|
const mark = (name, timestamp) => {
|
|
114
123
|
if (!hasSampledFromStart(ufoExperience)) {
|
|
115
124
|
return;
|
|
@@ -137,6 +146,7 @@ export const withSampling = ufoExperience => {
|
|
|
137
146
|
init();
|
|
138
147
|
return { ...ufoExperience,
|
|
139
148
|
start,
|
|
149
|
+
addMetadata,
|
|
140
150
|
success,
|
|
141
151
|
failure,
|
|
142
152
|
abort,
|
package/dist/es2019/version.json
CHANGED