|
'use client' |
|
import type { FC } from 'react' |
|
import React, { useCallback, useState } from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
import s from './style.module.css' |
|
import EmojiPickerInner from './Inner' |
|
import cn from '@/utils/classnames' |
|
import Divider from '@/app/components/base/divider' |
|
import Button from '@/app/components/base/button' |
|
import Modal from '@/app/components/base/modal' |
|
|
|
type IEmojiPickerProps = { |
|
isModal?: boolean |
|
onSelect?: (emoji: string, background: string) => void |
|
onClose?: () => void |
|
className?: string |
|
} |
|
|
|
const EmojiPicker: FC<IEmojiPickerProps> = ({ |
|
isModal = true, |
|
onSelect, |
|
onClose, |
|
className, |
|
}) => { |
|
const { t } = useTranslation() |
|
const [selectedEmoji, setSelectedEmoji] = useState('') |
|
const [selectedBackground, setSelectedBackground] = useState<string>() |
|
|
|
const handleSelectEmoji = useCallback((emoji: string, background: string) => { |
|
setSelectedEmoji(emoji) |
|
setSelectedBackground(background) |
|
}, [setSelectedEmoji, setSelectedBackground]) |
|
|
|
return isModal |
|
? <Modal |
|
onClose={() => { }} |
|
isShow |
|
closable={false} |
|
wrapperClassName={className} |
|
className={cn(s.container, '!w-[362px] !p-0')} |
|
> |
|
<EmojiPickerInner |
|
className="pt-3" |
|
onSelect={handleSelectEmoji} /> |
|
<Divider className='m-0' /> |
|
<div className='w-full flex items-center justify-center p-3 gap-2'> |
|
<Button className='w-full' onClick={() => { |
|
onClose && onClose() |
|
}}> |
|
{t('app.iconPicker.cancel')} |
|
</Button> |
|
<Button |
|
disabled={selectedEmoji === '' || !selectedBackground} |
|
variant="primary" |
|
className='w-full' |
|
onClick={() => { |
|
onSelect && onSelect(selectedEmoji, selectedBackground!) |
|
}}> |
|
{t('app.iconPicker.ok')} |
|
</Button> |
|
</div> |
|
</Modal> |
|
: <></> |
|
} |
|
export default EmojiPicker |
|
|