UNPKG

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
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]; }; });