/* eslint-disable multiline-ternary */ 'use client' import type { ChangeEvent, FC } from 'react' import React, { useState } from 'react' import data from '@emoji-mart/data' import type { Emoji, EmojiMartData } from '@emoji-mart/data' import { SearchIndex, init } from 'emoji-mart' import cn from 'classnames' import { MagnifyingGlassIcon, } from '@heroicons/react/24/outline' import { useTranslation } from 'react-i18next' import s from './style.module.css' import Divider from '@/app/components/base/divider' import Button from '@/app/components/base/button' import Modal from '@/app/components/base/modal' declare global { namespace JSX { // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface IntrinsicElements { 'em-emoji': React.DetailedHTMLProps< React.HTMLAttributes, HTMLElement > } } } init({ data }) async function search(value: string) { const emojis: Emoji[] = await SearchIndex.search(value) || [] const results = emojis.map((emoji) => { return emoji.skins[0].native }) return results } const backgroundColors = [ '#FFEAD5', '#E4FBCC', '#D3F8DF', '#E0F2FE', '#E0EAFF', '#EFF1F5', '#FBE8FF', '#FCE7F6', '#FEF7C3', '#E6F4D7', '#D5F5F6', '#D1E9FF', '#D1E0FF', '#D5D9EB', '#ECE9FE', '#FFE4E8', ] type IEmojiPickerProps = { isModal?: boolean onSelect?: (emoji: string, background: string) => void onClose?: () => void className?: string } const EmojiPicker: FC = ({ isModal = true, onSelect, onClose, className, }) => { const { t } = useTranslation() const { categories } = data as EmojiMartData const [selectedEmoji, setSelectedEmoji] = useState('') const [selectedBackground, setSelectedBackground] = useState(backgroundColors[0]) const [searchedEmojis, setSearchedEmojis] = useState([]) const [isSearching, setIsSearching] = useState(false) return isModal ? { }} isShow closable={false} wrapperClassName={`!z-40 ${className}`} className={cn(s.container, '!w-[362px] !p-0')} >
) => { if (e.target.value === '') { setIsSearching(false) } else { setIsSearching(true) const emojis = await search(e.target.value) setSearchedEmojis(emojis) } }} />
{isSearching && <>

Search

{searchedEmojis.map((emoji: string, index: number) => { return
{ setSelectedEmoji(emoji) }} >
})}
} {categories.map((category, index: number) => { return

{category.id}

{category.emojis.map((emoji, index: number) => { return
{ setSelectedEmoji(emoji) }} >
})}
})}
{/* Color Select */}

Choose Style

{backgroundColors.map((color) => { return
{ setSelectedBackground(color) }} >
{selectedEmoji !== '' && }
})}
: <> } export default EmojiPicker