"use client"; import { authClient } from "@/lib/auth-client"; import { useMutation } from "convex/react"; import { api } from "@/convex/_generated/api"; import { useEffect, useRef } from "react"; import { useTranslations } from "next-intl"; import { toast } from "@/lib/toast"; /** * Initialisiert die Credit-Balance für neue User. * Wird einmal im Layout eingebunden und sorgt dafür, * dass jeder eingeloggte User eine Balance + Free-Subscription hat. */ export function InitUser() { const t = useTranslations('toasts'); const { data: session, isPending: isSessionPending } = authClient.useSession(); const initBalance = useMutation(api.credits.initBalance); const initStartedRef = useRef(false); useEffect(() => { if (isSessionPending || !session?.user) { return; } if (initStartedRef.current) return; initStartedRef.current = true; void initBalance() .then((result) => { if (result.created) { toast.success(t('auth.initialSetupTitle'), t('auth.initialSetupDesc')); } }) .catch(() => { initStartedRef.current = false; }); }, [t, initBalance, isSessionPending, session?.user]); return null; }