mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-16 12:04:03 +00:00
feat(ui): added api hooks and state hooks for dashboard
This commit is contained in:
@@ -4,52 +4,56 @@ import { useRouter } from 'next/router';
|
||||
import { leaveConfirmDefaultMessage } from '@app/const';
|
||||
|
||||
type LeaveConfirmProps = {
|
||||
initialValue: boolean,
|
||||
message?: string
|
||||
}
|
||||
initialValue: boolean;
|
||||
message?: string;
|
||||
};
|
||||
|
||||
interface LeaveConfirmReturn {
|
||||
hasUnsavedChanges: boolean,
|
||||
setHasUnsavedChanges: Dispatch<SetStateAction<boolean>>,
|
||||
hasUnsavedChanges: boolean;
|
||||
setHasUnsavedChanges: Dispatch<SetStateAction<boolean>>;
|
||||
}
|
||||
|
||||
export function useLeaveConfirm({
|
||||
initialValue,
|
||||
message = leaveConfirmDefaultMessage,
|
||||
initialValue,
|
||||
message = leaveConfirmDefaultMessage
|
||||
}: LeaveConfirmProps): LeaveConfirmReturn {
|
||||
const router = useRouter()
|
||||
const router = useRouter();
|
||||
const [hasUnsavedChanges, setHasUnsavedChanges] = useState<boolean>(initialValue);
|
||||
|
||||
const onRouteChangeStart = useCallback(() => {
|
||||
if (hasUnsavedChanges) {
|
||||
// eslint-disable-next-line no-alert
|
||||
if (window.confirm(message)) {
|
||||
return true
|
||||
return true;
|
||||
}
|
||||
throw new Error("Abort route change by user's confirmation.")
|
||||
throw new Error("Abort route change by user's confirmation.");
|
||||
}
|
||||
return false;
|
||||
}, [hasUnsavedChanges])
|
||||
}, [hasUnsavedChanges]);
|
||||
|
||||
const handleWindowClose = useCallback((e: any) => {
|
||||
if (!hasUnsavedChanges) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
e.returnValue = message;
|
||||
}, []);
|
||||
const handleWindowClose = useCallback(
|
||||
(e: any) => {
|
||||
if (!hasUnsavedChanges) {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
e.returnValue = message;
|
||||
},
|
||||
[hasUnsavedChanges]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
router.events.on("routeChangeStart", onRouteChangeStart);
|
||||
router.events.on('routeChangeStart', onRouteChangeStart);
|
||||
window.addEventListener('beforeunload', handleWindowClose);
|
||||
|
||||
return () => {
|
||||
router.events.off("routeChangeStart", onRouteChangeStart);
|
||||
router.events.off('routeChangeStart', onRouteChangeStart);
|
||||
window.removeEventListener('beforeunload', handleWindowClose);
|
||||
}
|
||||
};
|
||||
}, [onRouteChangeStart, handleWindowClose]);
|
||||
|
||||
return {
|
||||
hasUnsavedChanges,
|
||||
setHasUnsavedChanges,
|
||||
setHasUnsavedChanges
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user