From 42fb6c8b8cea5cf651045bd10f009e33ae57550d Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Wed, 22 Apr 2026 23:05:22 +0200 Subject: [PATCH] ui(deploy): useFormDirty hook for per-tab dirty markers Co-Authored-By: Claude Sonnet 4.6 --- .../AppDeploymentPage/hooks/useFormDirty.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 ui/src/pages/AppsTab/AppDeploymentPage/hooks/useFormDirty.ts diff --git a/ui/src/pages/AppsTab/AppDeploymentPage/hooks/useFormDirty.ts b/ui/src/pages/AppsTab/AppDeploymentPage/hooks/useFormDirty.ts new file mode 100644 index 00000000..0e8fbb77 --- /dev/null +++ b/ui/src/pages/AppsTab/AppDeploymentPage/hooks/useFormDirty.ts @@ -0,0 +1,25 @@ +import { useMemo } from 'react'; +import type { DeploymentPageFormState } from './useDeploymentPageState'; + +export interface PerTabDirty { + monitoring: boolean; + resources: boolean; + variables: boolean; + sensitiveKeys: boolean; + anyLocalEdit: boolean; +} + +export function useFormDirty( + form: DeploymentPageFormState, + serverState: DeploymentPageFormState, + stagedJar: File | null, +): PerTabDirty { + return useMemo(() => { + const monitoring = JSON.stringify(form.monitoring) !== JSON.stringify(serverState.monitoring); + const resources = JSON.stringify(form.resources) !== JSON.stringify(serverState.resources); + const variables = JSON.stringify(form.variables) !== JSON.stringify(serverState.variables); + const sensitiveKeys = JSON.stringify(form.sensitiveKeys) !== JSON.stringify(serverState.sensitiveKeys); + const anyLocalEdit = monitoring || resources || variables || sensitiveKeys || !!stagedJar; + return { monitoring, resources, variables, sensitiveKeys, anyLocalEdit }; + }, [form, serverState, stagedJar]); +}