'use client'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Progress } from '@/components/ui/progress'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet'; import { useWorkspace } from '@/hooks/useWorkspace'; import { deployDatabase } from '@/lib/deploy/database'; import { cn } from '@/lib/utils'; import { Plus } from 'lucide-react'; import Image from 'next/image'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; interface DatabaseNewSteps { display: string; } interface IDatabaseProvider { id: string; display: string; image: { alt: string; src: string; }; } export interface IDatabaseConfig { workspaceId: string; name: string; provider: IDatabaseProvider; user: { username: string; password: string; }; } const steps: DatabaseNewSteps[] = [ { display: 'Database Type', }, { display: 'Configuration', }, { display: 'Name & User', }, { display: 'Review & Deploy', }, ]; export const databaseProviders: IDatabaseProvider[] = [ { id: 'vitess', display: 'Vitess', image: { alt: 'Vitess', src: '/vitess.png', }, }, { id: 'redis', display: 'Redis', image: { alt: 'Redis', src: '/redis.svg', }, }, { id: 'postgres', display: 'Postgres', image: { alt: 'Postgres', src: '/postgres.png', }, }, ]; export default function DatabaseNewForm() { const [open, setOpen] = useState(false); const [currentSteps, setCurrentSteps] = useState(1); const router = useRouter(); // TODO: Generate all data randomly, but leave the user the choice to modify const { id } = useWorkspace(); const defaultDatabaseConfig: IDatabaseConfig = { workspaceId: id, name: 'my-new-cool-db', provider: databaseProviders[0], user: { username: 'my-new-super-user', password: 'a-super-strong-generated-password', }, }; const [databaseConfig, setDatabaseConfig] = useState(defaultDatabaseConfig); return ( setOpen((open) => !open)}> New Database Deploy a new database

Step: {steps[currentSteps - 1].display}

{currentSteps} / {steps.length}

{currentSteps == 1 && (
{ setDatabaseConfig((prev) => ({ ...prev, provider: databaseProviders.filter((provider) => provider.id == id)[0] })); }} > {databaseProviders.map((provider) => (
))}
)} {currentSteps == 2 && (

WIP for now 1CPU 2048Mb RAM

Storage 1 GB

)} {currentSteps == 3 && (
{ setDatabaseConfig((prev) => ({ ...prev, name: e.target.value })); }} /> { setDatabaseConfig((prev) => ({ ...prev, user: { ...prev.user, username: e.target.value } })); }} /> { setDatabaseConfig((prev) => ({ ...prev, user: { ...prev.user, password: e.target.value } })); }} />
)} {currentSteps == 4 && (

Review your new database information :

Type : {databaseConfig.provider.display}

Name : {databaseConfig.name}

Username : {databaseConfig.user.username}

Password : {databaseConfig.user.password}

)}
{currentSteps == steps.length ? ( ) : ( )}
); }