zettapi_client
Version:
Admin panel and client-side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project.
70 lines (57 loc) • 2.07 kB
JavaScript
app.service('$lookup', function (zapi, mySocket, $rootScope, $routeParams) {
var lookup = {};
var listeners = {};
this.get = function (entity) {
if (entity) {
if (!lookup[entity]) lookup[entity] = [];
return lookup[entity];
}
return lookup;
};
this.set = function (entity, data) {
if (!entity) return console.log("$lookup.set failed for entity " + entity);
var entityObj = zapi.entityMap[entity];
if (!lookup[entity]) lookup[entity] = [];
if (data instanceof Array) lookup[entity] = data;
else {
if (typeof data !== 'object') return console.log("$lookup.set failed for entity " + entity + " because data is not an object", data);
var finder = function (entityObj) {
if (entityObj) {
var idField = entityObj.id || "_id";
return function (item) {
return item[idField] === data[idField];
};
}
else {
return function (item) {
return item === data;
};
}
};
var index = lookup[entity].findIndex(finder(entityObj));
if (index === -1) lookup[entity].push(data);
else lookup[entity].splice(index, 1, data);
}
if (entityObj && !listeners[entity]) {
listeners[entity] = true;
var websocket;
if (typeof entityObj.websocket !== 'function') websocket = entity;
else websocket = entityObj.websocket($rootScope, $routeParams) + "." + entity;
mySocket.forward(websocket + '.remove');
mySocket.forward(websocket + '.new');
mySocket.forward(websocket + '.edit');
}
return lookup[entity];
};
this.unset = function (entity, id) {
var entityObj = zapi.entityMap[entity];
var idField = entityObj ? (entityObj.id || "_id") : undefined;
if (!lookup[entity]) lookup[entity] = [];
var index = lookup[entity].findIndex(function (item) {
return (idField ? item[idField] : item) == id;
});
if (index === -1) return lookup[entity];
lookup[entity].splice(index, 1);
return lookup[entity];
};
});