react-planner-viewer
Version:
react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode
38 lines (28 loc) • 4.04 kB
JavaScript
var localStorage = window.hasOwnProperty('localStorage') ? window.localStorage : false;
import { loadProject } from '../actions/project-actions';
var TIMEOUT_DELAY = 500;
var timeout = null;
export default function autosave(autosaveKey, delay) {
return function (store, stateExtractor) {
delay = delay || TIMEOUT_DELAY;
if (!autosaveKey) return;
if (!localStorage) return;
//revert
if (localStorage.getItem(autosaveKey) !== null) {
var data = localStorage.getItem(autosaveKey);
var json = JSON.parse(data);
store.dispatch(loadProject(json));
}
//update
store.subscribe(function () {
if (timeout) clearTimeout(timeout);
timeout = setTimeout(function () {
var state = stateExtractor(store.getState());
var scene = state.sceneHistory.last();
var json = JSON.stringify(scene.toJS());
localStorage.setItem(autosaveKey, json);
}, delay);
});
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wbHVnaW5zL2F1dG9zYXZlLmpzIl0sIm5hbWVzIjpbImxvY2FsU3RvcmFnZSIsIndpbmRvdyIsImhhc093blByb3BlcnR5IiwibG9hZFByb2plY3QiLCJUSU1FT1VUX0RFTEFZIiwidGltZW91dCIsImF1dG9zYXZlIiwiYXV0b3NhdmVLZXkiLCJkZWxheSIsInN0b3JlIiwic3RhdGVFeHRyYWN0b3IiLCJnZXRJdGVtIiwiZGF0YSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJkaXNwYXRjaCIsInN1YnNjcmliZSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJzdGF0ZSIsImdldFN0YXRlIiwic2NlbmUiLCJzY2VuZUhpc3RvcnkiLCJsYXN0Iiwic3RyaW5naWZ5IiwidG9KUyIsInNldEl0ZW0iXSwibWFwcGluZ3MiOiJBQUFBLElBQU1BLGVBQWVDLE9BQU9DLGNBQVAsQ0FBc0IsY0FBdEIsSUFBd0NELE9BQU9ELFlBQS9DLEdBQThELEtBQW5GO0FBQ0EsU0FBUUcsV0FBUixRQUEwQiw0QkFBMUI7O0FBRUEsSUFBTUMsZ0JBQWdCLEdBQXRCOztBQUVBLElBQUlDLFVBQVUsSUFBZDs7QUFFQSxlQUFlLFNBQVNDLFFBQVQsQ0FBa0JDLFdBQWxCLEVBQStCQyxLQUEvQixFQUFzQzs7QUFFbkQsU0FBTyxVQUFDQyxLQUFELEVBQVFDLGNBQVIsRUFBMkI7O0FBRWhDRixZQUFRQSxTQUFTSixhQUFqQjs7QUFFQSxRQUFJLENBQUNHLFdBQUwsRUFBa0I7QUFDbEIsUUFBSSxDQUFDUCxZQUFMLEVBQW1COztBQUVuQjtBQUNBLFFBQUlBLGFBQWFXLE9BQWIsQ0FBcUJKLFdBQXJCLE1BQXNDLElBQTFDLEVBQWdEO0FBQzlDLFVBQUlLLE9BQU9aLGFBQWFXLE9BQWIsQ0FBcUJKLFdBQXJCLENBQVg7QUFDQSxVQUFJTSxPQUFPQyxLQUFLQyxLQUFMLENBQVdILElBQVgsQ0FBWDtBQUNBSCxZQUFNTyxRQUFOLENBQWViLFlBQVlVLElBQVosQ0FBZjtBQUNEOztBQUVEO0FBQ0FKLFVBQU1RLFNBQU4sQ0FBZ0IsWUFBTTtBQUNwQixVQUFJWixPQUFKLEVBQWFhLGFBQWFiLE9BQWI7QUFDYkEsZ0JBQVVjLFdBQVcsWUFBTTs7QUFFekIsWUFBSUMsUUFBUVYsZUFBZUQsTUFBTVksUUFBTixFQUFmLENBQVo7O0FBRUEsWUFBSUMsUUFBUUYsTUFBTUcsWUFBTixDQUFtQkMsSUFBbkIsRUFBWjtBQUNBLFlBQUlYLE9BQU9DLEtBQUtXLFNBQUwsQ0FBZUgsTUFBTUksSUFBTixFQUFmLENBQVg7QUFDQTFCLHFCQUFhMkIsT0FBYixDQUFxQnBCLFdBQXJCLEVBQWtDTSxJQUFsQztBQUNELE9BUFMsRUFPUEwsS0FQTyxDQUFWO0FBUUQsS0FWRDtBQVdELEdBMUJEO0FBMkJEIiwiZmlsZSI6ImF1dG9zYXZlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbG9jYWxTdG9yYWdlID0gd2luZG93Lmhhc093blByb3BlcnR5KCdsb2NhbFN0b3JhZ2UnKSA/IHdpbmRvdy5sb2NhbFN0b3JhZ2UgOiBmYWxzZTtcbmltcG9ydCB7bG9hZFByb2plY3R9IGZyb20gJy4uL2FjdGlvbnMvcHJvamVjdC1hY3Rpb25zJztcblxuY29uc3QgVElNRU9VVF9ERUxBWSA9IDUwMDtcblxubGV0IHRpbWVvdXQgPSBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRvc2F2ZShhdXRvc2F2ZUtleSwgZGVsYXkpIHtcblxuICByZXR1cm4gKHN0b3JlLCBzdGF0ZUV4dHJhY3RvcikgPT4ge1xuXG4gICAgZGVsYXkgPSBkZWxheSB8fCBUSU1FT1VUX0RFTEFZO1xuXG4gICAgaWYgKCFhdXRvc2F2ZUtleSkgcmV0dXJuO1xuICAgIGlmICghbG9jYWxTdG9yYWdlKSByZXR1cm47XG5cbiAgICAvL3JldmVydFxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShhdXRvc2F2ZUtleSkgIT09IG51bGwpIHtcbiAgICAgIGxldCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYXV0b3NhdmVLZXkpO1xuICAgICAgbGV0IGpzb24gPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgc3RvcmUuZGlzcGF0Y2gobG9hZFByb2plY3QoanNvbikpO1xuICAgIH1cblxuICAgIC8vdXBkYXRlXG4gICAgc3RvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgbGV0IHN0YXRlID0gc3RhdGVFeHRyYWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSk7XG5cbiAgICAgICAgbGV0IHNjZW5lID0gc3RhdGUuc2NlbmVIaXN0b3J5Lmxhc3QoKTtcbiAgICAgICAgbGV0IGpzb24gPSBKU09OLnN0cmluZ2lmeShzY2VuZS50b0pTKCkpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShhdXRvc2F2ZUtleSwganNvbik7XG4gICAgICB9LCBkZWxheSlcbiAgICB9KTtcbiAgfVxufVxuIl19