index.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React, { useCallback, useState } from 'react'
  4. import { useTranslation } from 'react-i18next'
  5. import EmojiPickerInner from './Inner'
  6. import cn from '@/utils/classnames'
  7. import Divider from '@/app/components/base/divider'
  8. import Button from '@/app/components/base/button'
  9. import Modal from '@/app/components/base/modal'
  10. type IEmojiPickerProps = {
  11. isModal?: boolean
  12. onSelect?: (emoji: string, background: string) => void
  13. onClose?: () => void
  14. className?: string
  15. }
  16. const EmojiPicker: FC<IEmojiPickerProps> = ({
  17. isModal = true,
  18. onSelect,
  19. onClose,
  20. className,
  21. }) => {
  22. const { t } = useTranslation()
  23. const [selectedEmoji, setSelectedEmoji] = useState('')
  24. const [selectedBackground, setSelectedBackground] = useState<string>()
  25. const handleSelectEmoji = useCallback((emoji: string, background: string) => {
  26. setSelectedEmoji(emoji)
  27. setSelectedBackground(background)
  28. }, [setSelectedEmoji, setSelectedBackground])
  29. return isModal
  30. ? <Modal
  31. onClose={() => { }}
  32. isShow
  33. closable={false}
  34. wrapperClassName={className}
  35. className={cn('flex flex-col max-h-[552px] border-[0.5px] border-divider-subtle rounded-xl shadow-xl p-0')}
  36. >
  37. <EmojiPickerInner
  38. className="pt-3"
  39. onSelect={handleSelectEmoji} />
  40. <Divider className='mb-0 mt-3' />
  41. <div className='w-full flex items-center justify-center p-3 gap-2'>
  42. <Button className='w-full' onClick={() => {
  43. onClose && onClose()
  44. }}>
  45. {t('app.iconPicker.cancel')}
  46. </Button>
  47. <Button
  48. disabled={selectedEmoji === '' || !selectedBackground}
  49. variant="primary"
  50. className='w-full'
  51. onClick={() => {
  52. onSelect && onSelect(selectedEmoji, selectedBackground!)
  53. }}>
  54. {t('app.iconPicker.ok')}
  55. </Button>
  56. </div>
  57. </Modal>
  58. : <></>
  59. }
  60. export default EmojiPicker