lemo-crm/web/app/components/form-footer-buttons.js
2017-07-24 23:51:46 +08:00

91 lines
3.1 KiB
JavaScript

import Ember from 'ember';
import BaseComponent from './base-component';
export default BaseComponent.extend({
classNames: ['wizard-actions'],
type: 'create',
form: true,
didReceiveAttrs() {
const me = this;
let backRouteName = me.get('backRouteName');
if (Ember.isNone(backRouteName)) {
let listRouteName = me.get('routeName').replace(/[^.]+$/, 'list');
// find route
if (!me.getRoute(listRouteName)) {
// no list route found, find parent
listRouteName = listRouteName.replace(/[^.]+\.[^.]+$/, 'list');
}
me.set('backRouteName', listRouteName);
// list route params
Ember.isNone(me.get('backRouteParams'))
&& me.set('backRouteParams', 1);
}
},
actions: {
goback() {
let me = this;
let router = me.get('router');
let routeName = me.get('backRouteName');
let routeParams = me.get('backRouteParams');
let queryParams = me.get('backRouteQueryParams');
let params = [routeName];
if (!Ember.isNone(routeParams)) {
if (Ember.isArray(routeParams)) {
params = params.concat(routeParams);
}
else if (routeParams !== false) {
params.push(routeParams);
}
}
Ember.isNone(queryParams) ||
params.push({queryParams: queryParams});
router.transitionTo(...params);
},
save() {
let me = this;
if (!me.validate()) {
me.dialog.confirm('Are you sure to submit?', () => {
me.postData().then((m) => {
Ember.Logger.info('Post Model Result: ', m);
// write back
// TODO write update 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.$().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');
}
});