Should be mostly good now

This commit is contained in:
HannahPadd
2026-02-27 16:02:30 +01:00
parent 13aabd74da
commit f28b5a3a26
6 changed files with 30 additions and 22 deletions

View File

@@ -17,7 +17,7 @@ import { AutomaticProportionsPage } from './components/onboarding/pages/body-pro
import { ManualProportionsPage } from './components/onboarding/pages/body-proportions/ManualProportions';
import { ConnectTrackersPage } from './components/onboarding/pages/ConnectTracker';
import { HomePage } from './components/onboarding/pages/Home';
import { ErrorCollectingConsentPage } from './components/onboarding/pages/ErrorCollectingConstent'
import { ErrorCollectingConsentPage } from './components/onboarding/pages/ErrorCollectingConstent';
import { AutomaticMountingPage } from './components/onboarding/pages/mounting/AutomaticMounting';
import { ManualMountingPage } from './components/onboarding/pages/mounting/ManualMounting';
import { TrackersAssignPage } from './components/onboarding/pages/trackers-assign/TrackerAssignment';
@@ -150,7 +150,10 @@ function Layout() {
}
>
<Route path="home" element={<HomePage />} />
<Route path="error-collecting-consent" element={<ErrorCollectingConsentPage />} />
<Route
path="error-collecting-consent"
element={<ErrorCollectingConsentPage />}
/>
<Route path="wifi-creds" element={<WifiCredsPage />} />
<Route path="connect-trackers" element={<ConnectTrackersPage />} />
<Route path="trackers-assign" element={<TrackersAssignPage />} />

View File

@@ -4,7 +4,7 @@ import { Outlet, useLocation, useNavigate } from 'react-router-dom';
export function AppLayout() {
const { config } = useConfig();
const { pathname } = useLocation()
const { pathname } = useLocation();
const navigate = useNavigate();
useLayoutEffect(() => {
@@ -29,7 +29,11 @@ export function AppLayout() {
}, [config]);
useLayoutEffect(() => {
if (config && !config.doneOnboarding && !pathname.startsWith('/onboarding/')) {
if (
config &&
!config.doneOnboarding &&
!pathname.startsWith('/onboarding/')
) {
navigate('/onboarding/home');
}
}, [config]);

View File

@@ -22,8 +22,6 @@ import { GearIcon } from './commons/icon/GearIcon';
import { TrackersStillOnModal } from './TrackersStillOnModal';
import { useConfig } from '@/hooks/config';
import { TrayOrExitModal } from './TrayOrExitModal';
import { ErrorConsentModal } from './ErrorConsentModal';
import { UdevRulesModal } from './onboarding/UdevRulesModal';
import { useAtomValue } from 'jotai';
import { connectedIMUTrackersAtom } from '@/store/app-store';
import { useElectron } from '@/hooks/electron';
@@ -137,7 +135,6 @@ export function TopBar({
}
);
return (
<>
<div className="flex gap-0 flex-col">

View File

@@ -7,7 +7,6 @@ import { useElectron } from '@/hooks/electron';
import { useWebsocketAPI } from '@/hooks/websocket-api';
import { RpcMessage, InstalledInfoResponseT } from 'solarxr-protocol';
import { useConfig } from '@/hooks/config';
import { error } from '@/utils/logging';
export function UdevRulesModal() {
const { config, setConfig } = useConfig();
@@ -20,18 +19,19 @@ export function UdevRulesModal() {
const [dontShowAgain, setDontShowAgain] = useState(false);
const [exeDir, setExeDir] = useState('');
const handleUdevContent = async () => {
if (electron.isElectron) {
const dir = await electron.api.getInstallDir()
const dir = await electron.api.getInstallDir();
setExeDir(dir);
const rulesDir = `${exeDir}/69-slimevr-devices.rules`;
setUdevContent(`cat ${rulesDir} | sudo tee /etc/udev/rules.d/69-slimevr-devices.rules pn>/dev/null`);
setUdevContent(
`cat ${rulesDir} | sudo tee /etc/udev/rules.d/69-slimevr-devices.rules pn>/dev/null`
);
}
}
};
useEffect(() => {
handleUdevContent()
handleUdevContent();
}, [exeDir]);
useEffect(() => {
@@ -41,7 +41,8 @@ export function UdevRulesModal() {
const udevMissing = !isUdevInstalledResponse;
const notHiddenGlobally = !config.dontShowUdevModal;
const notHiddenThisSession = !dontShowThisSession;
const shouldShow = isLinux && udevMissing && notHiddenGlobally && notHiddenThisSession;
const shouldShow =
isLinux && udevMissing && notHiddenGlobally && notHiddenThisSession;
if (shouldShow) {
setShowUdevWarning(true);
} else {
@@ -66,26 +67,30 @@ export function UdevRulesModal() {
const handleModalCose = () => {
if (!config) throw 'Invalid State!';
setConfig({dontShowUdevModal: dontShowAgain});
setConfig({ dontShowUdevModal: dontShowAgain });
setDontShowThisSession(true);
}
};
const copyToClipboard = () => {
navigator.clipboard.writeText(udevContent);
};
return (
<BaseModal isOpen={showUdevWarning} appendClasses={'w-full max-w-2xl'}>
<div className="flex w-full h-full flex-col gap-4">
<div className="flex flex-col gap-3">
<div className="flex flex-col gap-2">
<Typography variant="main-title" id="install-info_udev-rules_modal_title"/>
<Typography id="install-info_udev-rules_warning"/>
<Typography
variant="main-title"
id="install-info_udev-rules_modal_title"
/>
<Typography id="install-info_udev-rules_warning" />
</div>
<div className="relative w-full max-w-2xl">
<div className="absolute right-2 top-2">
<Button variant="secondary" onClick={copyToClipboard}>Copy</Button>
<Button variant="secondary" onClick={copyToClipboard}>
Copy
</Button>
</div>
<div className="bg-background-80 rounded-lg overflow-auto p-2 w-full h-[300px]">
<pre className="text-wrap">{udevContent}</pre>

View File

@@ -29,7 +29,6 @@ export function ErrorCollectingConsentPage() {
>
<Typography variant="standard" whitespace="whitespace-pre-line" />
</Localized>
</div>
<div className={'flex flex-row gap-2 justify-between'}>
<Button

View File

@@ -14,7 +14,7 @@ export function getSentryOrCompute(enabled = false, uuid: string) {
// if sentry is already initialized - SKIP
if (enabled && Sentry.isInitialized()) {
log('Sentry already enabled, skipping initialization')
log('Sentry already enabled, skipping initialization');
return;
}