This commit is contained in:
@@ -36,6 +36,27 @@ function organizationTypeLabel(type: OrganizationType) {
|
||||
return organizationTypes.find((item) => item.value === type)?.label ?? type;
|
||||
}
|
||||
|
||||
function OrganizationCreator({ organization }: { organization: Organization }) {
|
||||
const [failed, setFailed] = useState(false);
|
||||
const name = organization.createdByName || organization.createdByEmail || '-';
|
||||
const avatarUrl = organization.createdByAvatarUrl || '';
|
||||
const initial = name.trim().charAt(0).toUpperCase() || 'A';
|
||||
|
||||
return (
|
||||
<div className="flex min-w-0 items-center gap-2">
|
||||
{avatarUrl && !failed ? (
|
||||
<img src={avatarUrl} alt="" className="size-7 shrink-0 rounded-full border border-border bg-muted object-cover" onError={() => setFailed(true)} />
|
||||
) : (
|
||||
<span className="inline-flex size-7 shrink-0 items-center justify-center rounded-full border border-border bg-muted text-xs font-semibold text-muted-foreground">{initial}</span>
|
||||
)}
|
||||
<div className="min-w-0">
|
||||
<p className="truncate text-sm font-medium text-foreground">{name}</p>
|
||||
<p className="mt-0.5 whitespace-nowrap text-xs text-muted-foreground">{formatDateTime(organization.createdAt)}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export function OrganizationsPage() {
|
||||
const { toast } = useToast();
|
||||
const [organizations, setOrganizations] = useState<Organization[]>([]);
|
||||
@@ -116,7 +137,7 @@ export function OrganizationsPage() {
|
||||
{ key: 'type', header: '유형', className: 'w-32 px-5 py-3', cell: (row) => <StatusBadge status={organizationTypeLabel(row.type)} tone="blue" /> },
|
||||
{ key: 'license', header: '라이센스', className: 'w-36 px-5 py-3', cell: (row) => row.defaultLicenseCode ? <StatusBadge status={row.defaultLicenseName ?? row.defaultLicenseCode} tone="green" /> : <span className="text-xs text-muted-foreground">-</span> },
|
||||
{ key: 'domain', header: '도메인', className: 'w-56 px-5 py-3', cell: (row) => <span className="font-mono text-xs text-muted-foreground">{row.domain || '-'}</span> },
|
||||
{ key: 'createdAt', header: '등록일', className: 'w-40 px-5 py-3', cell: (row) => <span className="whitespace-nowrap text-muted-foreground">{formatDateTime(row.createdAt)}</span> },
|
||||
{ key: 'createdAt', header: '생성', className: 'w-48 px-5 py-3', cell: (row) => <OrganizationCreator organization={row} /> },
|
||||
{
|
||||
key: 'actions',
|
||||
header: '',
|
||||
|
||||
@@ -90,6 +90,10 @@ export type Organization = {
|
||||
domain?: string | null;
|
||||
defaultLicenseCode?: string | null;
|
||||
defaultLicenseName?: string | null;
|
||||
createdById?: string | null;
|
||||
createdByName?: string | null;
|
||||
createdByEmail?: string | null;
|
||||
createdByAvatarUrl?: string | null;
|
||||
createdAt: string;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user