UNPKG

6.08 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = exports.STORAGE_KEY = void 0;
7
8require("regenerator-runtime/runtime.js");
9
10require("core-js/modules/es.object.assign.js");
11
12require("core-js/modules/es.object.to-string.js");
13
14require("core-js/modules/es.promise.js");
15
16var _store = _interopRequireDefault(require("store2"));
17
18var _storeSetup = _interopRequireDefault(require("./lib/store-setup"));
19
20function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
22function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
23
24function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
25
26function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
27
28function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
29
30function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
31
32// setting up the store, overriding set and get to use telejson
33// @ts-ignore
34(0, _storeSetup.default)(_store.default._);
35var STORAGE_KEY = '@storybook/ui/store';
36exports.STORAGE_KEY = STORAGE_KEY;
37
38function get(storage) {
39 var data = storage.get(STORAGE_KEY);
40 return data || {};
41}
42
43function set(storage, value) {
44 return storage.set(STORAGE_KEY, value);
45}
46
47function update(storage, patch) {
48 var previous = get(storage); // Apply the same behaviour as react here
49
50 return set(storage, Object.assign({}, previous, patch));
51}
52
53// Our store piggybacks off the internal React state of the Context Provider
54// It has been augmented to persist state to local/sessionStorage
55var Store = /*#__PURE__*/function () {
56 function Store(_ref) {
57 var setState = _ref.setState,
58 getState = _ref.getState;
59
60 _classCallCheck(this, Store);
61
62 this.upstreamGetState = void 0;
63 this.upstreamSetState = void 0;
64 this.upstreamSetState = setState;
65 this.upstreamGetState = getState;
66 } // The assumption is that this will be called once, to initialize the React state
67 // when the module is instantiated
68
69
70 _createClass(Store, [{
71 key: "getInitialState",
72 value: function getInitialState(base) {
73 // We don't only merge at the very top level (the same way as React setState)
74 // when you set keys, so it makes sense to do the same in combining the two storage modes
75 // Really, you shouldn't store the same key in both places
76 return Object.assign({}, base, get(_store.default.local), get(_store.default.session));
77 }
78 }, {
79 key: "getState",
80 value: function getState() {
81 return this.upstreamGetState();
82 }
83 }, {
84 key: "setState",
85 value: function () {
86 var _setState = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(inputPatch, cbOrOptions, inputOptions) {
87 var _this = this;
88
89 var callback, options, _ref2, _ref2$persistence, persistence, patch, delta, newState, storage;
90
91 return regeneratorRuntime.wrap(function _callee$(_context) {
92 while (1) {
93 switch (_context.prev = _context.next) {
94 case 0:
95 if (typeof cbOrOptions === 'function') {
96 callback = cbOrOptions;
97 options = inputOptions;
98 } else {
99 options = cbOrOptions;
100 }
101
102 _ref2 = options || {}, _ref2$persistence = _ref2.persistence, persistence = _ref2$persistence === void 0 ? 'none' : _ref2$persistence;
103 patch = {}; // What did the patch actually return
104
105 delta = {};
106
107 if (typeof inputPatch === 'function') {
108 // Pass the same function, but set delta on the way
109 patch = function patch(state) {
110 var getDelta = inputPatch;
111 delta = getDelta(state);
112 return delta;
113 };
114 } else {
115 patch = inputPatch;
116 delta = patch;
117 }
118
119 _context.next = 7;
120 return new Promise(function (resolve) {
121 _this.upstreamSetState(patch, resolve);
122 });
123
124 case 7:
125 newState = _context.sent;
126
127 if (!(persistence !== 'none')) {
128 _context.next = 12;
129 break;
130 }
131
132 storage = persistence === 'session' ? _store.default.session : _store.default.local;
133 _context.next = 12;
134 return update(storage, delta);
135
136 case 12:
137 if (callback) {
138 callback(newState);
139 }
140
141 return _context.abrupt("return", newState);
142
143 case 14:
144 case "end":
145 return _context.stop();
146 }
147 }
148 }, _callee);
149 }));
150
151 function setState(_x, _x2, _x3) {
152 return _setState.apply(this, arguments);
153 }
154
155 return setState;
156 }()
157 }]);
158
159 return Store;
160}();
161
162exports.default = Store;
\No newline at end of file