lemo-crm/web/app/components/form-footer-buttons.js

104 lines
3.4 KiB
JavaScript

import Ember from 'ember';
import BaseComponent from './base-component';
import { computed } from '@ember/object';
import { inject as service } from '@ember/service';
import $ from 'jquery'
export default BaseComponent.extend({
classNames: ['wizard-actions'],
type: 'create',
form: true,
state: service('state'),
successMsg: computed.alias('success-message'),
postUrl: computed.alias('post-url'),
backRouteName: computed.alias('back-route'),
backRouteParams: computed.alias('back-route-params'),
hideGoback: computed.alias('no-goback'),
hideSubmit: computed.alias('no-submit'),
'back-to-list': false,
backToList() {
const me = this;
let listRouteName = me.get('routeName').replace(/[^.]+$/, 'list');
// find route
if (!me.getRoute(listRouteName)) {
// no list route found, find parent
listRouteName = listRouteName.replace(/[^.]+\.[^.]+$/, 'list');
}
me.transitionToRoute(listRouteName, 1);
},
transitionToRoute(name, params, queryParams) {
const me = this;
let args = [name];
if (!Ember.isNone(params)) {
if (Ember.isArray(params)) {
args = args.concat(params);
}
else if (params !== false) {
args.push(params);
}
}
Ember.isNone(queryParams) || args.push({queryParams: queryParams});
me.get('router').transitionTo(...args);
},
actions: {
goback() {
let me = this;
let routeName = me.get('backRouteName');
if (routeName) {
me.transitionToRoute(routeName,
me.get('backRouteParams'),
me.get('backRouteQueryParams'));
}
else if (me.get('back-to-list')) {
me.backToList();
}
else {
me.get('state').back() || me.backToList();
}
},
save() {
let me = this;
if (!me.validate()) {
me.dialog.confirm('Are you sure to submit?', () => {
me.postData().then((m) => {
console.info('Post Model Result: ', m);
// write back
Ember.setProperties(me.getModel(), m);
me.alertMessage();
me.send('goback');
});
});
}
}
},
isCreate() {
return this.get('type') === 'create';
},
validate() {
let me = this;
let vr = me.get('service').validate(
me.getModel(), me.get('type') + 'Constraints');
me.set('route.controller.errors', vr || {});
return vr;
},
postData() {
let me = this;
let data = me.get('form') ?
new FormData($(me.element).closest('form')[0]) :
me.getModel();
let postUrl = me.get('postUrl');
if (postUrl) {
return me.get('store').ajaxPost(postUrl, data);
}
let service = me.get('service');
return me.isCreate() ? service.create(data) : service.update(data);
},
alertMessage() {
let me = this;
me.message.alert(me.get('successMsg') ||
(me.isCreate() ? 'Created successfully' : 'Updated successfully'));
},
getModel() {
return this.get('route.controller.model');
}
});