Skip to content
Snippets Groups Projects
presence-list.js 2.03 KiB
Newer Older
import React, { Component } from "react";
import PropTypes from "prop-types";
import styles from "../assets/stylesheets/presence-list.scss";
import classNames from "classnames";
Greg Fodor's avatar
Greg Fodor committed
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
  };

Greg Fodor's avatar
Greg Fodor committed
  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>
Greg Fodor's avatar
Greg Fodor committed
        </div>
Greg Fodor's avatar
Greg Fodor committed
    // Draw self first
    return (
      <div className={styles.presenceList}>
        <div className={styles.attachPoint} />
        <div className={styles.contents}>
          <div className={styles.rows}>
Greg Fodor's avatar
Greg Fodor committed
            {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)}