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); } });