import React, { useState } from 'react' import { connect } from 'react-redux' import { List } from 'immutable' import { countries } from 'App/constants'; import { useStore } from 'App/mstore'; import { browserIcon, osIcon, deviceTypeIcon } from 'App/iconNames'; import { formatTimeOrDate } from 'App/date'; import { Avatar, TextEllipsis, SlideModal, Popup, CountryFlag, Icon } from 'UI' import cn from 'classnames' import { withRequest } from 'HOCs' import SessionInfoItem from '../../SessionInfoItem' import SessionList from '../Metadata/SessionList'; import { Tooltip } from 'react-tippy' function UserCard({ className, request, session, width, height, similarSessions, loading, }) { const { settingsStore } = useStore(); const { timezone } = settingsStore.sessionSettings; const [showUserSessions, setShowUserSessions] = useState(false) const { userBrowser, userDevice, userCountry, userBrowserVersion, userOs, userOsVersion, startedAt, userId, userAnonymousId, userNumericHash, userDisplayName, userDeviceType, revId, } = session; const hasUserDetails = !!userId || !!userAnonymousId; const showSimilarSessions = () => { setShowUserSessions(true); request({ key: !userId ? 'USERANONYMOUSID' : 'USERID', value: userId || userAnonymousId }); } const getDimension = (width, height) => { return width && height ? (
{ width || 'x' } { height || 'x' }
) : Resolution N/A; } const avatarbgSize = '38px' return (
{ userDisplayName }
{formatTimeOrDate(startedAt, timezone)} · {countries[userCountry]} · {userBrowser}, {userOs}, {userDevice} · } label={countries[userCountry]} value={{formatTimeOrDate(startedAt)} } />
)} position="bottom center" hoverable disabled={false} on="hover" > More
{revId && (
Rev ID: {revId}
)} User Sessions } isDisplayed={ showUserSessions } content={ showUserSessions && } onClose={ () => showUserSessions ? setShowUserSessions(false) : null } /> ) } const component = React.memo(connect(state => ({ session: state.getIn([ 'sessions', 'current' ]) }))(UserCard)) export default withRequest({ initialData: List(), endpoint: '/metadata/session_search', dataWrapper: data => Object.values(data), dataName: 'similarSessions', })(component)