From 48c2bbf6c71f5797a9cce035a80f5938fca7a7bc Mon Sep 17 00:00:00 2001 From: jeremythuff Date: Tue, 15 Nov 2016 16:25:16 -0600 Subject: [PATCH] Now able to add to repos and listen from models --- app/model/abstractModel.js | 34 +++++++++++++++++++++++----------- app/repo/abstractRepo.js | 35 +++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/app/model/abstractModel.js b/app/model/abstractModel.js index 8d2b686..be409ba 100644 --- a/app/model/abstractModel.js +++ b/app/model/abstractModel.js @@ -1,4 +1,4 @@ -core.factory("AbstractModel", function ($q, $sanitize, $timeout, WsApi, ValidationStore) { +core.factory("AbstractModel", function ($rootScope, $q, $sanitize, $timeout, WsApi, ValidationStore) { return function AbstractModel() { @@ -17,12 +17,15 @@ core.factory("AbstractModel", function ($q, $sanitize, $timeout, WsApi, Validati var validations; var validationResults = {}; + + $rootScope.$on("$locationChangeSuccess", function() { + listenCallbacks.length = 0; + }); var fetch = function() { if(mapping.instantiate !== undefined) { WsApi.fetch(mapping.instantiate).then(function(res) { - processResponse(res); - listen(); + processResponse(res); }); } } @@ -45,6 +48,9 @@ core.factory("AbstractModel", function ($q, $sanitize, $timeout, WsApi, Validati fetch(); } } + + listen(); + }; $timeout(function() { @@ -151,15 +157,19 @@ core.factory("AbstractModel", function ($q, $sanitize, $timeout, WsApi, Validati }; var listen = function() { - angular.extend(mapping.listen, {method: abstractModel.id}); - var notifyPromise = WsApi.listen(mapping.listen); - notifyPromise.then(null, null, function(res) { - processResponse(res); - angular.forEach(listenCallbacks, function(cb) { - cb(res); + + if(abstractModel.id && mapping.listen) { + angular.extend(mapping.listen, {method: "/"+abstractModel.id}); + var notifyPromise = WsApi.listen(mapping.listen); + notifyPromise.then(null, null, function(res) { + processResponse(res); + angular.forEach(listenCallbacks, function(cb) { + cb(res); + }); }); - }); - return notifyPromise; + return notifyPromise; + } + }; var processResponse = function(res) { @@ -170,9 +180,11 @@ core.factory("AbstractModel", function ($q, $sanitize, $timeout, WsApi, Validati if(meta.type != 'ERROR') { var payload = resObj.payload; + angular.forEach(payload, function(datum) { angular.extend(abstractModel, datum); }); + setData(abstractModel); } else { diff --git a/app/repo/abstractRepo.js b/app/repo/abstractRepo.js index 654e483..dd92fe1 100644 --- a/app/repo/abstractRepo.js +++ b/app/repo/abstractRepo.js @@ -1,4 +1,4 @@ -core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { +core.service("AbstractRepo", function ($rootScope, $q, WsApi, ValidationStore) { return function AbstractRepo(model, mapping) { @@ -18,14 +18,19 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { var validations = ValidationStore.getValidations(entityName); + $rootScope.$on("$locationChangeSuccess", function() { + listenCallbacks.length = 0; + }); + var build = function(data) { + initialized = false; return $q(function(resolve) { list.length = 0; angular.forEach(data, function(modelJson) { list.push(new model(modelJson)); }); - initialized = true + initialized = true; resolve(); }); }; @@ -36,7 +41,7 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { var keys = Object.keys(payload); angular.forEach(keys, function(key) { angular.extend(repoObj, payload[key]); - }) + }); return repoObj; }; @@ -64,6 +69,16 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { abstractRepo.ValidationResults = {}; + abstractRepo.add = function(modelJson) { + initialized = true; + build([modelJson]); + }; + + abstractRepo.addAll = function(modelJsons) { + initialized = true; + build(modelJsons); + }; + abstractRepo.getEntityName = function() { return entityName; }; @@ -74,7 +89,7 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { abstractRepo.count = function() { if(!initialized) { - console.error('Repo not initialized!'); + console.warn('Repo ('+entityName+') not initialized!'); } return list.length; }; @@ -83,6 +98,10 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { if(mapping.lazy) { fetch(); } + return abstractRepo.getContents(); + }; + + abstractRepo.getContents = function() { return list; }; @@ -110,14 +129,14 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { return list[key]; } } - } + }; if(initialized) { match = find(id); } else { // TODO: think of a way to find after ready and have binding in list - console.error("Repo not initialized!"); + console.warn('Repo ('+entityName+') not initialized!'); } return match; @@ -129,7 +148,6 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { promise.then(function(res) { if(angular.fromJson(res.body).meta.type == "INVALID") { angular.extend(abstractRepo, angular.fromJson(res.body).payload); - console.log(abstractRepo); } }); return promise; @@ -141,7 +159,6 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { promise.then(function(res) { if(angular.fromJson(res.body).meta.type == "INVALID") { angular.extend(abstractRepo, angular.fromJson(res.body).payload); - console.log(abstractRepo); } }); return promise; @@ -154,7 +171,6 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { promise.then(function(res) { if(angular.fromJson(res.body).meta.type == "INVALID") { angular.extend(abstractRepo, angular.fromJson(res.body).payload); - console.log(abstractRepo); } }); return promise; @@ -167,7 +183,6 @@ core.service("AbstractRepo", function ($q, WsApi, ValidationStore) { promise.then(function(res) { if(angular.fromJson(res.body).meta.type == "INVALID") { angular.extend(abstractRepo, angular.fromJson(res.body).payload); - console.log(abstractRepo); } }); return promise;