aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2018-12-12 15:47:28 +0300
committerGravatar Vitaly Takmazov2023-01-13 10:37:54 +0300
commite7b32a80cdcf0fa9ca97c14cda33db6d81b451d6 (patch)
tree3d0e53fcf47757bb02e2b44a94679b4f74b3a867
parent0c31e9ae31403beb3c390e864f0aae653240868d (diff)
read/readers
-rw-r--r--vnext/src/App.js4
-rw-r--r--vnext/src/api/index.js2
-rw-r--r--vnext/src/components/Avatar.js6
-rw-r--r--vnext/src/components/UserInfo.js15
-rw-r--r--vnext/src/components/Users.js58
5 files changed, 49 insertions, 36 deletions
diff --git a/vnext/src/App.js b/vnext/src/App.js
index 5c9b3b81..835d3b9f 100644
--- a/vnext/src/App.js
+++ b/vnext/src/App.js
@@ -160,8 +160,8 @@ export default class App extends React.Component {
<Route exact path="/post" render={(props) => <Post visitor={user} {...props} />} />
<Route exact path="/pm" render={(props) => <Contacts visitor={user} {...props} />} />
<Route exact path="/pm/:user" render={(props) => <Chat ref={this.pm} visitor={user} {...props} />} />
- <Route exact path="/:user/friends" render={(props) => <Friends visitor={user} {...props} />} />
- <Route exact path="/:user/readers" render={(props) => <Readers visitor={user} {...props} />} />
+ <Route exact path="/:user/friends" render={(props) => <Friends user={props.match.params.user} {...props} />} />
+ <Route exact path="/:user/readers" render={(props) => <Readers user={props.match.params.user} {...props} />} />
<Route exact path="/:user" render={(props) => <Blog key={props.match.params.user} visitor={user} {...props} />} />
<Route exact path="/tag/:tag" render={(props) => <Tag visitor={user} {...props} />} />
<Route exact path="/:user/:mid" render={(props) => <Thread ref={this.thread} visitor={user} {...props} />} />
diff --git a/vnext/src/api/index.js b/vnext/src/api/index.js
index 9bb9d5a3..46efa159 100644
--- a/vnext/src/api/index.js
+++ b/vnext/src/api/index.js
@@ -32,7 +32,7 @@ export function me(username = '', password = '') {
}
export function info(username) {
- return client.get(`/users?uname=${username}`);
+ return client.get(`/info/${username}`);
}
export function getChats() {
diff --git a/vnext/src/components/Avatar.js b/vnext/src/components/Avatar.js
index 002badde..e2023649 100644
--- a/vnext/src/components/Avatar.js
+++ b/vnext/src/components/Avatar.js
@@ -8,12 +8,14 @@ import Icon from './Icon';
const Avatar = React.memo(props => {
return (
- <div style={Object.assign({ display: 'flex', padding: '12px' }, props.style)}>
+ <div style={Object.assign({ display: 'flex', padding: '12px', width: '300px' }, props.style)}>
<div className="msg-avatar">
{
props.user.uname ?
<Link to={{ pathname: props.link || `/${props.user.uname}/` }}>
- <img src={props.user.avatar} alt={`${props.user.uname}`} />
+ { props.user.avatar ?
+ <img src={props.user.avatar} alt={`${props.user.uname}`} />
+ : <Icon name="ei-spinner" size="m" /> }
</Link>
: <Icon name="ei-spinner" size="m" />
}
diff --git a/vnext/src/components/UserInfo.js b/vnext/src/components/UserInfo.js
index c4247f92..5e60f95f 100644
--- a/vnext/src/components/UserInfo.js
+++ b/vnext/src/components/UserInfo.js
@@ -22,8 +22,9 @@ export default class UserInfo extends React.Component {
componentDidMount() {
info(this.state.user.uname).then(response => {
this.setState({
- user: response.data[0]
+ user: response.data
});
+ this.props.onUpdate && this.props.onUpdate(response.data);
});
}
render() {
@@ -70,23 +71,17 @@ export default class UserInfo extends React.Component {
<li>Messages: {user.statsMessages}</li>
<li>Comments: {user.statsReplies}</li>
</ul>
- {
- user.read &&
- <div className="iread">
- {
- user.read.map(u => <Avatar user={u} key={u.uid} />)
- }
- </div>
- }
</div>
</>
}
</div>
+ { this.props.children }
</>
);
}
}
UserInfo.propTypes = {
- user: PropTypes.string.isRequired
+ user: PropTypes.string.isRequired,
+ onUpdate: PropTypes.func
};
diff --git a/vnext/src/components/Users.js b/vnext/src/components/Users.js
index c0da3748..2bab6de1 100644
--- a/vnext/src/components/Users.js
+++ b/vnext/src/components/Users.js
@@ -1,41 +1,57 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { Link } from 'react-router-dom';
+
import { UserType } from './Types';
+import UserInfo from './UserInfo';
+import Avatar from './Avatar';
-export function Friends({ visitor, ...rest }) {
- return <Users data={visitor.read || []} />;
+export function Friends({ user, ...rest }) {
+ return <Users user={user} prop='read' />;
}
-export function Readers({ visitor, ...rest }) {
- return <Users data={ visitor.readers || [] } />;
+export function Readers({ user, ...rest }) {
+ return <Users user={user} prop='readers' />;
}
-function Users({data, ...rest}) {
- return (
- <div className="users">
- {
- data.map(user => <span key={user.uid}>
- <Link to={`/${user.uname}/`}>
- <img src={`//i.juick.com/as/${user.uid}.png`} />
- <span>{user.uname}</span>
- </Link>
- </span>)
- }
- </div>
- );
+class Users extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ user: {}
+ };
+ }
+ updateUser = (user) => {
+ this.setState({
+ user: user
+ });
+ }
+ render() {
+ return (
+ <UserInfo user={this.props.user} onUpdate={this.updateUser}>
+ <div style={{ display: 'flex', flexWrap: 'wrap', flexDirection: 'row'}}>
+ {
+ this.state.user[this.props.prop] &&
+ this.state.user[this.props.prop].map(user =>
+ <Avatar key={user.uid} user={user} />
+ )
+ }
+ </div>
+ </UserInfo>
+ );
+ }
}
Friends.propTypes = {
- visitor: UserType
+ user: PropTypes.string.isRequired
};
Readers.propTypes = {
- visitor: UserType
+ user: PropTypes.string.isRequired
};
Users.propTypes = {
- data: PropTypes.arrayOf(UserType).isRequired
+ user: PropTypes.string.isRequired,
+ prop: PropTypes.string.isRequired
};