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]); +}