import { ProfileAvatar } from '@/components/profiles/profile-avatar'; import { SerieIcon } from '@/components/report-chart/common/serie-icon'; import { Tooltiper } from '@/components/ui/tooltip'; import { pushModal } from '@/modals'; import { cn } from '@/utils/cn'; import { formatTimeAgoOrDateTime } from '@/utils/date'; import { getProfileName } from '@/utils/getters'; import type { IServiceEvent } from '@openpanel/db'; import { memo } from 'react'; import { Skeleton } from '../../skeleton'; import { EventIcon } from '../event-icon'; interface EventItemProps { event: IServiceEvent | Record; viewOptions: Record; className?: string; } export const EventItem = memo( ({ event, viewOptions, className }) => { let url: string | null = ''; if (event.path && event.origin) { if (viewOptions.origin !== false && event.origin) { url += event.origin; } url += event.path; const query = Object.entries(event.properties || {}) .filter(([key]) => key.startsWith('__query')) .map(([key, value]) => [key.replace('__query.', ''), value]); if (viewOptions.queryString !== false && query.length) { query.forEach(([key, value], index) => { url += `${index === 0 ? '?' : '&'}${key}=${value}`; }); } } return (
{ pushModal('EventDetails', { id: event.id, projectId: event.projectId, createdAt: event.createdAt, }); }} onKeyDown={(e) => { if (e.key === 'Enter') { pushModal('EventDetails', { id: event.id, projectId: event.projectId, createdAt: event.createdAt, }); } }} data-slot="inner" className={cn( 'col gap-1 flex-1 p-2', // Desktop '@lg:row @lg:items-center', 'cursor-pointer', event.meta?.color ? `hover:bg-${event.meta.color}-50 dark:hover:bg-${event.meta.color}-900` : 'hover:bg-def-200', )} >
{event.name === 'screen_view' ? ( <> Visit: {url ? url : event.path} ) : ( <> {event.name} )}
{event.referrerName && viewOptions.referrerName !== false && ( } > {event.referrerName} )} {event.os && viewOptions.os !== false && ( }>{event.os} )} {event.browser && viewOptions.browser !== false && ( }> {event.browser} )} {event.country && viewOptions.country !== false && ( }> {event.country} )} {viewOptions.profileId !== false && ( } > {getProfileName(event.profile)} )} {viewOptions.createdAt !== false && ( {formatTimeAgoOrDateTime(event.createdAt)} )}
{viewOptions.properties !== false && (
              {JSON.stringify(event.properties, null, 2)}
            
)}
); }, ); export const EventItemSkeleton = () => { return (
); }; function Pill({ children, icon, className, }: { children: React.ReactNode; icon?: React.ReactNode; className?: string }) { return ( {icon &&
{icon}
}
{children}
); }