@atlaskit/emoji 67.0.7 → 67.1.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 +14 -0
- package/dist/cjs/api/EmojiResource.js +12 -1
- package/dist/cjs/components/common/EmojiActions.js +2 -2
- package/dist/cjs/components/hooks.js +8 -5
- package/dist/cjs/components/picker/EmojiPickerComponent.js +23 -40
- package/dist/cjs/components/picker/EmojiPickerList.js +20 -43
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +53 -117
- package/dist/cjs/components/picker/VirtualList.js +100 -180
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- 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 +4 -2
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +13 -2
- package/dist/es2019/components/common/EmojiActions.js +1 -1
- package/dist/es2019/components/hooks.js +7 -4
- package/dist/es2019/components/picker/EmojiPickerComponent.js +24 -41
- package/dist/es2019/components/picker/EmojiPickerList.js +17 -40
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +51 -98
- package/dist/es2019/components/picker/VirtualList.js +71 -113
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- 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 +1 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +13 -2
- package/dist/esm/components/common/EmojiActions.js +1 -1
- package/dist/esm/components/hooks.js +7 -4
- package/dist/esm/components/picker/EmojiPickerComponent.js +24 -41
- package/dist/esm/components/picker/EmojiPickerList.js +21 -40
- package/dist/esm/components/picker/EmojiPickerListSearch.js +51 -117
- package/dist/esm/components/picker/VirtualList.js +99 -180
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- 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 +1 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/common/EmojiActions.d.ts +1 -1
- package/dist/types/components/hooks.d.ts +1 -1
- package/dist/types/components/picker/CategoryTracker.d.ts +2 -2
- package/dist/types/components/picker/EmojiPickerList.d.ts +4 -2
- package/dist/types/components/picker/EmojiPickerListSearch.d.ts +3 -8
- package/dist/types/components/picker/VirtualList.d.ts +5 -24
- 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 +1 -0
- package/package.json +5 -4
- package/report.api.md +10 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atlaskit/emoji
|
|
2
2
|
|
|
3
|
+
## 67.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`27b1925f52a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/27b1925f52a) - - search emoji in emoji picker will scroll to top
|
|
8
|
+
- improve emoji search analytics tracking
|
|
9
|
+
- add debounce to emoji search
|
|
10
|
+
- fix duplicated calls triggered by each emoji search
|
|
11
|
+
- functional component refactoring for VirtualList and EmojiPickerListSearch
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
|
|
3
17
|
## 67.0.7
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -487,12 +487,23 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
|
|
|
487
487
|
}, {
|
|
488
488
|
key: "filter",
|
|
489
489
|
value: function filter(query, options) {
|
|
490
|
+
_ufoExperiences.ufoExperiences['emoji-searched'].start();
|
|
491
|
+
_ufoExperiences.ufoExperiences['emoji-searched'].addMetadata({
|
|
492
|
+
queryLength: (query === null || query === void 0 ? void 0 : query.length) || 0
|
|
493
|
+
});
|
|
490
494
|
this.lastQuery = {
|
|
491
495
|
query: query,
|
|
492
496
|
options: options
|
|
493
497
|
};
|
|
494
498
|
if (this.emojiRepository) {
|
|
495
|
-
this.
|
|
499
|
+
var searchResults = this.emojiRepository.search(query, options);
|
|
500
|
+
this.notifyResult(searchResults);
|
|
501
|
+
_ufoExperiences.ufoExperiences['emoji-searched'].success({
|
|
502
|
+
metadata: {
|
|
503
|
+
emojisLength: searchResults.emojis.length,
|
|
504
|
+
source: (options === null || options === void 0 ? void 0 : options.source) || 'typeahead'
|
|
505
|
+
}
|
|
506
|
+
});
|
|
496
507
|
} else {
|
|
497
508
|
// not ready
|
|
498
509
|
this.notifyNotReady();
|
|
@@ -12,7 +12,7 @@ var _react2 = require("@emotion/react");
|
|
|
12
12
|
var _reactIntlNext = require("react-intl-next");
|
|
13
13
|
var _EmojiDeletePreview = _interopRequireDefault(require("../common/EmojiDeletePreview"));
|
|
14
14
|
var _EmojiUploadPicker = _interopRequireDefault(require("../common/EmojiUploadPicker"));
|
|
15
|
-
var _EmojiPickerListSearch =
|
|
15
|
+
var _EmojiPickerListSearch = require("../picker/EmojiPickerListSearch");
|
|
16
16
|
var _ToneSelector = _interopRequireDefault(require("./ToneSelector"));
|
|
17
17
|
var _EmojiButton = _interopRequireDefault(require("./EmojiButton"));
|
|
18
18
|
var _i18n = require("../i18n");
|
|
@@ -140,7 +140,7 @@ var EmojiActions = function EmojiActions(props) {
|
|
|
140
140
|
onMouseLeave: onMouseLeaveHandler
|
|
141
141
|
}, (0, _react2.jsx)("div", {
|
|
142
142
|
css: _styles.emojiActionsWrapper
|
|
143
|
-
}, !showToneSelector && (0, _react2.jsx)(_EmojiPickerListSearch.
|
|
143
|
+
}, !showToneSelector && (0, _react2.jsx)(_EmojiPickerListSearch.EmojiPickerListSearch, {
|
|
144
144
|
onChange: onChange,
|
|
145
145
|
query: query
|
|
146
146
|
}), (0, _react2.jsx)(TonesWrapper, (0, _extends2.default)({}, props, {
|
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.useIsMounted = useIsMounted;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
function
|
|
9
|
-
var
|
|
8
|
+
function useIsMounted() {
|
|
9
|
+
var isMountedRef = (0, _react.useRef)(false);
|
|
10
10
|
(0, _react.useEffect)(function () {
|
|
11
|
-
|
|
11
|
+
isMountedRef.current = true;
|
|
12
|
+
return function () {
|
|
13
|
+
isMountedRef.current = false;
|
|
14
|
+
};
|
|
12
15
|
}, []);
|
|
13
|
-
return
|
|
16
|
+
return isMountedRef.current;
|
|
14
17
|
}
|
|
@@ -25,8 +25,8 @@ 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 _hooks = require("../hooks");
|
|
30
30
|
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
31
|
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
32
|
var FREQUENTLY_USED_MAX = 16;
|
|
@@ -101,12 +101,11 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
101
101
|
}, []);
|
|
102
102
|
var openTime = (0, _react.useRef)(0);
|
|
103
103
|
var isMounting = (0, _react.useRef)(true);
|
|
104
|
-
var didMount = (0, _hooks.useDidMount)();
|
|
105
|
-
var updateAfterDidMount = (0, _react.useRef)(true);
|
|
106
104
|
var previousEmojiProvider = (0, _react.useRef)(emojiProvider);
|
|
107
105
|
var currentUser = (0, _react.useMemo)(function () {
|
|
108
106
|
return emojiProvider.getCurrentUser();
|
|
109
107
|
}, [emojiProvider]);
|
|
108
|
+
var isMounted = (0, _hooks.useIsMounted)();
|
|
110
109
|
var fireAnalytics = (0, _react.useCallback)(function (analyticsEvent) {
|
|
111
110
|
if (createAnalyticsEvent) {
|
|
112
111
|
(0, _analytics.createAndFireEventInElementsChannel)(analyticsEvent)(createAnalyticsEvent);
|
|
@@ -210,7 +209,11 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
210
209
|
emojiToRender: emojiToRender,
|
|
211
210
|
searchEmoji: searchResults.emojis
|
|
212
211
|
});
|
|
213
|
-
|
|
212
|
+
fireAnalytics((0, _analytics.pickerSearchedEvent)({
|
|
213
|
+
queryLength: searchQuery.length,
|
|
214
|
+
numMatches: searchResults.emojis.length
|
|
215
|
+
}));
|
|
216
|
+
}, [frequentlyUsedEmojis, query, setStateAfterEmojiChange, fireAnalytics]);
|
|
214
217
|
var onProviderChange = (0, _react.useMemo)(function () {
|
|
215
218
|
return {
|
|
216
219
|
result: onSearchResult
|
|
@@ -300,22 +303,22 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
300
303
|
var onFileChooserClicked = (0, _react.useCallback)(function () {
|
|
301
304
|
fireAnalytics((0, _analytics.selectedFileEvent)());
|
|
302
305
|
}, [fireAnalytics]);
|
|
306
|
+
var scrollToTopOfList = (0, _react.useCallback)(function () {
|
|
307
|
+
var _emojiPickerList$curr;
|
|
308
|
+
(_emojiPickerList$curr = emojiPickerList.current) === null || _emojiPickerList$curr === void 0 ? void 0 : _emojiPickerList$curr.scrollToTop();
|
|
309
|
+
}, [emojiPickerList]);
|
|
303
310
|
var onSearch = (0, _react.useCallback)(function (searchQuery) {
|
|
304
311
|
var options = {
|
|
305
|
-
skinTone: selectedTone
|
|
312
|
+
skinTone: selectedTone,
|
|
313
|
+
source: _types.SearchSourceTypes.PICKER
|
|
306
314
|
};
|
|
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
315
|
if (searchQuery !== query) {
|
|
315
316
|
setQuery(searchQuery);
|
|
317
|
+
// scroll to top when search, which is search results section
|
|
318
|
+
scrollToTopOfList();
|
|
316
319
|
}
|
|
317
|
-
updateEmojis(
|
|
318
|
-
}, [query, selectedTone, updateEmojis]);
|
|
320
|
+
updateEmojis(searchQuery, options);
|
|
321
|
+
}, [query, selectedTone, updateEmojis, scrollToTopOfList]);
|
|
319
322
|
var onOpenUpload = (0, _react.useCallback)(function () {
|
|
320
323
|
// Prime upload token so it's ready when the user adds
|
|
321
324
|
if ((0, _EmojiResource.supportsUploadFeature)(emojiProvider)) {
|
|
@@ -331,8 +334,8 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
331
334
|
if (emojiPickerList.current) {
|
|
332
335
|
// Wait a tick to ensure repaint and updated height for picker list
|
|
333
336
|
window.setTimeout(function () {
|
|
334
|
-
var _emojiPickerList$
|
|
335
|
-
(_emojiPickerList$
|
|
337
|
+
var _emojiPickerList$curr2;
|
|
338
|
+
(_emojiPickerList$curr2 = emojiPickerList.current) === null || _emojiPickerList$curr2 === void 0 ? void 0 : _emojiPickerList$curr2.scrollToBottom();
|
|
336
339
|
}, 0);
|
|
337
340
|
}
|
|
338
341
|
}, [emojiPickerList]);
|
|
@@ -403,11 +406,10 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
403
406
|
}
|
|
404
407
|
(0, _react.useEffect)(function () {
|
|
405
408
|
// componentDidMount logic
|
|
406
|
-
if (
|
|
409
|
+
if (!isMounted) {
|
|
407
410
|
onComponentDidMount();
|
|
408
|
-
updateAfterDidMount.current = false;
|
|
409
411
|
}
|
|
410
|
-
}, [
|
|
412
|
+
}, [onComponentDidMount, isMounted]);
|
|
411
413
|
(0, _react.useEffect)(function () {
|
|
412
414
|
previousEmojiProvider.current.unsubscribe(onProviderChange);
|
|
413
415
|
previousEmojiProvider.current = emojiProvider;
|
|
@@ -416,26 +418,6 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
416
418
|
emojiProvider.unsubscribe(onProviderChange);
|
|
417
419
|
};
|
|
418
420
|
}, [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
421
|
(0, _react.useEffect)(function () {
|
|
440
422
|
if (!frequentlyUsedEmojis.length || query) {
|
|
441
423
|
setFilteredEmojis(searchEmojis);
|
|
@@ -505,7 +487,8 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
505
487
|
onCloseDelete: onCloseDelete,
|
|
506
488
|
onFileChooserClicked: onFileChooserClicked,
|
|
507
489
|
onOpenUpload: onOpenUpload,
|
|
508
|
-
size: size
|
|
490
|
+
size: size,
|
|
491
|
+
activeCategoryId: activeCategory
|
|
509
492
|
}), showPreview && (0, _react2.jsx)(_EmojiPickerFooter.default, {
|
|
510
493
|
selectedEmoji: selectedEmoji
|
|
511
494
|
}));
|
|
@@ -1,7 +1,6 @@
|
|
|
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
|
});
|
|
@@ -14,7 +13,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
|
|
|
14
13
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
14
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
var _react =
|
|
16
|
+
var _react = require("react");
|
|
18
17
|
var _react2 = require("@emotion/react");
|
|
19
18
|
var _constants = require("../../util/constants");
|
|
20
19
|
var _categories = require("./categories");
|
|
@@ -25,8 +24,6 @@ var _EmojiActions = _interopRequireDefault(require("../common/EmojiActions"));
|
|
|
25
24
|
var _styles = require("./styles");
|
|
26
25
|
var _utils = require("./utils");
|
|
27
26
|
var _VirtualList = require("./VirtualList");
|
|
28
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
30
27
|
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
28
|
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
29
|
/**
|
|
@@ -47,14 +44,15 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
47
44
|
_this = _super.call(this, _props);
|
|
48
45
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "virtualItems", []);
|
|
49
46
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "categoryTracker", new _CategoryTracker.default());
|
|
47
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "listRef", /*#__PURE__*/(0, _react.createRef)());
|
|
50
48
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onEmojiMouseEnter", function (emojiId, emoji) {
|
|
51
49
|
if (_this.props.onEmojiActive) {
|
|
52
50
|
_this.props.onEmojiActive(emojiId, emoji);
|
|
53
51
|
}
|
|
54
52
|
});
|
|
55
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSearch", function (
|
|
53
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onSearch", function (value) {
|
|
56
54
|
if (_this.props.onSearch) {
|
|
57
|
-
_this.props.onSearch(
|
|
55
|
+
_this.props.onSearch(value);
|
|
58
56
|
}
|
|
59
57
|
});
|
|
60
58
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "buildVirtualItemFromGroup", function (group) {
|
|
@@ -112,19 +110,7 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
112
110
|
});
|
|
113
111
|
}
|
|
114
112
|
}
|
|
115
|
-
var rowCountChanged = _this.virtualItems.length !== items.length;
|
|
116
113
|
_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
114
|
});
|
|
129
115
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "addToCategoryMap", function (categoryToGroupMap, emoji, category) {
|
|
130
116
|
if (!categoryToGroupMap[category]) {
|
|
@@ -160,31 +146,13 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
160
146
|
return group;
|
|
161
147
|
}).sort(byOrder);
|
|
162
148
|
});
|
|
163
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "repaintList", function () {
|
|
164
|
-
if (_this.refs.root) {
|
|
165
|
-
var root = _this.refs.root;
|
|
166
|
-
var display = root.style.display;
|
|
167
|
-
root.style.display = 'none';
|
|
168
|
-
|
|
169
|
-
// we need to access offset to force repaint
|
|
170
|
-
// eslint-disable-next-line no-unused-expressions
|
|
171
|
-
root.offsetHeight;
|
|
172
|
-
root.style.display = display;
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
149
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "checkCategoryIdChange", function (indexes) {
|
|
176
150
|
var startIndex = indexes.startIndex;
|
|
177
|
-
|
|
178
|
-
// FS-1844 Fix a rendering problem when scrolling to the top
|
|
179
|
-
if (startIndex === 0) {
|
|
180
|
-
_this.repaintList();
|
|
181
|
-
}
|
|
182
151
|
if (!_this.props.query) {
|
|
183
152
|
// Calculate category in view - only relevant if categories shown, i.e. no query
|
|
184
|
-
var list = _this.
|
|
153
|
+
var list = _this.listRef.current;
|
|
185
154
|
var currentCategory = _this.categoryTracker.findNearestCategoryAbove(startIndex, list);
|
|
186
|
-
if (currentCategory && _this.activeCategoryId !== currentCategory) {
|
|
187
|
-
_this.activeCategoryId = currentCategory;
|
|
155
|
+
if (currentCategory && _this.props.activeCategoryId !== currentCategory) {
|
|
188
156
|
if (_this.props.onCategoryActivated) {
|
|
189
157
|
_this.props.onCategoryActivated(currentCategory);
|
|
190
158
|
}
|
|
@@ -221,14 +189,23 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
221
189
|
*/
|
|
222
190
|
function reveal(category) {
|
|
223
191
|
var row = this.categoryTracker.getRow(category);
|
|
224
|
-
|
|
225
|
-
list.scrollToRow(row);
|
|
192
|
+
this.scrollToRow(row);
|
|
226
193
|
}
|
|
227
194
|
}, {
|
|
228
195
|
key: "scrollToBottom",
|
|
229
196
|
value: function scrollToBottom() {
|
|
230
|
-
|
|
231
|
-
|
|
197
|
+
this.scrollToRow(this.virtualItems.length);
|
|
198
|
+
}
|
|
199
|
+
}, {
|
|
200
|
+
key: "scrollToTop",
|
|
201
|
+
value: function scrollToTop() {
|
|
202
|
+
this.scrollToRow(0);
|
|
203
|
+
}
|
|
204
|
+
}, {
|
|
205
|
+
key: "scrollToRow",
|
|
206
|
+
value: function scrollToRow(index) {
|
|
207
|
+
var _this$listRef$current;
|
|
208
|
+
(_this$listRef$current = this.listRef.current) === null || _this$listRef$current === void 0 ? void 0 : _this$listRef$current.scrollToRow(index);
|
|
232
209
|
}
|
|
233
210
|
}, {
|
|
234
211
|
key: "render",
|
|
@@ -276,7 +253,7 @@ var EmojiPickerVirtualList = /*#__PURE__*/function (_PureComponent) {
|
|
|
276
253
|
query: query,
|
|
277
254
|
onChange: this.onSearch
|
|
278
255
|
}), (0, _react2.jsx)(_VirtualList.VirtualList, {
|
|
279
|
-
ref:
|
|
256
|
+
ref: this.listRef,
|
|
280
257
|
height: virtualListHeight,
|
|
281
258
|
overscanRowCount: 10,
|
|
282
259
|
rowCount: this.virtualItems.length,
|
|
@@ -5,14 +5,8 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.emojiPickerSearchTestId = exports.
|
|
9
|
-
var
|
|
10
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
11
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
12
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
13
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
14
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
15
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
+
exports.emojiPickerSearchTestId = exports.EmojiPickerListSearch = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
16
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
17
11
|
var _react2 = require("@emotion/react");
|
|
18
12
|
var _textfield = _interopRequireDefault(require("@atlaskit/textfield"));
|
|
@@ -20,118 +14,60 @@ var _search = _interopRequireDefault(require("@atlaskit/icon/glyph/search"));
|
|
|
20
14
|
var _reactIntlNext = require("react-intl-next");
|
|
21
15
|
var _i18n = require("../i18n");
|
|
22
16
|
var _styles = require("./styles");
|
|
17
|
+
var _constants = require("../../util/constants");
|
|
18
|
+
var _useDebounce = require("use-debounce");
|
|
23
19
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
24
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
/** @jsx jsx */
|
|
22
|
+
|
|
27
23
|
var emojiPickerSearchTestId = 'emoji-picker-serach';
|
|
28
24
|
exports.emojiPickerSearchTestId = emojiPickerSearchTestId;
|
|
29
|
-
var EmojiPickerListSearch =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
_this.inputRef.focus();
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleInputRef", function (input) {
|
|
57
|
-
if (input) {
|
|
58
|
-
// Defer focus so it give some time to position the popup before
|
|
59
|
-
// setting the focus to search input.
|
|
60
|
-
// see FS-2056
|
|
61
|
-
_this.inputRef = input;
|
|
62
|
-
if (typeof window === 'undefined') {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
window.requestAnimationFrame(_this.focusInput);
|
|
25
|
+
var EmojiPickerListSearch = function EmojiPickerListSearch(props) {
|
|
26
|
+
var style = props.style,
|
|
27
|
+
query = props.query,
|
|
28
|
+
onChange = props.onChange;
|
|
29
|
+
var textRef = (0, _react.useRef)(null);
|
|
30
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
31
|
+
formatMessage = _useIntl.formatMessage;
|
|
32
|
+
|
|
33
|
+
// Debounce callback
|
|
34
|
+
var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function (value) {
|
|
35
|
+
onChange(value);
|
|
36
|
+
},
|
|
37
|
+
// delay in ms
|
|
38
|
+
_constants.EMOJI_SEARCH_DEBOUNCE),
|
|
39
|
+
_useDebouncedCallback2 = (0, _slicedToArray2.default)(_useDebouncedCallback, 1),
|
|
40
|
+
debouncedSearch = _useDebouncedCallback2[0];
|
|
41
|
+
var handleOnChange = function handleOnChange(e) {
|
|
42
|
+
debouncedSearch(e.target.value);
|
|
43
|
+
};
|
|
44
|
+
(0, _react.useLayoutEffect)(function () {
|
|
45
|
+
requestAnimationFrame(function () {
|
|
46
|
+
if (textRef) {
|
|
47
|
+
var _textRef$current;
|
|
48
|
+
(_textRef$current = textRef.current) === null || _textRef$current === void 0 ? void 0 : _textRef$current.focus();
|
|
66
49
|
}
|
|
67
50
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.focusInput();
|
|
92
|
-
if (this.inputSelection && this.inputRef && this.inputRef.setSelectionRange) {
|
|
93
|
-
var _this$inputSelection = this.inputSelection,
|
|
94
|
-
selectionStart = _this$inputSelection.selectionStart,
|
|
95
|
-
selectionEnd = _this$inputSelection.selectionEnd,
|
|
96
|
-
selectionDirection = _this$inputSelection.selectionDirection;
|
|
97
|
-
this.inputRef.setSelectionRange(selectionStart, selectionEnd, selectionDirection);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}, {
|
|
101
|
-
key: "render",
|
|
102
|
-
value: function render() {
|
|
103
|
-
var _this$props = this.props,
|
|
104
|
-
style = _this$props.style,
|
|
105
|
-
query = _this$props.query,
|
|
106
|
-
intl = _this$props.intl;
|
|
107
|
-
var formatMessage = intl.formatMessage;
|
|
108
|
-
return (0, _react2.jsx)("div", {
|
|
109
|
-
css: _styles.pickerSearch,
|
|
110
|
-
style: style
|
|
111
|
-
}, (0, _react2.jsx)(_textfield.default, {
|
|
112
|
-
"aria-label": formatMessage(_i18n.messages.searchLabel),
|
|
113
|
-
css: _styles.input,
|
|
114
|
-
autoComplete: "off",
|
|
115
|
-
name: "search",
|
|
116
|
-
placeholder: "".concat(formatMessage(_i18n.messages.searchPlaceholder), "..."),
|
|
117
|
-
onChange: this.onChange,
|
|
118
|
-
value: query || '',
|
|
119
|
-
ref: this.handleInputRef,
|
|
120
|
-
isCompact: true,
|
|
121
|
-
onBlur: this.onBlur,
|
|
122
|
-
elemBeforeInput: (0, _react2.jsx)("span", {
|
|
123
|
-
css: _styles.searchIcon
|
|
124
|
-
}, (0, _react2.jsx)(_search.default, {
|
|
125
|
-
label: ""
|
|
126
|
-
})),
|
|
127
|
-
testId: emojiPickerSearchTestId
|
|
128
|
-
}));
|
|
129
|
-
}
|
|
130
|
-
}]);
|
|
131
|
-
return EmojiPickerListSearch;
|
|
132
|
-
}(_react.PureComponent);
|
|
133
|
-
(0, _defineProperty2.default)(EmojiPickerListSearch, "defaultProps", {
|
|
134
|
-
style: {}
|
|
135
|
-
});
|
|
136
|
-
var _default = (0, _reactIntlNext.injectIntl)(EmojiPickerListSearch);
|
|
137
|
-
exports.default = _default;
|
|
51
|
+
}, []);
|
|
52
|
+
return (0, _react2.jsx)("div", {
|
|
53
|
+
css: _styles.pickerSearch,
|
|
54
|
+
style: style
|
|
55
|
+
}, (0, _react2.jsx)(_textfield.default, {
|
|
56
|
+
"aria-label": formatMessage(_i18n.messages.searchLabel),
|
|
57
|
+
css: _styles.input,
|
|
58
|
+
autoComplete: "off",
|
|
59
|
+
name: "search",
|
|
60
|
+
placeholder: "".concat(formatMessage(_i18n.messages.searchPlaceholder), "..."),
|
|
61
|
+
defaultValue: query || '',
|
|
62
|
+
onChange: handleOnChange,
|
|
63
|
+
isCompact: true,
|
|
64
|
+
elemBeforeInput: (0, _react2.jsx)("span", {
|
|
65
|
+
css: _styles.searchIcon
|
|
66
|
+
}, (0, _react2.jsx)(_search.default, {
|
|
67
|
+
label: ""
|
|
68
|
+
})),
|
|
69
|
+
testId: emojiPickerSearchTestId,
|
|
70
|
+
ref: textRef
|
|
71
|
+
}));
|
|
72
|
+
};
|
|
73
|
+
exports.EmojiPickerListSearch = EmojiPickerListSearch;
|