diff --git a/app/soapbox/features/compose/components/emoji_picker_dropdown.js b/app/soapbox/features/compose/components/emoji_picker_dropdown.js
index de4e29387..bec0261aa 100644
--- a/app/soapbox/features/compose/components/emoji_picker_dropdown.js
+++ b/app/soapbox/features/compose/components/emoji_picker_dropdown.js
@@ -1,9 +1,7 @@
-import EmojiData from '@emoji-mart/data';
import classNames from 'classnames';
import { supportsPassiveEvents } from 'detect-passive-events';
-import { Picker } from 'emoji-mart';
import PropTypes from 'prop-types';
-import React, { useRef, useEffect } from 'react';
+import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { defineMessages, injectIntl } from 'react-intl';
import Overlay from 'react-overlays/lib/Overlay';
@@ -11,7 +9,7 @@ import Overlay from 'react-overlays/lib/Overlay';
import { IconButton } from 'soapbox/components/ui';
import { buildCustomEmojis } from '../../emoji/emoji';
-// import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';
+import { EmojiPicker as EmojiPickerAsync } from '../../ui/util/async-components';
const messages = defineMessages({
emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },
@@ -30,36 +28,10 @@ const messages = defineMessages({
flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' },
});
-// const categories = [
-// 'recent',
-// 'custom',
-// 'people',
-// 'nature',
-// 'foods',
-// 'activity',
-// 'places',
-// 'objects',
-// 'symbols',
-// 'flags',
-// ];
+let EmojiPicker; // load asynchronously
-function EmojiPicker(props) {
- const ref = useRef();
-
- useEffect(() => {
- const input = { ...props, data: EmojiData, ref };
-
- new Picker(input);
- }, []);
-
- return
;
-}
-// let EmojiPicker, Emoji; // load asynchronously
-
-// const backgroundImageFn = () => require('emoji-datasource/img/twitter/sheets/32.png');
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
-
@injectIntl
class EmojiPickerMenu extends React.PureComponent {
@@ -132,10 +104,8 @@ class EmojiPickerMenu extends React.PureComponent {
}
handleClick = emoji => {
- console.log(emoji);
-
if (!emoji.native) {
- emoji.native = emoji.colons;
+ emoji.native = emoji.shortcodes;
}
this.props.onClose();
@@ -163,6 +133,7 @@ class EmojiPickerMenu extends React.PureComponent {
const title = intl.formatMessage(messages.emoji);
const { modifierOpen } = this.state;
+ const theme = 'dark';
return (
@@ -172,6 +143,14 @@ class EmojiPickerMenu extends React.PureComponent {
onEmojiSelect={this.handleClick}
recent={frequentlyUsedEmojis}
skin={skinTone}
+ perLine={8}
+ emojiSize={38}
+ emojiButtonSize={50}
+ navPosition={'bottom'}
+ theme={theme}
+ set={'twitter'}
+ previewEmoji={false}
+ autoFocus
/>
);
@@ -205,18 +184,17 @@ class EmojiPickerDropdown extends React.PureComponent {
this.setState({ active: true });
- // if (!EmojiPicker) {
- // this.setState({ loading: true });
- //
- // EmojiPickerAsync().then(EmojiMart => {
- // EmojiPicker = EmojiMart.Picker;
- // Emoji = EmojiMart.Emoji;
- //
- // this.setState({ loading: false });
- // }).catch(() => {
- // this.setState({ loading: false });
- // });
- // }
+ if (!EmojiPicker) {
+ this.setState({ loading: true });
+
+ EmojiPickerAsync().then(EmojiMart => {
+ EmojiPicker = EmojiMart;
+
+ this.setState({ loading: false });
+ }).catch(() => {
+ this.setState({ loading: false });
+ });
+ }
const { top } = e.target.getBoundingClientRect();
this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });
diff --git a/app/soapbox/features/emoji/emoji_picker.js b/app/soapbox/features/emoji/emoji_picker.js
index d9947568b..4dda1de07 100644
--- a/app/soapbox/features/emoji/emoji_picker.js
+++ b/app/soapbox/features/emoji/emoji_picker.js
@@ -1,7 +1,28 @@
-import Emoji from '@emoji-mart/data';
-import { Picker } from 'emoji-mart';
+import data from '@emoji-mart/data';
+import { Picker as EmojiPicker } from 'emoji-mart';
+import React, { useRef, useEffect } from 'react';
-export {
- Picker,
- Emoji,
-};
+// const categories = [
+// 'recent',
+// 'custom',
+// 'people',
+// 'nature',
+// 'foods',
+// 'activity',
+// 'places',
+// 'objects',
+// 'symbols',
+// 'flags',
+// ];
+
+export default function Picker(props) {
+ const ref = useRef();
+
+ useEffect(() => {
+ const input = { ...props, data, ref };
+
+ new EmojiPicker(input);
+ }, []);
+
+ return ;
+}
diff --git a/app/soapbox/features/ui/util/async-components.ts b/app/soapbox/features/ui/util/async-components.ts
index ffb3d9ed2..a6379b130 100644
--- a/app/soapbox/features/ui/util/async-components.ts
+++ b/app/soapbox/features/ui/util/async-components.ts
@@ -1,6 +1,6 @@
-// export function EmojiPicker() {
-// return import(/* webpackChunkName: "emoji_picker" */'../../emoji/emoji_picker');
-// }
+export function EmojiPicker() {
+ return import(/* webpackChunkName: "emoji_picker" */'../../emoji/emoji_picker');
+}
export function Notifications() {
return import(/* webpackChunkName: "features/notifications" */'../../notifications');
diff --git a/app/soapbox/reducers/compose.ts b/app/soapbox/reducers/compose.ts
index 3b861fb58..d56307a25 100644
--- a/app/soapbox/reducers/compose.ts
+++ b/app/soapbox/reducers/compose.ts
@@ -222,6 +222,8 @@ const insertEmoji = (state: State, position: number, emojiData: Emoji, needsSpac
const oldText = state.text;
const emoji = needsSpace ? ' ' + emojiData.native : emojiData.native;
+ console.log(emojiData, emoji);
+
return state.merge({
text: `${oldText.slice(0, position)}${emoji} ${oldText.slice(position)}`,
focusDate: new Date(),