feat(ui): added api hooks and state hooks for dashboard

This commit is contained in:
akhilmhdh
2023-03-19 00:39:18 +05:30
parent 686d3c409d
commit b42c33107e
16 changed files with 588 additions and 26 deletions
+26 -22
View File
@@ -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
};
}