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 **/} - + }> diff --git a/src/defaults.ts b/src/defaults.ts index 5f218c1e..dd9588a6 100644 --- a/src/defaults.ts +++ b/src/defaults.ts @@ -1,2 +1,3 @@ export const TIMELINE_STATUSES_COUNT = 40 export const TIMELINE_MAX_STATUSES = 2147483647 +export const USER_AGENT = 'Fedistar'