From 7fe59ba51bd07cf45242bbaac43d5022e66aa952 Mon Sep 17 00:00:00 2001 From: HarikrishnanD Date: Fri, 17 Oct 2025 11:42:17 +0530 Subject: [PATCH 1/4] fix(volume-backups): track loading state per backup --- .../volume-backups/show-volume-backups.tsx | 75 +++++++++---------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx index c88dd92f5..c48f11ff2 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx @@ -6,6 +6,7 @@ import { Trash2, } from "lucide-react"; import { toast } from "sonner"; +import { useState } from "react"; import { DialogAction } from "@/components/shared/dialog-action"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; @@ -38,6 +39,7 @@ export const ShowVolumeBackups = ({ type = "application", serverId, }: Props) => { + const [runningBackups, setRunningBackups] = useState>(new Set()); const { data: volumeBackups, isLoading: isLoadingVolumeBackups, @@ -51,15 +53,29 @@ export const ShowVolumeBackups = ({ enabled: !!id, }, ); - const utils = api.useUtils(); - const { mutateAsync: deleteVolumeBackup, isLoading: isDeleting } = api.volumeBackups.delete.useMutation(); - - const { mutateAsync: runManually, isLoading } = + const { mutateAsync: runManually } = api.volumeBackups.runManually.useMutation(); + const handleRunManually = async (volumeBackupId: string) => { + setRunningBackups((prev) => new Set(prev).add(volumeBackupId)); + try { + await runManually({ volumeBackupId }); + toast.success("Volume backup run successfully"); + await refetchVolumeBackups(); + } catch { + toast.error("Error running volume backup"); + } finally { + setRunningBackups((prev) => { + const newSet = new Set(prev); + newSet.delete(volumeBackupId); + return newSet; + }); + } + }; + return ( @@ -73,12 +89,10 @@ export const ShowVolumeBackups = ({ intervals. -
{volumeBackups && volumeBackups.length > 0 && ( <> -
{isLoadingVolumeBackups ? ( -
+
Loading volume backups... @@ -102,7 +116,7 @@ export const ShowVolumeBackups = ({ ) : volumeBackups && volumeBackups.length > 0 ? (
{volumeBackups.map((volumeBackup) => { - const serverId = + const backupServerId = volumeBackup.application?.serverId || volumeBackup.postgres?.serverId || volumeBackup.mysql?.serverId || @@ -113,13 +127,13 @@ export const ShowVolumeBackups = ({ return (
-
+
-
+

{volumeBackup.name} @@ -143,18 +157,16 @@ export const ShowVolumeBackups = ({

- -
+
- @@ -162,25 +174,14 @@ export const ShowVolumeBackups = ({ type="button" variant="ghost" size="icon" - isLoading={isLoading} - onClick={async () => { - toast.success("Volume backup run successfully"); - - await runManually({ - volumeBackupId: volumeBackup.volumeBackupId, - }) - .then(async () => { - await new Promise((resolve) => - setTimeout(resolve, 1500), - ); - refetchVolumeBackups(); - }) - .catch(() => { - toast.error("Error running volume backup"); - }); - }} + disabled={runningBackups.has(volumeBackup.volumeBackupId)} + onClick={() => handleRunManually(volumeBackup.volumeBackupId)} > - + {runningBackups.has(volumeBackup.volumeBackupId) ? ( + + ) : ( + + )} @@ -188,13 +189,11 @@ export const ShowVolumeBackups = ({ - - @@ -230,7 +229,7 @@ export const ShowVolumeBackups = ({ })}
) : ( -
+

No volume backups From 8510bcbd408752cc4bcfaf25f8a5630cba11411e Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 17 Oct 2025 06:15:48 +0000 Subject: [PATCH 2/4] [autofix.ci] apply automated fixes --- .../application/volume-backups/show-volume-backups.tsx | 8 ++++++-- .../dashboard/impersonation/impersonation-bar.tsx | 2 +- apps/dokploy/components/layouts/user-nav.tsx | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx index c48f11ff2..1c964da42 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx @@ -174,8 +174,12 @@ export const ShowVolumeBackups = ({ type="button" variant="ghost" size="icon" - disabled={runningBackups.has(volumeBackup.volumeBackupId)} - onClick={() => handleRunManually(volumeBackup.volumeBackupId)} + disabled={runningBackups.has( + volumeBackup.volumeBackupId, + )} + onClick={() => + handleRunManually(volumeBackup.volumeBackupId) + } > {runningBackups.has(volumeBackup.volumeBackupId) ? ( diff --git a/apps/dokploy/components/dashboard/impersonation/impersonation-bar.tsx b/apps/dokploy/components/dashboard/impersonation/impersonation-bar.tsx index a5aae598c..b96b7c866 100644 --- a/apps/dokploy/components/dashboard/impersonation/impersonation-bar.tsx +++ b/apps/dokploy/components/dashboard/impersonation/impersonation-bar.tsx @@ -281,7 +281,7 @@ export const ImpersonationBar = () => {

diff --git a/apps/dokploy/components/layouts/user-nav.tsx b/apps/dokploy/components/layouts/user-nav.tsx index ca5854196..337e8f483 100644 --- a/apps/dokploy/components/layouts/user-nav.tsx +++ b/apps/dokploy/components/layouts/user-nav.tsx @@ -44,7 +44,7 @@ export const UserNav = () => { > From 6a4ef1153f93079d593a4a1d2ff706215341656b Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 25 Oct 2025 13:07:15 -0600 Subject: [PATCH 3/4] fix(volume-backups): adjust layout for volume backups display and reintroduce toast notifications --- .../application/volume-backups/show-volume-backups.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx index 1c964da42..fcb8f55e4 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx @@ -5,8 +5,8 @@ import { Play, Trash2, } from "lucide-react"; -import { toast } from "sonner"; import { useState } from "react"; +import { toast } from "sonner"; import { DialogAction } from "@/components/shared/dialog-action"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; @@ -79,7 +79,7 @@ export const ShowVolumeBackups = ({ return ( -
+
Volume Backups @@ -89,7 +89,7 @@ export const ShowVolumeBackups = ({ intervals.
-
+
{volumeBackups && volumeBackups.length > 0 && ( <> From 0ff0695b7f79b4a2cd381563ef313f132c12e5f4 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 25 Oct 2025 13:10:02 -0600 Subject: [PATCH 4/4] refactor(volume-backups): rename backupServerId to serverId for clarity in volume backup component --- .../application/volume-backups/show-volume-backups.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx index fcb8f55e4..092538150 100644 --- a/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx +++ b/apps/dokploy/components/dashboard/application/volume-backups/show-volume-backups.tsx @@ -116,7 +116,7 @@ export const ShowVolumeBackups = ({ ) : volumeBackups && volumeBackups.length > 0 ? (
{volumeBackups.map((volumeBackup) => { - const backupServerId = + const serverId = volumeBackup.application?.serverId || volumeBackup.postgres?.serverId || volumeBackup.mysql?.serverId || @@ -161,7 +161,7 @@ export const ShowVolumeBackups = ({