diff --git a/apps/postgres-new/components/sidebar.tsx b/apps/postgres-new/components/sidebar.tsx index d092729c..7e83219c 100644 --- a/apps/postgres-new/components/sidebar.tsx +++ b/apps/postgres-new/components/sidebar.tsx @@ -6,6 +6,7 @@ import { ArrowRightToLine, CircleEllipsis, Database as DbIcon, + Download, Loader, LogOut, PackagePlus, @@ -26,6 +27,7 @@ import { useDatabasesQuery } from '~/data/databases/databases-query' import { useDeployWaitlistCreateMutation } from '~/data/deploy-waitlist/deploy-waitlist-create-mutation' import { useIsOnDeployWaitlistQuery } from '~/data/deploy-waitlist/deploy-waitlist-query' import { Database } from '~/lib/db' +import { downloadFile, titleToKebabCase } from '~/lib/util' import { cn } from '~/lib/utils' import { useApp } from './app-provider' import { CodeBlock } from './code-block' @@ -208,7 +210,7 @@ type DatabaseMenuItemProps = { function DatabaseMenuItem({ database, isActive }: DatabaseMenuItemProps) { const router = useRouter() - const { user } = useApp() + const { user, dbManager } = useApp() const [isPopoverOpen, setIsPopoverOpen] = useState(false) const { mutateAsync: deleteDatabase } = useDatabaseDeleteMutation() const { mutateAsync: updateDatabase } = useDatabaseUpdateMutation() @@ -364,6 +366,28 @@ function DatabaseMenuItem({ database, isActive }: DatabaseMenuItemProps) { onClick={async (e) => { e.preventDefault() + if (!dbManager) { + throw new Error('dbManager is not available') + } + + const db = await dbManager.getDbInstance(database.id) + const dumpBlob = await db.dumpDataDir() + + const fileName = `${titleToKebabCase(database.name ?? 'My Database')}-${Date.now()}` + const file = new File([dumpBlob], fileName, { type: dumpBlob.type }) + + downloadFile(file) + }} + > + + + Download + +