83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
import { alias } from '@ember/object/computed';
|
|
import { later } from '@ember/runloop';
|
|
import BaseComponent from './basic-component';
|
|
import $ from 'jquery';
|
|
|
|
export default BaseComponent.extend({
|
|
'allow-blank': true,
|
|
allowBlank: alias('allow-blank'),
|
|
type: 'text',
|
|
step: 1, // for number
|
|
'confirm-update': true,
|
|
'on-updated': false,
|
|
actions: {
|
|
doEdit() {
|
|
const me = this;
|
|
me.set('oldValue', me.getFieldValue());
|
|
me.set('isEditing', true)
|
|
later(() => {
|
|
$('input[type="text"][name="' + me.get('model.id') + '"]', me.element).focus();
|
|
}, 320);
|
|
},
|
|
doUpdate() {
|
|
const me = this;
|
|
if (me.get('isUpdating')) {
|
|
console.info('Cell Is Updating, Ignore.');
|
|
return;
|
|
}
|
|
me.set('isUpdating', true);
|
|
let newValue = me.getFieldValue();
|
|
if (me.get('oldValue') != newValue) {
|
|
if (!me.get('allow-blank') && !newValue) {
|
|
me.get('message').warn('Property could not be blank');
|
|
// reset field value
|
|
me.resetValue();
|
|
me.set('isUpdating', false);
|
|
}
|
|
else {
|
|
if (me.get('confirm-update')) {
|
|
me.get('dialog').confirm('Are you sure to update?', () => {
|
|
me.execUpdate();
|
|
},
|
|
() => {
|
|
// reset field value
|
|
me.resetValue();
|
|
me.set('isUpdating', false);
|
|
});
|
|
}
|
|
else {
|
|
me.execUpdate();
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
console.info('Editable cell field value not changed.')
|
|
me.set('isUpdating', false);
|
|
}
|
|
me.set('isEditing', false);
|
|
}
|
|
},
|
|
getFieldValue() {
|
|
return this.get('model.' + this.get('field'));
|
|
},
|
|
resetValue() {
|
|
const me = this;
|
|
me.set('model.' + me.get('field'), me.get('oldValue'));
|
|
},
|
|
execUpdate() {
|
|
const me = this;
|
|
const model = me.get('model');
|
|
let onUpdated = me.get('on-updated');
|
|
let postUrl = me.get('post-url');
|
|
if (postUrl) {
|
|
let p = me.get('store').ajaxPost(postUrl, model);
|
|
onUpdated && p.then(onUpdated);
|
|
}
|
|
else {
|
|
let service = me.get('service');
|
|
onUpdated ? service.update(model).then(onUpdated) : service.update(model, true);
|
|
}
|
|
me.set('isUpdating', false);
|
|
}
|
|
});
|