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();