UNPKG

nuclear-entity-cache

Version:

A simple nuclear.js cache module that can be used as a centralized cache for entities.

86 lines (71 loc) 1.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _nuclearJs = require('nuclear-js'); var _actionTypes = require('../actionTypes'); exports.default = { getInitialState: function getInitialState() { return (0, _nuclearJs.toImmutable)({}); }, handlers: [{ type: _actionTypes.ENTITY_CACHE_LOAD, handler: loadHandler }, { type: _actionTypes.ENTITY_CACHE_REMOVE, handler: removeHandler }] }; /** * Handler for loading entities. * * @public * @param {Immutable.Map} cache * @param {array} payload.data * @param {string} payload.entityName * @returns {Immutable.Map} */ function loadHandler(cache, _ref) { var name = _ref.name; var data = _ref.data; cache = ensureEntityContainer(cache, name); return cache.withMutations(function (cache) { data.forEach(function (entity) { cache.setIn([name, entity.id], (0, _nuclearJs.toImmutable)(entity)); }); }); } /** * Handler for removing entities. * * @public * @param {Immutable.Map} cache * @param {array} payload.selectors * @param {string} payload.entityName * @returns {Immutable.Map} */ function removeHandler(cache, _ref2) { var entityName = _ref2.entityName; var selectors = _ref2.selectors; cache = ensureEntityContainer(cache, entityName); return cache.withMutations(function (cache) { selectors.forEach(function (_ref3) { var id = _ref3.id; cache.removeIn([entityName, id]); }); }); } /** * Ensures cache has a container map for given entity. * * @public * @param {Immutable.Map} cache - store state * @param {name} name * @return {Immutable.Map} */ function ensureEntityContainer(cache, name) { if (!cache.has(name)) { cache = cache.set(name, (0, _nuclearJs.toImmutable)({})); } return cache; }