UNPKG

mayor-model-cache

Version:

A nuclear-js module provides a cache for your models

84 lines (68 loc) 2.03 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.STORE_NAME = undefined; var _actionTypes = require('../action-types'); var _actionTypes2 = _interopRequireDefault(_actionTypes); var _nuclearJs = require('nuclear-js'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var STORE_NAME = exports.STORE_NAME = '@@mayor/model-cache'; /** * ModelCacheStore is used for storing arbitrary model objects. */ exports.default = (0, _nuclearJs.Store)({ getInitialState: function getInitialState() { return (0, _nuclearJs.toImmutable)({}); }, initialize: function initialize() { this.on(_actionTypes2.default.MODEL_CACHE_LOAD_ENTITY, load); this.on(_actionTypes2.default.MODEL_CACHE_REMOVE_ENTITY, remove); } }); /** * Loads data into cache using given model. * * @public * @param {Immutable.Map} cache - store state * @param {object} payload * @return {Immutable.Map} */ function load(cache, payload) { var model = payload.model; var data = payload.data; cache = ensureEntityContainer(cache, model.entity); return cache.withMutations(function (cache) { data.forEach(function (entry) { cache.setIn([model.entity, entry.id], (0, _nuclearJs.toImmutable)(entry)); }); }); } /** * Removes data from cache with given id * * @public * @param {Immutable.Map} cache - store state * @param {object} payload * @return {Immutable.Map} */ function remove(cache, payload) { var model = payload.model; var data = payload.data; cache = ensureEntityContainer(cache, model.entity); return cache.removeIn([model.entity, payload.data.id]); } /** * Ensures cache has a container map for given entity. * * @public * @param {Immutable.Map} cache - store state * @param {string} entity - model entity * @return {Immutable.Map} */ function ensureEntityContainer(cache, entity) { if (!cache.has(entity)) { cache = cache.set(entity, (0, _nuclearJs.toImmutable)({})); } return cache; }