@atlaskit/emoji 67.0.7 → 67.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/dist/cjs/api/EmojiResource.js +41 -25
- package/dist/cjs/api/media/TokenManager.js +4 -4
- package/dist/cjs/components/common/CachingEmoji.js +14 -6
- package/dist/cjs/components/common/Emoji.js +48 -12
- package/dist/cjs/components/common/EmojiActions.js +62 -26
- package/dist/cjs/components/common/EmojiErrorMessage.js +12 -7
- package/dist/cjs/components/common/EmojiPlaceholder.js +1 -0
- package/dist/cjs/components/common/{EmojiButton.js → EmojiRadioButton.js} +28 -19
- package/dist/cjs/components/common/EmojiUploadPicker.js +80 -37
- package/dist/cjs/components/common/EmojiUploadPreview.js +11 -2
- package/dist/cjs/components/common/FileChooser.js +2 -2
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +4 -0
- package/dist/cjs/components/common/RetryableButton.js +7 -3
- package/dist/cjs/components/common/TonePreviewButton.js +44 -0
- package/dist/cjs/components/common/ToneSelector.js +53 -25
- package/dist/cjs/components/common/styles.js +45 -16
- package/dist/cjs/components/i18n.js +44 -4
- package/dist/cjs/components/picker/CategorySelector.js +112 -90
- package/dist/cjs/components/picker/CategoryTracker.js +0 -28
- package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +2 -1
- package/dist/cjs/components/picker/EmojiPickerComponent.js +33 -44
- package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +32 -4
- package/dist/cjs/components/picker/EmojiPickerList.js +154 -88
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +66 -117
- package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +5 -2
- package/dist/cjs/components/picker/VirtualList.js +273 -171
- package/dist/cjs/components/picker/styles.js +43 -51
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- package/dist/cjs/context/EmojiPickerListContext.js +33 -0
- package/dist/cjs/hooks/useEmojiPickerListContext.js +12 -0
- package/dist/cjs/hooks/useIsMounted.js +17 -0
- package/dist/cjs/i18n/cs.js +35 -34
- package/dist/cjs/i18n/da.js +35 -34
- package/dist/cjs/i18n/de.js +35 -34
- package/dist/cjs/i18n/en.js +35 -34
- package/dist/cjs/i18n/en_GB.js +35 -34
- package/dist/cjs/i18n/es.js +35 -34
- package/dist/cjs/i18n/fi.js +35 -34
- package/dist/cjs/i18n/fr.js +35 -34
- package/dist/cjs/i18n/hu.js +35 -34
- package/dist/cjs/i18n/it.js +35 -34
- package/dist/cjs/i18n/ja.js +35 -34
- package/dist/cjs/i18n/ko.js +35 -34
- package/dist/cjs/i18n/nb.js +35 -34
- package/dist/cjs/i18n/nl.js +35 -34
- package/dist/cjs/i18n/pl.js +35 -34
- package/dist/cjs/i18n/pt_BR.js +35 -34
- package/dist/cjs/i18n/ru.js +35 -34
- package/dist/cjs/i18n/sv.js +35 -34
- package/dist/cjs/i18n/th.js +35 -34
- package/dist/cjs/i18n/tr.js +35 -34
- package/dist/cjs/i18n/uk.js +35 -34
- package/dist/cjs/i18n/vi.js +35 -34
- package/dist/cjs/i18n/zh.js +35 -34
- package/dist/cjs/i18n/zh_TW.js +35 -34
- package/dist/cjs/types.js +7 -1
- package/dist/cjs/util/constants.js +43 -2
- package/dist/cjs/util/shared-styles.js +3 -4
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +42 -26
- package/dist/es2019/api/media/TokenManager.js +4 -4
- package/dist/es2019/components/common/CachingEmoji.js +10 -3
- package/dist/es2019/components/common/Emoji.js +44 -11
- package/dist/es2019/components/common/EmojiActions.js +55 -24
- package/dist/es2019/components/common/EmojiErrorMessage.js +7 -3
- package/dist/es2019/components/common/EmojiPlaceholder.js +1 -0
- package/dist/es2019/components/common/EmojiRadioButton.js +54 -0
- package/dist/es2019/components/common/EmojiUploadPicker.js +75 -36
- package/dist/es2019/components/common/EmojiUploadPreview.js +11 -2
- package/dist/es2019/components/common/FileChooser.js +1 -1
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +4 -0
- package/dist/es2019/components/common/RetryableButton.js +7 -3
- package/dist/es2019/components/common/TonePreviewButton.js +34 -0
- package/dist/es2019/components/common/ToneSelector.js +55 -21
- package/dist/es2019/components/common/styles.js +41 -10
- package/dist/es2019/components/i18n.js +44 -4
- package/dist/es2019/components/picker/CategorySelector.js +114 -89
- package/dist/es2019/components/picker/CategoryTracker.js +0 -24
- package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +2 -2
- package/dist/es2019/components/picker/EmojiPickerComponent.js +36 -46
- package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +51 -21
- package/dist/es2019/components/picker/EmojiPickerList.js +113 -55
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +61 -98
- package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +4 -1
- package/dist/es2019/components/picker/VirtualList.js +247 -108
- package/dist/es2019/components/picker/styles.js +20 -28
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- package/dist/es2019/context/EmojiPickerListContext.js +17 -0
- package/dist/es2019/hooks/useEmojiPickerListContext.js +3 -0
- package/dist/es2019/hooks/useIsMounted.js +11 -0
- package/dist/es2019/i18n/cs.js +35 -34
- package/dist/es2019/i18n/da.js +35 -34
- package/dist/es2019/i18n/de.js +35 -34
- package/dist/es2019/i18n/en.js +35 -34
- package/dist/es2019/i18n/en_GB.js +35 -34
- package/dist/es2019/i18n/es.js +35 -34
- package/dist/es2019/i18n/fi.js +35 -34
- package/dist/es2019/i18n/fr.js +35 -34
- package/dist/es2019/i18n/hu.js +35 -34
- package/dist/es2019/i18n/it.js +35 -34
- package/dist/es2019/i18n/ja.js +35 -34
- package/dist/es2019/i18n/ko.js +35 -34
- package/dist/es2019/i18n/nb.js +35 -34
- package/dist/es2019/i18n/nl.js +35 -34
- package/dist/es2019/i18n/pl.js +35 -34
- package/dist/es2019/i18n/pt_BR.js +35 -34
- package/dist/es2019/i18n/ru.js +35 -34
- package/dist/es2019/i18n/sv.js +35 -34
- package/dist/es2019/i18n/th.js +35 -34
- package/dist/es2019/i18n/tr.js +35 -34
- package/dist/es2019/i18n/uk.js +35 -34
- package/dist/es2019/i18n/vi.js +35 -34
- package/dist/es2019/i18n/zh.js +35 -34
- package/dist/es2019/i18n/zh_TW.js +35 -34
- package/dist/es2019/types.js +5 -0
- package/dist/es2019/util/constants.js +32 -0
- package/dist/es2019/util/shared-styles.js +1 -2
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +42 -26
- package/dist/esm/api/media/TokenManager.js +4 -4
- package/dist/esm/components/common/CachingEmoji.js +14 -6
- package/dist/esm/components/common/Emoji.js +48 -12
- package/dist/esm/components/common/EmojiActions.js +62 -26
- package/dist/esm/components/common/EmojiErrorMessage.js +7 -3
- package/dist/esm/components/common/EmojiPlaceholder.js +1 -0
- package/dist/esm/components/common/EmojiRadioButton.js +52 -0
- package/dist/esm/components/common/EmojiUploadPicker.js +77 -36
- package/dist/esm/components/common/EmojiUploadPreview.js +11 -2
- package/dist/esm/components/common/FileChooser.js +1 -1
- package/dist/esm/components/common/ResourcedEmojiComponent.js +4 -0
- package/dist/esm/components/common/RetryableButton.js +7 -3
- package/dist/esm/components/common/TonePreviewButton.js +33 -0
- package/dist/esm/components/common/ToneSelector.js +49 -18
- package/dist/esm/components/common/styles.js +40 -12
- package/dist/esm/components/i18n.js +44 -4
- package/dist/esm/components/picker/CategorySelector.js +114 -95
- package/dist/esm/components/picker/CategoryTracker.js +0 -28
- package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +2 -2
- package/dist/esm/components/picker/EmojiPickerComponent.js +35 -46
- package/dist/esm/components/picker/EmojiPickerEmojiRow.js +32 -4
- package/dist/esm/components/picker/EmojiPickerList.js +156 -86
- package/dist/esm/components/picker/EmojiPickerListSearch.js +64 -117
- package/dist/esm/components/picker/EmojiPickerVirtualItems.js +5 -2
- package/dist/esm/components/picker/VirtualList.js +274 -172
- package/dist/esm/components/picker/styles.js +37 -45
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- package/dist/esm/context/EmojiPickerListContext.js +21 -0
- package/dist/esm/hooks/useEmojiPickerListContext.js +5 -0
- package/dist/esm/hooks/useIsMounted.js +11 -0
- package/dist/esm/i18n/cs.js +35 -34
- package/dist/esm/i18n/da.js +35 -34
- package/dist/esm/i18n/de.js +35 -34
- package/dist/esm/i18n/en.js +35 -34
- package/dist/esm/i18n/en_GB.js +35 -34
- package/dist/esm/i18n/es.js +35 -34
- package/dist/esm/i18n/fi.js +35 -34
- package/dist/esm/i18n/fr.js +35 -34
- package/dist/esm/i18n/hu.js +35 -34
- package/dist/esm/i18n/it.js +35 -34
- package/dist/esm/i18n/ja.js +35 -34
- package/dist/esm/i18n/ko.js +35 -34
- package/dist/esm/i18n/nb.js +35 -34
- package/dist/esm/i18n/nl.js +35 -34
- package/dist/esm/i18n/pl.js +35 -34
- package/dist/esm/i18n/pt_BR.js +35 -34
- package/dist/esm/i18n/ru.js +35 -34
- package/dist/esm/i18n/sv.js +35 -34
- package/dist/esm/i18n/th.js +35 -34
- package/dist/esm/i18n/tr.js +35 -34
- package/dist/esm/i18n/uk.js +35 -34
- package/dist/esm/i18n/vi.js +35 -34
- package/dist/esm/i18n/zh.js +35 -34
- package/dist/esm/i18n/zh_TW.js +35 -34
- package/dist/esm/types.js +5 -0
- package/dist/esm/util/constants.js +32 -0
- package/dist/esm/util/shared-styles.js +1 -2
- package/dist/esm/version.json +1 -1
- package/dist/types/api/EmojiResource.d.ts +2 -0
- package/dist/types/components/common/Emoji.d.ts +7 -1
- package/dist/types/components/common/EmojiActions.d.ts +4 -3
- package/dist/types/components/common/{EmojiButton.d.ts → EmojiRadioButton.d.ts} +3 -4
- package/dist/types/components/common/EmojiUploadPicker.d.ts +6 -4
- package/dist/types/components/common/RetryableButton.d.ts +1 -0
- package/dist/types/components/common/TonePreviewButton.d.ts +14 -0
- package/dist/types/components/common/ToneSelector.d.ts +8 -5
- package/dist/types/components/common/internal-types.d.ts +9 -0
- package/dist/types/components/common/styles.d.ts +2 -1
- package/dist/types/components/i18n.d.ts +40 -0
- package/dist/types/components/picker/CategorySelector.d.ts +3 -10
- package/dist/types/components/picker/CategoryTracker.d.ts +0 -2
- package/dist/types/components/picker/EmojiPickerCategoryHeading.d.ts +2 -1
- package/dist/types/components/picker/EmojiPickerEmojiRow.d.ts +5 -0
- package/dist/types/components/picker/EmojiPickerList.d.ts +14 -7
- package/dist/types/components/picker/EmojiPickerListSearch.d.ts +4 -8
- package/dist/types/components/picker/EmojiPickerVirtualItems.d.ts +1 -1
- package/dist/types/components/picker/VirtualList.d.ts +7 -24
- package/dist/types/components/picker/styles.d.ts +1 -1
- package/dist/types/context/EmojiPickerListContext.d.ts +10 -0
- package/dist/types/hooks/useEmojiPickerListContext.d.ts +1 -0
- package/dist/types/hooks/useIsMounted.d.ts +1 -0
- package/dist/types/i18n/cs.d.ts +34 -34
- package/dist/types/i18n/da.d.ts +34 -34
- package/dist/types/i18n/de.d.ts +34 -34
- package/dist/types/i18n/en.d.ts +34 -34
- package/dist/types/i18n/en_GB.d.ts +34 -34
- package/dist/types/i18n/es.d.ts +34 -34
- package/dist/types/i18n/fi.d.ts +34 -34
- package/dist/types/i18n/fr.d.ts +34 -34
- package/dist/types/i18n/hu.d.ts +34 -34
- package/dist/types/i18n/it.d.ts +34 -34
- package/dist/types/i18n/ja.d.ts +34 -34
- package/dist/types/i18n/ko.d.ts +34 -34
- package/dist/types/i18n/nb.d.ts +34 -34
- package/dist/types/i18n/nl.d.ts +34 -34
- package/dist/types/i18n/pl.d.ts +34 -34
- package/dist/types/i18n/pt_BR.d.ts +34 -34
- package/dist/types/i18n/ru.d.ts +34 -34
- package/dist/types/i18n/sv.d.ts +34 -34
- package/dist/types/i18n/th.d.ts +34 -34
- package/dist/types/i18n/tr.d.ts +34 -34
- package/dist/types/i18n/uk.d.ts +34 -34
- package/dist/types/i18n/vi.d.ts +34 -34
- package/dist/types/i18n/zh.d.ts +34 -34
- package/dist/types/i18n/zh_TW.d.ts +34 -34
- package/dist/types/types.d.ts +5 -0
- package/dist/types/util/constants.d.ts +28 -0
- package/dist/types/util/shared-styles.d.ts +1 -1
- package/dist/types/util/type-helpers.d.ts +1 -1
- package/package.json +12 -8
- package/report.api.md +62 -1
- package/README.md +0 -3
- package/dist/cjs/components/hooks.js +0 -14
- package/dist/es2019/components/common/EmojiButton.js +0 -49
- package/dist/es2019/components/hooks.js +0 -8
- package/dist/esm/components/common/EmojiButton.js +0 -43
- package/dist/esm/components/hooks.js +0 -8
- package/dist/types/components/hooks.d.ts +0 -1
|
@@ -25,8 +25,9 @@ var _EmojiPickerFooter = _interopRequireDefault(require("./EmojiPickerFooter"));
|
|
|
25
25
|
var _EmojiPickerList = _interopRequireDefault(require("./EmojiPickerList"));
|
|
26
26
|
var _analytics = require("../../util/analytics");
|
|
27
27
|
var _styles = require("./styles");
|
|
28
|
-
var _hooks = require("../hooks");
|
|
29
28
|
var _useEmoji2 = require("../../hooks/useEmoji");
|
|
29
|
+
var _useIsMounted = require("../../hooks/useIsMounted");
|
|
30
|
+
var _i18n = require("../i18n");
|
|
30
31
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
32
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
33
|
var FREQUENTLY_USED_MAX = 16;
|
|
@@ -37,6 +38,8 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
37
38
|
createAnalyticsEvent = _ref.createAnalyticsEvent,
|
|
38
39
|
_ref$size = _ref.size,
|
|
39
40
|
size = _ref$size === void 0 ? _constants.defaultEmojiPickerSize : _ref$size;
|
|
41
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
42
|
+
formatMessage = _useIntl.formatMessage;
|
|
40
43
|
var _useEmoji = (0, _useEmoji2.useEmoji)(),
|
|
41
44
|
emojiProvider = _useEmoji.emojiProvider,
|
|
42
45
|
isUploadSupported = _useEmoji.isUploadSupported;
|
|
@@ -101,12 +104,11 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
101
104
|
}, []);
|
|
102
105
|
var openTime = (0, _react.useRef)(0);
|
|
103
106
|
var isMounting = (0, _react.useRef)(true);
|
|
104
|
-
var didMount = (0, _hooks.useDidMount)();
|
|
105
|
-
var updateAfterDidMount = (0, _react.useRef)(true);
|
|
106
107
|
var previousEmojiProvider = (0, _react.useRef)(emojiProvider);
|
|
107
108
|
var currentUser = (0, _react.useMemo)(function () {
|
|
108
109
|
return emojiProvider.getCurrentUser();
|
|
109
110
|
}, [emojiProvider]);
|
|
111
|
+
var isMounted = (0, _useIsMounted.useIsMounted)();
|
|
110
112
|
var fireAnalytics = (0, _react.useCallback)(function (analyticsEvent) {
|
|
111
113
|
if (createAnalyticsEvent) {
|
|
112
114
|
(0, _analytics.createAndFireEventInElementsChannel)(analyticsEvent)(createAnalyticsEvent);
|
|
@@ -210,7 +212,11 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
210
212
|
emojiToRender: emojiToRender,
|
|
211
213
|
searchEmoji: searchResults.emojis
|
|
212
214
|
});
|
|
213
|
-
|
|
215
|
+
fireAnalytics((0, _analytics.pickerSearchedEvent)({
|
|
216
|
+
queryLength: searchQuery.length,
|
|
217
|
+
numMatches: searchResults.emojis.length
|
|
218
|
+
}));
|
|
219
|
+
}, [frequentlyUsedEmojis, query, setStateAfterEmojiChange, fireAnalytics]);
|
|
214
220
|
var onProviderChange = (0, _react.useMemo)(function () {
|
|
215
221
|
return {
|
|
216
222
|
result: onSearchResult
|
|
@@ -300,22 +306,22 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
300
306
|
var onFileChooserClicked = (0, _react.useCallback)(function () {
|
|
301
307
|
fireAnalytics((0, _analytics.selectedFileEvent)());
|
|
302
308
|
}, [fireAnalytics]);
|
|
309
|
+
var scrollToTopOfList = (0, _react.useCallback)(function () {
|
|
310
|
+
var _emojiPickerList$curr;
|
|
311
|
+
(_emojiPickerList$curr = emojiPickerList.current) === null || _emojiPickerList$curr === void 0 ? void 0 : _emojiPickerList$curr.scrollToTop();
|
|
312
|
+
}, [emojiPickerList]);
|
|
303
313
|
var onSearch = (0, _react.useCallback)(function (searchQuery) {
|
|
304
314
|
var options = {
|
|
305
|
-
skinTone: selectedTone
|
|
315
|
+
skinTone: selectedTone,
|
|
316
|
+
source: _types.SearchSourceTypes.PICKER
|
|
306
317
|
};
|
|
307
|
-
if (query) {
|
|
308
|
-
_analytics.ufoExperiences['emoji-searched'].start();
|
|
309
|
-
_analytics.ufoExperiences['emoji-searched'].addMetadata({
|
|
310
|
-
queryLength: query.length,
|
|
311
|
-
source: 'EmojiPickerComponent'
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
318
|
if (searchQuery !== query) {
|
|
315
319
|
setQuery(searchQuery);
|
|
320
|
+
// scroll to top when search, which is search results section
|
|
321
|
+
scrollToTopOfList();
|
|
316
322
|
}
|
|
317
|
-
updateEmojis(
|
|
318
|
-
}, [query, selectedTone, updateEmojis]);
|
|
323
|
+
updateEmojis(searchQuery, options);
|
|
324
|
+
}, [query, selectedTone, updateEmojis, scrollToTopOfList]);
|
|
319
325
|
var onOpenUpload = (0, _react.useCallback)(function () {
|
|
320
326
|
// Prime upload token so it's ready when the user adds
|
|
321
327
|
if ((0, _EmojiResource.supportsUploadFeature)(emojiProvider)) {
|
|
@@ -327,12 +333,12 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
327
333
|
});
|
|
328
334
|
fireAnalytics((0, _analytics.uploadBeginButton)());
|
|
329
335
|
}, [emojiProvider, fireAnalytics]);
|
|
330
|
-
var
|
|
336
|
+
var scrollToUploadedEmoji = (0, _react.useCallback)(function () {
|
|
331
337
|
if (emojiPickerList.current) {
|
|
332
338
|
// Wait a tick to ensure repaint and updated height for picker list
|
|
333
339
|
window.setTimeout(function () {
|
|
334
|
-
var _emojiPickerList$
|
|
335
|
-
(_emojiPickerList$
|
|
340
|
+
var _emojiPickerList$curr2;
|
|
341
|
+
(_emojiPickerList$curr2 = emojiPickerList.current) === null || _emojiPickerList$curr2 === void 0 ? void 0 : _emojiPickerList$curr2.scrollToRecentlyUploaded();
|
|
336
342
|
}, 0);
|
|
337
343
|
}
|
|
338
344
|
}, [emojiPickerList]);
|
|
@@ -349,10 +355,10 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
349
355
|
setSelectedEmoji(emojiDescription);
|
|
350
356
|
setUploading(false);
|
|
351
357
|
});
|
|
352
|
-
|
|
358
|
+
scrollToUploadedEmoji();
|
|
353
359
|
};
|
|
354
360
|
(0, _UploadEmoji.uploadEmoji)(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics, retry);
|
|
355
|
-
}, [emojiProvider, fireAnalytics,
|
|
361
|
+
}, [emojiProvider, fireAnalytics, scrollToUploadedEmoji]);
|
|
356
362
|
var onTriggerDelete = (0, _react.useCallback)(function (_emojiId, emoji) {
|
|
357
363
|
if (_emojiId) {
|
|
358
364
|
fireAnalytics((0, _analytics.deleteBeginEvent)({
|
|
@@ -403,11 +409,10 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
403
409
|
}
|
|
404
410
|
(0, _react.useEffect)(function () {
|
|
405
411
|
// componentDidMount logic
|
|
406
|
-
if (
|
|
412
|
+
if (!isMounted) {
|
|
407
413
|
onComponentDidMount();
|
|
408
|
-
updateAfterDidMount.current = false;
|
|
409
414
|
}
|
|
410
|
-
}, [
|
|
415
|
+
}, [onComponentDidMount, isMounted]);
|
|
411
416
|
(0, _react.useEffect)(function () {
|
|
412
417
|
previousEmojiProvider.current.unsubscribe(onProviderChange);
|
|
413
418
|
previousEmojiProvider.current = emojiProvider;
|
|
@@ -416,26 +421,6 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
416
421
|
emojiProvider.unsubscribe(onProviderChange);
|
|
417
422
|
};
|
|
418
423
|
}, [emojiProvider, onProviderChange]);
|
|
419
|
-
(0, _react.useEffect)(function () {
|
|
420
|
-
// We changed provider which means we subscribed to filter results for a new subscriber.
|
|
421
|
-
// So we refresh the emoji display with onSearch and we do it here, after the new props have
|
|
422
|
-
// been set since onSearch leads to filter being called on the current emojiProvider.
|
|
423
|
-
// (Calling onSearch in a '...Will...' lifecycle method would lead to filter being called on
|
|
424
|
-
// an emojiProvider we have already unsubscribed from)
|
|
425
|
-
onSearch(query);
|
|
426
|
-
}, [emojiProvider, onSearch, query]);
|
|
427
|
-
(0, _react.useEffect)(function () {
|
|
428
|
-
// Fire analytics event whenever query changes
|
|
429
|
-
fireAnalytics((0, _analytics.pickerSearchedEvent)({
|
|
430
|
-
queryLength: query.length,
|
|
431
|
-
numMatches: filteredEmojis.length
|
|
432
|
-
}));
|
|
433
|
-
_analytics.ufoExperiences['emoji-searched'].success({
|
|
434
|
-
metadata: {
|
|
435
|
-
emojisLength: filteredEmojis.length
|
|
436
|
-
}
|
|
437
|
-
});
|
|
438
|
-
}, [filteredEmojis.length, fireAnalytics, query]);
|
|
439
424
|
(0, _react.useEffect)(function () {
|
|
440
425
|
if (!frequentlyUsedEmojis.length || query) {
|
|
441
426
|
setFilteredEmojis(searchEmojis);
|
|
@@ -473,7 +458,10 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
473
458
|
return (0, _react2.jsx)("div", {
|
|
474
459
|
css: (0, _styles.emojiPicker)(showPreview, size),
|
|
475
460
|
ref: onPickerRef,
|
|
476
|
-
"data-emoji-picker-container": true
|
|
461
|
+
"data-emoji-picker-container": true,
|
|
462
|
+
role: "dialog",
|
|
463
|
+
"aria-label": formatMessage(_i18n.messages.emojiPickerTitle),
|
|
464
|
+
"aria-modal": true
|
|
477
465
|
}, (0, _react2.jsx)(_CategorySelector.default, {
|
|
478
466
|
activeCategoryId: activeCategory,
|
|
479
467
|
dynamicCategories: dynamicCategories,
|
|
@@ -505,7 +493,8 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
505
493
|
onCloseDelete: onCloseDelete,
|
|
506
494
|
onFileChooserClicked: onFileChooserClicked,
|
|
507
495
|
onOpenUpload: onOpenUpload,
|
|
508
|
-
size: size
|
|
496
|
+
size: size,
|
|
497
|
+
activeCategoryId: activeCategory
|
|
509
498
|
}), showPreview && (0, _react2.jsx)(_EmojiPickerFooter.default, {
|
|
510
499
|
selectedEmoji: selectedEmoji
|
|
511
500
|
}));
|
|
@@ -7,34 +7,62 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _react2 = require("@emotion/react");
|
|
10
|
+
var _reactIntlNext = require("react-intl-next");
|
|
10
11
|
var _CachingEmoji = _interopRequireDefault(require("../common/CachingEmoji"));
|
|
11
12
|
var _styles = require("./styles");
|
|
13
|
+
var _useEmojiPickerListContext = require("../../hooks/useEmojiPickerListContext");
|
|
14
|
+
var _i18n = require("../i18n");
|
|
12
15
|
/** @jsx jsx */
|
|
13
16
|
|
|
14
17
|
var EmojiPickerEmojiRow = function EmojiPickerEmojiRow(_ref) {
|
|
15
18
|
var emojis = _ref.emojis,
|
|
16
19
|
onSelected = _ref.onSelected,
|
|
17
20
|
onMouseMove = _ref.onMouseMove,
|
|
21
|
+
onFocus = _ref.onFocus,
|
|
18
22
|
title = _ref.title,
|
|
19
23
|
showDelete = _ref.showDelete,
|
|
20
|
-
onDelete = _ref.onDelete
|
|
24
|
+
onDelete = _ref.onDelete,
|
|
25
|
+
virtualItemContext = _ref.virtualItemContext;
|
|
26
|
+
var _useEmojiPickerListCo = (0, _useEmojiPickerListContext.useEmojiPickerListContext)(),
|
|
27
|
+
currentEmojisFocus = _useEmojiPickerListCo.currentEmojisFocus,
|
|
28
|
+
setEmojisFocus = _useEmojiPickerListCo.setEmojisFocus;
|
|
29
|
+
var rowIndex = (virtualItemContext === null || virtualItemContext === void 0 ? void 0 : virtualItemContext.index) || 0;
|
|
30
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
31
|
+
formatMessage = _useIntl.formatMessage;
|
|
32
|
+
var handleFocus = function handleFocus(index) {
|
|
33
|
+
return function (emojiId, emoji, event) {
|
|
34
|
+
setEmojisFocus({
|
|
35
|
+
rowIndex: rowIndex,
|
|
36
|
+
columnIndex: index
|
|
37
|
+
});
|
|
38
|
+
onFocus && onFocus(emojiId, emoji, event);
|
|
39
|
+
};
|
|
40
|
+
};
|
|
21
41
|
return (0, _react2.jsx)("div", {
|
|
22
|
-
css: _styles.emojiPickerRow
|
|
23
|
-
|
|
42
|
+
css: _styles.emojiPickerRow,
|
|
43
|
+
role: "presentation"
|
|
44
|
+
}, emojis.map(function (emoji, index) {
|
|
24
45
|
var shortName = emoji.shortName,
|
|
25
46
|
id = emoji.id;
|
|
26
47
|
var key = id ? "".concat(id, "-").concat(title) : "".concat(shortName, "-").concat(title);
|
|
48
|
+
var focus = currentEmojisFocus.rowIndex === rowIndex && currentEmojisFocus.columnIndex === index;
|
|
27
49
|
return (0, _react2.jsx)("span", {
|
|
28
50
|
css: _styles.emojiItem,
|
|
29
|
-
key: key
|
|
51
|
+
key: key,
|
|
52
|
+
role: "gridcell",
|
|
53
|
+
"aria-colindex": index + 1 // aria-colindex is 1 based
|
|
30
54
|
}, (0, _react2.jsx)(_CachingEmoji.default, {
|
|
31
55
|
emoji: emoji,
|
|
32
56
|
selectOnHover: true,
|
|
33
57
|
onSelected: onSelected,
|
|
34
58
|
onMouseMove: onMouseMove,
|
|
59
|
+
onFocus: handleFocus(index),
|
|
35
60
|
showDelete: showDelete,
|
|
36
61
|
onDelete: onDelete,
|
|
37
62
|
placeholderSize: 24,
|
|
63
|
+
"data-focus-index": "".concat(rowIndex, "-").concat(index),
|
|
64
|
+
tabIndex: focus ? 0 : -1,
|
|
65
|
+
"aria-roledescription": formatMessage(_i18n.messages.emojiButtonRoleDescription),
|
|
38
66
|
shouldBeInteractive: true
|
|
39
67
|
}));
|
|
40
68
|
}));
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = exports.RENDER_EMOJI_PICKER_LIST_TESTID = void 0;
|
|
9
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
13
13
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
14
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
15
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
-
var
|
|
17
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
16
|
+
var _react = require("react");
|
|
18
17
|
var _react2 = require("@emotion/react");
|
|
18
|
+
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
19
19
|
var _constants = require("../../util/constants");
|
|
20
20
|
var _categories = require("./categories");
|
|
21
21
|
var _CategoryTracker = _interopRequireDefault(require("./CategoryTracker"));
|
|
@@ -25,8 +25,9 @@ var _EmojiActions = _interopRequireDefault(require("../common/EmojiActions"));
|
|
|
25
25
|
var _styles = require("./styles");
|
|
26
26
|
var _utils = require("./utils");
|
|
27
27
|
var _VirtualList = require("./VirtualList");
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
var _reactIntlNext = require("react-intl-next");
|
|
29
|
+
var _i18n = require("../i18n");
|
|
30
|
+
var _EmojiPickerListContext = require("../../context/EmojiPickerListContext");
|
|
30
31
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
31
32
|
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; } }
|
|
32
33
|
/**
|
|
@@ -38,29 +39,66 @@ var categoryClassname = 'emoji-category';
|
|
|
38
39
|
var byOrder = function byOrder(orderableA, orderableB) {
|
|
39
40
|
return (orderableA.order || 0) - (orderableB.order || 0);
|
|
40
41
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* TODO: have to use class component here as unit test is relying on ref.root. Will refactor this whole file to functional component in future
|
|
45
|
+
* ticket: COLLAB-2317
|
|
46
|
+
*/
|
|
47
|
+
var EmojiPickerTabPanelInternal = /*#__PURE__*/function (_PureComponent) {
|
|
48
|
+
(0, _inherits2.default)(EmojiPickerTabPanelInternal, _PureComponent);
|
|
49
|
+
var _super = _createSuper(EmojiPickerTabPanelInternal);
|
|
50
|
+
function EmojiPickerTabPanelInternal() {
|
|
51
|
+
(0, _classCallCheck2.default)(this, EmojiPickerTabPanelInternal);
|
|
52
|
+
return _super.apply(this, arguments);
|
|
53
|
+
}
|
|
54
|
+
(0, _createClass2.default)(EmojiPickerTabPanelInternal, [{
|
|
55
|
+
key: "render",
|
|
56
|
+
value: function render() {
|
|
57
|
+
var _this$props = this.props,
|
|
58
|
+
formatMessage = _this$props.intl.formatMessage,
|
|
59
|
+
children = _this$props.children,
|
|
60
|
+
showSearchResults = _this$props.showSearchResults;
|
|
61
|
+
return (0, _react2.jsx)("div", {
|
|
62
|
+
ref: "root",
|
|
63
|
+
css: _styles.emojiPickerList,
|
|
64
|
+
"data-testid": RENDER_EMOJI_PICKER_LIST_TESTID,
|
|
65
|
+
id: RENDER_EMOJI_PICKER_LIST_TESTID,
|
|
66
|
+
role: "tabpanel",
|
|
67
|
+
"aria-label": formatMessage(_i18n.messages.emojiPickerListPanel)
|
|
68
|
+
}, (0, _react2.jsx)(_visuallyHidden.default, {
|
|
69
|
+
id: "emoji-picker-table-description"
|
|
70
|
+
}, formatMessage(_i18n.messages.emojiPickerGrid, {
|
|
71
|
+
showSearchResults: showSearchResults
|
|
72
|
+
})), children);
|
|
73
|
+
}
|
|
74
|
+
}]);
|
|
75
|
+
return EmojiPickerTabPanelInternal;
|
|
76
|
+
}(_react.PureComponent);
|
|
77
|
+
var EmojiPickerTabPanel = (0, _reactIntlNext.injectIntl)(EmojiPickerTabPanelInternal);
|
|
78
|
+
var EmojiPickerVirtualListInternal = /*#__PURE__*/function (_PureComponent2) {
|
|
79
|
+
(0, _inherits2.default)(EmojiPickerVirtualListInternal, _PureComponent2);
|
|
80
|
+
var _super2 = _createSuper(EmojiPickerVirtualListInternal);
|
|
81
|
+
function EmojiPickerVirtualListInternal(_props) {
|
|
45
82
|
var _this;
|
|
46
|
-
(0, _classCallCheck2.default)(this,
|
|
47
|
-
_this =
|
|
83
|
+
(0, _classCallCheck2.default)(this, EmojiPickerVirtualListInternal);
|
|
84
|
+
_this = _super2.call(this, _props);
|
|
48
85
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "virtualItems", []);
|
|
49
86
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "categoryTracker", new _CategoryTracker.default());
|
|
50
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "
|
|
87
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "listRef", /*#__PURE__*/(0, _react.createRef)());
|
|
88
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onEmojiActive", function (emojiId, emoji) {
|
|
51
89
|
if (_this.props.onEmojiActive) {
|
|
52
90
|
_this.props.onEmojiActive(emojiId, emoji);
|
|
53
91
|
}
|
|
54
92
|
});
|
|
55
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSearch", function (
|
|
93
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSearch", function (value) {
|
|
56
94
|
if (_this.props.onSearch) {
|
|
57
|
-
_this.props.onSearch(
|
|
95
|
+
_this.props.onSearch(value);
|
|
58
96
|
}
|
|
59
97
|
});
|
|
60
98
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "buildVirtualItemFromGroup", function (group) {
|
|
61
|
-
var _this$
|
|
62
|
-
onEmojiSelected = _this$
|
|
63
|
-
onEmojiDelete = _this$
|
|
99
|
+
var _this$props2 = _this.props,
|
|
100
|
+
onEmojiSelected = _this$props2.onEmojiSelected,
|
|
101
|
+
onEmojiDelete = _this$props2.onEmojiDelete;
|
|
64
102
|
var items = [];
|
|
65
103
|
items.push(new _EmojiPickerVirtualItems.CategoryHeadingItem({
|
|
66
104
|
id: group.category,
|
|
@@ -72,12 +110,14 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
72
110
|
var rowEmojis = remainingEmojis.slice(0, _EmojiPickerSizes.sizes.emojiPerRow);
|
|
73
111
|
remainingEmojis = remainingEmojis.slice(_EmojiPickerSizes.sizes.emojiPerRow);
|
|
74
112
|
items.push(new _EmojiPickerVirtualItems.EmojisRowItem({
|
|
113
|
+
category: group.category,
|
|
75
114
|
emojis: rowEmojis,
|
|
76
115
|
title: group.title,
|
|
77
116
|
showDelete: group.title === _constants.userCustomTitle,
|
|
78
117
|
onSelected: onEmojiSelected,
|
|
79
118
|
onDelete: onEmojiDelete,
|
|
80
|
-
onMouseMove: _this.
|
|
119
|
+
onMouseMove: _this.onEmojiActive,
|
|
120
|
+
onFocus: _this.onEmojiActive
|
|
81
121
|
}));
|
|
82
122
|
}
|
|
83
123
|
return items;
|
|
@@ -95,7 +135,7 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
95
135
|
var search = _categories.CategoryDescriptionMap.SEARCH;
|
|
96
136
|
// Only a single "result" category
|
|
97
137
|
items = [].concat((0, _toConsumableArray2.default)(items), (0, _toConsumableArray2.default)(_this.buildVirtualItemFromGroup({
|
|
98
|
-
category:
|
|
138
|
+
category: _constants.searchCategory,
|
|
99
139
|
title: search.name,
|
|
100
140
|
emojis: emojis,
|
|
101
141
|
order: search.order
|
|
@@ -109,22 +149,16 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
109
149
|
// by not passing it to irrelevant groups
|
|
110
150
|
_this.categoryTracker.add(group.emojis[0].category, items.length);
|
|
111
151
|
items = [].concat((0, _toConsumableArray2.default)(items), (0, _toConsumableArray2.default)(_this.buildVirtualItemFromGroup(group)));
|
|
152
|
+
if (group.category === _constants.yourUploadsCategory) {
|
|
153
|
+
_this.lastYourUploadsRow = items.length - 1;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
_this.onRowsRendered({
|
|
157
|
+
startIndex: 0
|
|
112
158
|
});
|
|
113
159
|
}
|
|
114
160
|
}
|
|
115
|
-
var rowCountChanged = _this.virtualItems.length !== items.length;
|
|
116
161
|
_this.virtualItems = items;
|
|
117
|
-
var list = _this.refs.list;
|
|
118
|
-
if (!rowCountChanged && list) {
|
|
119
|
-
// Row count has not changed, so need to tell list to rerender.
|
|
120
|
-
list.forceUpdateGrid();
|
|
121
|
-
}
|
|
122
|
-
if (!query && list) {
|
|
123
|
-
// VirtualList can apply stale heights since it performs a shallow
|
|
124
|
-
// compare to check if the list has changed. Should manually recompute
|
|
125
|
-
// row heights for the case when frequent category come in later
|
|
126
|
-
list.recomputeRowHeights();
|
|
127
|
-
}
|
|
128
162
|
});
|
|
129
163
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "addToCategoryMap", function (categoryToGroupMap, emoji, category) {
|
|
130
164
|
if (!categoryToGroupMap[category]) {
|
|
@@ -144,7 +178,7 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
144
178
|
_this.addToCategoryMap(categoryToGroupMap, emoji, emoji.category);
|
|
145
179
|
// separate user emojis
|
|
146
180
|
if (emoji.category === _constants.customCategory && currentUser && emoji.creatorUserId === currentUser.id) {
|
|
147
|
-
_this.addToCategoryMap(categoryToGroupMap, emoji,
|
|
181
|
+
_this.addToCategoryMap(categoryToGroupMap, emoji, _constants.yourUploadsCategory);
|
|
148
182
|
}
|
|
149
183
|
return categoryToGroupMap;
|
|
150
184
|
};
|
|
@@ -154,37 +188,45 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
154
188
|
_this.allEmojiGroups = Object.keys(categoryToGroupMap).map(function (key) {
|
|
155
189
|
return categoryToGroupMap[key];
|
|
156
190
|
}).map(function (group) {
|
|
157
|
-
if (group.category !==
|
|
191
|
+
if (group.category !== _constants.frequentCategory) {
|
|
158
192
|
group.emojis.sort(byOrder);
|
|
159
193
|
}
|
|
160
194
|
return group;
|
|
161
195
|
}).sort(byOrder);
|
|
162
196
|
});
|
|
163
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
197
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "findCategoryToActivate", function (row) {
|
|
198
|
+
var category = null;
|
|
199
|
+
if (row instanceof _EmojiPickerVirtualItems.CategoryHeadingItem) {
|
|
200
|
+
category = row.props.id;
|
|
201
|
+
} else if (row instanceof _EmojiPickerVirtualItems.EmojisRowItem) {
|
|
202
|
+
category = row.props.category;
|
|
203
|
+
}
|
|
204
|
+
// your uploads is rendered, take it as upload category, so could be highlighted in category selector
|
|
205
|
+
if (category === _constants.yourUploadsCategory) {
|
|
206
|
+
return _constants.customCategory;
|
|
207
|
+
// search results is rendered, return null so won't be highlighted for category selector
|
|
208
|
+
} else if (category === _constants.searchCategory) {
|
|
209
|
+
return null;
|
|
173
210
|
}
|
|
211
|
+
return category;
|
|
174
212
|
});
|
|
175
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "
|
|
213
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onRowsRendered", function (indexes) {
|
|
176
214
|
var startIndex = indexes.startIndex;
|
|
215
|
+
var rowItem = _this.virtualItems[startIndex];
|
|
216
|
+
var list = _this.listRef.current;
|
|
177
217
|
|
|
178
|
-
//
|
|
179
|
-
if (
|
|
180
|
-
|
|
218
|
+
// update tabIndex manually, startIndex is not 0 based here
|
|
219
|
+
if (rowItem instanceof _EmojiPickerVirtualItems.CategoryHeadingItem) {
|
|
220
|
+
// if top of row rendered is category heading, update tabIndex for the next emoji row
|
|
221
|
+
list === null || list === void 0 ? void 0 : list.updateFocusIndex(startIndex + 1);
|
|
222
|
+
} else if (rowItem instanceof _EmojiPickerVirtualItems.EmojisRowItem) {
|
|
223
|
+
// if top of row rendered is emoji row, update it's tabIndex.
|
|
224
|
+
list === null || list === void 0 ? void 0 : list.updateFocusIndex(startIndex);
|
|
181
225
|
}
|
|
182
226
|
if (!_this.props.query) {
|
|
183
227
|
// Calculate category in view - only relevant if categories shown, i.e. no query
|
|
184
|
-
var
|
|
185
|
-
|
|
186
|
-
if (currentCategory && _this.activeCategoryId !== currentCategory) {
|
|
187
|
-
_this.activeCategoryId = currentCategory;
|
|
228
|
+
var currentCategory = _this.findCategoryToActivate(rowItem);
|
|
229
|
+
if (currentCategory !== null && _this.props.activeCategoryId !== currentCategory) {
|
|
188
230
|
if (_this.props.onCategoryActivated) {
|
|
189
231
|
_this.props.onCategoryActivated(currentCategory);
|
|
190
232
|
}
|
|
@@ -198,11 +240,12 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
198
240
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderRow", function (context) {
|
|
199
241
|
return (0, _EmojiPickerVirtualItems.virtualItemRenderer)(_this.virtualItems, context);
|
|
200
242
|
});
|
|
243
|
+
_this.lastYourUploadsRow = 0;
|
|
201
244
|
_this.buildEmojiGroupedByCategory(_props.emojis, _props.currentUser);
|
|
202
245
|
_this.buildVirtualItems(_props, _this.state);
|
|
203
246
|
return _this;
|
|
204
247
|
}
|
|
205
|
-
(0, _createClass2.default)(
|
|
248
|
+
(0, _createClass2.default)(EmojiPickerVirtualListInternal, [{
|
|
206
249
|
key: "UNSAFE_componentWillUpdate",
|
|
207
250
|
value: function UNSAFE_componentWillUpdate(nextProps, nextState) {
|
|
208
251
|
if (this.props.emojis !== nextProps.emojis || this.props.selectedTone !== nextProps.selectedTone || this.props.loading !== nextProps.loading || this.props.query !== nextProps.query) {
|
|
@@ -221,42 +264,59 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
221
264
|
*/
|
|
222
265
|
function reveal(category) {
|
|
223
266
|
var row = this.categoryTracker.getRow(category);
|
|
224
|
-
|
|
225
|
-
list.scrollToRow(row);
|
|
267
|
+
this.scrollToRow(row);
|
|
226
268
|
}
|
|
227
269
|
}, {
|
|
228
270
|
key: "scrollToBottom",
|
|
229
271
|
value: function scrollToBottom() {
|
|
230
|
-
|
|
231
|
-
|
|
272
|
+
this.scrollToRow(this.virtualItems.length);
|
|
273
|
+
}
|
|
274
|
+
}, {
|
|
275
|
+
key: "scrollToTop",
|
|
276
|
+
value: function scrollToTop() {
|
|
277
|
+
this.scrollToRow(0);
|
|
278
|
+
}
|
|
279
|
+
}, {
|
|
280
|
+
key: "scrollToRow",
|
|
281
|
+
value: function scrollToRow(index) {
|
|
282
|
+
var _this$listRef$current;
|
|
283
|
+
(_this$listRef$current = this.listRef.current) === null || _this$listRef$current === void 0 ? void 0 : _this$listRef$current.scrollToRow(index);
|
|
284
|
+
}
|
|
285
|
+
}, {
|
|
286
|
+
key: "scrollToRecentlyUploaded",
|
|
287
|
+
value: function scrollToRecentlyUploaded() {
|
|
288
|
+
var row = this.lastYourUploadsRow;
|
|
289
|
+
if (row > 0) {
|
|
290
|
+
var _this$listRef$current2;
|
|
291
|
+
(_this$listRef$current2 = this.listRef.current) === null || _this$listRef$current2 === void 0 ? void 0 : _this$listRef$current2.scrollToRowAndFocusLastEmoji(this.lastYourUploadsRow);
|
|
292
|
+
}
|
|
232
293
|
}
|
|
233
294
|
}, {
|
|
234
295
|
key: "render",
|
|
235
296
|
value: function render() {
|
|
236
|
-
var _this$
|
|
237
|
-
query = _this$
|
|
238
|
-
selectedTone = _this$
|
|
239
|
-
onToneSelected = _this$
|
|
240
|
-
onToneSelectorCancelled = _this$
|
|
241
|
-
toneEmoji = _this$
|
|
242
|
-
uploading = _this$
|
|
243
|
-
uploadEnabled = _this$
|
|
244
|
-
emojiToDelete = _this$
|
|
245
|
-
initialUploadName = _this$
|
|
246
|
-
uploadErrorMessage = _this$
|
|
247
|
-
onUploadCancelled = _this$
|
|
248
|
-
onUploadEmoji = _this$
|
|
249
|
-
onCloseDelete = _this$
|
|
250
|
-
onDeleteEmoji = _this$
|
|
251
|
-
onFileChooserClicked = _this$
|
|
252
|
-
onOpenUpload = _this$
|
|
253
|
-
_this$
|
|
254
|
-
size = _this$
|
|
297
|
+
var _this$props3 = this.props,
|
|
298
|
+
query = _this$props3.query,
|
|
299
|
+
selectedTone = _this$props3.selectedTone,
|
|
300
|
+
onToneSelected = _this$props3.onToneSelected,
|
|
301
|
+
onToneSelectorCancelled = _this$props3.onToneSelectorCancelled,
|
|
302
|
+
toneEmoji = _this$props3.toneEmoji,
|
|
303
|
+
uploading = _this$props3.uploading,
|
|
304
|
+
uploadEnabled = _this$props3.uploadEnabled,
|
|
305
|
+
emojiToDelete = _this$props3.emojiToDelete,
|
|
306
|
+
initialUploadName = _this$props3.initialUploadName,
|
|
307
|
+
uploadErrorMessage = _this$props3.uploadErrorMessage,
|
|
308
|
+
onUploadCancelled = _this$props3.onUploadCancelled,
|
|
309
|
+
onUploadEmoji = _this$props3.onUploadEmoji,
|
|
310
|
+
onCloseDelete = _this$props3.onCloseDelete,
|
|
311
|
+
onDeleteEmoji = _this$props3.onDeleteEmoji,
|
|
312
|
+
onFileChooserClicked = _this$props3.onFileChooserClicked,
|
|
313
|
+
onOpenUpload = _this$props3.onOpenUpload,
|
|
314
|
+
_this$props3$size = _this$props3.size,
|
|
315
|
+
size = _this$props3$size === void 0 ? _constants.defaultEmojiPickerSize : _this$props3$size,
|
|
316
|
+
emojis = _this$props3.emojis;
|
|
255
317
|
var virtualListHeight = _EmojiPickerSizes.sizes.listHeight + (0, _utils.emojiPickerHeightOffset)(size);
|
|
256
|
-
return (0, _react2.jsx)(
|
|
257
|
-
|
|
258
|
-
css: _styles.emojiPickerList,
|
|
259
|
-
"data-testid": RENDER_EMOJI_PICKER_LIST_TESTID
|
|
318
|
+
return (0, _react2.jsx)(EmojiPickerTabPanel, {
|
|
319
|
+
showSearchResults: !!query
|
|
260
320
|
}, (0, _react2.jsx)(_EmojiActions.default, {
|
|
261
321
|
selectedTone: selectedTone,
|
|
262
322
|
onToneSelected: onToneSelected,
|
|
@@ -274,9 +334,15 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
274
334
|
onFileChooserClicked: onFileChooserClicked,
|
|
275
335
|
onOpenUpload: onOpenUpload,
|
|
276
336
|
query: query,
|
|
277
|
-
onChange: this.onSearch
|
|
278
|
-
|
|
279
|
-
|
|
337
|
+
onChange: this.onSearch,
|
|
338
|
+
resultsCount: emojis.length
|
|
339
|
+
}), (0, _react2.jsx)(_EmojiPickerListContext.EmojiPickerListContextProvider, {
|
|
340
|
+
initialEmojisFocus: {
|
|
341
|
+
rowIndex: 1,
|
|
342
|
+
columnIndex: 0
|
|
343
|
+
}
|
|
344
|
+
}, (0, _react2.jsx)(_VirtualList.VirtualList, {
|
|
345
|
+
ref: this.listRef,
|
|
280
346
|
height: virtualListHeight,
|
|
281
347
|
overscanRowCount: 10,
|
|
282
348
|
rowCount: this.virtualItems.length,
|
|
@@ -284,14 +350,14 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
284
350
|
rowRenderer: this.renderRow,
|
|
285
351
|
scrollToAlignment: "start",
|
|
286
352
|
width: _EmojiPickerSizes.sizes.listWidth,
|
|
287
|
-
onRowsRendered: this.
|
|
288
|
-
}));
|
|
353
|
+
onRowsRendered: this.onRowsRendered
|
|
354
|
+
})));
|
|
289
355
|
}
|
|
290
356
|
}]);
|
|
291
|
-
return
|
|
357
|
+
return EmojiPickerVirtualListInternal;
|
|
292
358
|
}(_react.PureComponent);
|
|
293
|
-
exports.default =
|
|
294
|
-
(0, _defineProperty2.default)(
|
|
359
|
+
exports.default = EmojiPickerVirtualListInternal;
|
|
360
|
+
(0, _defineProperty2.default)(EmojiPickerVirtualListInternal, "defaultProps", {
|
|
295
361
|
onEmojiSelected: function onEmojiSelected() {},
|
|
296
362
|
onEmojiActive: function onEmojiActive() {},
|
|
297
363
|
onEmojiDelete: function onEmojiDelete() {},
|