fix(settings): unknown drift state when Infisical unavailable + RTL drawer

- DriftBadge shows 'Unknown' (not 'Synced') when infisical_available=false
- Plumb infisicalAvailable from EnvironmentTab through EnvVarRow → DriftBadge
- Add dir='rtl' to ToolDetailDrawer SheetContent for Hebrew descriptions
This commit is contained in:
2026-05-04 07:01:42 +00:00
parent 89ce6c79d7
commit 1cb832473c
4 changed files with 26 additions and 4 deletions

View File

@@ -1,9 +1,27 @@
"use client"; "use client";
import { AlertTriangle, CheckCircle2 } from "lucide-react"; import { AlertTriangle, CheckCircle2, HelpCircle } from "lucide-react";
import { Badge } from "@/components/ui/badge"; import { Badge } from "@/components/ui/badge";
export function DriftBadge({ drift }: { drift: boolean }) { type Props = {
drift: boolean;
// When false, Infisical was unreachable: drift state is unknown, not "synced".
infisicalAvailable?: boolean;
};
export function DriftBadge({ drift, infisicalAvailable = true }: Props) {
if (!infisicalAvailable) {
return (
<Badge
variant="outline"
className="text-ink-muted border-rule gap-1"
title="Infisical לא זמין — מצב ה-drift לא ידוע"
>
<HelpCircle className="w-3 h-3" />
Unknown
</Badge>
);
}
if (drift) { if (drift) {
return ( return (
<Badge variant="outline" className="text-warn border-warn/40 gap-1"> <Badge variant="outline" className="text-warn border-warn/40 gap-1">

View File

@@ -14,6 +14,7 @@ type Props = {
spec: McpEnvVar; spec: McpEnvVar;
infisicalProjectId: string; infisicalProjectId: string;
infisicalEnv: string; infisicalEnv: string;
infisicalAvailable: boolean;
onPendingRedeploy: () => void; onPendingRedeploy: () => void;
}; };
@@ -21,6 +22,7 @@ export function EnvVarRow({
spec, spec,
infisicalProjectId, infisicalProjectId,
infisicalEnv, infisicalEnv,
infisicalAvailable,
onPendingRedeploy, onPendingRedeploy,
}: Props) { }: Props) {
const [draft, setDraft] = useState<string>(spec.infisical_value ?? ""); const [draft, setDraft] = useState<string>(spec.infisical_value ?? "");
@@ -60,7 +62,7 @@ export function EnvVarRow({
secret secret
</Badge> </Badge>
)} )}
<DriftBadge drift={spec.drift} /> <DriftBadge drift={spec.drift} infisicalAvailable={infisicalAvailable} />
</div> </div>
<p className="text-sm text-ink-muted mt-1">{spec.description}</p> <p className="text-sm text-ink-muted mt-1">{spec.description}</p>
</div> </div>

View File

@@ -67,6 +67,7 @@ export function EnvironmentTab() {
} }
if (!data) return null; if (!data) return null;
const infisicalAvailable = data.errors.length === 0;
const driftCount = data.vars.filter((v) => v.drift).length; const driftCount = data.vars.filter((v) => v.drift).length;
return ( return (
@@ -122,6 +123,7 @@ export function EnvironmentTab() {
spec={v} spec={v}
infisicalProjectId={data.infisical_project_id} infisicalProjectId={data.infisical_project_id}
infisicalEnv={data.infisical_environment} infisicalEnv={data.infisical_environment}
infisicalAvailable={infisicalAvailable}
onPendingRedeploy={() => setPendingRedeploy(true)} onPendingRedeploy={() => setPendingRedeploy(true)}
/> />
))} ))}

View File

@@ -19,7 +19,7 @@ type Props = {
export function ToolDetailDrawer({ tool, open, onOpenChange }: Props) { export function ToolDetailDrawer({ tool, open, onOpenChange }: Props) {
return ( return (
<Sheet open={open} onOpenChange={onOpenChange}> <Sheet open={open} onOpenChange={onOpenChange}>
<SheetContent side="left" className="sm:max-w-xl overflow-y-auto"> <SheetContent dir="rtl" side="left" className="sm:max-w-xl overflow-y-auto">
{tool && ( {tool && (
<> <>
<SheetHeader> <SheetHeader>