"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; } }; 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') { handleCompanyChange(); } }); 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 () { totalFieldArea = totalFieldArea || $element.find('.panel-field-area').length; noOfFieldAreasAttached++; if (totalFieldArea === noOfFieldAreasAttached) { console.log('All custom-area directives are loaded!'); $timeout(function () { 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; } } }; } ]); })();