UNPKG

ionic-coreo

Version:

Ionic2 module for integration with Coreo

102 lines 3.94 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var core_1 = require('@angular/core'); var effects_1 = require('@ngrx/effects'); var store_1 = require('@ngrx/store'); var Observable_1 = require('rxjs/Observable'); var storage_1 = require('@ionic/storage'); var dottie = require('dottie'); var STORAGE_KEY = 'APP_STATE'; var storage = new storage_1.Storage(); function fetchState() { return storage .get(STORAGE_KEY) .then(function (s) { return JSON.parse(s); }) .then(function (s) { return s || {}; }) .catch(function (err) { }); } function saveState(state, keys) { // Pull out the portion of the state to save. if (keys) { state = keys.reduce(function (acc, k) { var val = dottie.get(state, k); if (val) { dottie.set(acc, k, val); } return acc; }, {}); } return storage.set(STORAGE_KEY, JSON.stringify(state)); } ; exports.StorageSyncActions = { HYDRATED: '__APP_HYDRATED__' }; var CoreoStorageSyncEffects = (function () { function CoreoStorageSyncEffects(actions$) { this.actions$ = actions$; this.hydrate$ = this.actions$ .ofType(store_1.Dispatcher.INIT) .switchMap(function () { return Observable_1.Observable .fromPromise(fetchState()) .map(function (state) { return ({ type: exports.StorageSyncActions.HYDRATED, payload: state }); }); }); } CoreoStorageSyncEffects.decorators = [ { type: core_1.Injectable }, ]; /** @nocollapse */ CoreoStorageSyncEffects.ctorParameters = [ { type: effects_1.Actions, }, ]; __decorate([ effects_1.Effect(), __metadata('design:type', Observable_1.Observable) ], CoreoStorageSyncEffects.prototype, "hydrate$", void 0); return CoreoStorageSyncEffects; }()); exports.CoreoStorageSyncEffects = CoreoStorageSyncEffects; ; var defaultOptions = { keys: [], ignoreActions: [] }; function coreoStorageSync(options) { var _a = Object.assign({}, defaultOptions, options || {}), keys = _a.keys, ignoreActions = _a.ignoreActions, hydratedStateKey = _a.hydratedStateKey; ignoreActions.push(store_1.Dispatcher.INIT); ignoreActions.push(exports.StorageSyncActions.HYDRATED); var hydratedState = {}; return function coreoStorageSyncReducer(reducer) { return function (state, action) { var type = action.type, payload = action.payload; if (type === exports.StorageSyncActions.HYDRATED) { state = payload; if (hydratedStateKey) { hydratedState[hydratedStateKey] = true; } } var nextState = Object.assign({}, reducer(state, action), hydratedState); if (ignoreActions.indexOf(type) === -1) { saveState(nextState, keys) .catch(function (err) { console.log('Error syncing state:', err); }); } return nextState; }; }; } exports.coreoStorageSync = coreoStorageSync; //# sourceMappingURL=sync.js.map