"use strict"; (function () { 'use strict'; angular.module('myitsmApp') .directive('changeClass', ['fieldValidationModel', 'events', function (fieldValidationModel, events) { return { restrict: 'E', replace: true, templateUrl: 'views/custom-widgets/change-class-directive.html', scope: { data: '=', metadata: '=', isEditable: '=', isNew: '=?' }, link: function (scope, element) { scope.draftTicket = {}; if (scope.$parent.isNew) { scope.fieldLengthForSm6 = true; } else { if (element.closest(".layout-renderer__child-column")[0]) { scope.fieldLengthForSm6 = _.includes(element.closest(".layout-renderer__child-column")[0].className, 'col-sm-6'); scope.fieldLengthForSm4 = _.includes(element.closest(".layout-renderer__child-column")[0].className, 'col-sm-4'); } } function init() { scope.changeMetadata = scope.metadata; scope.draftTicket.timing = _.first(_.where(scope.changeMetadata.timings, { name: (scope.isNew ? scope.data.value.timing.name : scope.data.value.timing) })); scope.draftTicket.timingReason = _.first(_.where(scope.changeMetadata.timingReasons, { name: (scope.isNew ? scope.data.value.timingReason.name : scope.data.value.timingReason) })); } scope.$watch('data.setValueFlag', function (value) { if (value && value !== '#$#') { var setValue = _.get(value, 'timing', value); if (_.has(value, 'timingReason')) { scope.draftTicket.timingReason = _.first(_.where(scope.changeMetadata.timingReasons, { name: _.get(value, 'timingReason') })); if (_.has(value, 'timing')) { setValue = _.get(value, 'timing'); // should override default value set in the beginning in _.get, because value contains } } if (setValue) { scope.draftTicket.timing = _.first(_.where(scope.changeMetadata.timings, { name: setValue })); } scope.updateTiming(); scope.data.setValueFlag = '#$#'; } }); scope.isFieldRequired = function (field) { var fieldRequired = false; if (scope.draftTicket.timing) { fieldRequired = fieldValidationModel.isFieldRequired(EntityVO.TYPE_CHANGE, 'Draft', scope.draftTicket.timing.name, field); } return fieldRequired; }; 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; init(); scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name }); } scope.updateTiming = function () { scope.data.value.timing = scope.isNew ? scope.draftTicket.timing : scope.draftTicket.timing.name; scope.data.value.timingReason = ''; scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name, memberName: 'timing' }); scope.$emit(events.CHANGE_CLASS_VALUE_CHANGED, scope.data.value.timing); }; scope.updateTimingReason = function () { scope.data.value.timingReason = scope.isNew ? scope.draftTicket.timingReason : scope.draftTicket.timingReason.name; scope.$emit(events.WIDGET_VALUE_CHANGE, { fieldName: scope.data.name, memberName: 'timingReason' }); }; init(); } }; } ]); })();