All files / src/hooks useUnsavedChanges.ts

100% Statements 4/4
100% Branches 0/0
100% Functions 3/3
100% Lines 4/4

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18                    768x 768x 768x 1890x        
import { useMemo } from "react";
 
/**
 * Compares initial and current form values to determine if there are unsaved changes.
 * Uses shallow comparison — suitable for flat form state (strings, numbers, booleans).
 */
export function useUnsavedChanges<T extends Record<string, unknown>>(
	initialValues: T,
	currentValues: T,
): boolean {
	return useMemo(() => {
		const keys = Object.keys(initialValues);
		return keys.some(
			(key) => initialValues[key] !== currentValues[key],
		);
	}, [initialValues, currentValues]);
}