91 lines
3.1 KiB
JavaScript
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');
|
|
}
|
|
});
|