'use client' import React, { useState } from 'react' import cn from 'classnames' import { useTranslation } from 'react-i18next' import s from './style.module.css' import Modal from '@/app/components/base/modal' import Button from '@/app/components/base/button' import Toast from '@/app/components/base/toast' import AppIcon from '@/app/components/base/app-icon' import EmojiPicker from '@/app/components/base/emoji-picker' import { useProviderContext } from '@/context/provider-context' import AppsFull from '@/app/components/billing/apps-full-in-dialog' export type CreateAppModalProps = { appName: string show: boolean onConfirm: (info: { name: string icon: string icon_background: string }) => Promise onHide: () => void } const CreateAppModal = ({ appName, show = false, onConfirm, onHide, }: CreateAppModalProps) => { const { t } = useTranslation() const [name, setName] = React.useState(appName) const [showEmojiPicker, setShowEmojiPicker] = useState(false) const [emoji, setEmoji] = useState({ icon: '🤖', icon_background: '#FFEAD5' }) const { plan, enableBilling } = useProviderContext() const isAppsFull = (enableBilling && plan.usage.buildApps >= plan.total.buildApps) const submit = () => { if (!name.trim()) { Toast.notify({ type: 'error', message: t('explore.appCustomize.nameRequired') }) return } onConfirm({ name, ...emoji, }) onHide() } return ( <> { }} className={cn(s.modal, '!max-w-[480px]', 'px-8')} >
{t('explore.appCustomize.title', { name: appName })}
{t('explore.appCustomize.subTitle')}
{ setShowEmojiPicker(true) }} className='cursor-pointer' icon={emoji.icon} background={emoji.icon_background} /> setName(e.target.value)} className='h-10 px-3 text-sm font-normal bg-gray-100 rounded-lg grow' />
{isAppsFull && }
{showEmojiPicker && { setEmoji({ icon, icon_background }) setShowEmojiPicker(false) }} onClose={() => { setEmoji({ icon: '🤖', icon_background: '#FFEAD5' }) setShowEmojiPicker(false) }} />} ) } export default CreateAppModal