web: People: Added selector for search profile in loaded people list

This commit is contained in:
Alexey Safronov 2019-07-28 20:30:46 +03:00
parent 8174e47f14
commit 611a9b8632
3 changed files with 41 additions and 15 deletions

View File

@ -6,6 +6,7 @@ import { ArticleHeaderContent, ArticleMainButtonContent, ArticleBodyContent } fr
import { SectionHeaderContent, SectionBodyContent } from './Section';
import { setProfile, fetchProfile, resetProfile } from '../../../store/profile/actions';
import { isAdmin, isMe } from '../../../store/auth/selectors';
import { getUserByUserName } from '../../../store/people/selectors';
class Profile extends React.Component {
constructor(props) {
@ -56,18 +57,22 @@ class Profile extends React.Component {
}
componentDidMount() {
const { auth, match, setProfile, fetchProfile } = this.props;
const { auth, users, match, setProfile, fetchProfile } = this.props;
const { userId } = match.params;
if (isMe(auth, userId)) {
setProfile(auth.user);
} else {
const user = getUserByUserName(users, userId);
if (!user)
fetchProfile(userId);
else
setProfile(user);
}
}
componentDidUpdate(prevProps) {
const { auth, match, setProfile, fetchProfile } = this.props;
const { auth, users, match, setProfile, fetchProfile } = this.props;
const { userId } = match.params;
const prevUserId = prevProps.match.params.userId;
@ -75,7 +80,11 @@ class Profile extends React.Component {
if (isMe(auth, userId)) {
setProfile(auth.user);
} else {
const user = getUserByUserName(users, userId);
if (!user)
fetchProfile(userId);
else
setProfile(user);
}
}
}
@ -139,7 +148,8 @@ function mapStateToProps(state) {
return {
auth: state.auth,
isAdmin: isAdmin(state.auth), // state.auth.user.isAdmin || state.auth.user.isOwner,
profile: state.profile.targetUser
profile: state.profile.targetUser,
users: state.people.users
};
}

View File

@ -6,6 +6,7 @@ import { ArticleHeaderContent, ArticleMainButtonContent, ArticleBodyContent } fr
import { SectionHeaderContent, SectionBodyContent } from './Section';
import { setProfile, fetchProfile, resetProfile } from '../../../store/profile/actions';
import { isMe } from '../../../store/auth/selectors';
import { getUserByUserName } from '../../../store/people/selectors';
class ProfileAction extends React.Component {
constructor(props) {
@ -56,33 +57,41 @@ class ProfileAction extends React.Component {
}
componentDidMount() {
const { auth, match, setProfile, fetchProfile } = this.props;
const { auth, users, match, setProfile, fetchProfile } = this.props;
const { userId, type } = match.params;
if(!userId) {
setProfile({isVisitor: type === "guest"});
if (!userId) {
setProfile({ isVisitor: type === "guest" });
}
else if (isMe(auth, userId)) {
setProfile(auth.user);
} else {
const user = getUserByUserName(users, userId);
if (!user)
fetchProfile(userId);
else
setProfile(user);
}
}
componentDidUpdate(prevProps) {
const { auth, match, setProfile, fetchProfile } = this.props;
const { auth, users, match, setProfile, fetchProfile } = this.props;
const { userId, type } = match.params;
const prevUserId = prevProps.match.params.userId;
const prevType = prevProps.match.params.type;
if(!userId && type !== prevType) {
setProfile({isVisitor: type === "guest"});
if (!userId && type !== prevType) {
setProfile({ isVisitor: type === "guest" });
}
else if (userId !== prevUserId) {
if (isMe(auth, userId)) {
setProfile(auth.user);
} else {
const user = getUserByUserName(users, userId);
if (!user)
fetchProfile(userId);
else
setProfile(user);
}
}
}
@ -146,7 +155,8 @@ ProfileAction.propTypes = {
function mapStateToProps(state) {
return {
auth: state.auth,
profile: state.profile.targetUser
profile: state.profile.targetUser,
users: state.people.users
};
}

View File

@ -6,6 +6,12 @@ export function getSelectedUser(selection, userId) {
});
};
export function getUserByUserName(users, userName) {
return _.find(users, function (obj) {
return obj.userName === userName;
});
};
export function isSelected(selection, userId) {
return getSelectedUser(selection, userId) !== undefined;
};