diff --git a/apps/dokploy/components/dashboard/shared/rebuild-database.tsx b/apps/dokploy/components/dashboard/shared/rebuild-database.tsx index 55153c56d0..17fe02a0b1 100644 --- a/apps/dokploy/components/dashboard/shared/rebuild-database.tsx +++ b/apps/dokploy/components/dashboard/shared/rebuild-database.tsx @@ -1,4 +1,5 @@ import { AlertTriangle, DatabaseIcon } from "lucide-react"; +import { useRouter } from "next/router"; import { toast } from "sonner"; import { AlertDialog, @@ -21,8 +22,19 @@ interface Props { } export const RebuildDatabase = ({ id, type }: Props) => { + const router = useRouter(); const utils = api.useUtils(); + const goToBackups = () => { + const projectId = router.query.projectId as string; + const environmentId = router.query.environmentId as string; + router.push( + `/dashboard/project/${projectId}/environment/${environmentId}/services/${type}/${id}?tab=backups`, + undefined, + { shallow: true }, + ); + }; + const mutationMap = { libsql: () => api.libsql.rebuild.useMutation(), mariadb: () => api.mariadb.rebuild.useMutation(), @@ -69,6 +81,19 @@ export const RebuildDatabase = ({ id, type }: Props) => { This action will completely reset your database to its initial state. All data, tables, and configurations will be removed.

+

+ + + Recommended:{" "} + + Create a backup + {" "} + before rebuilding to avoid permanent data loss. + +

@@ -99,6 +124,19 @@ export const RebuildDatabase = ({ id, type }: Props) => {

This action cannot be undone.

+

+ + + Tip:{" "} + + Go to the Backups tab + {" "} + to create a backup before rebuilding. + +

diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/libsql/[libsqlId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/libsql/[libsqlId].tsx index a343660c12..5adf09388e 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/libsql/[libsqlId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/libsql/[libsqlId].tsx @@ -9,7 +9,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { toast } from "sonner"; import superjson from "superjson"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-environment"; @@ -59,6 +59,12 @@ const Libsql = ( const router = useRouter(); const { projectId, environmentId } = router.query; const [tab, setSab] = useState(activeTab); + useEffect(() => { + const tabFromUrl = router.query.tab as TabState; + if (tabFromUrl && tabFromUrl !== tab) { + setSab(tabFromUrl); + } + }, [router.query.tab]); const { data } = api.libsql.one.useQuery({ libsqlId }); const { data: auth } = api.user.get.useQuery(); diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mariadb/[mariadbId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mariadb/[mariadbId].tsx index 71d7e6f592..21f0970c90 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mariadb/[mariadbId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mariadb/[mariadbId].tsx @@ -9,7 +9,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { toast } from "sonner"; import superjson from "superjson"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-environment"; @@ -60,6 +60,12 @@ const Mariadb = ( const router = useRouter(); const { projectId, environmentId } = router.query; const [tab, setSab] = useState(activeTab); + useEffect(() => { + const tabFromUrl = router.query.tab as TabState; + if (tabFromUrl && tabFromUrl !== tab) { + setSab(tabFromUrl); + } + }, [router.query.tab]); const { data } = api.mariadb.one.useQuery({ mariadbId }); const { data: auth } = api.user.get.useQuery(); const { data: permissions } = api.user.getPermissions.useQuery(); diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mongo/[mongoId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mongo/[mongoId].tsx index c5e7baf36e..b92f02200d 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mongo/[mongoId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mongo/[mongoId].tsx @@ -9,7 +9,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { toast } from "sonner"; import superjson from "superjson"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-environment"; @@ -59,6 +59,12 @@ const Mongo = ( const router = useRouter(); const { projectId, environmentId } = router.query; const [tab, setSab] = useState(activeTab); + useEffect(() => { + const tabFromUrl = router.query.tab as TabState; + if (tabFromUrl && tabFromUrl !== tab) { + setSab(tabFromUrl); + } + }, [router.query.tab]); const { data } = api.mongo.one.useQuery({ mongoId }); const { data: auth } = api.user.get.useQuery(); diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mysql/[mysqlId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mysql/[mysqlId].tsx index 0460f0239a..54dae845d0 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mysql/[mysqlId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/mysql/[mysqlId].tsx @@ -9,7 +9,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { toast } from "sonner"; import superjson from "superjson"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-environment"; @@ -59,6 +59,12 @@ const MySql = ( const router = useRouter(); const { projectId, environmentId } = router.query; const [tab, setSab] = useState(activeTab); + useEffect(() => { + const tabFromUrl = router.query.tab as TabState; + if (tabFromUrl && tabFromUrl !== tab) { + setSab(tabFromUrl); + } + }, [router.query.tab]); const { data } = api.mysql.one.useQuery({ mysqlId }); const { data: auth } = api.user.get.useQuery(); const { data: permissions } = api.user.getPermissions.useQuery(); diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/postgres/[postgresId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/postgres/[postgresId].tsx index 78612b61c9..c90fb8ea22 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/postgres/[postgresId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/postgres/[postgresId].tsx @@ -9,7 +9,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { toast } from "sonner"; import superjson from "superjson"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-environment"; @@ -59,6 +59,12 @@ const Postgresql = ( const router = useRouter(); const { projectId, environmentId } = router.query; const [tab, setSab] = useState(activeTab); + useEffect(() => { + const tabFromUrl = router.query.tab as TabState; + if (tabFromUrl && tabFromUrl !== tab) { + setSab(tabFromUrl); + } + }, [router.query.tab]); const { data } = api.postgres.one.useQuery({ postgresId }); const { data: auth } = api.user.get.useQuery(); const { data: permissions } = api.user.getPermissions.useQuery(); diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/redis/[redisId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/redis/[redisId].tsx index 530eef210a..78aeafdc59 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/redis/[redisId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/environment/[environmentId]/services/redis/[redisId].tsx @@ -9,7 +9,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { toast } from "sonner"; import superjson from "superjson"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-environment"; @@ -58,6 +58,12 @@ const Redis = ( const router = useRouter(); const { projectId, environmentId } = router.query; const [tab, setSab] = useState(activeTab); + useEffect(() => { + const tabFromUrl = router.query.tab as TabState; + if (tabFromUrl && tabFromUrl !== tab) { + setSab(tabFromUrl); + } + }, [router.query.tab]); const { data } = api.redis.one.useQuery({ redisId }); const { data: auth } = api.user.get.useQuery();