import { useCallback } from 'react'; import clsx from 'clsx'; import classes from './CharacterCard.module.scss'; import { SystemView } from '@/hooks/Mapper/components/ui-kit/SystemView'; import { CharacterTypeRaw, WithIsOwnCharacter } from '@/hooks/Mapper/types'; import { Commands } from '@/hooks/Mapper/types/mapHandlers.ts'; import { emitMapEvent } from '@/hooks/Mapper/events'; type CharacterCardProps = { compact?: boolean; showShipName?: boolean; showSystem?: boolean; useSystemsCache?: boolean; } & CharacterTypeRaw & WithIsOwnCharacter; const SHIP_NAME_RX = /u'|'/g; export const getShipName = (name: string) => { return name .replace(SHIP_NAME_RX, '') .replace(/\\u([\dA-Fa-f]{4})/g, (_, grp) => { return String.fromCharCode(parseInt(grp, 16)); }) .replace(/\\x([\dA-Fa-f]{2})/g, (_, grp) => { return String.fromCharCode(parseInt(grp, 16)); }); }; export const CharacterCard = ({ compact, isOwn, showSystem, showShipName, useSystemsCache, ...char }: CharacterCardProps) => { const handleSelect = useCallback(() => { emitMapEvent({ name: Commands.centerSystem, data: char?.location?.solar_system_id?.toString(), }); }, [char]); return (
{!compact && ( )}
{char.name} {char.alliance_id && [{char.alliance_ticker}]} {!char.alliance_id && [{char.corporation_ticker}]} {char.ship?.ship_type_info && (
{char.ship.ship_type_info.name}
)}
{showShipName && !compact && char.ship?.ship_name && (
{getShipName(char.ship.ship_name)}
)} {showSystem && !compact && char.location?.solar_system_id && ( )}
); };