'use client' import type { ReactNode } from 'react' import { Tooltip } from '@sim/emcn' export type WorkspaceRoleSource = 'owner' | 'explicit' | 'org-admin' export type CredentialRoleSource = 'explicit' | 'workspace-admin' /** * Explanation shown when a workspace member's role is fixed by inheritance and * cannot be edited. Returns null for editable (`explicit`) roles. */ export function workspaceRoleLockReason( roleSource: WorkspaceRoleSource | undefined ): string | null { if (roleSource === 'org-admin') return 'Organization admins are automatically workspace admins' if (roleSource === 'owner') return 'Workspace owner' return null } /** * Explanation shown when a credential member's role is fixed because they are a * workspace admin. Returns null for editable (`explicit`) roles. */ export function credentialRoleLockReason( roleSource: CredentialRoleSource | undefined ): string | null { if (roleSource === 'workspace-admin') { return 'Workspace admins are automatically credential admins' } return null } interface RoleLockTooltipProps { reason: string | null children: ReactNode } /** * Wraps a disabled role control in a tooltip explaining why the role is fixed. * Renders children unchanged when there is no lock reason. */ export function RoleLockTooltip({ reason, children }: RoleLockTooltipProps) { if (!reason) return <>{children} return (
{children}
{reason}
) }