refactor(scanner): finished login stuff for current routes
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user