104 lines
3.4 KiB
JavaScript
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');
|
|
}
|
|
}); |