import Ember from 'ember';
import { copyViewDefinition } from '../utils/fd-copy-view-definition';
import FdLoadingForTransitionMixin from '../mixins/fd-loading-for-transition';
export default Ember.Route.extend(FdLoadingForTransitionMixin, {
currentProjectContext: Ember.inject.service('fd-current-project-context'),
actions: {
/**
See [EmberJS API](https://emberjs.com/).
@method actions.didTransition
*/
didTransition() {
Ember.$('.full.height').on('click.fd-editform-constructor', (e) => {
let path = Ember.get(e, 'originalEvent.path') || [];
let editRow = path.find((element) => Ember.$(element).hasClass('fd-editform-row'));
if (Ember.isNone(editRow)) {
this.get('controller').send('selectItem');
}
});
},
},
queryParams: {
classId: { refreshModel: true },
},
model: function(params) {
let modelHash = {
editform: undefined,
originalDefinition: undefined,
dataobject: undefined,
classes: undefined,
views: undefined,
inheritances: undefined,
associations: undefined,
aggregations: undefined,
stage: undefined,
};
let store = this.get('store');
modelHash.stage = this.get('currentProjectContext').getCurrentStageModel();
let allClassesInStore = store.peekAll('fd-dev-class');
let allViewsInStore = store.peekAll('fd-dev-view');
let allInheritancesInStore = store.peekAll('fd-dev-inheritance');
let allAssociationsInStore = store.peekAll('fd-dev-association');
let allAggregationsInStore = store.peekAll('fd-dev-aggregation');
modelHash.classes = allClassesInStore.filterBy('stage.id', modelHash.stage.get('id'));
modelHash.views = allViewsInStore.filter(function(item) {
return !Ember.isNone(modelHash.classes.findBy('id', item.get('class.id')));
});
modelHash.inheritances = allInheritancesInStore.filterBy('stage.id', modelHash.stage.get('id'));
modelHash.associations = allAssociationsInStore.filterBy('stage.id', modelHash.stage.get('id'));
modelHash.aggregations = allAggregationsInStore.filterBy('stage.id', modelHash.stage.get('id'));
// Editform.
let editform = store.peekRecord('fd-dev-class', params.id);
if (!editform.get('caption')) {
editform.set('caption', editform.get('name'));
}
modelHash.editform = editform;
// Dataobject.
let dataobjectId = editform.get('formViews.firstObject.view.class.id');
modelHash.dataobject = store.peekRecord('fd-dev-class', dataobjectId);
return modelHash;
},
/**
A hook you can use to setup the controller for the current route.
[More info](http://emberjs.com/api/classes/Ember.Route.html#method_setupController).
@method setupController
@param {Ember.Controller} controller
@param {Object} model
*/
setupController(controller, model) {
this._super(...arguments);
model.originalDefinition = copyViewDefinition(model.editform.get('formViews.firstObject.view.definition'));
controller.set('selectedItem', undefined);
controller.set('_showNotUsedAttributesTree', false);
},
/**
A hook you can use to reset controller values either when the model changes or the route is exiting.
[More info](http://emberjs.com/api/classes/Ember.Route.html#method_resetController).
@method resetController
@param {Ember.Controller} controller
@param {Boolean} isExisting
@param {Object} transition
*/
resetController(controller, isExiting) {
this._super(...arguments);
if (isExiting) {
Ember.$('.full.height').off('click.fd-editform-constructor');
}
let store = this.get('store');
store.peekAll('fd-dev-class').forEach((item) => item.rollbackAll());
store.peekAll('fd-dev-stage').forEach((item) => item.rollbackAll());
store.peekAll('fd-dev-association').forEach((item) => item.rollbackAll());
store.peekAll('fd-dev-aggregation').forEach((item) => item.rollbackAll());
let definition = controller.get('model.editform.formViews.firstObject.view.definition');
definition.clear();
definition.pushObjects(controller.get('model.originalDefinition'));
},
});