diff --git a/webui/src/features/admin/ApiKeysPanel.tsx b/webui/src/features/admin/ApiKeysPanel.tsx index 2b70490..dad1a37 100644 --- a/webui/src/features/admin/ApiKeysPanel.tsx +++ b/webui/src/features/admin/ApiKeysPanel.tsx @@ -1,3 +1,4 @@ +import { DescriptionItem, DescriptionList } from "@govoplan/core-webui"; import { useEffect, useMemo, useRef, useState } from "react"; import { Plus, Search, Trash2 } from "lucide-react"; import type { FormGrid, ApiSettings, AuthInfo } from "@govoplan/core-webui"; @@ -166,12 +167,12 @@ export default function ApiKeysPanel({ settings, auth, canCreate, canRevoke }: { setViewing(null)} className="" footer={}> - {viewing && <>
-
i18n:govoplan-access.name.709a2322
{viewing.name}
i18n:govoplan-access.prefix.90eceb01
{viewing.prefix}…
-
i18n:govoplan-access.owner.89ff3122
{viewing.user_email}
i18n:govoplan-access.status.bae7d5be
{viewing.revoked_at ? "i18n:govoplan-access.revoked.85f17ac0" : "i18n:govoplan-access.active.a733b809"}
-
i18n:govoplan-access.created.accf40c8
{formatDateTime(viewing.created_at)}
i18n:govoplan-access.last_used.f1109d3d
{formatDateTime(viewing.last_used_at)}
-
i18n:govoplan-access.expires.a99be3da
{viewing.expires_at ? formatDateTime(viewing.expires_at) : "i18n:govoplan-access.no_expiry.39d436aa"}
i18n:govoplan-access.revoked.85f17ac0
{formatDateTime(viewing.revoked_at)}
-

i18n:govoplan-access.scopes.c23540e5

{viewing.scopes.map((scope) => {scope})}
} + {viewing && <> + i18n:govoplan-access.name.709a2322}>{viewing.name}i18n:govoplan-access.prefix.90eceb01}>{viewing.prefix}… + i18n:govoplan-access.owner.89ff3122}>{viewing.user_email}i18n:govoplan-access.status.bae7d5be}>{viewing.revoked_at ? "i18n:govoplan-access.revoked.85f17ac0" : "i18n:govoplan-access.active.a733b809"} + i18n:govoplan-access.created.accf40c8}>{formatDateTime(viewing.created_at)}i18n:govoplan-access.last_used.f1109d3d}>{formatDateTime(viewing.last_used_at)} + i18n:govoplan-access.expires.a99be3da}>{viewing.expires_at ? formatDateTime(viewing.expires_at) : "i18n:govoplan-access.no_expiry.39d436aa"}i18n:govoplan-access.revoked.85f17ac0}>{formatDateTime(viewing.revoked_at)} +

i18n:govoplan-access.scopes.c23540e5

{viewing.scopes.map((scope) => {scope})}
}
setSecret(null)} className="" footer={}> diff --git a/webui/src/features/admin/GroupsPanel.tsx b/webui/src/features/admin/GroupsPanel.tsx index 34169d3..049576d 100644 --- a/webui/src/features/admin/GroupsPanel.tsx +++ b/webui/src/features/admin/GroupsPanel.tsx @@ -1,3 +1,4 @@ +import { DescriptionItem, DescriptionList } from "@govoplan/core-webui"; import { useEffect, useMemo, useRef, useState } from "react"; import { Pencil, Plus, Search, Trash2 } from "lucide-react"; import type { FormGrid, ApiSettings, AuthInfo } from "@govoplan/core-webui"; @@ -165,12 +166,12 @@ export default function GroupsPanel({ settings, auth, canDefine, canManageMember setViewing(null)} className="" footer={}> - {viewing &&
-
i18n:govoplan-access.group.171a0606
{viewing.name}
i18n:govoplan-access.slug.094da9b9
{viewing.slug}
-
i18n:govoplan-access.status.bae7d5be
{viewing.is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}
i18n:govoplan-access.management.63cecca6
{viewing.system_template_id ? i18nMessage("i18n:govoplan-access.system_managed_value.eb564eb1", { value0: viewing.system_required ? "i18n:govoplan-access.required.2e5396fd" : "i18n:govoplan-access.available.ce372771" }) : "i18n:govoplan-access.tenant_managed.843eed93"}
-
i18n:govoplan-access.members.1cb449c1
{viewing.member_count}
i18n:govoplan-access.roles.47dcc27d
{joinLabels(viewing.roles)}
-
i18n:govoplan-access.created.accf40c8
{formatDateTime(viewing.created_at)}
i18n:govoplan-access.updated.f2f8570d
{formatDateTime(viewing.updated_at)}
-
} + {viewing && + i18n:govoplan-access.group.171a0606}>{viewing.name}i18n:govoplan-access.slug.094da9b9}>{viewing.slug} + i18n:govoplan-access.status.bae7d5be}>{viewing.is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}i18n:govoplan-access.management.63cecca6}>{viewing.system_template_id ? i18nMessage("i18n:govoplan-access.system_managed_value.eb564eb1", { value0: viewing.system_required ? "i18n:govoplan-access.required.2e5396fd" : "i18n:govoplan-access.available.ce372771" }) : "i18n:govoplan-access.tenant_managed.843eed93"} + i18n:govoplan-access.members.1cb449c1}>{viewing.member_count}i18n:govoplan-access.roles.47dcc27d}>{joinLabels(viewing.roles)} + i18n:govoplan-access.created.accf40c8}>{formatDateTime(viewing.created_at)}i18n:govoplan-access.updated.f2f8570d}>{formatDateTime(viewing.updated_at)} + }
setDeactivating(null)} onConfirm={() => void deactivate()} /> diff --git a/webui/src/features/admin/RolesPanel.tsx b/webui/src/features/admin/RolesPanel.tsx index 1e260a8..388727a 100644 --- a/webui/src/features/admin/RolesPanel.tsx +++ b/webui/src/features/admin/RolesPanel.tsx @@ -1,3 +1,4 @@ +import { DescriptionItem, DescriptionList } from "@govoplan/core-webui"; import { useEffect, useMemo, useRef, useState } from "react"; import { Pencil, Plus, Search, Trash2 } from "lucide-react"; import type { FormGrid, ApiSettings, AuthInfo } from "@govoplan/core-webui"; @@ -152,11 +153,11 @@ export default function RolesPanel({ settings, auth, canDefine, onAuthRefresh }: setViewing(null)} className="" footer={}> - {viewing && <>
-
i18n:govoplan-access.role.c3f104d1
{viewing.name}
i18n:govoplan-access.slug.094da9b9
{viewing.slug}
-
i18n:govoplan-access.type.3deb7456
{viewing.is_builtin ? "i18n:govoplan-access.built_in.20f409cc" : viewing.system_template_id ? i18nMessage("i18n:govoplan-access.system_managed_value.eb564eb1", { value0: viewing.system_required ? "i18n:govoplan-access.required.2e5396fd" : "i18n:govoplan-access.available.ce372771" }) : "i18n:govoplan-access.tenant_custom.4307081e"}
i18n:govoplan-access.assignable.a88debc5
{viewing.is_assignable ? "i18n:govoplan-access.yes.5397e058" : "i18n:govoplan-access.no.816c52fd"}
-
i18n:govoplan-access.user_assignments.bc7cc801
{viewing.user_assignments}
i18n:govoplan-access.group_assignments.e534bb56
{viewing.group_assignments}
-

i18n:govoplan-access.permissions.d06d5557

{viewing.permissions.map((scope) => {scope})}
} + {viewing && <> + i18n:govoplan-access.role.c3f104d1}>{viewing.name}i18n:govoplan-access.slug.094da9b9}>{viewing.slug} + i18n:govoplan-access.type.3deb7456}>{viewing.is_builtin ? "i18n:govoplan-access.built_in.20f409cc" : viewing.system_template_id ? i18nMessage("i18n:govoplan-access.system_managed_value.eb564eb1", { value0: viewing.system_required ? "i18n:govoplan-access.required.2e5396fd" : "i18n:govoplan-access.available.ce372771" }) : "i18n:govoplan-access.tenant_custom.4307081e"}i18n:govoplan-access.assignable.a88debc5}>{viewing.is_assignable ? "i18n:govoplan-access.yes.5397e058" : "i18n:govoplan-access.no.816c52fd"} + i18n:govoplan-access.user_assignments.bc7cc801}>{viewing.user_assignments}i18n:govoplan-access.group_assignments.e534bb56}>{viewing.group_assignments} +

i18n:govoplan-access.permissions.d06d5557

{viewing.permissions.map((scope) => {scope})}
}
setDeleting(null)} onConfirm={() => void remove()} /> diff --git a/webui/src/features/admin/ServiceAccountsPanel.tsx b/webui/src/features/admin/ServiceAccountsPanel.tsx index fc7962d..18cf472 100644 --- a/webui/src/features/admin/ServiceAccountsPanel.tsx +++ b/webui/src/features/admin/ServiceAccountsPanel.tsx @@ -1,3 +1,4 @@ +import { MetricGrid } from "@govoplan/core-webui"; import { useEffect, useMemo, useState } from "react"; import { KeyRound, @@ -480,12 +481,12 @@ export default function ServiceAccountsPanel({ footer={} > {managing && <> -
+ -
+ diff --git a/webui/src/features/admin/SystemRolesPanel.tsx b/webui/src/features/admin/SystemRolesPanel.tsx index f1886af..7862ff7 100644 --- a/webui/src/features/admin/SystemRolesPanel.tsx +++ b/webui/src/features/admin/SystemRolesPanel.tsx @@ -1,3 +1,4 @@ +import { DescriptionItem, DescriptionList } from "@govoplan/core-webui"; import { useEffect, useMemo, useRef, useState } from "react"; import { Pencil, Plus, Search, Trash2 } from "lucide-react"; import type { FormGrid, ApiSettings } from "@govoplan/core-webui"; @@ -273,7 +274,7 @@ export default function SystemRolesPanel({ setViewing(null)} className="" footer={}> - {viewing &&
i18n:govoplan-access.slug.094da9b9
{viewing.slug}
i18n:govoplan-access.protected.28531336
{viewing.slug === "system_owner" ? "i18n:govoplan-access.yes.5397e058" : "i18n:govoplan-access.no.816c52fd"}
i18n:govoplan-access.assignable.a88debc5
{viewing.is_assignable ? "i18n:govoplan-access.yes.5397e058" : "i18n:govoplan-access.no.816c52fd"}
i18n:govoplan-access.account_assignments.f5a91f2a
{viewing.user_assignments}
i18n:govoplan-access.description.55f8ebc8
{viewing.description || "—"}
i18n:govoplan-access.effective_permissions.17c0fe8a
{viewing.effective_permission_count}
i18n:govoplan-access.assigned_scopes.c7b09b12
{viewing.permissions.length ? joinLabels(viewing.permissions.map((name) => ({ name }))) : "—"}
} + {viewing && i18n:govoplan-access.slug.094da9b9}>{viewing.slug}i18n:govoplan-access.protected.28531336}>{viewing.slug === "system_owner" ? "i18n:govoplan-access.yes.5397e058" : "i18n:govoplan-access.no.816c52fd"}i18n:govoplan-access.assignable.a88debc5}>{viewing.is_assignable ? "i18n:govoplan-access.yes.5397e058" : "i18n:govoplan-access.no.816c52fd"}i18n:govoplan-access.account_assignments.f5a91f2a}>{viewing.user_assignments}i18n:govoplan-access.description.55f8ebc8}>{viewing.description || "—"}i18n:govoplan-access.effective_permissions.17c0fe8a}>{viewing.effective_permission_count}i18n:govoplan-access.assigned_scopes.c7b09b12}>{viewing.permissions.length ? joinLabels(viewing.permissions.map((name) => ({ name }))) : "—"}}
setDeleting(null)} onConfirm={() => void remove()} /> diff --git a/webui/src/features/admin/SystemUsersPanel.tsx b/webui/src/features/admin/SystemUsersPanel.tsx index 32ccd9e..481b2a4 100644 --- a/webui/src/features/admin/SystemUsersPanel.tsx +++ b/webui/src/features/admin/SystemUsersPanel.tsx @@ -1,3 +1,4 @@ +import { DescriptionItem, DescriptionList } from "@govoplan/core-webui"; import { useEffect, useMemo, useRef, useState } from "react"; import { Search, Pencil, Plus, Trash2 } from "lucide-react"; import type { FormGrid, ApiSettings } from "@govoplan/core-webui"; @@ -258,7 +259,7 @@ export default function SystemUsersPanel({ setViewing(null)} className="" footer={}> - {viewing &&
i18n:govoplan-access.account.85dfa32c
{viewing.email}
i18n:govoplan-access.display_name.c7874aaa
{viewing.display_name || "—"}
i18n:govoplan-access.status.bae7d5be
{viewing.is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}
i18n:govoplan-access.last_login.43dab84f
{formatDateTime(viewing.last_login_at)}
i18n:govoplan-access.system_roles.a9461aa6
{joinLabels(viewing.roles)}
i18n:govoplan-access.tenants.1f7ae776
{viewing.memberships.map((item) => item.tenant_name).join(", ") || "—"}
} + {viewing && i18n:govoplan-access.account.85dfa32c}>{viewing.email}i18n:govoplan-access.display_name.c7874aaa}>{viewing.display_name || "—"}i18n:govoplan-access.status.bae7d5be}>{viewing.is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}i18n:govoplan-access.last_login.43dab84f}>{formatDateTime(viewing.last_login_at)}i18n:govoplan-access.system_roles.a9461aa6}>{joinLabels(viewing.roles)}i18n:govoplan-access.tenants.1f7ae776}>{viewing.memberships.map((item) => item.tenant_name).join(", ") || "—"}}
setTemporaryPassword(null)} className="" footer={}> diff --git a/webui/src/features/admin/UsersPanel.tsx b/webui/src/features/admin/UsersPanel.tsx index 0a5038a..366d765 100644 --- a/webui/src/features/admin/UsersPanel.tsx +++ b/webui/src/features/admin/UsersPanel.tsx @@ -1,3 +1,4 @@ +import { DescriptionItem, DescriptionList } from "@govoplan/core-webui"; import { useEffect, useMemo, useRef, useState } from "react"; import { KeyRound, Pencil, Plus, Search, Trash2 } from "lucide-react"; import type { FormGrid, ApiSettings, AuthInfo } from "@govoplan/core-webui"; @@ -232,23 +233,23 @@ export default function UsersPanel({ settings, auth, canCreate, canUpdate, canSu setViewing(null)} className="" footer={}> - {viewing &&
-
i18n:govoplan-access.user.9f8a2389
{viewing.display_name || viewing.email}
i18n:govoplan-access.email.84add5b2
{viewing.email}
-
i18n:govoplan-access.membership.53bc9670
{viewing.is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}
i18n:govoplan-access.global_account.e1b00cf5
{viewing.account_is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}
-
i18n:govoplan-access.groups.ae9629f4
{joinLabels(viewing.groups)}
i18n:govoplan-access.direct_roles.c4db7156
{joinLabels(viewing.roles)}
-
i18n:govoplan-access.effective_permissions.17c0fe8a
{hasTenantWildcard(viewing.effective_scopes) ? "i18n:govoplan-access.all_tenant_permissions.cca8b6e4" : viewing.effective_scopes.join(", ") || "i18n:govoplan-access.none.6eef6648"}
i18n:govoplan-access.last_login.43dab84f
{formatDateTime(viewing.last_login_at)}
-
} + {viewing && + i18n:govoplan-access.user.9f8a2389}>{viewing.display_name || viewing.email}i18n:govoplan-access.email.84add5b2}>{viewing.email} + i18n:govoplan-access.membership.53bc9670}>{viewing.is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"}i18n:govoplan-access.global_account.e1b00cf5}>{viewing.account_is_active ? "i18n:govoplan-access.active.a733b809" : "i18n:govoplan-access.inactive.09af574c"} + i18n:govoplan-access.groups.ae9629f4}>{joinLabels(viewing.groups)}i18n:govoplan-access.direct_roles.c4db7156}>{joinLabels(viewing.roles)} + i18n:govoplan-access.effective_permissions.17c0fe8a}>{hasTenantWildcard(viewing.effective_scopes) ? "i18n:govoplan-access.all_tenant_permissions.cca8b6e4" : viewing.effective_scopes.join(", ") || "i18n:govoplan-access.none.6eef6648"}i18n:govoplan-access.last_login.43dab84f}>{formatDateTime(viewing.last_login_at)} + }
{ if (!accessExplanationLoading) { setExplaining(null); setAccessExplanation(null); } }} className="" footer={}> {accessExplanationLoading &&

i18n:govoplan-access.loading_access_explanation.04a7c934

} {accessExplanation && <> -
-
i18n:govoplan-access.user.9f8a2389
{accessExplanation.user.display_name || accessExplanation.user.email}
-
i18n:govoplan-access.account.85dfa32c
{accessExplanation.user.account_id}
-
i18n:govoplan-access.role_sources.6f42a672
{accessExplanation.role_sources.length}
-
i18n:govoplan-access.function_facts.848b32cc
{accessExplanation.function_facts.length}
-
+ + i18n:govoplan-access.user.9f8a2389}>{accessExplanation.user.display_name || accessExplanation.user.email} + i18n:govoplan-access.account.85dfa32c}>{accessExplanation.user.account_id} + i18n:govoplan-access.role_sources.6f42a672}>{accessExplanation.role_sources.length} + i18n:govoplan-access.function_facts.848b32cc}>{accessExplanation.function_facts.length} +

i18n:govoplan-access.role_sources.6f42a672

{accessExplanation.role_sources.length ?
{accessExplanation.role_sources.map((source) =>
@@ -264,17 +265,14 @@ export default function UsersPanel({ settings, auth, canCreate, canUpdate, canSu
)}
:

i18n:govoplan-access.no_role_sources_found.91013aa5

}

i18n:govoplan-access.function_facts.848b32cc

- {accessExplanation.function_facts.length ?
- {accessExplanation.function_facts.map((fact) =>
-
{fact.function_name || fact.function_id}
-
+ {accessExplanation.function_facts.length ? + {accessExplanation.function_facts.map((fact) => i18n:govoplan-access.organization_unit.9832b383: {fact.organization_unit_name || fact.organization_unit_id}
i18n:govoplan-access.assignment_source.5fac1f72: {fact.assignment_source}
i18n:govoplan-access.mapped_roles.504d9ff9: {factRoles(fact)} -
-
)} -
:

i18n:govoplan-access.no_function_facts_found.b2ecee17

} + )} + :

i18n:govoplan-access.no_function_facts_found.b2ecee17

}

i18n:govoplan-access.effective_permissions.17c0fe8a

{accessExplanation.scopes.map((scope) => source.role_name).join(", ")}>{scope.scope})}