import { Ionicons } from "@expo/vector-icons";
import { useSession, authClient } from "@/src/lib/auth-client";
import { useAuthStore } from "@/src/stores/auth.store";
import { TAB_COLORS } from "@/src/constants/colors";
import { apiRequest } from "@/src/lib/api-client";
import { Redirect, Tabs, useRouter } from "expo-router";
import React, { useEffect } from "react";
import { Alert } from "react-native";
import { queryClient } from "@/src/lib/query-client";
import { useTranslation } from "react-i18next";
function PendingInvitationHandler() {
const router = useRouter();
const pendingInvitationId = useAuthStore((s) => s.pendingInvitationId);
useEffect(() => {
if (!pendingInvitationId) return;
authClient.organization.acceptInvitation({ invitationId: pendingInvitationId })
.then(async (result) => {
useAuthStore.getState().setPendingInvitationId(null);
if (result.error) {
Alert.alert("Fehler", result.error.message ?? "Einladung konnte nicht angenommen werden.");
return;
}
const householdsResponse = await apiRequest<{ households: { id: string; name: string; role: string }[] }>("/api/households");
const newHouseholds = householdsResponse.households;
useAuthStore.getState().setHouseholds(newHouseholds);
if (newHouseholds[0] && !useAuthStore.getState().activeHouseholdId) {
useAuthStore.getState().setActiveHousehold(newHouseholds[0].id);
}
await queryClient.invalidateQueries();
Alert.alert("Einladung angenommen", "Du bist jetzt Mitglied des Haushalts.");
router.replace("/(app)/haushalt");
})
.catch((err: Error) => {
useAuthStore.getState().setPendingInvitationId(null);
Alert.alert("Fehler", err.message ?? "Einladung konnte nicht angenommen werden.");
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pendingInvitationId]);
return null;
}
export default function AppLayout() {
const { data: session, isPending } = useSession();
const households = useAuthStore((s) => s.households);
const { t } = useTranslation();
if (isPending) return null;
if (!session) return ;
if (households.length === 0) return ;
return (
<>
,
}}
/>
,
}}
/>
,
}}
/>
,
}}
/>
,
}}
/>
{/* Hidden — not in tab bar */}
>
);
}