import React from 'react' import cn from 'classnames'; import { CountryFlag, Avatar, TextEllipsis, Label, Icon, } from 'UI'; import { useStore } from 'App/mstore'; import { observer } from 'mobx-react-lite'; import { durationFormatted, formatTimeOrDate } from 'App/date'; import stl from './sessionItem.module.css'; import Counter from './Counter' import { withRouter, RouteComponentProps } from 'react-router-dom'; import SessionMetaList from './SessionMetaList'; import PlayLink from './PlayLink'; import ErrorBars from './ErrorBars'; import { assist as assistRoute, liveSession, sessions as sessionsRoute, isRoute } from "App/routes"; import { capitalize } from 'App/utils'; const ASSIST_ROUTE = assistRoute(); const ASSIST_LIVE_SESSION = liveSession() const SESSIONS_ROUTE = sessionsRoute(); interface Props { session: { sessionId: string; userBrowser: string; userOs: string; userId: string; userAnonymousId: string; userDisplayName: string; userCountry: string; startedAt: number; duration: string; eventsCount: number; errorsCount: number; pagesCount: number; viewed: boolean; favorite: boolean; userDeviceType: string; userUuid: string; userNumericHash: number; live: boolean; metadata: Record; userSessionsCount: number; issueTypes: []; active: boolean; }, onUserClick?: (userId: string, userAnonymousId: string) => void; hasUserFilter?: boolean; disableUser?: boolean; metaList?: Array; showActive?: boolean; lastPlayedSessionId?: string; live?: boolean; } function SessionItem(props: RouteComponentProps & Props) { const { settingsStore } = useStore(); const { timezone } = settingsStore.sessionSettings; const { session, onUserClick = () => null, hasUserFilter = false, disableUser = false, metaList = [], showActive = false, lastPlayedSessionId, } = props; const { sessionId, userBrowser, userOs, userId, userAnonymousId, userDisplayName, userCountry, startedAt, duration, eventsCount, viewed, userDeviceType, userNumericHash, live, metadata, issueTypes, active, } = session; const location = props.location; const formattedDuration = durationFormatted(duration); const hasUserId = userId || userAnonymousId; const isSessions = isRoute(SESSIONS_ROUTE, location.pathname); const isAssist = isRoute(ASSIST_ROUTE, location.pathname) || isRoute(ASSIST_LIVE_SESSION, location.pathname); const isLastPlayed = lastPlayedSessionId === sessionId; const _metaList = Object.keys(metadata).filter(i => metaList.includes(i)).map(key => { const value = metadata[key]; return { label: key, value }; }); return (
e.stopPropagation()}>
(!disableUser && !hasUserFilter) && onUserClick(userId, userAnonymousId)} >
{formatTimeOrDate(startedAt, timezone) }
{!isAssist && ( <>
{ eventsCount } { eventsCount === 0 || eventsCount > 1 ? 'Events' : 'Event' }
)}
{ live ? : formattedDuration }
{ isSessions && (
)}
{ isAssist && showActive && ( )}
{ isSessions && (
{ isLastPlayed && ( )}
)}
{ _metaList.length > 0 && ( )}
) } export default withRouter(observer(SessionItem))