+ {validation.targetUsername && (
+
+ Eingeladen:
+ {validation.targetUsername}
+
+ )}
{validation.mandateName && (
Mandant:
@@ -229,7 +253,11 @@ export const InvitePage: React.FC = () => {
-
Bitte melden Sie sich an oder erstellen Sie ein Konto, um die Einladung anzunehmen.
+
+ {validation.targetUsername
+ ? `Bitte melden Sie sich als "${validation.targetUsername}" an, um die Einladung anzunehmen.`
+ : 'Bitte melden Sie sich an, um die Einladung anzunehmen.'}
+
{error && (
diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx
index bc44f83..9756d96 100644
--- a/src/pages/Login.tsx
+++ b/src/pages/Login.tsx
@@ -21,7 +21,7 @@ function Login() {
const { loginWithGoogle, error: googleError, isLoading: isGoogleLoading } = useGoogleAuth();
// Check for pending invitation
- const pendingInvitationToken = sessionStorage.getItem(PENDING_INVITATION_KEY);
+ const pendingInvitationToken = localStorage.getItem(PENDING_INVITATION_KEY);
const hasPendingInvitation = !!pendingInvitationToken;
// Get the page the user was trying to visit
diff --git a/src/pages/Register.tsx b/src/pages/Register.tsx
index 5b40aca..2602d10 100644
--- a/src/pages/Register.tsx
+++ b/src/pages/Register.tsx
@@ -32,7 +32,7 @@ function Register() {
const [usernameHighlight, setUsernameHighlight] = useState(false);
// Check for pending invitation
- const pendingInvitationToken = sessionStorage.getItem(PENDING_INVITATION_KEY);
+ const pendingInvitationToken = localStorage.getItem(PENDING_INVITATION_KEY);
const hasPendingInvitation = !!pendingInvitationToken;
// Set page title and generate CSRF token
diff --git a/src/pages/admin/AdminInvitationsPage.tsx b/src/pages/admin/AdminInvitationsPage.tsx
index 06d8887..ae013e0 100644
--- a/src/pages/admin/AdminInvitationsPage.tsx
+++ b/src/pages/admin/AdminInvitationsPage.tsx
@@ -79,15 +79,31 @@ export const AdminInvitationsPage: React.FC = () => {
// Table columns
const columns = useMemo(() => [
+ {
+ key: 'targetUsername',
+ label: 'Benutzername',
+ type: 'string' as const,
+ sortable: true,
+ filterable: true,
+ searchable: true,
+ width: 150,
+ },
{
key: 'email',
label: 'E-Mail',
type: 'string' as const,
sortable: true,
filterable: true,
- searchable: true,
- width: 200,
- render: (value: string) => value || '(beliebig)'
+ width: 180,
+ render: (value: string, row: Invitation) => {
+ const emailText = value || '-';
+ const emailSent = (row as any).emailSent;
+ return (
+
+ {emailText} {emailSent && '✓'}
+
+ );
+ }
},
{
key: 'roleIds',
@@ -413,7 +429,7 @@ export const AdminInvitationsPage: React.FC = () => {
- Teilen Sie diesen Link mit dem eingeladenen Benutzer:
+ Einladung für Benutzer {showUrlModal.targetUsername} :
{
{copySuccess ? ' Kopiert!' : ' Kopieren'}
+
+ Dieser Link kann nur von Benutzer {showUrlModal.targetUsername} verwendet werden.
+
{showUrlModal.email && (
-
- Dieser Link kann nur von {showUrlModal.email} verwendet werden.
+
+ {showUrlModal.emailSent
+ ? `✓ Email wurde an ${showUrlModal.email} gesendet`
+ : `Email-Adresse: ${showUrlModal.email} (nicht gesendet)`}
)}