fix user edit; add edit user link to profile page for admins; fix user name link

This commit is contained in:
Sacha Greif 2016-06-30 12:05:59 +09:00
parent ef49a81b3e
commit 4c3b752748
6 changed files with 28 additions and 11 deletions

View file

@ -3,13 +3,14 @@ import { DocumentContainer } from "meteor/utilities:react-list-container";
import Users from 'meteor/nova:users';
const UsersAccount = (props, context) => {
const params = props.params.slug ? props.params : {_id: context.currentUser._id};
const terms = props.params.slug ? {"telescope.slug": props.params.slug} : {_id: context.currentUser._id};
return (
<DocumentContainer
collection={Users}
publication="users.single"
selector={params}
terms={params}
selector={terms}
terms={terms}
documentPropName="user"
component={Telescope.components.UsersEdit}
/>
)

View file

@ -1,13 +1,15 @@
import React, { PropTypes, Component } from 'react';
import { FormattedMessage } from 'react-intl';
import { FormattedMessage, intlShape } from 'react-intl';
import { Row, Col } from 'react-bootstrap';
import NovaForm from "meteor/nova:forms";
//import { Messages } from "meteor/nova:core";
import Users from 'meteor/nova:users';
const UsersEdit = ({document, currentUser}, context) => {
const UsersEdit = (props, context) => {
const user = props.user;
const currentUser = props.currentUser;
const user = document;
//const label = `Edit profile for ${Users.getDisplayName(user)}`;
return (
@ -20,7 +22,7 @@ const UsersEdit = ({document, currentUser}, context) => {
document={user}
methodName="users.edit"
successCallback={(user)=>{
context.messages.flash("User updated.", "success");
context.messages.flash(this.context.intl.formatMessage({id: "users.edit_success"}, {name: Users.getUsername(user)}), 'success')
}}
/>
</div>
@ -30,12 +32,13 @@ const UsersEdit = ({document, currentUser}, context) => {
UsersEdit.propTypes = {
document: React.PropTypes.object.isRequired,
user: React.PropTypes.object.isRequired,
currentUser: React.PropTypes.object.isRequired
};
UsersEdit.contextTypes = {
messages: React.PropTypes.object
messages: React.PropTypes.object,
intl: intlShape
};
UsersEdit.displayName = "UsersEdit";

View file

@ -1,7 +1,8 @@
import React, { PropTypes, Component } from 'react';
import Users from 'meteor/nova:users';
import { Link } from 'react-router';
const UsersName = ({user}) => <a className="users-name" href={Users.getProfileUrl(user)}>{Users.getDisplayName(user)}</a>
const UsersName = ({user}) => <Link className="users-name" to={Users.getProfileUrl(user)}>{Users.getDisplayName(user)}</Link>
UsersName.propTypes = {
user: React.PropTypes.object.isRequired,

View file

@ -3,6 +3,7 @@ import { FormattedMessage } from 'react-intl';
import { ListContainer } from "meteor/utilities:react-list-container";
import Posts from "meteor/nova:posts";
import Users from 'meteor/nova:users';
import { Link } from 'react-router';
const UsersProfile = ({user, currentUser}) => {
@ -19,6 +20,7 @@ const UsersProfile = ({user, currentUser}) => {
<ul>
{twitterName ? <li><a href={"http://twitter.com/" + twitterName}>@{twitterName}</a></li> : null }
{user.telescope.website ? <li><a href={user.telescope.website}>{user.telescope.website}</a></li> : null }
{Users.is.admin(currentUser) ? <li><Link to={Users.getEditUrl(user)}><FormattedMessage id="users.edit_account"/></Link></li> : null}
</ul>
<h3><FormattedMessage id="users.posts"/></h3>
<ListContainer

View file

@ -81,6 +81,7 @@ class Tags extends Component {
suggestions={this.state.suggestions}
handleDelete={this.handleDelete}
handleAddition={this.handleAddition}
minQueryLength={1}
classNames={{
// tags: 'tagsClass',
// tagInput: 'form-control'

View file

@ -75,6 +75,16 @@ Users.getProfileUrl = function (user, isAbsolute) {
};
Users.helpers({getProfileUrl: function (isAbsolute) {return Users.getProfileUrl(this, isAbsolute);}});
/**
* @summary Get a user's account edit URL
* @param {Object} user (note: we only actually need either the _id or slug properties)
* @param {Boolean} isAbsolute
*/
Users.getEditUrl = function (user, isAbsolute) {
return `${Users.getProfileUrl(user, isAbsolute)}/edit`;
};
Users.helpers({getEditUrl: function (isAbsolute) {return Users.getEditUrl(this, isAbsolute);}});
/**
* @summary Get a user's Twitter name
* @param {Object} user
@ -157,7 +167,6 @@ Users.userProfileCompleteById = function (userId) {return Users.userProfileCompl
Users.getSetting = function (user, settingName, defaultValue) {
user = user || Meteor.user();
defaultValue = defaultValue || null;
// all settings should be in the user.telescope namespace, so add "telescope." if needed
settingName = settingName.slice(0,10) === "telescope." ? settingName : "telescope." + settingName;