* initial restructuring * stuff * lock version number * just keep using current mapinfobox * fix map upperRightUI layout * make mapsWidth work and add mobile * remove filterBoxOpen for now * redo the mobile menu in react * get account menu and invite lightbox working * fixed maps scrolling * make other routes work * fix signed out home page * fix accountbox toggling * add metacode edit routes * lots of fixes * fix map chat layout and tab bug * improve topic card readability and fix dragging bug * fixup mapchat stuff * fix up navigation to use react-router * jquery no longer handling access requests * handle case where user hasn't loaded yet * this shouldn't have been removed * add frame for topic view * rewrite map instructions * fix toast (and sign out bug) * fix apps pages and missing routes * made our request invite page look nice * filter box in react * forgot to add one proptype * remove extra comments * handle page title and mobile title updates * reenable google analytics * make filterbox use onclickoutside * reenable topic view in react * fix csrf auth token * fix little homepage styling issue * try putting preparevizdata in a timeout * installing render log to count * little fixes * fixup filters * make filter map function names more readable * eslint helps * renaming for clarity * use onclickoutside for account/sign in box * add some logging to see whether this is source of many renders * turns out chatview was heavily hogging memory * tiimeout not needed
45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
import React, { PropTypes, Component } from 'react'
|
|
|
|
class Participant extends Component {
|
|
render() {
|
|
const { conversationLive, mapperIsLive, isParticipating, isPending, id, self, image, username, color } = this.props
|
|
return (
|
|
<div className={`participant participant-${id} ${self ? 'is-self' : ''}`}>
|
|
<div className="chat-participant-image">
|
|
<img src={image} style={{ border: `2px solid ${color}` }} />
|
|
</div>
|
|
<div className="chat-participant-name">
|
|
{username} {self ? '(me)' : ''}
|
|
</div>
|
|
{!self && !conversationLive && <button
|
|
className={`button chat-participant-invite-call ${isPending ? 'pending' : ''}`}
|
|
onClick={() => !isPending && this.props.inviteACall(id)} // Realtime.inviteACall(id)
|
|
/>}
|
|
{!self && mapperIsLive && !isParticipating && <button
|
|
className={`button chat-participant-invite-join ${isPending ? 'pending' : ''}`}
|
|
onClick={() => !isPending && this.props.inviteToJoin(id)} // Realtime.inviteToJoin(id)
|
|
/>}
|
|
{isParticipating && <span className="chat-participant-participating">
|
|
<div className="green-dot"></div>
|
|
</span>}
|
|
<div className="clearfloat"></div>
|
|
</div>
|
|
)
|
|
}
|
|
}
|
|
|
|
Participant.propTypes = {
|
|
conversationLive: PropTypes.bool,
|
|
mapperIsLive: PropTypes.bool,
|
|
isParticipating: PropTypes.bool,
|
|
isPending: PropTypes.bool,
|
|
color: PropTypes.string, // css color
|
|
id: PropTypes.number,
|
|
image: PropTypes.string, // image url
|
|
self: PropTypes.bool,
|
|
username: PropTypes.string,
|
|
inviteACall: PropTypes.func,
|
|
inviteToJoin: PropTypes.func
|
|
}
|
|
|
|
export default Participant
|