+
+
+
+
+ |
+ {t("accessMemberCol")}
+ |
+ {tenants.map((tn) => (
+
+ {tn.displayName}
+ |
+ ))}
+
+
+
+ {(members ?? []).map((m) => (
+
+ |
+
+ {m.displayName || m.email}
+
+
+ {m.email}
+
+ |
+ {tenants.map((tn) => {
+ const owner = isOwner(m);
+ const has = owner || assignments[tn.name]?.has(m.userId);
+ const label = owner
+ ? t("accessOwnerAll")
+ : has
+ ? t("accessHasLabel")
+ : t("accessHasNotLabel");
+ return (
+
+ {label}
+ {owner ? (
+
+ ●
+
+ ) : has ? (
+
+ ✓
+
+ ) : (
+
+ –
+
+ )}
+ |
+ );
+ })}
+
+ ))}
+
+
+
+
+
+ ● {t("accessOwnerAll")}
+
+
+ ✓{" "}
+ {t("accessHasLabel")}
+
+
+ – {t("accessHasNotLabel")}
+
+
+
+ );
+}
diff --git a/src/messages/de.json b/src/messages/de.json
index fc09704..86cb207 100644
--- a/src/messages/de.json
+++ b/src/messages/de.json
@@ -147,7 +147,11 @@
"connectCta": "Assistenten verbinden",
"packagesIncompleteHint": "Bitte ergänzen Sie die erforderlichen Angaben für: {packages}",
"setupProgress": "Einrichtungsfortschritt",
- "setupStepsComplete": "{done} von {total} Schritten"
+ "setupStepsComplete": "{done} von {total} Schritten",
+ "costSummaryHeading": "Was Sie bezahlen",
+ "costSetupLabel": "Einmalige Einrichtung",
+ "costMonthlyLabel": "Monatlich, pro Assistent",
+ "costUsageNote": "Zuzüglich nutzungsabhängiger KI-Kosten, monatlich in CHF abgerechnet. Sie können jederzeit ein Ausgabenlimit pro Assistent festlegen."
},
"dashboard": {
"title": "Dashboard",
@@ -479,7 +483,15 @@
"roleUpdateFailed": "Rolle konnte nicht aktualisiert werden.",
"cancel": "Abbrechen",
"save": "Speichern",
- "selfChangeBlocked": "Sie können Ihre eigene Rolle nicht ändern."
+ "selfChangeBlocked": "Sie können Ihre eigene Rolle nicht ändern.",
+ "accessTitle": "Zugriffsübersicht",
+ "accessDescription": "Welches Mitglied auf welchen Assistenten zugreifen kann.",
+ "accessMemberCol": "Mitglied",
+ "accessOwnerAll": "Alle Assistenten (Eigentümer)",
+ "accessHasLabel": "Zugriff",
+ "accessHasNotLabel": "Kein Zugriff",
+ "accessNoTenants": "Noch keine Assistenten.",
+ "accessLoadFailed": "Zugriffsübersicht konnte nicht geladen werden."
},
"assignments": {
"loading": "Zuweisungen werden geladen…",
diff --git a/src/messages/en.json b/src/messages/en.json
index 7f3b549..3f9a20c 100644
--- a/src/messages/en.json
+++ b/src/messages/en.json
@@ -147,7 +147,11 @@
"connectCta": "Connect your assistant",
"packagesIncompleteHint": "Add the required details for: {packages}",
"setupProgress": "Setup progress",
- "setupStepsComplete": "{done} of {total} steps"
+ "setupStepsComplete": "{done} of {total} steps",
+ "costSummaryHeading": "What you'll pay",
+ "costSetupLabel": "One-time setup",
+ "costMonthlyLabel": "Monthly, per assistant",
+ "costUsageNote": "Plus usage-based AI costs, billed monthly in CHF. You can set a spending cap per assistant at any time."
},
"dashboard": {
"title": "Dashboard",
@@ -479,7 +483,15 @@
"roleUpdateFailed": "Could not update role.",
"cancel": "Cancel",
"save": "Save",
- "selfChangeBlocked": "You cannot change your own role."
+ "selfChangeBlocked": "You cannot change your own role.",
+ "accessTitle": "Access overview",
+ "accessDescription": "Which member can reach which assistant.",
+ "accessMemberCol": "Member",
+ "accessOwnerAll": "All assistants (owner)",
+ "accessHasLabel": "Has access",
+ "accessHasNotLabel": "No access",
+ "accessNoTenants": "No assistants yet.",
+ "accessLoadFailed": "Couldn't load the access overview."
},
"assignments": {
"loading": "Loading assignments…",
diff --git a/src/messages/fr.json b/src/messages/fr.json
index f11a0cf..32c40c3 100644
--- a/src/messages/fr.json
+++ b/src/messages/fr.json
@@ -147,7 +147,11 @@
"connectCta": "Connecter votre assistant",
"packagesIncompleteHint": "Complétez les informations requises pour : {packages}",
"setupProgress": "Progression de la configuration",
- "setupStepsComplete": "{done} sur {total} étapes"
+ "setupStepsComplete": "{done} sur {total} étapes",
+ "costSummaryHeading": "Ce que vous paierez",
+ "costSetupLabel": "Installation unique",
+ "costMonthlyLabel": "Mensuel, par assistant",
+ "costUsageNote": "Plus les coûts d'IA à l'usage, facturés mensuellement en CHF. Vous pouvez définir un plafond de dépenses par assistant à tout moment."
},
"dashboard": {
"title": "Tableau de bord",
@@ -479,7 +483,15 @@
"roleUpdateFailed": "Impossible de mettre à jour le rôle.",
"cancel": "Annuler",
"save": "Enregistrer",
- "selfChangeBlocked": "Vous ne pouvez pas modifier votre propre rôle."
+ "selfChangeBlocked": "Vous ne pouvez pas modifier votre propre rôle.",
+ "accessTitle": "Aperçu des accès",
+ "accessDescription": "Quel membre peut accéder à quel assistant.",
+ "accessMemberCol": "Membre",
+ "accessOwnerAll": "Tous les assistants (propriétaire)",
+ "accessHasLabel": "Accès",
+ "accessHasNotLabel": "Aucun accès",
+ "accessNoTenants": "Aucun assistant pour l'instant.",
+ "accessLoadFailed": "Impossible de charger l'aperçu des accès."
},
"assignments": {
"loading": "Chargement des attributions…",
diff --git a/src/messages/it.json b/src/messages/it.json
index 2c4ad05..80bb215 100644
--- a/src/messages/it.json
+++ b/src/messages/it.json
@@ -147,7 +147,11 @@
"connectCta": "Collega il tuo assistente",
"packagesIncompleteHint": "Completa i dettagli richiesti per: {packages}",
"setupProgress": "Avanzamento configurazione",
- "setupStepsComplete": "{done} di {total} passaggi"
+ "setupStepsComplete": "{done} di {total} passaggi",
+ "costSummaryHeading": "Quanto pagherai",
+ "costSetupLabel": "Attivazione una tantum",
+ "costMonthlyLabel": "Mensile, per assistente",
+ "costUsageNote": "Più i costi dell'IA in base all'utilizzo, fatturati mensilmente in CHF. Puoi impostare un limite di spesa per assistente in qualsiasi momento."
},
"dashboard": {
"title": "Dashboard",
@@ -479,7 +483,15 @@
"roleUpdateFailed": "Impossibile aggiornare il ruolo.",
"cancel": "Annulli",
"save": "Salvi",
- "selfChangeBlocked": "Non può modificare il suo ruolo."
+ "selfChangeBlocked": "Non può modificare il suo ruolo.",
+ "accessTitle": "Panoramica accessi",
+ "accessDescription": "Quale membro può accedere a quale assistente.",
+ "accessMemberCol": "Membro",
+ "accessOwnerAll": "Tutti gli assistenti (proprietario)",
+ "accessHasLabel": "Accesso",
+ "accessHasNotLabel": "Nessun accesso",
+ "accessNoTenants": "Ancora nessun assistente.",
+ "accessLoadFailed": "Impossibile caricare la panoramica degli accessi."
},
"assignments": {
"loading": "Caricamento assegnazioni…",