add confirm when leave from add or edit question page

This commit is contained in:
Majd_dk 2025-09-28 11:48:11 +03:00
parent 761be504cf
commit 34b0ad8d4a

View File

@ -3,7 +3,6 @@ import { useTranslation } from "react-i18next";
const useUnsavedChangesWarning = (unsavedChanges: boolean) => { const useUnsavedChangesWarning = (unsavedChanges: boolean) => {
const [t] = useTranslation(); const [t] = useTranslation();
useEffect(() => { useEffect(() => {
const handleBeforeUnload = (event: BeforeUnloadEvent) => { const handleBeforeUnload = (event: BeforeUnloadEvent) => {
if (unsavedChanges) { if (unsavedChanges) {
@ -14,29 +13,37 @@ const useUnsavedChangesWarning = (unsavedChanges: boolean) => {
} }
}; };
const handleNavigation = (event: MouseEvent) => { const handleNavigation = (event: Event) => {
if (unsavedChanges) { // const target = event.target as HTMLElement;
console.log(t("Access denied: You have unsaved changes!"));
event.preventDefault(); if (unsavedChanges ) {
} const leave = window.confirm(t("validation.You have unsaved changes! Are you sure you want to leave?"));
};
if (leave) return ;
event.stopPropagation();
event.preventDefault();
}
};
window.addEventListener("beforeunload", handleBeforeUnload); window.addEventListener("beforeunload", handleBeforeUnload);
// Intercept link clicks (example for <a> elements) // Intercept link clicks (example for <a> elements)
document.querySelectorAll("a").forEach((link) => { // document.addEventListener("click", handleNavigation);
document.querySelectorAll(".link").forEach((link) => {
link.addEventListener("click", handleNavigation); link.addEventListener("click", handleNavigation);
}); });
return () => { return () => {
window.removeEventListener("beforeunload", handleBeforeUnload); window.removeEventListener("beforeunload", handleBeforeUnload);
document.querySelectorAll(".link").forEach((link) => {
link.removeEventListener("click", handleNavigation);
});
// Clean up event listeners // Clean up event listeners
document.querySelectorAll("a").forEach((link) => { document.removeEventListener("click", handleNavigation);
link.removeEventListener("click", handleNavigation);
});
}; };
}, [unsavedChanges, t]); }, [unsavedChanges]);
}; };
export default useUnsavedChangesWarning; export default useUnsavedChangesWarning;