70 lines
3.1 KiB
TypeScript
Raw Normal View History

import {Flex, List, Tag, Tooltip} from 'antd'
2024-12-30 23:50:15 +01:00
import React from 'react'
2024-12-31 13:55:42 +01:00
import type {Domain} from '../../utils/api'
import {
icannAccreditationTranslation,
rdapRoleDetailTranslation,
rdapRoleTranslation
} from '../../utils/functions/rdapTranslation'
2024-12-30 23:50:15 +01:00
import {roleToAvatar} from '../../utils/functions/roleToAvatar'
import {rolesToColor} from '../../utils/functions/rolesToColor'
import {sortDomainEntities} from '../../utils/functions/sortDomainEntities'
import {extractDetailsFromJCard} from '../../utils/functions/extractDetailsFromJCard'
import {CheckCircleOutlined, CloseCircleOutlined, SettingOutlined} from "@ant-design/icons"
2024-08-16 13:56:52 +02:00
export function EntitiesList({domain}: { domain: Domain }) {
2024-08-20 17:32:58 +02:00
const rdapRoleTranslated = rdapRoleTranslation()
const rdapRoleDetailTranslated = rdapRoleDetailTranslation()
2024-08-21 02:01:20 +02:00
const roleToTag = (r: string) => <Tooltip
2024-12-31 19:21:44 +01:00
key={r}
2024-12-30 23:50:15 +01:00
title={rdapRoleDetailTranslated[r as keyof typeof rdapRoleDetailTranslated] || undefined}
>
2024-12-31 19:21:44 +01:00
<Tag key={r} color={rolesToColor([r])}>
{rdapRoleTranslated[r as keyof typeof rdapRoleTranslated] || r}
2024-12-30 23:50:15 +01:00
</Tag>
2024-08-21 02:01:20 +02:00
</Tooltip>
2024-12-30 23:50:15 +01:00
return (
<List
className='demo-loadmore-list'
itemLayout='horizontal'
dataSource={sortDomainEntities(domain)}
renderItem={(e) => {
const details = extractDetailsFromJCard(e)
const icannAccreditationTranslated = icannAccreditationTranslation()
const status = e.entity.icannAccreditation?.status as ('Terminated' | 'Accredited' | 'Reserved' | undefined)
2024-12-20 19:41:48 +01:00
2024-12-31 19:21:44 +01:00
return <List.Item>
2025-01-01 14:10:23 +01:00
<List.Item.Meta
avatar={roleToAvatar(e)}
title={<Flex gap='small'>
<Tag>{e.entity.handle}</Tag>
{
e.entity.icannAccreditation && status && <Tooltip
title={e.entity.icannAccreditation.registrarName + " (" + icannAccreditationTranslated[status] + ")"}>
<Tag icon={
status === 'Terminated' ? <CloseCircleOutlined /> :
status === 'Accredited' ? <CheckCircleOutlined/> : <SettingOutlined/>
} color={
status === 'Terminated' ? 'red' :
status === 'Accredited' ? 'green' : 'yellow'
}>{e.entity.icannAccreditation.id}</Tag>
</Tooltip>
}
</Flex>}
2025-01-01 14:10:23 +01:00
description={<>
{details.fn && <div>👤 {details.fn}</div>}
{details.organization && <div>🏢 {details.organization}</div>}
</>}
/>
2025-01-16 21:49:02 +01:00
<Flex gap='4px 0' wrap>
{e.roles.map(roleToTag)}
</Flex>
2024-12-31 19:21:44 +01:00
</List.Item>
2024-12-30 23:50:15 +01:00
}}
/>
)
}