import { useParams } from 'common' import { Check, ChevronDown, Plus, PlusIcon } from 'lucide-react' import Link from 'next/link' import { HTMLAttributes } from 'react' import { Badge, Button, cn, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, Popover, PopoverContent, PopoverTrigger, } from 'ui' import { Project, type ForeignProject, type ProjectLinkerProps } from './VercelGithub.types' import { CommandItemLink } from '@/components/ui/CommandItemLink' import { OrganizationProjectSelector } from '@/components/ui/OrganizationProjectSelector' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { BASE_PATH } from '@/lib/constants' import { openInstallGitHubIntegrationWindow } from '@/lib/github' export const Panel = ({ children, className, ...props }: HTMLAttributes) => { return (
{children}
) } export const ForeignProjectSelector = ({ open, mode, variant, choosePrompt, selectedForeignProject, loadingForeignProjects, foreignProjects, integrationIcon, onOpenChange, setForeignProjectId, getForeignProjectIcon, }: { open: boolean selectedForeignProject?: ForeignProject setForeignProjectId: (id: string) => void onOpenChange: (val: boolean) => void } & Pick< ProjectLinkerProps, | 'mode' | 'variant' | 'choosePrompt' | 'loadingForeignProjects' | 'foreignProjects' | 'getForeignProjectIcon' | 'integrationIcon' >) => { return ( No results found. {foreignProjects.map((project, i) => { return ( { if (project.id) setForeignProjectId(project.id) onOpenChange(false) }} >
{getForeignProjectIcon?.(project) ?? integrationIcon}
{project.name}
) })} {foreignProjects.length === 0 && No results found.}
{mode === 'GitHub' && ( <> openInstallGitHubIntegrationWindow('install')} > Add GitHub Repositories )}
) } export const SupabaseProjectSelector = ({ open, variant, slug, defaultSupabaseProject, selectedSupabaseProject, loadingSupabaseProjects, setOpen, setSelectedSupabaseProject, }: { open: boolean selectedSupabaseProject?: Project loadingSupabaseProjects: boolean setOpen: (val: boolean) => void setSelectedSupabaseProject: (project: Project) => void } & Pick) => { const { data: selectedOrganization } = useSelectedOrganizationQuery() const projectCreationEnabled = useIsFeatureEnabled('projects:create') return ( { setSelectedSupabaseProject(project) setOpen(false) }} renderRow={(project) => { return (
{variant === 'default' && (
Supabase
)}

{project.name}

{project.status === 'INACTIVE' && Paused} {project.status === 'GOING_DOWN' && Pausing}
{project.ref === selectedSupabaseProject?.ref && }
) }} renderTrigger={() => { return ( ) }} renderActions={() => { return ( projectCreationEnabled && ( setOpen(false)} >

Create a new project

) ) }} /> ) } export const ActionButtons = ({ slug, mode, variant, showCreateProject, connectDisabled, isLoading, foreignProjectId, onCreateConnections, onSkip, }: { showCreateProject: boolean connectDisabled: boolean foreignProjectId: string | undefined onCreateConnections: () => void } & Pick) => { const { next, externalId, currentProjectId } = useParams() const organizationSlug = slug const vercelProjectId = foreignProjectId ?? currentProjectId // Deploy-button create is only for the install interstitial; settings side panels use /new. const newProjectURL = mode === 'Vercel' && variant === 'interstitial' && organizationSlug ? `/integrations/vercel/${organizationSlug}/deploy-button/new-project?${new URLSearchParams({ ...(next ? { next } : {}), ...(vercelProjectId ? { currentProjectId: vercelProjectId } : {}), ...(externalId ? { externalId } : {}), })}` : `/new/${organizationSlug}` return (
{showCreateProject ? ( ) : ( )} {onSkip !== undefined && ( )}
) }