feishin/src/renderer/router/app-outlet.tsx

46 lines
1.1 KiB
TypeScript
Raw Normal View History

2022-12-19 15:59:14 -08:00
import { useState, useEffect } from 'react';
import isElectron from 'is-electron';
import { Navigate, Outlet, useLocation } from 'react-router-dom';
import { AppRoute } from '/@/renderer/router/routes';
import { useCurrentServer } from '/@/renderer/store';
2022-12-25 01:25:46 -08:00
const localSettings = isElectron() ? window.electron.localSettings : null;
2022-12-19 15:59:14 -08:00
export const AppOutlet = () => {
const location = useLocation();
const currentServer = useCurrentServer();
const [isMpvRequired, setIsMpvRequired] = useState(false);
const isServerRequired = !currentServer;
useEffect(() => {
const getMpvPath = async () => {
if (!isElectron()) return setIsMpvRequired(false);
2022-12-19 16:17:34 -08:00
const mpvPath = await localSettings.get('mpv_path');
if (mpvPath) {
return setIsMpvRequired(false);
}
return setIsMpvRequired(true);
2022-12-19 15:59:14 -08:00
};
getMpvPath();
}, []);
const actions = [isServerRequired, isMpvRequired];
const actionRequired = actions.some((c) => c);
if (actionRequired) {
return (
<Navigate
replace
state={{ from: location }}
to={AppRoute.ACTION_REQUIRED}
/>
);
}
return <Outlet />;
};