feat(mobile): auth added in
Some checks failed
Build and Push LST Docker Image / docker (push) Has been cancelled

This commit is contained in:
2026-05-06 05:07:16 -05:00
parent 2ad78e22f1
commit ba30281e59
23 changed files with 4875 additions and 176 deletions

View File

@@ -1,9 +1,32 @@
import { Tabs } from "expo-router";
import { Home, Settings } from "lucide-react-native";
import { Redirect, Tabs } from "expo-router";
import { Container, Home, Logs, Rows4, Settings } from "lucide-react-native";
import { useAppStore } from "../../hooks/useAppStore";
import { useMobileAuthStore } from "../../hooks/useMobileAuth";
// const roles = {
// adminOnly: ["admin"],
// management: ["admin", "manager"],
// allStaff: ["admin", "manager", "driver", "lead", "user"],
// };
export default function TabsLayout() {
const serverPort = useAppStore((s) => s.serverPort);
const user = useMobileAuthStore((s) => s.user);
const isUnlocked = useMobileAuthStore((s) => s.isUnlocked);
const port = parseInt(serverPort || "0", 10) >= 50000;
if (!user || (!isUnlocked && !port)) {
return <Redirect href="/login" />;
}
const isNormalScanner = parseInt(serverPort || "0", 10) >= 50000;
const hasRole = (allowed: string[] = []) => {
const role = user?.role?.toLowerCase();
return role ? allowed.includes(role) : false;
};
return (
<Tabs
screenOptions={{
@@ -27,11 +50,24 @@ export default function TabsLayout() {
}}
/>
<Tabs.Screen
name="config"
name="laneCheck"
options={{
title: "settings",
title: "Lane Check",
href: isNormalScanner ? null : "/(tabs)/laneCheck",
tabBarIcon: ({ color, size }) => <Rows4 size={size} color={color} />,
}}
/>
<Tabs.Screen
name="dockScan"
options={{
title: "Dock scan",
href:
isNormalScanner || !hasRole(["admin", "manager"])
? null
: "/(tabs)/dockScan",
tabBarIcon: ({ color, size }) => (
<Settings size={size} color={color} />
<Container size={size} color={color} />
),
}}
/>
@@ -40,7 +76,10 @@ export default function TabsLayout() {
options={{
title: "Logs",
href:
parseInt(serverPort || "0", 10) >= 50000 ? null : "/(tabs)/logs",
isNormalScanner || !hasRole(["admin", "manager"])
? null
: "/(tabs)/logs",
tabBarIcon: ({ color, size }) => <Logs size={size} color={color} />,
}}
/>
{/* <Tabs.Screen
@@ -51,6 +90,15 @@ export default function TabsLayout() {
parseInt(serverPort || "0", 10) >= 50000 ? null : "/(tabs)/logs",
}}
/> */}
<Tabs.Screen
name="config"
options={{
title: "settings",
tabBarIcon: ({ color, size }) => (
<Settings size={size} color={color} />
),
}}
/>
</Tabs>
);
}