| | 'use client' |
| |
|
| | import { forwardRef, useMemo, useState } from 'react' |
| | import { |
| | useRouter, |
| | useSearchParams, |
| | } from 'next/navigation' |
| | import { useTranslation } from 'react-i18next' |
| | import CreateAppTemplateDialog from '@/app/components/app/create-app-dialog' |
| | import CreateAppModal from '@/app/components/app/create-app-modal' |
| | import CreateFromDSLModal, { CreateFromDSLModalTab } from '@/app/components/app/create-from-dsl-modal' |
| | import { useProviderContext } from '@/context/provider-context' |
| | import { FileArrow01, FilePlus01, FilePlus02 } from '@/app/components/base/icons/src/vender/line/files' |
| |
|
| | export type CreateAppCardProps = { |
| | onSuccess?: () => void |
| | } |
| |
|
| | |
| | const CreateAppCard = forwardRef<HTMLAnchorElement, CreateAppCardProps>(({ onSuccess }, ref) => { |
| | const { t } = useTranslation() |
| | const { onPlanInfoChanged } = useProviderContext() |
| | const searchParams = useSearchParams() |
| | const { replace } = useRouter() |
| | const dslUrl = searchParams.get('remoteInstallUrl') || undefined |
| |
|
| | const [showNewAppTemplateDialog, setShowNewAppTemplateDialog] = useState(false) |
| | const [showNewAppModal, setShowNewAppModal] = useState(false) |
| | const [showCreateFromDSLModal, setShowCreateFromDSLModal] = useState(!!dslUrl) |
| |
|
| | const activeTab = useMemo(() => { |
| | if (dslUrl) |
| | return CreateFromDSLModalTab.FROM_URL |
| |
|
| | return undefined |
| | }, [dslUrl]) |
| |
|
| | return ( |
| | <a |
| | ref={ref} |
| | className='relative col-span-1 flex flex-col justify-between min-h-[160px] bg-gray-200 rounded-xl border-[0.5px] border-black/5' |
| | > |
| | <div className='grow p-2 rounded-t-xl'> |
| | <div className='px-6 pt-2 pb-1 text-xs font-medium leading-[18px] text-gray-500'>{t('app.createApp')}</div> |
| | <div className='flex items-center mb-1 px-6 py-[7px] rounded-lg text-[13px] font-medium leading-[18px] text-gray-600 cursor-pointer hover:text-primary-600 hover:bg-white' onClick={() => setShowNewAppModal(true)}> |
| | <FilePlus01 className='shrink-0 mr-2 w-4 h-4' /> |
| | {t('app.newApp.startFromBlank')} |
| | </div> |
| | <div className='flex items-center px-6 py-[7px] rounded-lg text-[13px] font-medium leading-[18px] text-gray-600 cursor-pointer hover:text-primary-600 hover:bg-white' onClick={() => setShowNewAppTemplateDialog(true)}> |
| | <FilePlus02 className='shrink-0 mr-2 w-4 h-4' /> |
| | {t('app.newApp.startFromTemplate')} |
| | </div> |
| | </div> |
| | <div |
| | className='p-2 border-t-[0.5px] border-black/5 rounded-b-xl' |
| | onClick={() => setShowCreateFromDSLModal(true)} |
| | > |
| | <div className='flex items-center px-6 py-[7px] rounded-lg text-[13px] font-medium leading-[18px] text-gray-600 cursor-pointer hover:text-primary-600 hover:bg-white'> |
| | <FileArrow01 className='shrink-0 mr-2 w-4 h-4' /> |
| | {t('app.importDSL')} |
| | </div> |
| | </div> |
| | <CreateAppModal |
| | show={showNewAppModal} |
| | onClose={() => setShowNewAppModal(false)} |
| | onSuccess={() => { |
| | onPlanInfoChanged() |
| | if (onSuccess) |
| | onSuccess() |
| | }} |
| | /> |
| | <CreateAppTemplateDialog |
| | show={showNewAppTemplateDialog} |
| | onClose={() => setShowNewAppTemplateDialog(false)} |
| | onSuccess={() => { |
| | onPlanInfoChanged() |
| | if (onSuccess) |
| | onSuccess() |
| | }} |
| | /> |
| | <CreateFromDSLModal |
| | show={showCreateFromDSLModal} |
| | onClose={() => { |
| | setShowCreateFromDSLModal(false) |
| | |
| | if (dslUrl) |
| | replace('/') |
| | }} |
| | activeTab={activeTab} |
| | dslUrl={dslUrl} |
| | onSuccess={() => { |
| | onPlanInfoChanged() |
| | if (onSuccess) |
| | onSuccess() |
| | }} |
| | /> |
| | </a> |
| | ) |
| | }) |
| |
|
| | export default CreateAppCard |
| |
|