Newer
Older
import React, { Component } from "react";
import PropTypes from "prop-types";
import styles from "../assets/stylesheets/presence-list.scss";
import classNames from "classnames";
import PhoneImage from "../assets/images/presence_phone.png";
import DesktopImage from "../assets/images/presence_desktop.png";
import HMDImage from "../assets/images/presence_vr.png";
import { FormattedMessage } from "react-intl";
import { WithHoverSound } from "./wrap-with-audio";
export default class PresenceList extends Component {
static propTypes = {
presences: PropTypes.object,
sessionId: PropTypes.string
};
domForPresence = ([sessionId, data]) => {
const meta = data.metas[0];
const context = meta.context;
const profile = meta.profile;
const image = context && context.mobile ? PhoneImage : context && context.hmd ? HMDImage : DesktopImage;
return (
<WithHoverSound key={sessionId}>
<div className={styles.row}>
<div className={styles.device}>
<img src={image} />
</div>
<div
className={classNames({
[styles.displayName]: true,
[styles.selfDisplayName]: sessionId === this.props.sessionId
})}
>
{profile && profile.displayName}
</div>
<div className={styles.presence}>
<FormattedMessage id={`presence.in_${meta.presence}`} />
</div>
</WithHoverSound>
return (
<div className={styles.presenceList}>
<div className={styles.attachPoint} />
<div className={styles.contents}>
<div className={styles.rows}>
{Object.entries(this.props.presences || {})
.filter(([k]) => k === this.props.sessionId)
.map(this.domForPresence)}
{Object.entries(this.props.presences || {})
.filter(([k]) => k !== this.props.sessionId)
.map(this.domForPresence)}
</div>
</div>
</div>
);
}
}