angular.module('quantum') .directive('formBuilder', ['$q', '$parse', '$http', '$templateCache', '$compile', '$document', '$timeout', function ($q, $parse, $http, $templateCache, $compile, $document, $timeout) { return { restrict: 'E', // supports using directive as element only scope:{ ngModel: '=', ngFormFields: '=', ngNumFormCols: '=', ngTriggerMethod: '=', ngShowFieldId: '=' }, link: function ($scope, element, attrs) { $scope.element=element; $scope.datetimeformat = "MM/dd/yyyy hh:mm a"; $scope.buildField = function (field, parentElement) { var x = ''; if(field.visible) { if (field.fieldType === 'LIST_MULTI_SELECT') { x = angular.element('
'+ '
'+ ''+ '
'); } else if (field.fieldType === 'LIST_BOX') { x = angular.element('
'); } else if((field.fieldType === 'text' || field.fieldType === 'TEXT') && field.validationType === 'DATE'){ x = angular.element('
'); } else if((field.fieldType === 'text' || field.fieldType === 'TEXT') && field.validationType === 'TIMESTAMP_MIN'){ x = angular.element('
'); } else if(field.fieldType === 'text' || field.fieldType === 'TEXT'){ x = angular.element('
'); } else if(field.fieldType === 'CHECK_BOX'){ x = angular.element('
'); } } parentElement.append(x); $compile(x)($scope); }; $scope.buildForm = function() { // create elements and a var tbl = angular.element("
"); var tblBody = angular.element(""); var row = angular.element(""); var ngFormFieldsLength = $scope.ngFormFields.length; for (var j = 0; j < ngFormFieldsLength; j++) { var cell = angular.element(""); $scope.buildField($scope.ngFormFields[j],cell); row.append(cell); if((j!=0 && (j+1)%$scope.ngNumFormCols==0) || j==(ngFormFieldsLength-1)){ tblBody.append(row); row = angular.element(""); } } tbl.append(tblBody); angular.element($scope.element).html(''); $scope.element.append(tbl); }; $scope.formFieldLuValues = {}; $scope.getEBZFormat = function() { if($scope.ngFormFields && $scope.ngFormFields.length>0){ $scope.ngFormFields.forEach(function(formField) { if(formField.fieldType === 'LIST_MULTI_SELECT') { $scope.ngModel[formField.fieldId]= []; if(formField.formFieldValues && formField.formFieldValues.length>0){ formField.formFieldValues.forEach(function(entry,i) { $scope.ngModel[formField.fieldId].push({ index: i, value: entry.id, title: entry.name, defaultValue: entry.defaultValue}); }); } } else if(formField.fieldType==='LIST_BOX') { $scope.formFieldLuValues[formField.fieldId]= []; if(formField.formFieldValues && formField.formFieldValues.length>0){ formField.formFieldValues.forEach(function(entry,i) { $scope.formFieldLuValues[formField.fieldId].push({ index: i, value: entry.id, title: entry.name}); if(entry.defaultValue){ $scope.ngModel[formField.fieldId]={ index: i, value: entry.id, title: entry.name}; } }); } } else if(formField.fieldType === 'text' || formField.fieldType === 'TEXT' || formField.validationType === 'DATE' || formField.validationType === 'TIMESTAMP_MIN') { if(formField.formFieldValues && formField.formFieldValues.length>0){ $scope.ngModel[formField.fieldId]=formField.formFieldValues[0].id; } } }); } }; $scope.$watch("ngFormFields",function(newValue,oldValue) { if($scope.ngFormFields){ $scope.getEBZFormat(); $scope.buildForm(); } }); $scope.triggerFormFields = function(triggerFlag) { if(triggerFlag){ $scope.element.html('Loading...'); $scope.ngTriggerMethod(); } }; } }; }]);