UX: Show user fields when reviewing a user
This commit is contained in:
parent
64ec4a6a1b
commit
9c8cc73c39
|
@ -66,16 +66,7 @@ export default Ember.Controller.extend(CanCheckEmails, {
|
||||||
|
|
||||||
@computed("model.user_fields.[]")
|
@computed("model.user_fields.[]")
|
||||||
userFields(userFields) {
|
userFields(userFields) {
|
||||||
const siteUserFields = this.site.get("user_fields");
|
return this.site.collectUserFields(userFields);
|
||||||
|
|
||||||
if (!Ember.isEmpty(siteUserFields)) {
|
|
||||||
return siteUserFields.map(uf => {
|
|
||||||
const value = userFields ? userFields[uf.get("id").toString()] : null;
|
|
||||||
return { name: uf.get("name"), value };
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return [];
|
|
||||||
},
|
},
|
||||||
|
|
||||||
preferencesPath: fmt("model.username_lower", userPath("%@/preferences")),
|
preferencesPath: fmt("model.username_lower", userPath("%@/preferences")),
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
import { default as computed } from "ember-addons/ember-computed-decorators";
|
||||||
|
|
||||||
|
export default Ember.Component.extend({
|
||||||
|
@computed("reviewable.user_fields")
|
||||||
|
userFields(fields) {
|
||||||
|
return this.site.collectUserFields(fields);
|
||||||
|
}
|
||||||
|
});
|
|
@ -27,6 +27,21 @@ const Site = RestModel.extend({
|
||||||
topicCountDesc: ["topic_count:desc"],
|
topicCountDesc: ["topic_count:desc"],
|
||||||
categoriesByCount: Ember.computed.sort("categories", "topicCountDesc"),
|
categoriesByCount: Ember.computed.sort("categories", "topicCountDesc"),
|
||||||
|
|
||||||
|
collectUserFields(fields) {
|
||||||
|
fields = fields || {};
|
||||||
|
|
||||||
|
let siteFields = this.get("user_fields");
|
||||||
|
|
||||||
|
if (!Ember.isEmpty(siteFields)) {
|
||||||
|
return siteFields.map(f => {
|
||||||
|
let value = fields ? fields[f.id.toString()] : null;
|
||||||
|
value = value || "—".htmlSafe();
|
||||||
|
return { name: f.name, value };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
|
||||||
// Sort subcategories under parents
|
// Sort subcategories under parents
|
||||||
@computed("categoriesByCount", "categories.[]")
|
@computed("categoriesByCount", "categories.[]")
|
||||||
sortedCategories(cats) {
|
sortedCategories(cats) {
|
||||||
|
|
|
@ -1,25 +1,33 @@
|
||||||
<div class='reviewable-user-info'>
|
<div class='reviewable-user-info'>
|
||||||
<div class='reviewable-user-details username'>
|
<div class='reviewable-user-fields'>
|
||||||
<div class='name'>{{i18n "review.user.username"}}</div>
|
<div class='reviewable-user-details username'>
|
||||||
<div class='value'>
|
<div class='name'>{{i18n "review.user.username"}}</div>
|
||||||
{{#if reviewable.link_admin}}
|
<div class='value'>
|
||||||
<a href={{get-url (concat "/admin/users/" reviewable.user_id "/" reviewable.payload.username)}}>
|
{{#if reviewable.link_admin}}
|
||||||
|
<a href={{get-url (concat "/admin/users/" reviewable.user_id "/" reviewable.payload.username)}}>
|
||||||
|
{{reviewable.payload.username}}
|
||||||
|
</a>
|
||||||
|
{{else}}
|
||||||
{{reviewable.payload.username}}
|
{{reviewable.payload.username}}
|
||||||
</a>
|
{{/if}}
|
||||||
{{else}}
|
</div>
|
||||||
{{reviewable.payload.username}}
|
|
||||||
{{/if}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{{#if reviewable.payload.name}}
|
||||||
{{#if reviewable.payload.name}}
|
<div class='reviewable-user-details name'>
|
||||||
<div class='reviewable-user-details name'>
|
<div class='name'>{{i18n "review.user.name"}}</div>
|
||||||
<div class='name'>{{i18n "review.user.name"}}</div>
|
<div class='value'>{{reviewable.payload.name}}</div>
|
||||||
<div class='value'>{{reviewable.payload.name}}</div>
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
<div class='reviewable-user-details email'>
|
||||||
|
<div class='name'>{{i18n "review.user.email"}}</div>
|
||||||
|
<div class='value'>{{reviewable.payload.email}}</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{#each userFields as |f|}}
|
||||||
<div class='reviewable-user-details email'>
|
<div class='reviewable-user-details user-field'>
|
||||||
<div class='name'>{{i18n "review.user.email"}}</div>
|
<div class='name'>{{f.name}}</div>
|
||||||
<div class='value'>{{reviewable.payload.email}}</div>
|
<div class='value'>{{f.value}}</div>
|
||||||
|
</div>
|
||||||
|
{{/each}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{yield}}
|
{{yield}}
|
||||||
|
|
|
@ -46,8 +46,14 @@
|
||||||
|
|
||||||
.reviewable-user-info {
|
.reviewable-user-info {
|
||||||
margin: 0.5em 0;
|
margin: 0.5em 0;
|
||||||
|
.reviewable-user-fields {
|
||||||
|
margin-bottom: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
.reviewable-user-details {
|
.reviewable-user-details {
|
||||||
|
border-bottom: 1px solid $primary-low;
|
||||||
|
padding-bottom: 0.25em;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
.name {
|
.name {
|
||||||
width: 8em;
|
width: 8em;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
class ReviewableUserSerializer < ReviewableSerializer
|
class ReviewableUserSerializer < ReviewableSerializer
|
||||||
|
|
||||||
attributes :link_admin
|
attributes :link_admin, :user_fields
|
||||||
|
|
||||||
payload_attributes(
|
payload_attributes(
|
||||||
:username,
|
:username,
|
||||||
|
@ -12,4 +12,12 @@ class ReviewableUserSerializer < ReviewableSerializer
|
||||||
scope.is_staff? && object.target.present?
|
scope.is_staff? && object.target.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def user_fields
|
||||||
|
object.target.user_fields
|
||||||
|
end
|
||||||
|
|
||||||
|
def include_user_fields?
|
||||||
|
object.target.present? && object.target.user_fields.present?
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -385,6 +385,7 @@ en:
|
||||||
username: "Username"
|
username: "Username"
|
||||||
email: "Email"
|
email: "Email"
|
||||||
name: "Name"
|
name: "Name"
|
||||||
|
fields: "Fields"
|
||||||
|
|
||||||
user_percentage:
|
user_percentage:
|
||||||
summary:
|
summary:
|
||||||
|
|
Loading…
Reference in New Issue