mirror of
https://github.com/discourse/discourse.git
synced 2025-03-09 14:34:35 +00:00
FIX: Admin user fields weren't showing errors
Also updated it to remove deprecations and item controller
This commit is contained in:
parent
84549929ba
commit
ac2f5cbdab
@ -0,0 +1,68 @@
|
||||
import { bufferedProperty } from 'discourse/mixins/buffered-content';
|
||||
import UserField from 'admin/models/user-field';
|
||||
import { popupAjaxError } from 'discourse/lib/ajax-error';
|
||||
|
||||
export default Ember.Component.extend(bufferedProperty('userField'), {
|
||||
editing: Ember.computed.empty('userField.id'),
|
||||
classNameBindings: [':user-field'],
|
||||
|
||||
_focusOnEdit: function() {
|
||||
if (this.get('editing')) {
|
||||
Ember.run.scheduleOnce('afterRender', this, '_focusName');
|
||||
}
|
||||
}.observes('editing').on('didInsertElement'),
|
||||
|
||||
_focusName: function() {
|
||||
$('.user-field-name').select();
|
||||
},
|
||||
|
||||
fieldName: function() {
|
||||
return UserField.fieldTypeById(this.get('userField.field_type')).get('name');
|
||||
}.property('userField.field_type'),
|
||||
|
||||
flags: function() {
|
||||
const ret = [];
|
||||
if (this.get('userField.editable')) {
|
||||
ret.push(I18n.t('admin.user_fields.editable.enabled'));
|
||||
}
|
||||
if (this.get('userField.required')) {
|
||||
ret.push(I18n.t('admin.user_fields.required.enabled'));
|
||||
}
|
||||
if (this.get('userField.show_on_profile')) {
|
||||
ret.push(I18n.t('admin.user_fields.show_on_profile.enabled'));
|
||||
}
|
||||
|
||||
return ret.join(', ');
|
||||
}.property('userField.editable', 'userField.required', 'userField.show_on_profile'),
|
||||
|
||||
actions: {
|
||||
save: function() {
|
||||
const self = this;
|
||||
const attrs = this.get('buffered').getProperties('name', 'description', 'field_type', 'editable', 'required', 'show_on_profile');
|
||||
|
||||
this.get('userField').save(attrs).then(function(res) {
|
||||
self.set('userField.id', res.user_field.id);
|
||||
self.set('editing', false);
|
||||
self.commitBuffer();
|
||||
}).catch(popupAjaxError);
|
||||
},
|
||||
|
||||
edit: function() {
|
||||
this.set('editing', true);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.sendAction('destroyAction', this.get('userField'));
|
||||
},
|
||||
|
||||
cancel: function() {
|
||||
const id = this.get('userField.id');
|
||||
if (Ember.isEmpty(id)) {
|
||||
this.sendAction('destroyAction', this.get('userField'));
|
||||
} else {
|
||||
this.rollbackBuffer();
|
||||
this.set('editing', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
@ -1,64 +0,0 @@
|
||||
import UserField from 'admin/models/user-field';
|
||||
import BufferedContent from 'discourse/mixins/buffered-content';
|
||||
|
||||
export default Ember.ObjectController.extend(BufferedContent, {
|
||||
needs: ['admin-user-fields'],
|
||||
editing: Ember.computed.empty('id'),
|
||||
|
||||
fieldName: function() {
|
||||
return UserField.fieldTypeById(this.get('field_type')).get('name');
|
||||
}.property('field_type'),
|
||||
|
||||
flags: function() {
|
||||
var ret = [];
|
||||
if (this.get('editable')) {
|
||||
ret.push(I18n.t('admin.user_fields.editable.enabled'));
|
||||
}
|
||||
if (this.get('required')) {
|
||||
ret.push(I18n.t('admin.user_fields.required.enabled'));
|
||||
}
|
||||
if (this.get('show_on_profile')) {
|
||||
ret.push(I18n.t('admin.user_fields.show_on_profile.enabled'));
|
||||
}
|
||||
|
||||
return ret.join(', ');
|
||||
}.property('editable', 'required', 'show_on_profile'),
|
||||
|
||||
actions: {
|
||||
save: function() {
|
||||
var self = this;
|
||||
|
||||
var attrs = this.get('buffered').getProperties('name', 'description', 'field_type', 'editable', 'required', 'show_on_profile');
|
||||
|
||||
this.get('model').save(attrs).then(function(res) {
|
||||
self.set('model.id', res.user_field.id);
|
||||
self.set('editing', false);
|
||||
self.commitBuffer();
|
||||
}).catch(function(e) {
|
||||
var msg = I18n.t("generic_error");
|
||||
if (e.responseJSON && e.responseJSON.errors) {
|
||||
msg = I18n.t("generic_error_with_reason", {error: e.responseJSON.errors.join('. ')});
|
||||
}
|
||||
bootbox.alert(msg);
|
||||
});
|
||||
},
|
||||
|
||||
edit: function() {
|
||||
this.set('editing', true);
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
this.get('controllers.admin-user-fields').send('destroy', this.get('model'));
|
||||
},
|
||||
|
||||
cancel: function() {
|
||||
var id = this.get('id');
|
||||
if (Ember.isEmpty(id)) {
|
||||
this.get('controllers.admin-user-fields').send('destroy', this.get('model'));
|
||||
} else {
|
||||
this.rollbackBuffer();
|
||||
this.set('editing', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
@ -0,0 +1,47 @@
|
||||
{{#if editing}}
|
||||
<div class='row'>
|
||||
<div class='form-element'>
|
||||
{{input value=buffered.name class="user-field-name" placeholder=userFieldsName}}
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
{{input value=buffered.description class="user-field-desc" placeholder=userFieldsDescription}}
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
{{combo-box content=fieldTypes valueAttribute="id" value=buffered.field_type}}
|
||||
</div>
|
||||
<div class='form-element controls'>
|
||||
{{d-button action="save" class="btn-primary" icon="check" label="admin.user_fields.save"}}
|
||||
{{d-button action="cancel" class="btn-danger" icon="times" label="admin.user_fields.cancel"}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class='form-element'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=buffered.editable}} {{i18n 'admin.user_fields.editable.title'}}
|
||||
</label>
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=buffered.required}} {{i18n 'admin.user_fields.required.title'}}
|
||||
</label>
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=buffered.show_on_profile}} {{i18n 'admin.user_fields.show_on_profile.title'}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="row">
|
||||
<div class='form-display'><strong>{{userField.name}}</strong></div>
|
||||
<div class='form-display'>{{{userField.description}}}</div>
|
||||
<div class='form-display'>{{fieldName}}</div>
|
||||
<div class='form-display'></div>
|
||||
<div class='form-element controls'>
|
||||
{{d-button action="edit" class="btn-default" icon="pencil" label="admin.user_fields.edit"}}
|
||||
{{d-button action="destroy" class="btn-danger" icon="trash-o" label="admin.user_fields.delete"}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">{{flags}}</div>
|
||||
{{/if}}
|
||||
<div class='clearfix'></div>
|
@ -4,54 +4,8 @@
|
||||
<p class="desc">{{i18n 'admin.user_fields.help'}}</p>
|
||||
|
||||
{{#if model}}
|
||||
{{#each f in model itemController="admin-user-field-item" itemView="admin-user-field-item"}}
|
||||
{{#if f.editing}}
|
||||
<div class='row'>
|
||||
<div class='form-element'>
|
||||
{{input value=f.buffered.name class="user-field-name" placeholder=userFieldsName}}
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
{{input value=f.buffered.description class="user-field-desc" placeholder=userFieldsDescription}}
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
{{combo-box content=fieldTypes valueAttribute="id" value=f.buffered.field_type}}
|
||||
</div>
|
||||
<div class='form-element controls'>
|
||||
<button {{action "save"}}class='btn btn-primary'>{{fa-icon 'check'}} {{i18n 'admin.user_fields.save'}}</button>
|
||||
<button {{action "cancel"}} class='btn btn-danger'>{{fa-icon 'times'}} {{i18n 'admin.user_fields.cancel'}}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class='form-element'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=f.buffered.editable}} {{i18n 'admin.user_fields.editable.title'}}
|
||||
</label>
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=f.buffered.required}} {{i18n 'admin.user_fields.required.title'}}
|
||||
</label>
|
||||
</div>
|
||||
<div class='form-element'>
|
||||
<label>
|
||||
{{input type="checkbox" checked=f.buffered.show_on_profile}} {{i18n 'admin.user_fields.show_on_profile.title'}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="row">
|
||||
<div class='form-display'><strong>{{f.name}}</strong></div>
|
||||
<div class='form-display'>{{{f.description}}}</div>
|
||||
<div class='form-display'>{{f.fieldName}}</div>
|
||||
<div class='form-display'></div>
|
||||
<div class='form-element controls'>
|
||||
<button {{action "edit"}}class='btn btn-default'>{{fa-icon 'pencil'}} {{i18n 'admin.user_fields.edit'}}</button>
|
||||
<button {{action "destroy"}}class='btn btn-danger'>{{fa-icon 'trash-o'}} {{i18n 'admin.user_fields.delete'}}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">{{f.flags}}</div>
|
||||
{{/if}}
|
||||
<div class='clearfix'></div>
|
||||
{{#each model as |uf|}}
|
||||
{{admin-user-field-item userField=uf fieldTypes=fieldTypes destroyAction="destroy"}}
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
|
||||
|
@ -1,13 +0,0 @@
|
||||
export default Ember.View.extend({
|
||||
classNameBindings: [':user-field'],
|
||||
|
||||
_focusOnEdit: function() {
|
||||
if (this.get('controller.editing')) {
|
||||
Ember.run.scheduleOnce('afterRender', this, '_focusName');
|
||||
}
|
||||
}.observes('controller.editing').on('didInsertElement'),
|
||||
|
||||
_focusName: function() {
|
||||
$('.user-field-name').select();
|
||||
}
|
||||
});
|
@ -1,16 +1,20 @@
|
||||
/* global BufferedProxy: true */
|
||||
export default Ember.Mixin.create({
|
||||
buffered: function() {
|
||||
return Em.ObjectProxy.extend(BufferedProxy).create({
|
||||
content: this.get('content')
|
||||
});
|
||||
}.property('content'),
|
||||
export function bufferedProperty(property) {
|
||||
return Ember.Mixin.create({
|
||||
buffered: function() {
|
||||
return Em.ObjectProxy.extend(BufferedProxy).create({
|
||||
content: this.get(property)
|
||||
});
|
||||
}.property(property),
|
||||
|
||||
rollbackBuffer: function() {
|
||||
this.get('buffered').discardBufferedChanges();
|
||||
},
|
||||
rollbackBuffer: function() {
|
||||
this.get('buffered').discardBufferedChanges();
|
||||
},
|
||||
|
||||
commitBuffer: function() {
|
||||
this.get('buffered').applyBufferedChanges();
|
||||
}
|
||||
});
|
||||
commitBuffer: function() {
|
||||
this.get('buffered').applyBufferedChanges();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default bufferedProperty('content');
|
||||
|
Loading…
x
Reference in New Issue
Block a user