feat: turbostarter boilerplate
Production-ready Next.js boilerplate with: - Runtime env validation (fail-fast on missing vars) - Feature-gated config (S3, Stripe, email, OAuth) - Docker + Coolify deployment pipeline - PostgreSQL + pgvector, MinIO S3, Better Auth - TypeScript strict mode (no ignoreBuildErrors) - i18n (en/es), AI modules, billing, monitoring Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
53
apps/mobile/src/modules/user/settings/account/logout.tsx
Normal file
53
apps/mobile/src/modules/user/settings/account/logout.tsx
Normal file
@@ -0,0 +1,53 @@
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
import { router } from "expo-router";
|
||||
import { Alert } from "react-native";
|
||||
|
||||
import { useTranslation } from "@turbostarter/i18n";
|
||||
import { Icons } from "@turbostarter/ui-mobile/icons";
|
||||
import { Text } from "@turbostarter/ui-mobile/text";
|
||||
|
||||
import { useSetupSteps } from "~/app/(setup)/steps/_layout";
|
||||
import { pathsConfig } from "~/config/paths";
|
||||
import { authClient } from "~/lib/auth";
|
||||
import { auth } from "~/modules/auth/lib/api";
|
||||
import { SettingsTile } from "~/modules/common/settings-tile";
|
||||
import { Spinner } from "~/modules/common/spinner";
|
||||
|
||||
export const Logout = () => {
|
||||
const { t } = useTranslation(["common", "auth"]);
|
||||
const { reset } = useSetupSteps();
|
||||
const { refetch } = authClient.useListOrganizations();
|
||||
|
||||
const signOut = useMutation({
|
||||
...auth.mutations.signOut,
|
||||
onSuccess: async () => {
|
||||
reset();
|
||||
await refetch();
|
||||
router.replace(pathsConfig.index);
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
<SettingsTile
|
||||
icon={Icons.LogOut}
|
||||
onPress={() => {
|
||||
Alert.alert(t("logout.cta"), t("logout.confirm"), [
|
||||
{
|
||||
text: t("cancel"),
|
||||
style: "cancel",
|
||||
},
|
||||
{
|
||||
text: t("logout.cta"),
|
||||
style: "destructive",
|
||||
onPress: () => signOut.mutate(undefined),
|
||||
},
|
||||
]);
|
||||
}}
|
||||
>
|
||||
<Text>{t("logout.cta")}</Text>
|
||||
</SettingsTile>
|
||||
{signOut.isPending && <Spinner />}
|
||||
</>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user