Update rendering on login mappings on hosts table

This commit is contained in:
Tuan Dang
2025-05-02 13:30:48 -07:00
parent 0dcb223f80
commit d5246c2891
@@ -94,40 +94,31 @@ export const SshHostsTable = ({ handlePopUpOpen }: Props) => {
Object.entries( Object.entries(
host.loginMappings.reduce( host.loginMappings.reduce(
(acc, mapping) => { (acc, mapping) => {
const { loginUser, source } = mapping; const key = `${mapping.loginUser}|${mapping.source}|${mapping.allowedPrincipals.usernames.sort().join(",")}`;
const existing = acc[loginUser]; acc[key] = mapping;
if (!existing) {
acc[loginUser] = mapping;
} else if (
existing.source === LoginMappingSource.HOST_GROUP &&
source === LoginMappingSource.HOST
) {
// Prefer HOST over HOST_GROUP
acc[loginUser] = mapping;
}
return acc; return acc;
}, },
{} as Record<string, (typeof host.loginMappings)[number]> {} as Record<string, (typeof host.loginMappings)[number]>
) )
).map(([loginUser, { allowedPrincipals, source }]) => ( )
<div key={`${host.id}-${loginUser}`} className="mb-2"> .sort(([a], [b]) => a.localeCompare(b))
<div className="text-mineshaft-200"> .map(([key, { loginUser, allowedPrincipals, source }]) => (
{loginUser} <div key={`${host.id}-${key}`} className="mb-2">
{source === LoginMappingSource.HOST_GROUP && ( <div className="text-mineshaft-200">
<span className="ml-2 text-xs text-mineshaft-400"> {loginUser}
(inherited from host group) {source === LoginMappingSource.HOST_GROUP && (
</span> <span className="ml-2 text-xs text-mineshaft-400">
)} (inherited from host group)
</div> </span>
{allowedPrincipals.usernames.map((username) => ( )}
<div key={`${host.id}-${loginUser}-${username}`} className="ml-4">
└─ {username}
</div> </div>
))} {allowedPrincipals.usernames.map((username) => (
</div> <div key={`${host.id}-${key}-${username}`} className="ml-4">
)) └─ {username}
</div>
))}
</div>
))
)} )}
</Td> </Td>
<Td className="text-right align-middle"> <Td className="text-right align-middle">