diff --git a/packages/client/src/components/emoji-picker/constants.ts b/packages/client/src/components/emoji-picker/constants.ts index d036aa4d..fde80d36 100644 --- a/packages/client/src/components/emoji-picker/constants.ts +++ b/packages/client/src/components/emoji-picker/constants.ts @@ -171,12 +171,19 @@ export const GESTURES = [ ]; export const SYMBOLS = [ - '⭕', '✅', '❎', '✳️', - '✴️', + '♻️', '❇️', + '✴️', + '❓', + '❗', + '❌', + '⭕', + '❔', + '❕', + '☑️', '#️⃣', '*️⃣', '0️⃣', @@ -190,6 +197,23 @@ export const SYMBOLS = [ '8️⃣', '9️⃣', '🔟', + '🆗', + '🔠', + '🔡', + '🔢', + '🔣', + '🔤', + '🆕', + '🆖', + '🆒', + '🆓', + 'ℹ️', + '🆎', + '🆑', + '🆘', + '🆙', + '🆚', + '🈁', '⛔', '🚫', '🚳', @@ -261,7 +285,6 @@ export const SYMBOLS = [ '📴', '🏧', '🚮', - '🚰', '♿', '🚹', '🚺', @@ -274,3 +297,266 @@ export const SYMBOLS = [ '🛅', '🚸', ]; + +export const OBJECTS = [ + '🔒', + '🔓', + '🔏', + '🔐', + '🔑', + '💼', + '📁', + '📂', + '🗂️', + '🗂', + '📅', + '📆', + '🗒️', + '🗒', + '🗓️', + '🗓', + '📇', + '📈', + '📉', + '📊', + '📋', + '📌', + '📍', + '✏️', + '✏', + '✒️', + '✒', + '🖋️', + '🖋', + '🖊️', + '🖊', + '🖌️', + '🖌', + '🖍️', + '🖍', + '📝', + '✉️', + '📧', + '📨', + '📩', + '📤', + '📥', + '📦', + '📫', + '📪', + '📬', + '📭', + '📮', + '🗳️', + '🗳', + '💰', + '🪙', + '💴', + '💵', + '💶', + '💷', + '💸', + '💳', + '🧾', + '💹', + '📔', + '📕', + '📖', + '📗', + '📘', + '📙', + '📚', + '📓', + '📒', + '📃', + '📜', + '📄', + '📰', + '🗞️', + '🗞', + '📑', + '🔖', + '🏷️', + '🏷', + '👓', + '🕶️', + '🕶', + '🥽', + '🥼', + '🦺', + '👔', + '👕', + '👖', + '🧣', + '🧤', + '🧥', + '🧦', + '👗', + '👘', + '🥻', + '🩱', + '🩲', + '🩳', + '👙', + '👚', + '👛', + '👜', + '👝', + '🛍️', + '🛍', + '🎒', + '🩴', + '👞', + '👟', + '🥾', + '🥿', + '👠', + '👡', + '🩰', + '👢', + '👑', + '👒', + '🎩', + '🎓', + '🧢', + '🪖', + '⛑️', + '⛑', + '📿', + '💄', + '💍', + '💎', +]; + +export const ACTIVITIES = [ + '⚽', + '⚾', + '🥎', + '🏀', + '🏐', + '🏈', + '🏉', + '🎾', + '🥏', + '🎳', + '🏏', + '🏑', + '🏒', + '🥍', + '🏓', + '🏸', + '🥊', + '🥋', + '🥅', + '⛳', + '⛸️', + '⛸', + '🎣', + '🤿', + '🎽', + '🎿', + '🛷', + '🥌', + '🎯', + '🪀', + '🪁', + '🎱', + '🔮', + '🪄', + '🧿', + '🎮', + '🕹️', + '🕹', + '🎰', + '🎲', + '🧩', + '🧸', + '🪅', + '🪆', + '♠️', + '♠', + '♥️', + '♥', + '♦️', + '♦', + '♣️', + '♣', + '🃏', + '🀄', + '🎴', + '🎖️', + '🎖', + '🏆', + '🏅', + '🥇', + '🥈', + '🥉', +]; + +export const SKY_WEATHER = [ + '🌑', + '🌒', + '🌓', + '🌔', + '🌕', + '🌖', + '🌗', + '🌘', + '🌙', + '🌚', + '🌛', + '🌜', + '🌡️', + '🌡', + '☀️', + '☀', + '🌝', + '🌞', + '🪐', + '⭐', + '🌟', + '🌠', + '🌌', + '☁️', + '☁', + '⛅', + '⛈️', + '⛈', + '🌤️', + '🌤', + '🌥️', + '🌥', + '🌦️', + '🌦', + '🌧️', + '🌧', + '🌨️', + '🌨', + '🌩️', + '🌩', + '🌪️', + '🌪', + '🌫️', + '🌫', + '🌬️', + '🌬', + '🌀', + '🌈', + '🌂', + '☂️', + '☂', + '☔', + '⛱️', + '⛱', + '⚡', + '❄️', + '❄', + '☃️', + '☃', + '⛄', + '☄️', + '☄', + '🔥', + '💧', + '🌊', +]; diff --git a/packages/client/src/components/emoji-picker/index.tsx b/packages/client/src/components/emoji-picker/index.tsx index f4d01c01..d0aad905 100644 --- a/packages/client/src/components/emoji-picker/index.tsx +++ b/packages/client/src/components/emoji-picker/index.tsx @@ -1,23 +1,38 @@ -import React from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { Popover, Typography } from '@douyinfe/semi-ui'; -import { EXPRESSIONES, GESTURES, SYMBOLS } from './constants'; +import { EXPRESSIONES, GESTURES, SYMBOLS, OBJECTS, ACTIVITIES, SKY_WEATHER } from './constants'; +import { setStorage, getStorage } from 'helpers/storage'; +import { useToggle } from 'hooks/use-toggle'; import styles from './index.module.scss'; const { Title } = Typography; +const RECENT_USED_EMOJI_KEY = 'RECENT_USED_EMOJI_KEY'; const LIST = [ - { - title: '符号', - data: SYMBOLS, - }, { title: '表情', data: EXPRESSIONES, }, + { + title: '天气', + data: SKY_WEATHER, + }, { title: '手势', data: GESTURES, }, + { + title: '符号', + data: SYMBOLS, + }, + { + title: '物体', + data: OBJECTS, + }, + { + title: '运动', + data: ACTIVITIES, + }, ]; interface IProps { @@ -25,15 +40,44 @@ interface IProps { } export const EmojiPicker: React.FC = ({ onSelectEmoji, children }) => { + const [recentUsed, setRecentUsed] = useState([]); + const [visible, toggleVisible] = useToggle(false); + const renderedList = useMemo( + () => (recentUsed.length ? [{ title: '最近使用', data: recentUsed }, ...LIST] : LIST), + [recentUsed] + ); + + const selectEmoji = useCallback( + (emoji) => { + setStorage(RECENT_USED_EMOJI_KEY, [...recentUsed, emoji].join('-')); + setRecentUsed((arr) => [...arr, emoji]); + onSelectEmoji && onSelectEmoji(emoji); + }, + [onSelectEmoji, recentUsed] + ); + + useEffect(() => { + if (!visible) return; + try { + const recentUsed = getStorage(RECENT_USED_EMOJI_KEY); + const toArr = recentUsed.split('-'); + setRecentUsed(toArr); + } catch (e) { + // + } + }, [visible]); + return ( - {LIST.map((item, index) => { + {renderedList.map((item, index) => { return (
@@ -41,7 +85,7 @@ export const EmojiPicker: React.FC<IProps> = ({ onSelectEmoji, children }) => {
    {(item.data || []).map((ex) => ( -
  • onSelectEmoji(ex)}> +
  • selectEmoji(ex)}> {ex}
  • ))}