From 68c2d15f9c9bdf3fdb5a6e49f78989891ab3b1cb Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Thu, 8 Dec 2022 01:52:51 +0900
Subject: [PATCH 1/3] refs #72 Add emoji button
---
package.json | 2 ++
src/components/Compose.tsx | 35 +++++++++++++++++++++++++++++++----
src/utils/emojiData.ts | 5 +++++
yarn.lock | 10 ++++++++++
4 files changed, 48 insertions(+), 4 deletions(-)
create mode 100644 src/utils/emojiData.ts
diff --git a/package.json b/package.json
index 1c453846..d92fa50e 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,10 @@
"testEnvironment": "node"
},
"dependencies": {
+ "@emoji-mart/react": "^1.0.1",
"@rsuite/icons": "^1.0.2",
"@tauri-apps/api": "^1.2.0",
+ "emoji-mart": "^5.3.3",
"megalodon": "^5.0.0",
"moment": "^2.29.4",
"next": "^13.0.6",
diff --git a/src/components/Compose.tsx b/src/components/Compose.tsx
index 823e9de2..f3e3e356 100644
--- a/src/components/Compose.tsx
+++ b/src/components/Compose.tsx
@@ -1,13 +1,29 @@
-import { Container, Header, Content, FlexboxGrid, Button, Dropdown, Avatar, Form, Input, ButtonToolbar, Schema } from 'rsuite'
+import {
+ Container,
+ Header,
+ Content,
+ FlexboxGrid,
+ Button,
+ Dropdown,
+ Avatar,
+ Form,
+ Input,
+ ButtonToolbar,
+ Schema,
+ Whisper,
+ Popover
+} from 'rsuite'
import { Icon } from '@rsuite/icons'
-import { BsX } from 'react-icons/bs'
+import { BsX, BsEmojiLaughing } from 'react-icons/bs'
import { useEffect, useState, forwardRef, useRef } from 'react'
import { invoke } from '@tauri-apps/api/tauri'
+import generator from 'megalodon'
import { Server } from 'src/entities/server'
import { Account } from 'src/entities/account'
import failoverImg from 'src/utils/failoverImg'
-import generator from 'megalodon'
+import { data } from 'src/utils/emojiData'
+import Picker from '@emoji-mart/react'
const renderAccountIcon = (props: any, ref: any, account: [Account, Server] | undefined) => {
if (account && account.length > 0) {
@@ -128,9 +144,14 @@ const Compose: React.FC = props => {
Status
+
{/** @ts-ignore **/}
+ }>
+
+
@@ -145,4 +166,10 @@ const Compose: React.FC = props => {
)
}
+const EmojiPicker = forwardRef((props, ref) => (
+
+
+
+))
+
export default Compose
diff --git a/src/utils/emojiData.ts b/src/utils/emojiData.ts
new file mode 100644
index 00000000..4365ea6c
--- /dev/null
+++ b/src/utils/emojiData.ts
@@ -0,0 +1,5 @@
+export const data = async () => {
+ const response = await fetch('https://cdn.jsdelivr.net/npm/@emoji-mart/data')
+
+ return response.json()
+}
diff --git a/yarn.lock b/yarn.lock
index a5d0c6f0..8f9213f4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -304,6 +304,11 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@emoji-mart/react@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@emoji-mart/react/-/react-1.0.1.tgz#46b6a2e92faf16fa9b7f9471f137fa2e3d1e8ac3"
+ integrity sha512-ALhLD96BOL5w+a4NI5NpmfqfF1aVjjj2qJE0dLst/OhjBfVmpteWNgn/h8LZy9ulU6AnbeS+13KnPFzDjCvRRw==
+
"@eslint/eslintrc@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95"
@@ -1615,6 +1620,11 @@ emittery@^0.13.1:
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad"
integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
+emoji-mart@^5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-5.3.3.tgz#f079700be84d5b13653378cf7bba45fb0217452b"
+ integrity sha512-rr3wXUimYFQ5Mf50P/5UOsRibr5JSJE3Nj4zw0aDglb3GSHzn/wGKBoXoSkjtWaji8UcmXcYn3cdilD2Eix6iQ==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
From 58dd9724020558a9258224fd187462c409fd4b3b Mon Sep 17 00:00:00 2001
From: AkiraFukushima
Date: Thu, 8 Dec 2022 23:49:08 +0900
Subject: [PATCH 2/3] refs #72 Insert emoji if it is selected
---
src/components/Compose.tsx | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/components/Compose.tsx b/src/components/Compose.tsx
index f3e3e356..6833b808 100644
--- a/src/components/Compose.tsx
+++ b/src/components/Compose.tsx
@@ -75,6 +75,7 @@ const Compose: React.FC = props => {
const [loading, setLoading] = useState(false)
const formRef = useRef()
+ const statusRef = useRef()
const model = Schema.Model({
status: Schema.Types.StringType().isRequired('This field is required.')
@@ -117,6 +118,24 @@ const Compose: React.FC = props => {
})
}
+ const onEmojiSelect = emoji => {
+ const textarea = statusRef.current.firstElementChild as HTMLTextAreaElement
+ const cursor = textarea.selectionStart
+ if (emoji.native) {
+ setFormValue(current =>
+ Object.assign({}, current, {
+ status: `${current.status.slice(0, cursor)}${emoji.native} ${current.status.slice(cursor)}`
+ })
+ )
+ }
+ }
+
+ const EmojiPicker = forwardRef((props, ref) => (
+
+
+
+ ))
+
return (
@@ -146,7 +165,7 @@ const Compose: React.FC = props => {
{/** @ts-ignore **/}
-
+
}>