@atlaskit/emoji 64.2.0 → 64.4.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 +27 -0
- package/dist/cjs/api/EmojiResource.js +36 -1
- package/dist/cjs/api/media/SiteEmojiResource.js +10 -2
- package/dist/cjs/components/common/CachingEmoji.js +38 -12
- package/dist/cjs/components/common/DeleteButton.js +9 -13
- package/dist/cjs/components/common/Emoji.js +25 -36
- package/dist/cjs/components/common/EmojiActions.js +26 -31
- package/dist/cjs/components/common/EmojiButton.js +7 -7
- package/dist/cjs/components/common/EmojiDeletePreview.js +20 -26
- package/dist/cjs/components/common/EmojiErrorMessage.js +10 -14
- package/dist/cjs/components/common/EmojiPlaceholder.js +5 -12
- package/dist/cjs/components/common/EmojiPreview.js +20 -40
- package/dist/cjs/components/common/EmojiPreviewComponent.js +34 -0
- package/dist/cjs/components/common/EmojiUploadPicker.js +26 -24
- package/dist/cjs/components/common/EmojiUploadPreview.js +22 -28
- package/dist/cjs/components/common/RecordSelectionDefault.js +8 -2
- package/dist/cjs/components/common/ResourcedEmoji.js +25 -9
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +33 -11
- package/dist/cjs/components/common/RetryableButton.js +12 -18
- package/dist/cjs/components/common/Scrollable.js +5 -10
- package/dist/cjs/components/common/UfoErrorBoundary.js +52 -0
- package/dist/cjs/components/common/UploadEmoji.js +8 -0
- package/dist/cjs/components/common/styles.js +210 -266
- package/dist/cjs/components/picker/CategorySelector.js +13 -12
- package/dist/cjs/components/picker/EmojiPicker.js +17 -6
- package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +8 -14
- package/dist/cjs/components/picker/EmojiPickerComponent.js +51 -30
- package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +8 -12
- package/dist/cjs/components/picker/EmojiPickerFooter.js +8 -14
- package/dist/cjs/components/picker/EmojiPickerList.js +28 -9
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +10 -8
- package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +9 -15
- package/dist/cjs/components/picker/styles.js +113 -161
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +40 -24
- package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +10 -13
- package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +17 -22
- package/dist/cjs/components/typeahead/styles.js +17 -19
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +22 -15
- package/dist/cjs/components/uploader/styles.js +4 -4
- package/dist/cjs/index.js +9 -3
- package/dist/cjs/types.js +12 -2
- package/dist/cjs/util/{analytics.js → analytics/analytics.js} +12 -10
- package/dist/cjs/util/analytics/index.js +205 -0
- package/dist/cjs/util/analytics/samplingUfo.js +278 -0
- package/dist/cjs/util/analytics/ufoExperiences.js +46 -0
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +49 -0
- package/dist/cjs/util/constants.js +10 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +28 -1
- package/dist/es2019/api/media/SiteEmojiResource.js +10 -2
- package/dist/es2019/components/common/CachingEmoji.js +34 -12
- package/dist/es2019/components/common/DeleteButton.js +8 -6
- package/dist/es2019/components/common/Emoji.js +27 -36
- package/dist/es2019/components/common/EmojiActions.js +26 -24
- package/dist/es2019/components/common/EmojiButton.js +6 -6
- package/dist/es2019/components/common/EmojiDeletePreview.js +20 -20
- package/dist/es2019/components/common/EmojiErrorMessage.js +9 -8
- package/dist/es2019/components/common/EmojiPlaceholder.js +5 -8
- package/dist/es2019/components/common/EmojiPreview.js +19 -35
- package/dist/es2019/components/common/EmojiPreviewComponent.js +21 -0
- package/dist/es2019/components/common/EmojiUploadPicker.js +25 -22
- package/dist/es2019/components/common/EmojiUploadPreview.js +22 -22
- package/dist/es2019/components/common/RecordSelectionDefault.js +9 -2
- package/dist/es2019/components/common/ResourcedEmoji.js +22 -5
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +32 -11
- package/dist/es2019/components/common/RetryableButton.js +10 -11
- package/dist/es2019/components/common/Scrollable.js +6 -10
- package/dist/es2019/components/common/UfoErrorBoundary.js +11 -0
- package/dist/es2019/components/common/UploadEmoji.js +4 -0
- package/dist/es2019/components/common/styles.js +195 -262
- package/dist/es2019/components/picker/CategorySelector.js +15 -12
- package/dist/es2019/components/picker/EmojiPicker.js +15 -6
- package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +8 -8
- package/dist/es2019/components/picker/EmojiPickerComponent.js +46 -22
- package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +8 -7
- package/dist/es2019/components/picker/EmojiPickerFooter.js +8 -8
- package/dist/es2019/components/picker/EmojiPickerList.js +28 -8
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +11 -8
- package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +10 -8
- package/dist/es2019/components/picker/styles.js +112 -160
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +35 -17
- package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +12 -13
- package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +18 -19
- package/dist/es2019/components/typeahead/styles.js +14 -15
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +19 -9
- package/dist/es2019/components/uploader/styles.js +4 -4
- package/dist/es2019/index.js +4 -3
- package/dist/es2019/types.js +10 -1
- package/dist/es2019/util/{analytics.js → analytics/analytics.js} +17 -11
- package/dist/es2019/util/analytics/index.js +4 -0
- package/dist/es2019/util/analytics/samplingUfo.js +147 -0
- package/dist/es2019/util/analytics/ufoExperiences.js +34 -0
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +39 -0
- package/dist/es2019/util/constants.js +5 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +32 -1
- package/dist/esm/api/media/SiteEmojiResource.js +10 -2
- package/dist/esm/components/common/CachingEmoji.js +36 -12
- package/dist/esm/components/common/DeleteButton.js +8 -6
- package/dist/esm/components/common/Emoji.js +26 -29
- package/dist/esm/components/common/EmojiActions.js +26 -25
- package/dist/esm/components/common/EmojiButton.js +6 -6
- package/dist/esm/components/common/EmojiDeletePreview.js +19 -20
- package/dist/esm/components/common/EmojiErrorMessage.js +9 -8
- package/dist/esm/components/common/EmojiPlaceholder.js +5 -8
- package/dist/esm/components/common/EmojiPreview.js +19 -33
- package/dist/esm/components/common/EmojiPreviewComponent.js +20 -0
- package/dist/esm/components/common/EmojiUploadPicker.js +27 -25
- package/dist/esm/components/common/EmojiUploadPreview.js +21 -22
- package/dist/esm/components/common/RecordSelectionDefault.js +6 -3
- package/dist/esm/components/common/ResourcedEmoji.js +22 -9
- package/dist/esm/components/common/ResourcedEmojiComponent.js +32 -10
- package/dist/esm/components/common/RetryableButton.js +11 -12
- package/dist/esm/components/common/Scrollable.js +6 -10
- package/dist/esm/components/common/UfoErrorBoundary.js +38 -0
- package/dist/esm/components/common/UploadEmoji.js +4 -0
- package/dist/esm/components/common/styles.js +192 -242
- package/dist/esm/components/picker/CategorySelector.js +14 -12
- package/dist/esm/components/picker/EmojiPicker.js +13 -6
- package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +8 -8
- package/dist/esm/components/picker/EmojiPickerComponent.js +47 -22
- package/dist/esm/components/picker/EmojiPickerEmojiRow.js +8 -7
- package/dist/esm/components/picker/EmojiPickerFooter.js +8 -8
- package/dist/esm/components/picker/EmojiPickerList.js +29 -8
- package/dist/esm/components/picker/EmojiPickerListSearch.js +10 -8
- package/dist/esm/components/picker/EmojiPickerVirtualItems.js +9 -8
- package/dist/esm/components/picker/styles.js +108 -149
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +35 -17
- package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +11 -13
- package/dist/esm/components/typeahead/EmojiTypeAheadList.js +17 -19
- package/dist/esm/components/typeahead/styles.js +14 -14
- package/dist/esm/components/uploader/EmojiUploadComponent.js +19 -9
- package/dist/esm/components/uploader/styles.js +4 -4
- package/dist/esm/index.js +4 -3
- package/dist/esm/types.js +10 -1
- package/dist/esm/util/{analytics.js → analytics/analytics.js} +9 -7
- package/dist/esm/util/analytics/index.js +4 -0
- package/dist/esm/util/analytics/samplingUfo.js +259 -0
- package/dist/esm/util/analytics/ufoExperiences.js +34 -0
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +39 -0
- package/dist/esm/util/constants.js +5 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/api/EmojiResource.d.ts +1 -0
- package/dist/types/components/common/CachingEmoji.d.ts +8 -6
- package/dist/types/components/common/EmojiActions.d.ts +2 -3
- package/dist/types/components/common/EmojiDeletePreview.d.ts +3 -3
- package/dist/types/components/common/EmojiErrorMessage.d.ts +2 -1
- package/dist/types/components/common/EmojiPreview.d.ts +2 -3
- package/dist/types/components/common/EmojiPreviewComponent.d.ts +7 -0
- package/dist/types/components/common/EmojiUploadPreview.d.ts +3 -3
- package/dist/types/components/common/ResourcedEmoji.d.ts +2 -0
- package/dist/types/components/common/ResourcedEmojiComponent.d.ts +6 -0
- package/dist/types/components/common/RetryableButton.d.ts +0 -2
- package/dist/types/components/common/UfoErrorBoundary.d.ts +8 -0
- package/dist/types/components/common/styles.d.ts +44 -44
- package/dist/types/components/picker/EmojiPicker.d.ts +2 -3
- package/dist/types/components/picker/EmojiPickerComponent.d.ts +6 -0
- package/dist/types/components/picker/EmojiPickerList.d.ts +10 -0
- package/dist/types/components/picker/styles.d.ts +17 -18
- package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +6 -0
- package/dist/types/components/typeahead/styles.d.ts +8 -7
- package/dist/types/components/uploader/EmojiUploadComponent.d.ts +1 -0
- package/dist/types/components/uploader/styles.d.ts +2 -2
- package/dist/types/index.d.ts +3 -3
- package/dist/types/types.d.ts +6 -0
- package/dist/types/util/{analytics.d.ts → analytics/analytics.d.ts} +7 -7
- package/dist/types/util/analytics/index.d.ts +6 -0
- package/dist/types/util/analytics/samplingUfo.d.ts +31 -0
- package/dist/types/util/analytics/ufoExperiences.d.ts +12 -0
- package/dist/types/util/analytics/useSampledUFOComponentExperience.d.ts +8 -0
- package/dist/types/util/constants.d.ts +2 -0
- package/package.json +10 -9
- package/dist/cjs/components/picker/EmojiPickerPreview.js +0 -87
- package/dist/cjs/context/EmojiContext.js +0 -11
- package/dist/cjs/context/EmojiContextProvider.js +0 -22
- package/dist/es2019/components/picker/EmojiPickerPreview.js +0 -43
- package/dist/es2019/context/EmojiContext.js +0 -2
- package/dist/es2019/context/EmojiContextProvider.js +0 -10
- package/dist/esm/components/picker/EmojiPickerPreview.js +0 -67
- package/dist/esm/context/EmojiContext.js +0 -2
- package/dist/esm/context/EmojiContextProvider.js +0 -9
- package/dist/types/components/picker/EmojiPickerPreview.d.ts +0 -9
- package/dist/types/context/EmojiContext.d.ts +0 -4
- package/dist/types/context/EmojiContextProvider.d.ts +0 -7
|
@@ -10,7 +10,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
10
10
|
|
|
11
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; } }
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/** @jsx jsx */
|
|
14
|
+
import { jsx } from '@emotion/core';
|
|
15
|
+
import React, { Fragment } from 'react';
|
|
14
16
|
import { PureComponent } from 'react';
|
|
15
17
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
16
18
|
import TextField from '@atlaskit/textfield';
|
|
@@ -21,7 +23,7 @@ import EmojiErrorMessage from './EmojiErrorMessage';
|
|
|
21
23
|
import EmojiUploadPreview from './EmojiUploadPreview';
|
|
22
24
|
import FileChooser from './FileChooser';
|
|
23
25
|
import { UploadStatus } from './internal-types';
|
|
24
|
-
import
|
|
26
|
+
import { emojiChooseFileErrorMessage, emojiUpload, emojiUploadBottom, uploadChooseFileBrowse, uploadChooseFileEmojiName, uploadChooseFileMessage, uploadChooseFileRow } from './styles';
|
|
25
27
|
var disallowedReplacementsMap = new Map([[':', ''], ['!', ''], ['@', ''], ['#', ''], ['%', ''], ['^', ''], ['&', ''], ['*', ''], ['(', ''], [')', ''], [' ', '_']]);
|
|
26
28
|
|
|
27
29
|
var sanitizeName = function sanitizeName(name) {
|
|
@@ -79,17 +81,17 @@ var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
|
|
|
79
81
|
var disableChooser = !name;
|
|
80
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
|
|
81
83
|
|
|
82
|
-
return
|
|
83
|
-
|
|
84
|
-
},
|
|
85
|
-
|
|
86
|
-
},
|
|
87
|
-
return
|
|
88
|
-
})),
|
|
89
|
-
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
},
|
|
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, {
|
|
93
95
|
placeholder: formatMessage(messages.emojiPlaceholder),
|
|
94
96
|
"aria-label": formatMessage(messages.emojiNameAriaLabel),
|
|
95
97
|
maxLength: maxNameLength,
|
|
@@ -98,13 +100,13 @@ var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
|
|
|
98
100
|
value: name,
|
|
99
101
|
isCompact: true,
|
|
100
102
|
autoFocus: true
|
|
101
|
-
})),
|
|
102
|
-
|
|
103
|
-
},
|
|
104
|
-
return
|
|
103
|
+
})), jsx("span", {
|
|
104
|
+
css: uploadChooseFileBrowse
|
|
105
|
+
}, jsx(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, function (screenReaderDescription) {
|
|
106
|
+
return jsx(Fragment, null, jsx("span", {
|
|
105
107
|
hidden: true,
|
|
106
108
|
id: fileChooserButtonDescriptionId
|
|
107
|
-
}, screenReaderDescription),
|
|
109
|
+
}, screenReaderDescription), jsx(FileChooser, {
|
|
108
110
|
label: formatMessage(messages.emojiChooseFileTitle),
|
|
109
111
|
onChange: onChooseFile,
|
|
110
112
|
onClick: onClick,
|
|
@@ -112,10 +114,10 @@ var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
|
|
|
112
114
|
ariaDescribedBy: fileChooserButtonDescriptionId,
|
|
113
115
|
isDisabled: disableChooser
|
|
114
116
|
}));
|
|
115
|
-
}))),
|
|
116
|
-
|
|
117
|
-
}, !errorMessage ?
|
|
118
|
-
|
|
117
|
+
}))), jsx("div", {
|
|
118
|
+
css: emojiUploadBottom
|
|
119
|
+
}, !errorMessage ? jsx("p", null, jsx(FormattedMessage, messages.emojiImageRequirements)) : jsx(EmojiErrorMessage, {
|
|
120
|
+
messageStyles: emojiChooseFileErrorMessage,
|
|
119
121
|
message: errorMessage
|
|
120
122
|
})));
|
|
121
123
|
}
|
|
@@ -319,7 +321,7 @@ export var EmojiUploadPicker = /*#__PURE__*/function (_PureComponent2) {
|
|
|
319
321
|
};
|
|
320
322
|
|
|
321
323
|
if (name && previewImage) {
|
|
322
|
-
return
|
|
324
|
+
return jsx(EmojiUploadPreview, {
|
|
323
325
|
errorMessage: errorMessage,
|
|
324
326
|
name: name,
|
|
325
327
|
onAddEmoji: this.onAddEmoji,
|
|
@@ -329,13 +331,13 @@ export var EmojiUploadPicker = /*#__PURE__*/function (_PureComponent2) {
|
|
|
329
331
|
});
|
|
330
332
|
}
|
|
331
333
|
|
|
332
|
-
return
|
|
334
|
+
return jsx(ChooseEmojiFile, {
|
|
333
335
|
name: name,
|
|
334
336
|
onChooseFile: this.onChooseFile,
|
|
335
337
|
onClick: this.props.onFileChooserClicked,
|
|
336
338
|
onNameChange: this.onNameChange,
|
|
337
339
|
onUploadCancelled: cancelUpload,
|
|
338
|
-
errorMessage: chooseEmojiErrorMessage ?
|
|
340
|
+
errorMessage: chooseEmojiErrorMessage ? jsx(FormattedMessage, chooseEmojiErrorMessage) : undefined,
|
|
339
341
|
intl: intl
|
|
340
342
|
});
|
|
341
343
|
}
|
|
@@ -9,8 +9,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
9
9
|
|
|
10
10
|
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; } }
|
|
11
11
|
|
|
12
|
+
/** @jsx jsx */
|
|
13
|
+
import { jsx } from '@emotion/core';
|
|
12
14
|
import AkButton from '@atlaskit/button/custom-theme-button';
|
|
13
|
-
import React from 'react';
|
|
14
15
|
import { PureComponent } from 'react';
|
|
15
16
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
16
17
|
import { customCategory } from '../../util/constants';
|
|
@@ -19,7 +20,7 @@ import Emoji from './Emoji';
|
|
|
19
20
|
import EmojiErrorMessage from './EmojiErrorMessage';
|
|
20
21
|
import { UploadStatus } from './internal-types';
|
|
21
22
|
import RetryableButton from './RetryableButton';
|
|
22
|
-
import
|
|
23
|
+
import { bigEmojiPreview, cancelButton, emojiPreviewErrorMessage, uploadAddRow, uploadPreview, uploadPreviewFooter, uploadPreviewText } from './styles';
|
|
23
24
|
|
|
24
25
|
var EmojiUploadPreview = /*#__PURE__*/function (_PureComponent) {
|
|
25
26
|
_inherits(EmojiUploadPreview, _PureComponent);
|
|
@@ -58,44 +59,42 @@ var EmojiUploadPreview = /*#__PURE__*/function (_PureComponent) {
|
|
|
58
59
|
},
|
|
59
60
|
searchable: true
|
|
60
61
|
};
|
|
61
|
-
emojiComponent =
|
|
62
|
+
emojiComponent = jsx(Emoji, {
|
|
62
63
|
emoji: emoji
|
|
63
64
|
});
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
var uploading = uploadStatus === UploadStatus.Uploading;
|
|
67
|
-
return
|
|
68
|
-
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
},
|
|
68
|
+
return jsx("div", {
|
|
69
|
+
css: uploadPreviewFooter
|
|
70
|
+
}, jsx("div", {
|
|
71
|
+
css: uploadPreview
|
|
72
|
+
}, jsx("div", {
|
|
73
|
+
css: uploadPreviewText
|
|
74
|
+
}, jsx("h5", null, jsx(FormattedMessage, messages.emojiPreviewTitle)), jsx(FormattedMessage, _extends({}, messages.emojiPreview, {
|
|
74
75
|
values: {
|
|
75
76
|
emoji: emojiComponent
|
|
76
77
|
}
|
|
77
|
-
}))),
|
|
78
|
-
|
|
79
|
-
}, emojiComponent)),
|
|
80
|
-
|
|
81
|
-
}, !uploading && errorMessage ?
|
|
82
|
-
|
|
78
|
+
}))), jsx("div", {
|
|
79
|
+
css: bigEmojiPreview
|
|
80
|
+
}, emojiComponent)), jsx("div", {
|
|
81
|
+
css: uploadAddRow
|
|
82
|
+
}, !uploading && errorMessage ? jsx(EmojiErrorMessage, {
|
|
83
|
+
messageStyles: emojiPreviewErrorMessage,
|
|
83
84
|
message: errorMessage,
|
|
84
85
|
tooltip: true
|
|
85
|
-
}) : null,
|
|
86
|
-
className: styles.uploadEmojiButton,
|
|
87
|
-
retryClassName: styles.uploadRetryButton,
|
|
86
|
+
}) : null, jsx(RetryableButton, {
|
|
88
87
|
label: formatMessage(messages.addEmojiLabel),
|
|
89
88
|
onSubmit: onAddEmoji,
|
|
90
89
|
appearance: "primary",
|
|
91
90
|
loading: uploading,
|
|
92
91
|
error: !!errorMessage
|
|
93
|
-
}),
|
|
92
|
+
}), jsx(AkButton, {
|
|
94
93
|
onClick: onUploadCancelled,
|
|
95
94
|
appearance: "subtle",
|
|
96
95
|
isDisabled: uploading,
|
|
97
|
-
|
|
98
|
-
},
|
|
96
|
+
css: cancelButton
|
|
97
|
+
}, jsx(FormattedMessage, messages.cancelLabel))));
|
|
99
98
|
}
|
|
100
99
|
}]);
|
|
101
100
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { recordFailed, recordSucceeded, ufoExperiences } from '../../util/analytics';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A function that will wrap any configured Emoji 'onSelection' function to ensure recordSelection is always
|
|
@@ -12,10 +12,13 @@ export var createRecordSelectionDefault = function createRecordSelectionDefault(
|
|
|
12
12
|
return function (emojiId, emoji, event) {
|
|
13
13
|
try {
|
|
14
14
|
if (provider.recordSelection && emoji) {
|
|
15
|
+
ufoExperiences['emoji-selection-recorded'].start();
|
|
15
16
|
provider.recordSelection(emoji).then(function () {
|
|
16
|
-
|
|
17
|
+
fireAnalytics && fireAnalytics(recordSucceeded);
|
|
18
|
+
ufoExperiences['emoji-selection-recorded'].success();
|
|
17
19
|
}).catch(function () {
|
|
18
|
-
|
|
20
|
+
fireAnalytics && fireAnalytics(recordFailed);
|
|
21
|
+
ufoExperiences['emoji-selection-recorded'].failure();
|
|
19
22
|
});
|
|
20
23
|
}
|
|
21
24
|
} finally {
|
|
@@ -14,9 +14,11 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
14
14
|
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; } }
|
|
15
15
|
|
|
16
16
|
import React from 'react';
|
|
17
|
-
import { defaultEmojiHeight } from '../../util/constants';
|
|
17
|
+
import { defaultEmojiHeight, SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI } from '../../util/constants';
|
|
18
18
|
import EmojiPlaceholder from './EmojiPlaceholder';
|
|
19
19
|
import LoadingEmojiComponent from './LoadingEmojiComponent';
|
|
20
|
+
import { sampledUfoRenderedEmoji, ufoExperiences } from '../../util/analytics';
|
|
21
|
+
import { UfoErrorBoundary } from './UfoErrorBoundary';
|
|
20
22
|
|
|
21
23
|
var resourcedEmojiModuleLoader = function resourcedEmojiModuleLoader() {
|
|
22
24
|
return import(
|
|
@@ -35,25 +37,34 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
|
|
|
35
37
|
|
|
36
38
|
var _super = _createSuper(ResourcedEmoji);
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
// state initialised with static component to prevent
|
|
41
|
+
// rerender when the module has already been loaded
|
|
42
|
+
function ResourcedEmoji(props) {
|
|
39
43
|
var _this;
|
|
40
44
|
|
|
41
45
|
_classCallCheck(this, ResourcedEmoji);
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
args[_key] = arguments[_key];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
_this = _super.call.apply(_super, [this].concat(args));
|
|
47
|
+
_this = _super.call(this, props, {});
|
|
48
48
|
|
|
49
49
|
_defineProperty(_assertThisInitialized(_this), "state", {
|
|
50
50
|
asyncLoadedComponent: ResourcedEmoji.AsyncLoadedComponent
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
+
sampledUfoRenderedEmoji(props.emojiId).start({
|
|
54
|
+
samplingRate: SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI
|
|
55
|
+
});
|
|
56
|
+
ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName).addMetadata({
|
|
57
|
+
source: 'resourced-emoji'
|
|
58
|
+
});
|
|
53
59
|
return _this;
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
_createClass(ResourcedEmoji, [{
|
|
63
|
+
key: "componentWillUnmount",
|
|
64
|
+
value: function componentWillUnmount() {
|
|
65
|
+
sampledUfoRenderedEmoji(this.props.emojiId).abort();
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
57
68
|
key: "asyncLoadComponent",
|
|
58
69
|
value: function asyncLoadComponent() {
|
|
59
70
|
var _this2 = this;
|
|
@@ -84,9 +95,11 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
|
|
|
84
95
|
emojiProvider = _this$props2.emojiProvider,
|
|
85
96
|
otherProps = _objectWithoutProperties(_this$props2, _excluded);
|
|
86
97
|
|
|
87
|
-
return /*#__PURE__*/React.createElement(
|
|
98
|
+
return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
|
|
99
|
+
experiences: [ufoExperiences['emoji-rendered'].getInstance(this.props.emojiId.id || this.props.emojiId.shortName)]
|
|
100
|
+
}, /*#__PURE__*/React.createElement(ResourcedEmojiComponent, _extends({}, otherProps, {
|
|
88
101
|
emojiProvider: loadedEmojiProvider
|
|
89
|
-
}));
|
|
102
|
+
})));
|
|
90
103
|
}
|
|
91
104
|
}]);
|
|
92
105
|
|
|
@@ -10,13 +10,14 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
10
10
|
|
|
11
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; } }
|
|
12
12
|
|
|
13
|
+
import PropTypes from 'prop-types';
|
|
13
14
|
import React from 'react';
|
|
14
15
|
import { Component } from 'react';
|
|
15
16
|
import { defaultEmojiHeight } from '../../util/constants';
|
|
16
17
|
import { isPromise } from '../../util/type-helpers';
|
|
17
18
|
import CachingEmoji from './CachingEmoji';
|
|
18
19
|
import EmojiPlaceholder from './EmojiPlaceholder';
|
|
19
|
-
import {
|
|
20
|
+
import { sampledUfoRenderedEmoji } from '../../util/analytics';
|
|
20
21
|
|
|
21
22
|
var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
22
23
|
_inherits(ResourcedEmojiComponent, _Component);
|
|
@@ -40,6 +41,15 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
_createClass(ResourcedEmojiComponent, [{
|
|
44
|
+
key: "getChildContext",
|
|
45
|
+
value: function getChildContext() {
|
|
46
|
+
return {
|
|
47
|
+
emoji: {
|
|
48
|
+
emojiProvider: this.props.emojiProvider
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}, {
|
|
43
53
|
key: "refreshEmoji",
|
|
44
54
|
value: function refreshEmoji(emojiProvider, emojiId) {
|
|
45
55
|
var _this2 = this;
|
|
@@ -57,7 +67,22 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
57
67
|
emoji: emoji,
|
|
58
68
|
loaded: true
|
|
59
69
|
});
|
|
70
|
+
|
|
71
|
+
if (!emoji) {
|
|
72
|
+
// emoji is undefined
|
|
73
|
+
sampledUfoRenderedEmoji(emojiId).failure({
|
|
74
|
+
metadata: {
|
|
75
|
+
reason: 'failed to find'
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
60
79
|
}
|
|
80
|
+
}).catch(function () {
|
|
81
|
+
sampledUfoRenderedEmoji(emojiId).failure({
|
|
82
|
+
metadata: {
|
|
83
|
+
reason: 'failed to load'
|
|
84
|
+
}
|
|
85
|
+
});
|
|
61
86
|
});
|
|
62
87
|
} else {
|
|
63
88
|
// loaded
|
|
@@ -128,22 +153,19 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
128
153
|
shortName = _this$props$emojiId.shortName,
|
|
129
154
|
id = _this$props$emojiId.id,
|
|
130
155
|
fallback = _this$props$emojiId.fallback;
|
|
131
|
-
|
|
132
|
-
emoji: {
|
|
133
|
-
emojiProvider: this.props.emojiProvider
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
return /*#__PURE__*/React.createElement(EmojiContextProvider, {
|
|
137
|
-
emojiContextValue: emojiContextValue
|
|
138
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
156
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
139
157
|
"data-emoji-id": id,
|
|
140
158
|
"data-emoji-short-name": shortName,
|
|
141
159
|
"data-emoji-text": fallback || shortName
|
|
142
|
-
}, element)
|
|
160
|
+
}, element);
|
|
143
161
|
}
|
|
144
162
|
}]);
|
|
145
163
|
|
|
146
164
|
return ResourcedEmojiComponent;
|
|
147
165
|
}(Component);
|
|
148
166
|
|
|
167
|
+
_defineProperty(ResourcedEmojiComponent, "childContextTypes", {
|
|
168
|
+
emoji: PropTypes.object
|
|
169
|
+
});
|
|
170
|
+
|
|
149
171
|
export { ResourcedEmojiComponent as default };
|
|
@@ -8,13 +8,14 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
8
8
|
|
|
9
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
10
|
|
|
11
|
+
/** @jsx jsx */
|
|
12
|
+
import { jsx } from '@emotion/core';
|
|
11
13
|
import AkButton from '@atlaskit/button/custom-theme-button';
|
|
12
14
|
import Spinner from '@atlaskit/spinner';
|
|
13
|
-
import React from 'react';
|
|
14
15
|
import { Component } from 'react';
|
|
15
16
|
import { FormattedMessage } from 'react-intl-next';
|
|
16
17
|
import { messages } from '../i18n';
|
|
17
|
-
import
|
|
18
|
+
import { buttonSpinner, uploadEmojiButton, uploadRetryButton } from './styles';
|
|
18
19
|
|
|
19
20
|
var RetryableButton = /*#__PURE__*/function (_Component) {
|
|
20
21
|
_inherits(RetryableButton, _Component);
|
|
@@ -30,20 +31,19 @@ var RetryableButton = /*#__PURE__*/function (_Component) {
|
|
|
30
31
|
_createClass(RetryableButton, [{
|
|
31
32
|
key: "renderLoading",
|
|
32
33
|
value: function renderLoading() {
|
|
33
|
-
return
|
|
34
|
-
|
|
35
|
-
},
|
|
34
|
+
return jsx("span", {
|
|
35
|
+
css: buttonSpinner
|
|
36
|
+
}, jsx(Spinner, null));
|
|
36
37
|
}
|
|
37
38
|
}, {
|
|
38
39
|
key: "renderRetry",
|
|
39
40
|
value: function renderRetry() {
|
|
40
41
|
var _this$props = this.props,
|
|
41
42
|
loading = _this$props.loading,
|
|
42
|
-
retryClassName = _this$props.retryClassName,
|
|
43
43
|
onSubmit = _this$props.onSubmit;
|
|
44
|
-
return loading ? this.renderLoading() :
|
|
45
|
-
return
|
|
46
|
-
|
|
44
|
+
return loading ? this.renderLoading() : jsx(FormattedMessage, messages.retryLabel, function (retryLabel) {
|
|
45
|
+
return jsx(AkButton, {
|
|
46
|
+
css: uploadRetryButton,
|
|
47
47
|
appearance: "warning",
|
|
48
48
|
onClick: onSubmit
|
|
49
49
|
}, retryLabel);
|
|
@@ -55,12 +55,11 @@ var RetryableButton = /*#__PURE__*/function (_Component) {
|
|
|
55
55
|
var _this$props2 = this.props,
|
|
56
56
|
loading = _this$props2.loading,
|
|
57
57
|
error = _this$props2.error,
|
|
58
|
-
className = _this$props2.className,
|
|
59
58
|
appearance = _this$props2.appearance,
|
|
60
59
|
onSubmit = _this$props2.onSubmit,
|
|
61
60
|
label = _this$props2.label;
|
|
62
|
-
return error ? this.renderRetry() : loading ? this.renderLoading() :
|
|
63
|
-
|
|
61
|
+
return error ? this.renderRetry() : loading ? this.renderLoading() : jsx(AkButton, {
|
|
62
|
+
css: uploadEmojiButton,
|
|
64
63
|
appearance: appearance,
|
|
65
64
|
onClick: onSubmit
|
|
66
65
|
}, label);
|
|
@@ -11,8 +11,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
11
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; } }
|
|
12
12
|
|
|
13
13
|
// FIXME - FAB-1732 looking at making a shared component for this
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
|
|
15
|
+
/** @jsx jsx */
|
|
16
|
+
import { jsx } from '@emotion/core';
|
|
16
17
|
import { PureComponent } from 'react';
|
|
17
18
|
import { findDOMNode } from 'react-dom';
|
|
18
19
|
import * as styles from './styles';
|
|
@@ -88,17 +89,12 @@ var Scrollable = /*#__PURE__*/function (_PureComponent) {
|
|
|
88
89
|
className = _this$props.className,
|
|
89
90
|
maxHeight = _this$props.maxHeight,
|
|
90
91
|
onMouseLeave = _this$props.onMouseLeave;
|
|
91
|
-
var scrollableClasses = ['emoji-scrollable', styles.emojiScrollable];
|
|
92
|
-
|
|
93
|
-
if (className) {
|
|
94
|
-
scrollableClasses.push(className);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
92
|
var style = maxHeight ? {
|
|
98
93
|
maxHeight: maxHeight
|
|
99
94
|
} : {};
|
|
100
|
-
return
|
|
101
|
-
className:
|
|
95
|
+
return jsx("div", {
|
|
96
|
+
className: "emoji-scrollable ".concat(className),
|
|
97
|
+
css: styles.emojiScrollable,
|
|
102
98
|
onMouseLeave: onMouseLeave,
|
|
103
99
|
onScroll: this.handleScroll,
|
|
104
100
|
ref: this.handleRef,
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
import React from 'react';
|
|
12
|
+
export var UfoErrorBoundary = /*#__PURE__*/function (_React$Component) {
|
|
13
|
+
_inherits(UfoErrorBoundary, _React$Component);
|
|
14
|
+
|
|
15
|
+
var _super = _createSuper(UfoErrorBoundary);
|
|
16
|
+
|
|
17
|
+
function UfoErrorBoundary() {
|
|
18
|
+
_classCallCheck(this, UfoErrorBoundary);
|
|
19
|
+
|
|
20
|
+
return _super.apply(this, arguments);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
_createClass(UfoErrorBoundary, [{
|
|
24
|
+
key: "componentDidCatch",
|
|
25
|
+
value: function componentDidCatch() {
|
|
26
|
+
this.props.experiences.forEach(function (e) {
|
|
27
|
+
return e.failure();
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}, {
|
|
31
|
+
key: "render",
|
|
32
|
+
value: function render() {
|
|
33
|
+
return this.props.children;
|
|
34
|
+
}
|
|
35
|
+
}]);
|
|
36
|
+
|
|
37
|
+
return UfoErrorBoundary;
|
|
38
|
+
}(React.Component);
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { supportsUploadFeature } from '../../api/EmojiResource';
|
|
2
2
|
import { uploadFailedEvent, uploadSucceededEvent } from '../../util/analytics';
|
|
3
3
|
import { messages } from '../i18n';
|
|
4
|
+
import { ufoExperiences } from '../../util/analytics/ufoExperiences';
|
|
4
5
|
export var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) {
|
|
5
6
|
var startTime = Date.now();
|
|
6
7
|
errorSetter(undefined);
|
|
7
8
|
|
|
8
9
|
if (supportsUploadFeature(emojiProvider)) {
|
|
10
|
+
ufoExperiences['emoji-uploaded'].start();
|
|
9
11
|
emojiProvider.uploadCustomEmoji(upload).then(function (emojiDescription) {
|
|
10
12
|
fireAnalytics(uploadSucceededEvent({
|
|
11
13
|
duration: Date.now() - startTime
|
|
12
14
|
}));
|
|
13
15
|
onSuccess(emojiDescription);
|
|
16
|
+
ufoExperiences['emoji-uploaded'].success();
|
|
14
17
|
}).catch(function (err) {
|
|
15
18
|
errorSetter(messages.emojiUploadFailed); // eslint-disable-next-line no-console
|
|
16
19
|
|
|
@@ -19,6 +22,7 @@ export var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter
|
|
|
19
22
|
duration: Date.now() - startTime,
|
|
20
23
|
reason: messages.emojiUploadFailed.defaultMessage
|
|
21
24
|
}));
|
|
25
|
+
ufoExperiences['emoji-uploaded'].failure();
|
|
22
26
|
});
|
|
23
27
|
}
|
|
24
28
|
};
|