mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-07 16:33:51 +00:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { useLocation, useNavigate } from 'react-router-dom';
|
|
|
|
import { useClientStore } from '../stores/clientStore';
|
|
import { socketSendJson } from '../utils/socket';
|
|
|
|
import { useIsOnline } from './useSocket';
|
|
|
|
export const useClientPath = () => {
|
|
const navigate = useNavigate();
|
|
const { pathname, search } = useLocation();
|
|
const { redirect, setRedirect } = useClientStore((store) => ({
|
|
redirect: store.redirect,
|
|
setRedirect: store.setRedirect,
|
|
}));
|
|
const isOnline = useIsOnline();
|
|
|
|
// notify of client path changes
|
|
useEffect(() => {
|
|
if (!isOnline) return;
|
|
|
|
socketSendJson('set-client-path', pathname + search);
|
|
}, [pathname, search, isOnline]);
|
|
|
|
// navigate to new path when received from server
|
|
useEffect(() => {
|
|
if (redirect === '') {
|
|
return;
|
|
}
|
|
|
|
// clear redirect
|
|
setRedirect('');
|
|
|
|
// navigate if there is a path change
|
|
if (redirect !== pathname + search) {
|
|
navigate(redirect, { replace: true });
|
|
}
|
|
}, [navigate, pathname, redirect, search, setRedirect]);
|
|
};
|