index.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. 'use client'
  2. import React, { useState } from 'react'
  3. import cn from 'classnames'
  4. import { useTranslation } from 'react-i18next'
  5. import s from './style.module.css'
  6. import Modal from '@/app/components/base/modal'
  7. import Button from '@/app/components/base/button'
  8. import Toast from '@/app/components/base/toast'
  9. import AppIcon from '@/app/components/base/app-icon'
  10. import EmojiPicker from '@/app/components/base/emoji-picker'
  11. type IProps = {
  12. appName: string
  13. show: boolean
  14. onConfirm: (info: any) => void
  15. onHide: () => void
  16. }
  17. const CreateAppModal = ({
  18. appName,
  19. show = false,
  20. onConfirm,
  21. onHide,
  22. }: IProps) => {
  23. const { t } = useTranslation()
  24. const [name, setName] = React.useState('')
  25. const [showEmojiPicker, setShowEmojiPicker] = useState(false)
  26. const [emoji, setEmoji] = useState({ icon: '🤖', icon_background: '#FFEAD5' })
  27. const submit = () => {
  28. if (!name.trim()) {
  29. Toast.notify({ type: 'error', message: t('explore.appCustomize.nameRequired') })
  30. return
  31. }
  32. onConfirm({
  33. name,
  34. ...emoji,
  35. })
  36. onHide()
  37. }
  38. return (
  39. <>
  40. <Modal
  41. isShow={show}
  42. onClose={onHide}
  43. className={cn(s.modal, '!max-w-[480px]', 'px-8')}
  44. >
  45. <span className={s.close} onClick={onHide}/>
  46. <div className={s.title}>{t('explore.appCustomize.title', { name: appName })}</div>
  47. <div className={s.content}>
  48. <div className={s.subTitle}>{t('explore.appCustomize.subTitle')}</div>
  49. <div className='flex items-center justify-between space-x-3'>
  50. <AppIcon size='large' onClick={() => { setShowEmojiPicker(true) }} className='cursor-pointer' icon={emoji.icon} background={emoji.icon_background} />
  51. <input
  52. value={name}
  53. onChange={e => setName(e.target.value)}
  54. className='h-10 px-3 text-sm font-normal bg-gray-100 rounded-lg grow'
  55. />
  56. </div>
  57. </div>
  58. <div className='flex flex-row-reverse'>
  59. <Button className='w-24 ml-2' type='primary' onClick={submit}>{t('common.operation.create')}</Button>
  60. <Button className='w-24' onClick={onHide}>{t('common.operation.cancel')}</Button>
  61. </div>
  62. </Modal>
  63. {showEmojiPicker && <EmojiPicker
  64. onSelect={(icon, icon_background) => {
  65. console.log(icon, icon_background)
  66. setEmoji({ icon, icon_background })
  67. setShowEmojiPicker(false)
  68. }}
  69. onClose={() => {
  70. setEmoji({ icon: '🤖', icon_background: '#FFEAD5' })
  71. setShowEmojiPicker(false)
  72. }}
  73. />}
  74. </>
  75. )
  76. }
  77. export default CreateAppModal