mirror of
https://github.com/supabase/supabase.git
synced 2026-10-10 11:55:05 +03:00
## Problem The `_Shadcn_` suffix isn't needed anymore on `Command` components ## Solution - Remove the `_Shadcn_` suffix - Simplify UI package exports - Apply prettier <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Simplified command component imports and exports across the UI library by removing internal naming aliases and adopting direct component references. Updated the public UI package barrel export to use wildcard re-exports for cleaner API surface. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46153?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
163 lines
5.1 KiB
TypeScript
163 lines
5.1 KiB
TypeScript
'use client'
|
|
|
|
import { Check, ChevronsUpDown, Plus } from 'lucide-react'
|
|
import Link from 'next/link'
|
|
import { useState } from 'react'
|
|
import { PlanId } from 'shared-data/plans'
|
|
|
|
import {
|
|
Button,
|
|
ButtonProps,
|
|
cn,
|
|
Command,
|
|
CommandEmpty,
|
|
CommandGroup,
|
|
CommandInput,
|
|
CommandItem,
|
|
CommandList,
|
|
CommandSeparator,
|
|
Dialog,
|
|
DialogClose,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogFooter,
|
|
DialogHeader,
|
|
DialogSection,
|
|
DialogTitle,
|
|
DialogTrigger,
|
|
Popover,
|
|
PopoverContent,
|
|
PopoverTrigger,
|
|
} from 'ui'
|
|
import { Organization } from '~/data/organizations'
|
|
|
|
interface UpgradePlanProps {
|
|
organizations?: Organization[]
|
|
onClick?: () => void
|
|
size?: ButtonProps['size']
|
|
planId: PlanId
|
|
}
|
|
|
|
const UpgradePlan = ({ organizations = [], onClick, size = 'large', planId }: UpgradePlanProps) => {
|
|
const [open, setOpen] = useState(false)
|
|
const [value, setValue] = useState('')
|
|
|
|
return (
|
|
<Dialog>
|
|
<DialogTrigger asChild>
|
|
<Button block size={size} type="primary" onClick={onClick}>
|
|
Upgrade now
|
|
</Button>
|
|
</DialogTrigger>
|
|
<DialogContent>
|
|
<DialogHeader className="pb-3">
|
|
<DialogTitle>Upgrade organization</DialogTitle>
|
|
<DialogDescription>
|
|
Choose the organization you want to upgrade to a paid plan.
|
|
</DialogDescription>
|
|
</DialogHeader>
|
|
|
|
<DialogSection className="py-2">
|
|
<Popover open={open} onOpenChange={setOpen}>
|
|
<PopoverTrigger asChild>
|
|
<Button
|
|
type="default"
|
|
role="combobox"
|
|
size={'small'}
|
|
aria-expanded={open}
|
|
className="w-full justify-between"
|
|
iconRight={<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />}
|
|
>
|
|
{value === 'new-organization' ? (
|
|
<span className="flex items-center gap-2">
|
|
<Plus className="h-4 w-4" />
|
|
New organization
|
|
</span>
|
|
) : value ? (
|
|
organizations.find((organization) => organization.slug === value)?.name
|
|
) : (
|
|
'Select an organization...'
|
|
)}
|
|
</Button>
|
|
</PopoverTrigger>
|
|
<PopoverContent className="w-[300px] p-0">
|
|
<Command>
|
|
<CommandInput placeholder="Select organization..." />
|
|
<CommandList>
|
|
<CommandEmpty>No organizations found.</CommandEmpty>
|
|
<CommandGroup>
|
|
{organizations.map((organization) => (
|
|
<CommandItem
|
|
key={organization.slug}
|
|
value={organization.slug}
|
|
onSelect={(currentValue) => {
|
|
setValue(currentValue === value ? '' : currentValue)
|
|
setOpen(false)
|
|
}}
|
|
keywords={[organization.name]}
|
|
>
|
|
<Check
|
|
className={cn(
|
|
'mr-2 h-4 w-4',
|
|
value === organization.slug ? 'opacity-100' : 'opacity-0'
|
|
)}
|
|
/>
|
|
{organization.name}
|
|
</CommandItem>
|
|
))}
|
|
</CommandGroup>
|
|
<CommandSeparator />
|
|
<CommandGroup>
|
|
<CommandItem
|
|
value="new-organization"
|
|
onSelect={(currentValue) => {
|
|
setValue(currentValue === value ? '' : currentValue)
|
|
setOpen(false)
|
|
}}
|
|
keywords={['Create a new organization']}
|
|
>
|
|
<Check
|
|
className={cn(
|
|
'mr-2 h-4 w-4',
|
|
value === 'new-organization' ? 'opacity-100' : 'opacity-0'
|
|
)}
|
|
/>
|
|
<Plus className="h-4 w-4 mr-2" /> Create a new organization
|
|
</CommandItem>
|
|
</CommandGroup>
|
|
</CommandList>
|
|
</Command>
|
|
</PopoverContent>
|
|
</Popover>
|
|
</DialogSection>
|
|
|
|
<DialogSection>
|
|
<DialogDescription className="text-xs">
|
|
Upon continuing, you will be redirected to the organization's billing page where
|
|
you can upgrade to a paid plan.
|
|
</DialogDescription>
|
|
</DialogSection>
|
|
|
|
<DialogFooter>
|
|
<DialogClose asChild>
|
|
<Button type="outline">Cancel</Button>
|
|
</DialogClose>
|
|
<Button disabled={!value} asChild>
|
|
<Link
|
|
href={
|
|
value === 'new-organization'
|
|
? `/dashboard/new?plan=${planId}`
|
|
: `/dashboard/org/${value}/billing?panel=subscriptionPlan`
|
|
}
|
|
>
|
|
Continue
|
|
</Link>
|
|
</Button>
|
|
</DialogFooter>
|
|
</DialogContent>
|
|
</Dialog>
|
|
)
|
|
}
|
|
|
|
export default UpgradePlan
|