UNPKG

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