Show reconnect when access-review connectors need new OAuth scopes

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
This commit is contained in:
Sacha Al Himdani
2026-07-29 15:55:07 +02:00
parent 51a748c625
commit 573549fcec
8 changed files with 166 additions and 3 deletions

View File

@@ -1534,7 +1534,7 @@
"errors": { "delete": "Failed to delete access source", "configure": "Failed to configure source" },
"messages": { "error": "Error", "success": "Success", "organizationUpdated": "Organization updated." },
"deleteConfirmation": "This will permanently delete \"{{name}}\". This action cannot be undone.",
"status": { "connected": "Connected", "disconnected": "Disconnected", "invalidCredentials": "Invalid credentials" },
"status": { "connected": "Connected", "disconnected": "Disconnected", "invalidCredentials": "Invalid credentials", "reconnectRequired": "Reconnect required" },
"actions": { "reconnect": "Reconnect", "delete": "Delete" },
"loading": "Loading...",
"selectOrganization": "Select organization",

View File

@@ -2957,7 +2957,8 @@
"status": {
"connected": "Connecté",
"disconnected": "Déconnecté",
"invalidCredentials": "Identifiants invalides"
"invalidCredentials": "Identifiants invalides",
"reconnectRequired": "Reconnexion requise"
},
"actions": {
"reconnect": "Reconnecter",

View File

@@ -243,6 +243,10 @@ export function AccessReviewSourceRow({ fKey, connectionId, organizationId }: Pr
const showOrgSelector = accessSource.needsConfiguration || accessSource.selectedOrganization;
const canReconnect = (accessSource.connector?.oauth2Scopes.length ?? 0) > 0;
const showReconnect
= canReconnect
&& (accessSource.connectionStatus === "DISCONNECTED"
|| accessSource.connectionStatus === "RECONNECT_REQUIRED");
return (
<Tr>
@@ -258,6 +262,18 @@ export function AccessReviewSourceRow({ fKey, connectionId, organizationId }: Pr
{t("accessReviewSourceRow.status.connected")}
</Badge>
)}
{accessSource.connectionStatus === "RECONNECT_REQUIRED" && (
<div className="flex items-center gap-2">
<Badge variant="warning" size="sm">
{t("accessReviewSourceRow.status.reconnectRequired")}
</Badge>
{showReconnect && (
<Button variant="secondary" onClick={handleReconnect}>
{t("accessReviewSourceRow.actions.reconnect")}
</Button>
)}
</div>
)}
{accessSource.connectionStatus === "DISCONNECTED" && (
<div className="flex items-center gap-2">
<Badge variant="danger" size="sm">
@@ -265,7 +281,7 @@ export function AccessReviewSourceRow({ fKey, connectionId, organizationId }: Pr
? t("accessReviewSourceRow.status.disconnected")
: t("accessReviewSourceRow.status.invalidCredentials")}
</Badge>
{canReconnect && (
{showReconnect && (
<Button variant="secondary" onClick={handleReconnect}>
{t("accessReviewSourceRow.actions.reconnect")}
</Button>