SessionIndicator.jsx 1010 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. "use client";
  2. import React from "react";
  3. import { Loader2 } from "lucide-react";
  4. import { useAuth } from "@/components/auth/authContext";
  5. import { useDebouncedVisibility } from "@/lib/frontend/hooks/useDebouncedVisibility";
  6. import {
  7. SESSION_INDICATOR_DELAY_MS,
  8. SESSION_INDICATOR_MIN_VISIBLE_MS,
  9. } from "@/lib/frontend/ui/uxTimings";
  10. export default function SessionIndicator() {
  11. const { status, isValidating } = useAuth();
  12. const isActive = status === "loading" || Boolean(isValidating);
  13. const visible = useDebouncedVisibility(isActive, {
  14. delayMs: SESSION_INDICATOR_DELAY_MS,
  15. minVisibleMs: SESSION_INDICATOR_MIN_VISIBLE_MS,
  16. });
  17. if (!visible) return null;
  18. return (
  19. <div
  20. className="flex items-center gap-2"
  21. aria-live="polite"
  22. title="Sitzung wird geprüft"
  23. >
  24. <Loader2
  25. className="h-4 w-4 animate-spin text-muted-foreground"
  26. aria-hidden="true"
  27. />
  28. <span className="hidden text-xs text-muted-foreground md:inline">
  29. Sitzung wird geprüft…
  30. </span>
  31. </div>
  32. );
  33. }