refactor(mobile): moved logout to the tab bar

This commit is contained in:
2026-05-27 20:56:35 -05:00
parent c15ee070e7
commit bcdf9566bc

View File

@@ -1,12 +1,14 @@
import { Redirect, Tabs } from "expo-router";
import { Redirect, Tabs, useRouter } from "expo-router";
import {
Boxes,
Container,
Home,
LogOut,
Logs,
Rows4,
Settings,
} from "lucide-react-native";
import { Alert } from "react-native";
import { useAppStore } from "../../hooks/useAppStore";
import { useMobileAuthStore } from "../../hooks/useMobileAuth";
@@ -20,6 +22,8 @@ export default function TabsLayout() {
const serverPort = useAppStore((s) => s.serverPort);
const user = useMobileAuthStore((s) => s.user);
const isUnlocked = useMobileAuthStore((s) => s.isUnlocked);
const logoutScanner = useMobileAuthStore((s) => s.logout);
const router = useRouter();
const port = parseInt(serverPort || "0", 10) >= 50000;
@@ -36,6 +40,32 @@ export default function TabsLayout() {
return role ? allowed.includes(role) : false;
};
const logout = async () => {
try {
// optional confirm
Alert.alert("Logout", "Are you sure?", [
{ text: "Cancel", style: "cancel" },
{
text: "Logout",
style: "destructive",
onPress: async () => {
// clear auth/session
logoutScanner();
router.replace("/(tabs)/scanner");
// clear zustand/session stuff
//useAuthStore.getState().reset();
// maybe clear async storage too
// await AsyncStorage.clear();
},
},
]);
} catch (err) {
console.error(err);
}
};
return (
<Tabs
screenOptions={{
@@ -62,10 +92,10 @@ export default function TabsLayout() {
name="ppoo"
options={{
title: "PPOO",
href:
isNormalScanner || !hasRole(["admin", "manager"])
? null
: "/(tabs)/ppoo",
// href:
// isNormalScanner || !hasRole(["admin", "manager"])
// ? null
// : "/(tabs)/ppoo",
tabBarIcon: ({ color, size }) => <Boxes size={size} color={color} />,
}}
/>
@@ -73,10 +103,10 @@ export default function TabsLayout() {
name="laneCheck"
options={{
title: "Lane Check",
href:
isNormalScanner || !hasRole(["admin", "manager"])
? null
: "/(tabs)/laneCheck",
// href:
// isNormalScanner || !hasRole(["admin", "manager"])
// ? null
// : "/(tabs)/laneCheck",
tabBarIcon: ({ color, size }) => <Rows4 size={size} color={color} />,
}}
/>
@@ -112,6 +142,7 @@ export default function TabsLayout() {
parseInt(serverPort || "0", 10) >= 50000 ? null : "/(tabs)/logs",
}}
/> */}
<Tabs.Screen
name="config"
options={{
@@ -121,6 +152,22 @@ export default function TabsLayout() {
),
}}
/>
<Tabs.Screen
name="logout"
options={{
title: "Logout",
tabBarIcon: ({ color, size }) => <LogOut color={color} size={size} />,
}}
listeners={{
tabPress: (e) => {
// stop navigation
e.preventDefault();
// run logout logic
logout();
},
}}
/>
</Tabs>
);
}