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={ setViewing(null)}>i18n:govoplan-access.close.bbfa773e}> - {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={ setSecret(null)}>i18n:govoplan-access.i_have_recorded_it.7522da18}> 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={ setViewing(null)}>i18n:govoplan-access.close.bbfa773e}> - {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={ setViewing(null)}>i18n:govoplan-access.close.bbfa773e}> - {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={ setManaging(null)} disabled={busy}>Close} > {managing && <> - + - + Edit void setActive(!managing.is_active)} disabled={!canWrite || busy}>{managing.is_active ? : } {managing.is_active ? "Deactivate" : "Activate"} 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={ setViewing(null)}>i18n:govoplan-access.close.bbfa773e}> - {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={ setViewing(null)}>i18n:govoplan-access.close.bbfa773e}> - {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={ setTemporaryPassword(null)}>i18n:govoplan-access.i_have_recorded_it.7522da18}> 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={ setViewing(null)}>i18n:govoplan-access.close.bbfa773e}> - {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={ { setExplaining(null); setAccessExplanation(null); }} disabled={accessExplanationLoading} disabledReason={accessExplanationLoading ? ACCESS_INTERFACE_I18N.loading : undefined}>i18n:govoplan-access.close.bbfa773e}> {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})}
{scope}
i18n:govoplan-access.loading_access_explanation.04a7c934
i18n:govoplan-access.no_role_sources_found.91013aa5
i18n:govoplan-access.no_function_facts_found.b2ecee17
source.role_name).join(", ")}>{scope.scope}