(function() { 'use strict'; var app = angular.module('app', [ 'ngRoute', 'ngAnimate', 'ngResource' ]); app.directive( 'catalogField', function() { return { restrict : 'A', // only activate on element // attribute require : '?ngModel', // get a hold of // NgModelController link : function(scope, element, attrs, ngModel) { if (!ngModel) return; // do nothing if no ng-model // TODO: Replace the hard-coded form ID by the // appropiate dynamic field scope.catalogForm[attrs.name] = scope.catalogForm['{{field.name}}']; scope.catalogForm[attrs.name].$name = attrs.name; } }; }); app.factory('Catalogs', function($http, $resource) { var CatalogsService = { resources : { application : $resource('application/:appId', { appId : '@id' }, { update : { method : "PUT" }, test: { url: '/application/:appId', method : "DELETE", params : { appId : '@id' } } }), user : $resource('user/:userId', { userId : '@id' }, { update : { method : "PUT" } }), licensetype : $resource('licenseType/:licenseTypeId', { licenseTypeId : '@id' }, { update : { method : "PUT" } }) }, list : function(initFn) { $http.get('js/catalogs.json').success(function(data) { console.log(data); CatalogsService.data = data; initFn(); }) return CatalogsService; }, getName : function(index) { return CatalogsService.data ? CatalogsService.data[index].name : ''; }, getResource : function(index) { return CatalogsService.data ? CatalogsService.data[index].resource : ''; }, getMetadata : function(index) { return CatalogsService.data ? CatalogsService.data[index] : {}; }, save: function(catalog, data) { var resource = CatalogsService.resources[catalog.toLowerCase()]; function success(data) { console.log('success') console.log(data) } function fail(data, status) { console.log('error') console.error(data) console.error(status) } if (data.id && data.id !== '') return resource.update(data, success, fail) else return resource.save(data, success, fail) }, remove: function(catalog, data) { var resource = CatalogsService.resources[catalog.toLowerCase()]; function success(data) { console.log('success') console.log(data) } function fail(data, status) { console.log('error') console.error(data) console.error(status) } return resource.remove({}, data, success, fail) }, query: function(catalog, callback) { console.log('HI catalog ???? ' + catalog); var resource = CatalogsService.resources[catalog.toLowerCase()]; function success(data) { console.log('success') console.log(data) } function fail(data, status) { console.log('error') console.error(data) console.error(status) } return resource.query({}, success, fail); } } return CatalogsService; }); app.controller('CatalogsCtrl', [ '$scope', '$http', 'Catalogs', function($scope, $http, Catalogs) { $scope.formu = {}; $scope.catalogIndex = 0; $scope.catalogs = Catalogs.list(function() { $scope.catalogMetadata = Catalogs.getMetadata($scope.catalogIndex); $scope.list = Catalogs.query(Catalogs.getResource($scope.catalogIndex)); }); $scope.catalogMetadata = {}; $scope.selectCatalog = function(index, $event) { $scope.catalogIndex = index; $scope.catalogMetadata = Catalogs.getMetadata($scope.catalogIndex); $scope.list = Catalogs.query(Catalogs.getResource($scope.catalogIndex)); console.log($event); } $scope.edit = function(data) { $scope.showForm = true; $scope.isNew = false; for (var k in data) { if (k.indexOf('$') !== 0) $scope.formu[k] = data[k] } // TODO: Load in formu values for Form // $scope.formu = {}; } $scope.delete = function(data) { BootstrapDialog.confirm('The record will be deleted, are you sure?', function(result){ if(result) { var catalogName = Catalogs.getResource($scope.catalogIndex); var promise = Catalogs.remove(catalogName, data).$promise; promise.then(function(data) { $scope.list = Catalogs.query(catalogName); }); } }); $scope.showForm = false; $scope.isNew = false; // TODO: Load in formu values for Form // $scope.formu = {}; } } ]); app.controller('CatalogFormCtrl', [ '$scope', '$http', 'Catalogs', function($scope, $http, Catalogs) { $scope.showForm = false; $scope.scope = $scope; console.log('Form: currentCatalog:' + $scope.cataLogIndex); $scope.editNew = function() { $scope.showForm = true; $scope.isNew = true; // $scope.formu = {}; } $scope.cancel = function() { $scope.showForm = false; } $scope.saveCatalog = function() { if ($scope.catalogForm.$invalid) { alert(JSON.stringify($scope.catalogForm)) } else { var catalogName = Catalogs.getResource($scope.catalogIndex); var promise = Catalogs.save(catalogName, $scope.formu).$promise; promise.then(function(data) { $scope.$parent.list = Catalogs.query(catalogName); }); } } } ]); app.controller('CatalogListCtrl', [ '$scope', '$http', '$filter', 'Catalogs', function($scope, $http, $filter, Catalogs) { console.log('List: currentCatalog: ' + $scope.currentCatalog); var _indexOfField = function(name) { if (!$scope.catalogMetadata) return -1; for (var i = $scope.catalogMetadata.fields.length - 1; i >= 0 && $scope.catalogMetadata.fields[i].name !== name; i--); return i; } $scope.print = function(name, value) { var index = _indexOfField(name); if (index === -1) return value; var type = $scope.catalogMetadata.fields[index].type; return type === 'date' ? $filter('date')(value, 'yyyy-MM-dd') : value; } $scope.display = function(name) { var index = _indexOfField(name); return index === -1 ? '' : $scope.catalogMetadata.fields[index].display; } } ]); })();