SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/layout-configuration/layout-renderer/layout-renderer-directive.js

143 lines
8.3 KiB
JavaScript

"use strict";
(function () {
'use strict';
angular.module('layoutConfigModule')
.directive('layoutRenderer', ['events', 'expressionEventManager', 'screenConfigurationModel', 'objectValueMapperService', '$timeout', function (events, expressionEventManager, screenConfigurationModel, objectValueMapperService, $timeout) {
return {
restrict: 'E',
replace: true,
templateUrl: 'views/layout-configuration/layout-renderer/layout-renderer.html',
scope: {
screenLayout: '=',
ticket: '=',
metadata: '=',
editMode: '=',
isNew: '='
},
link: function (scope, $element) {
var screenName, handleCompanyChange = function () {
if (_.isEmpty(objectValueMapperService.getFieldByName('customer'))) {
scope.ticket.company = objectValueMapperService.getExactValueByFieldName('company');
scope.ticket.selectedCompany = !scope.ticket.selectedCompany ? scope.ticket.company : scope.ticket.selectedCompany;
}
}, handleCustomerCompanyChange = function () {
if (_.isEmpty(objectValueMapperService.getFieldByName('customer')) && scope.ticket.ticketType === EntityVO.TYPE_WORKORDER) {
scope.ticket.company = objectValueMapperService.getExactValueByFieldName('customerCompany');
scope.ticket.selectedCompany = !scope.ticket.selectedCompany ? scope.ticket.company : scope.ticket.selectedCompany;
}
};
if (scope.isNew) {
objectValueMapperService.changeMode(2, true, scope.ticket);
scope.$on(events.WIDGET_VALUE_CHANGE, function (event, obj) {
console.log('Widget value changed :' + obj.fieldName);
expressionEventManager.handleOOTBFieldValueChange(obj.fieldName);
scope.$broadcast(events.REFRESH_FIELD_VALUES); //Added to check if group field is editable on widget value change
});
scope.$on(events.FIELD_VALUE_CHANGE, function (event, field) {
console.log('Field value changed :' + field.name);
expressionEventManager.handleFieldChange(field.name);
if (field.name === 'company') {
var companyField = objectValueMapperService.getFieldByName(field.name);
if (!companyField.isLocationCompany) {
handleCompanyChange();
}
}
else if (field.name === 'customerCompany') {
handleCustomerCompanyChange();
}
});
scope.$on(events.WIDGET_VALUE_CHANGE_FROM_WIZARD, function (event, obj) {
console.log('Widget value changed :' + obj.fieldName);
expressionEventManager.handleOOTBFieldValueChange(obj.fieldName);
});
scope.$on(events.FIELD_VALUE_CHANGE_FROM_WIZARD, function (event, field) {
console.log('Field value changed :' + field.name);
expressionEventManager.handleFieldChange(field.name);
});
/*
* Handle Ticket load event
* Place any code which requires to be done when all fields are loaded
*/
var noOfFieldAreasAttached = 0, totalFieldArea;
scope.$on(events.FIELD_AREA_ATTACHED, function (e, screenName) {
totalFieldArea = totalFieldArea || $element.find('.panel-field-area').length;
noOfFieldAreasAttached++;
if (totalFieldArea === noOfFieldAreasAttached) {
console.log('All custom-area directives are loaded!');
$timeout(function () {
if (screenName === ScreenConfigurationVO.prototype.CREATE_CHANGE_SCREEN) {
screenConfigurationModel.allFieldsLoaded.basicTab = true;
if (screenConfigurationModel.allFieldsLoaded.datesTab) {
expressionEventManager.handleTicketLoad();
}
}
else {
expressionEventManager.handleTicketLoad();
}
if (scope.ticket.type === EntityVO.TYPE_INCIDENT) {
expressionEventManager.handleOOTBFieldValueChange('customer');
}
});
}
});
if (scope.ticket.type === 'incident') {
screenName = ScreenConfigurationVO.prototype.CREATE_INCIDENT_SCREEN;
}
else if (scope.ticket.type === 'workorder') {
screenName = ScreenConfigurationVO.prototype.CREATE_WORK_ORDER_SCREEN;
}
else if (scope.ticket.type === 'change') {
screenName = ScreenConfigurationVO.prototype.CREATE_CHANGE_SCREEN;
}
else if (scope.ticket.type === 'task') {
screenName = ScreenConfigurationVO.prototype.CREATE_TASK_SCREEN;
}
}
else {
screenName = screenConfigurationModel.getScreenNameByTicketType(scope.ticket.type);
}
var screenPanels = screenConfigurationModel.screensCacheByName[screenName]
? screenConfigurationModel.screensCacheByName[screenName].panels : [];
function isPanelEmpty(panel) {
if (panel.panels) {
return panel.panels.reduce(function (isEmptyPanel, p) {
if (isEmptyPanel) {
isEmptyPanel = isPanelEmpty(p);
}
return isEmptyPanel;
}, true);
}
else {
return !screenPanels.some(function (screenPanel) {
return screenPanel.name === panel.name && (screenPanel.fields || []).length > 0;
});
}
}
scope.screenLayout.panels.forEach(function (panel) {
panel.emptyPanel = isPanelEmpty(panel);
});
scope.panelChildrenCount = function (screenPanelName) {
var screenPanel = _.find(screenPanels, { name: screenPanelName });
if (screenPanel && screenPanel.fields) {
return screenPanel.fields.length;
}
return 0;
};
scope.$on(events.TOGGLE_EDIT_MODE, handleToggleEditMode);
scope.$on(events.AFTER_SAVED_CHANGES, afterSaveChangesHandler);
scope.$on(events.DISCARD_CHANGES, handleDiscardChanges);
function handleToggleEditMode() {
scope.editMode = true;
}
function afterSaveChangesHandler() {
scope.editMode = false;
}
function handleDiscardChanges() {
scope.editMode = false;
}
}
};
}
]);
})();