diff options
author | =Corey Hulen <corey@hulen.com> | 2015-06-14 23:53:32 -0800 |
---|---|---|
committer | =Corey Hulen <corey@hulen.com> | 2015-06-14 23:53:32 -0800 |
commit | 56e74239d6b34df8f30ef046f0b0ff4ff0866a71 (patch) | |
tree | 044da29848cf0f5c8607eac34de69065171669cf /web/react/components/user_profile.jsx | |
download | chat-56e74239d6b34df8f30ef046f0b0ff4ff0866a71.tar.gz chat-56e74239d6b34df8f30ef046f0b0ff4ff0866a71.tar.bz2 chat-56e74239d6b34df8f30ef046f0b0ff4ff0866a71.zip |
first commit
Diffstat (limited to 'web/react/components/user_profile.jsx')
-rw-r--r-- | web/react/components/user_profile.jsx | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/web/react/components/user_profile.jsx b/web/react/components/user_profile.jsx new file mode 100644 index 000000000..8ffad737d --- /dev/null +++ b/web/react/components/user_profile.jsx @@ -0,0 +1,71 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + + +var utils = require('../utils/utils.jsx'); +var UserStore = require('../stores/user_store.jsx'); + +function getStateFromStores(userId) { + var profile = UserStore.getProfile(userId); + + if (profile == null) { + return { profile: { id: "0", username: "..."} }; + } + else { + return { profile: profile }; + } +} + +var id = 0; + +function nextId() { + id = id + 1; + return id; +} + + +module.exports = React.createClass({ + uniqueId: null, + componentDidMount: function() { + UserStore.addChangeListener(this._onChange); + $("#profile_" + this.uniqueId).popover({placement : 'right', container: 'body', trigger: 'hover', html: true, delay: { "show": 200, "hide": 100 }}); + }, + componentWillUnmount: function() { + UserStore.removeChangeListener(this._onChange); + }, + _onChange: function(id) { + if (id == this.props.userId) { + var newState = getStateFromStores(this.props.userId); + if (!utils.areStatesEqual(newState, this.state)) { + this.setState(newState); + } + } + }, + componentWillReceiveProps: function(nextProps) { + if (this.props.userId != nextProps.userId) { + this.setState(getStateFromStores(nextProps.userId)); + } + }, + getInitialState: function() { + this.uniqueId = nextId(); + return getStateFromStores(this.props.userId); + }, + render: function() { + var name = this.props.overwriteName ? this.props.overwriteName : this.state.profile.username; + + + var data_content = "" + data_content += "<img style='margin: 10px' src='/api/v1/users/" + this.state.profile.id + "/image' height='128' width='128' />" + if (!config.ShowEmail) { + data_content += "<div><span style='white-space:nowrap;'>Email not shared</span></div>"; + } else { + data_content += "<div><a href='mailto:'" + this.state.profile.email + "'' style='white-space:nowrap;text-transform:lowercase;'>" + this.state.profile.email + "</a></div>"; + } + + return ( + <div style={{"cursor" : "pointer", "display" : "inline-block"}} className="user-popover" id={"profile_" + this.uniqueId} data-toggle="popover" data-content={data_content} data-original-title={this.state.profile.username} > + { name } + </div> + ); + } +}); |