import React from 'react'; import cn from 'classnames'; import { CountryFlag, Avatar, TextEllipsis, Label, Icon, Tooltip } 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'; import { Duration } from 'luxon'; 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: Duration; eventsCount: number; errorsCount: number; pagesCount: number; viewed: boolean; favorite: boolean; userDeviceType: string; userUuid: string; userNumericHash: number; live: boolean; metadata: Record; issueTypes: []; active: boolean; isCallActive?: boolean; agentIds?: string[]; }; onUserClick?: (userId: string, userAnonymousId: string) => void; hasUserFilter?: boolean; disableUser?: boolean; metaList?: Array; // showActive?: boolean; lastPlayedSessionId?: string; live?: boolean; onClick?: any; compact?: boolean; isDisabled?: boolean; isAdd?: boolean; } function SessionItem(props: RouteComponentProps & Props) { const { settingsStore } = useStore(); const { timezone } = settingsStore.sessionSettings; const { session, onUserClick = () => null, hasUserFilter = false, disableUser = false, metaList = [], lastPlayedSessionId, onClick = null, compact = false, } = 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 queryParams = Object.fromEntries(new URLSearchParams(location.search)); 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) || location.pathname.includes('multiview'); 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()} >
{!compact && (
!disableUser && !hasUserFilter && hasUserId ? onUserClick(userId, userAnonymousId) : null } >
)}
{!isAssist && ( <>
{eventsCount} {eventsCount === 0 || eventsCount > 1 ? 'Events' : 'Event'}
)}
{live ? : formattedDuration}
{isSessions && (
)}
{live && session.isCallActive && session.agentIds!.length > 0 ? (
) : null} {isSessions && (
{isLastPlayed && ( )}
)} {props.isAdd ? (
(props.isDisabled ? null : props.onClick())} >
) : ( )}
{_metaList.length > 0 && }
); } export default withRouter(observer(SessionItem));