refactor(scanner): finished login stuff for current routes

This commit is contained in:
2026-05-06 12:09:47 -05:00
parent a38e2e0339
commit 12412536d1
9 changed files with 91 additions and 46 deletions

View File

@@ -2,6 +2,7 @@ import axios from "axios";
import Constants from "expo-constants";
import { useEffect, useRef, useState } from "react";
import { devDelay } from "../lib/devMode";
import { versionCheck } from "../lib/versionValidation";
import { useAppStore } from "./useAppStore";
import { useServerStore } from "./useServerCheck";
@@ -24,7 +25,6 @@ export function useAppStartup() {
const hasHydrated = useAppStore((s) => s.hasHydrated);
const serverPort = useAppStore((s) => s.serverPort);
const serverIp = useAppStore((s) => s.serverIp);
const setServerVersion = useServerStore((s) => s.setServerVersion);
useEffect(() => {
if (!hasHydrated) {
@@ -62,29 +62,7 @@ export function useAppStartup() {
return;
}
const port =
parseInt(serverPort || "0", 10) >= 50000 ? "3000" : serverPort;
try {
const res = await axios.get(
`http://${serverIp}:${port}/lst/api/mobile/version`,
{ timeout: 5000 },
);
if (res.status === 200) {
setServerVersion(res.data);
}
const build = Constants.expoConfig?.android?.versionCode ?? 1;
if (build < res.data.minSupportedVersionCode) {
setStartupRoute("/updateScreen");
setReady(true);
return;
}
} catch (error) {
console.log("Version check error:", error);
}
await versionCheck();
setStatus("scannerMode");
await devDelay(1500);
@@ -123,7 +101,7 @@ export function useAppStartup() {
return () => {
cancelled = true;
};
}, [hasHydrated, serverIp, serverPort, setServerVersion]);
}, [hasHydrated, serverIp, serverPort]);
return {
ready,

View File

@@ -1,5 +1,7 @@
import { create } from "zustand";
const ONE_HOUR = 1000 * 60 * 60;
type MobileUser = {
id: string;
name: string;
@@ -11,19 +13,40 @@ type MobileUser = {
type AuthState = {
user: MobileUser | null;
isUnlocked: boolean;
lastScanAt: number | null;
setUser: (user: MobileUser) => void;
updateLastScan: () => void;
lock: () => void;
logout: () => void;
shouldLockForIdle: () => boolean;
};
export const useMobileAuthStore = create<AuthState>((set) => ({
export const useMobileAuthStore = create<AuthState>((set, get) => ({
user: null,
isUnlocked: false,
lastScanAt: null,
setUser: (user) => set({ user, isUnlocked: true }),
setUser: (user) =>
set({
user,
isUnlocked: true,
lastScanAt: Date.now(),
}),
updateLastScan: () => set({ lastScanAt: Date.now() }),
lock: () => set({ isUnlocked: false }),
logout: () => set({ user: null, isUnlocked: false }),
logout: () =>
set({
user: null,
isUnlocked: false,
lastScanAt: null,
}),
shouldLockForIdle: () => {
const lastScanAt = get().lastScanAt;
if (!lastScanAt) return true;
return Date.now() - lastScanAt > ONE_HOUR;
},
}));