react-ui-basics 0.0.210 → 0.0.212

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ui-basics",
3
- "version": "0.0.210",
3
+ "version": "0.0.212",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
package/src/Scrollable.js CHANGED
@@ -244,17 +244,18 @@ class Scrollable extends PureComponent {
244
244
  const updateVerticalScrollbar = () => {
245
245
  const scrollHeight = scrollHeightOf(viewport);
246
246
  const scrollbarHeight = offsetHeightOf(scrollbar);
247
+ const containerHeight = offsetHeightOf(container);
247
248
 
248
249
  !adjustedScrollWidth && adjustScrollWidth();
249
250
 
250
251
  const newRatio = scrollHeight / scrollbarHeight;
251
- if ((ratio === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;
252
+ if (!containerHeight || (ratio === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;
252
253
 
253
254
  const offsetHeight = offsetHeightOf(viewport);
254
255
  const horizontalScrollBarOffset = statusH() !== WITHOUT_SCROLL ? __clientHeight(scrollbarH) + Math.max(NATIVE_SCROLL_HEIGHT, 0) : 0;
255
256
 
256
- let containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;
257
- if (containerOffsetHeight === scrollHeight && status() === WITHOUT_SCROLL)
257
+ let containerOffsetHeight = containerHeight + horizontalScrollBarOffset;
258
+ if (containerOffsetHeight > scrollHeight && status() === WITHOUT_SCROLL)
258
259
  return;
259
260
 
260
261
  if (props().autoScrollTop && scrollHeight - offsetHeight - __scrollTop(viewport) <= 20 && newRatio < ratio && Number.isFinite(newRatio) && Number.isFinite(ratio)) {
@@ -262,10 +263,11 @@ class Scrollable extends PureComponent {
262
263
  }
263
264
 
264
265
  ratio = newRatio;
265
- styleOf(thumb).height = (scrollbarHeight / newRatio) + 'px';
266
+ if (newRatio > 1.02)
267
+ styleOf(thumb).height = (scrollbarHeight / newRatio) + 'px';
266
268
 
267
269
  styleOf(container).height = scrollHeight - horizontalScrollBarOffset + 'px';
268
- containerOffsetHeight = offsetHeightOf(container) + horizontalScrollBarOffset;
270
+ containerOffsetHeight = containerHeight + horizontalScrollBarOffset;
269
271
 
270
272
  if (scrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {
271
273
  if (status() !== WITHOUT_SCROLL)
@@ -274,7 +276,7 @@ class Scrollable extends PureComponent {
274
276
  return
275
277
  }
276
278
 
277
- if (containerOffsetHeight < scrollHeight) {
279
+ if (containerOffsetHeight <= scrollHeight) {
278
280
  adjustedScrollWidth = false;
279
281
  showScrollbar(scrollbar, viewport, adjustScrollWidth);
280
282
  } else {
@@ -289,25 +291,25 @@ class Scrollable extends PureComponent {
289
291
  };
290
292
 
291
293
  const updateHorizontalScrollbar = () => {
292
-
293
294
  const scrollWidth = scrollWidthOf(viewport);
294
295
  const scrollbarWidth = offsetWidthOf(scrollbarH);
296
+ const containerWidth = offsetWidthOf(container);
295
297
 
296
298
  !adjustedScrollWidth && adjustScrollWidth();
297
299
 
298
300
  const newRatio = scrollWidth / scrollbarWidth;
299
- if ((ratioH === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;
301
+ if (!containerWidth || (ratioH === newRatio && Number.isFinite(newRatio)) || Number.isNaN(newRatio)) return;
300
302
 
301
303
  const offsetWidth = offsetWidthOf(viewport);
302
-
303
304
  const verticalScrollBarOffset = status() !== WITHOUT_SCROLL ? __clientWidth(scrollbar) + Math.max(NATIVE_SCROLL_WIDTH, 0) : 0;
304
- let containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;
305
305
 
306
- if (containerOffsetWidth === scrollWidth && statusH() === WITHOUT_SCROLL)
306
+ let containerOffsetWidth = containerWidth + verticalScrollBarOffset;
307
+ if (containerOffsetWidth > scrollWidth && statusH() === WITHOUT_SCROLL)
307
308
  return;
308
309
 
309
310
  ratioH = newRatio;
310
- styleOf(thumbH).width = (scrollbarWidth / newRatio) + 'px';
311
+ if (newRatio > 1.02)
312
+ styleOf(thumbH).width = (scrollbarWidth / newRatio) + 'px';
311
313
 
312
314
 
313
315
  if (horizontalScrollBarModeOf(props()) === SCROLLBAR_MODE_HIDDEN) {
@@ -318,9 +320,9 @@ class Scrollable extends PureComponent {
318
320
  }
319
321
 
320
322
  styleOf(container).width = (scrollWidth - verticalScrollBarOffset) + 'px';
321
- containerOffsetWidth = offsetWidthOf(container) + verticalScrollBarOffset;
323
+ containerOffsetWidth = containerWidth + verticalScrollBarOffset;
322
324
 
323
- if (containerOffsetWidth < scrollWidth) {
325
+ if (containerOffsetWidth <= scrollWidth) {
324
326
  adjustedScrollWidth = false;
325
327
  showHorizontalScrollbar(scrollbarH, viewport, adjustScrollWidth);
326
328
  } else {
@@ -341,12 +343,14 @@ class Scrollable extends PureComponent {
341
343
  };
342
344
  } else if (sbm !== SCROLLBAR_RESIZE_DISABLED)
343
345
  update = updateVerticalScrollbar
344
- else
345
- update = updateVerticalScrollbar
346
+ else if (hsbm !== SCROLLBAR_RESIZE_DISABLED)
347
+ update = updateHorizontalScrollbar
346
348
 
347
- initTimeout = setTimeout(() => {
348
- resizeInterval = setInterval(update, 50);
349
- }, 200)
349
+ if (update) {
350
+ initTimeout = setTimeout(() => {
351
+ resizeInterval = setInterval(update, 50);
352
+ }, 200)
353
+ }
350
354
  };
351
355
 
352
356
  that[ReactConstants[0]] = init;
package/src/Tools.ts CHANGED
@@ -17,7 +17,7 @@ export const NOOP = () => {
17
17
 
18
18
  export const orNoop = <T>(f: (...a: any) => T) => f || NOOP;
19
19
 
20
- export const getRandomId = (prefix:string) => prefix + Math.random();
20
+ export const getRandomId = (prefix: string) => prefix + Math.random();
21
21
 
22
22
  export const ref = (name, component) => {
23
23
  const refKey = "__" + name;
@@ -105,6 +105,8 @@ export const isFunction = (v) => typeOf(v) === 'function';
105
105
  export const isString = (v) => typeOf(v) === 'string';
106
106
  export const isObject = (v) => typeOf(v) === 'object';
107
107
 
108
+ export const deleteKey = (obj: object, key: string | symbol) => delete obj[key];
109
+
108
110
  const FALSE = false;
109
111
  const TRUE = true;
110
112
 
@@ -1,5 +1,10 @@
1
1
  import ReactConstants from "./ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./CommonFields"; import {toConsumableArray as __toConsumableArray} from "./_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./_virtual/_rollupPluginBabelHelpers"; import {createProxy} from "./ProxyTools";
2
2
 
3
+ it('test proxy null', () => {
4
+ const p = createProxy(null);
5
+ expect(p).toBe(null);
6
+ });
7
+
3
8
  it('test proxy noop', () => {
4
9
  const user = {name: 'Bob'};
5
10
  const p = createProxy(user);
@@ -19,7 +24,10 @@ it('test proxy add property', () => {
19
24
  const user = {name: 'Bob'};
20
25
  const p = createProxy(user);
21
26
  p.age = 16
27
+ expect(p.age).toEqual(16);
28
+
22
29
  p.age = 32
30
+ expect(p.age).toEqual(32);
23
31
 
24
32
  expect(user).toEqual({name: 'Bob'});
25
33
  expect(p.bake()).toEqual({name: 'Bob', age: 32});
@@ -29,6 +37,7 @@ it('test proxy delete property', () => {
29
37
  const user = {name: 'Bob'};
30
38
  const p = createProxy(user);
31
39
  delete p.name;
40
+ expect(p.name).toBe(undefined);
32
41
 
33
42
  expect(user).toEqual({name: 'Bob'});
34
43
  expect(p.bake()).toEqual({});
@@ -59,6 +68,7 @@ it('test proxy change inner properties', () => {
59
68
  const p = createProxy(user);
60
69
 
61
70
  p.hobbies.push('poker');
71
+ expect(p.hobbies).toEqual(['chess', 'poker']);
62
72
 
63
73
  expect(user).toEqual({name: 'Bob', hobbies: ['chess']});
64
74
  expect(p.bake()).toEqual({name: 'Bob', hobbies: ['chess', 'poker']});
@@ -0,0 +1,85 @@
1
+ import {UNDEFINED, isObject, deleteKey} from "../Tools";
2
+
3
+ const FIELD_CHANGED = '__changed';
4
+ const FIELD_BAKE = 'bake';
5
+
6
+ export const createProxy = <T extends object>(target: T) => {
7
+ if (!target)
8
+ return target
9
+
10
+ let changedValue = UNDEFINED;
11
+ let deletedKeys = UNDEFINED;
12
+ let innerProxies = UNDEFINED
13
+ const isChanged = () => changedValue || (innerProxies && Object.values(innerProxies).some(it => it[FIELD_CHANGED]));
14
+ const initChangedValue = (target) => {
15
+ !changedValue && (changedValue = Array.isArray(target) ? [...target] : {...target})
16
+ };
17
+ return new Proxy<T>(target, {
18
+ get: (target: T, prop: string | symbol) => {
19
+ if (prop === FIELD_CHANGED)
20
+ return isChanged();
21
+ if (prop === FIELD_BAKE) {
22
+ return () => {
23
+ // console.log('bake', changedValue, innerProxies)
24
+ if (!isChanged())
25
+ return target
26
+
27
+ if (changedValue && !innerProxies)
28
+ return changedValue
29
+
30
+ let result = changedValue || (Array.isArray(target) ? [...target] : {...target});
31
+ for (let key in innerProxies) {
32
+ result[key] = innerProxies[key][FIELD_BAKE]()
33
+ }
34
+ return result
35
+ }
36
+ }
37
+
38
+ // console.log('get', {target, prop})
39
+ const innerProxy = innerProxies && innerProxies[prop];
40
+ if (innerProxy)
41
+ return innerProxy
42
+
43
+ const changed = changedValue && changedValue[prop]
44
+ if (changed !== UNDEFINED)
45
+ return changed
46
+
47
+ if (deletedKeys && deletedKeys[prop])
48
+ return UNDEFINED
49
+
50
+ const value = target[prop];
51
+ if (value && isObject(value)) {
52
+ !innerProxies && (innerProxies = {})
53
+ return innerProxies[prop] = createProxy(value)
54
+ }
55
+
56
+ return value;
57
+ },
58
+ set: (target: T, prop, newval) => {
59
+ // console.log('set', {target, prop, newval})
60
+ initChangedValue(target);
61
+
62
+ if (newval && isObject(newval)) {
63
+ !innerProxies && (innerProxies = {})
64
+ innerProxies[prop] = newval = createProxy(newval)
65
+ } else {
66
+ innerProxies && deleteKey(innerProxies, prop)
67
+ }
68
+ changedValue[prop] = newval
69
+ // console.log('changedValue', changedValue)
70
+ return true;
71
+ },
72
+ deleteProperty: (target: T, prop) => {
73
+ // console.log('delete', {target, prop})
74
+ initChangedValue(target);
75
+
76
+ if (prop in changedValue) {
77
+ deleteKey(changedValue, prop)
78
+ innerProxies && deleteKey(innerProxies, prop)
79
+ !deletedKeys && (deletedKeys = {})
80
+ deletedKeys[prop] = true;
81
+ }
82
+ return true;
83
+ }
84
+ })
85
+ }
@@ -8,46 +8,56 @@ interface Stores {
8
8
  let STORES: Stores = {}
9
9
  let COUNTER = 0
10
10
 
11
- export class Store<T> {
12
- private name: string
13
- private listeners: Array<() => void> = []
14
- private initialState: T
15
- private index: number
11
+ abstract class AbstractStore<T> {
12
+ get: () => T;
13
+ set: (mutator: (oldState: T) => T | void) => void;
14
+ reset: () => void;
15
+ subscribe: (fn: () => void) => void;
16
+ unsubscribe: (fn: () => void) => void;
17
+ toString: () => string;
18
+ }
19
+
20
+ export class Store<T> extends AbstractStore<T> {
16
21
 
17
22
  constructor(initialState: T, name?: string) {
23
+ super()
18
24
  let that = this;
19
- that.name = name;
20
- that.initialState = initialState;
25
+ let listeners: Array<() => void> = []
26
+
21
27
  const index = COUNTER++;
22
- that.index = index;
23
28
  STORES[index] = initialState
24
- }
25
29
 
26
- get = (): T => STORES[this.index]
27
- set = (mutator: (oldState: T) => T | void) => {
28
- const proxy = createProxy(STORES[this.index]);
29
- const result = mutator(proxy);
30
- if (!result || result === proxy)
31
- STORES[this.index] = proxy.bake()
32
- else
33
- STORES[this.index] = result
30
+ that.unsubscribe = (fn: () => void) => {
31
+ listeners = listeners.filter(f => f !== fn)
32
+ }
33
+ that.get = (): T => STORES[index]
34
34
 
35
- this.listeners.forEach(fn => fn())
36
- }
35
+ const runListeners = () => {
36
+ listeners.forEach(fn => fn())
37
+ };
37
38
 
38
- reset = () => {
39
- STORES[this.index] = this.initialState
40
- }
39
+ that.set = (mutator: (oldState: T) => T | void) => {
40
+ const proxy = createProxy(STORES[index]);
41
+ const result = mutator(proxy);
42
+ if (!result || result === proxy)
43
+ STORES[index] = proxy.bake()
44
+ else
45
+ STORES[index] = result
41
46
 
42
- subscribe = (fn: () => void) => {
43
- this.listeners.push(fn)
44
- }
47
+ runListeners();
48
+ }
45
49
 
46
- unsubscribe = (fn: () => void) => {
47
- this.listeners = this.listeners.filter(f => f !== fn)
48
- }
50
+ that.reset = () => {
51
+ STORES[index] = initialState
52
+ runListeners();
53
+ }
49
54
 
50
- toString = (): string => this.name;
55
+ that.subscribe = (fn: () => void) => {
56
+ listeners.push(fn)
57
+ }
58
+
59
+ that.toString = (): string => name;
60
+ }
51
61
  }
52
62
 
53
63
  export default Store;
@@ -0,0 +1 @@
1
+ export declare const createProxy: <T extends object>(target: T) => any;
@@ -1,66 +1,77 @@
1
- import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import { typeof as _typeof, toConsumableArray as _toConsumableArray, objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';
2
- import { UNDEFINED } from '../Tools.js';
1
+ import ReactConstants from "./../ReactConstants"; import {clientHeight as __clientHeight, clientWidth as __clientWidth, createAccessor as __createAccessor, data as __data, height as __height, left as __left, length as __length, pageX as __pageX, pageY as __pageY, props as __props, scrollLeft as __scrollLeft, scrollTop as __scrollTop, state as __state, style as __style, target as __target, top as __top, value as __value, width as __width} from "./../CommonFields"; import {toConsumableArray as __toConsumableArray} from "./../_virtual/_rollupPluginBabelHelpers"; import {extends as __extends} from "./../_virtual/_rollupPluginBabelHelpers"; import {inherits as __inherits} from "./../_virtual/_rollupPluginBabelHelpers"; import { isObject, deleteKey, UNDEFINED } from '../Tools.js';
3
2
 
4
- var createProxy = function createProxy(target) {
5
- if (!target) return target;
6
- if (target.__isProxy) return target;
7
- var changedValue = UNDEFINED;
8
- var deletedKeys = UNDEFINED;
9
- var innerProxies = UNDEFINED;
10
- var isChanged = function isChanged() {
11
- return changedValue || innerProxies && Object.values(innerProxies).some(function (it) {
12
- return it.__changed;
13
- });
14
- };
15
- return new Proxy(target, {
16
- get: function get(target, prop) {
17
- if (prop === '__isProxy') return true;
18
- if (prop === '__changed') return isChanged();
19
- if (prop === 'bake') return function () {
20
- if (!isChanged()) return target;
21
- if (changedValue && !innerProxies) return changedValue;
22
- if (innerProxies) {
23
- var result = changedValue || (Array.isArray(target) ? _toConsumableArray(target) : _objectSpread2({}, target));
24
- for (var key in innerProxies) {
25
- result[key] = innerProxies[key].bake();
26
- }
27
- return result;
3
+ const FIELD_CHANGED = '__changed';
4
+ const FIELD_BAKE = 'bake';
5
+ const createProxy = (target) => {
6
+ if (!target)
7
+ return target;
8
+ let changedValue = UNDEFINED;
9
+ let deletedKeys = UNDEFINED;
10
+ let innerProxies = UNDEFINED;
11
+ const isChanged = () => changedValue || (innerProxies && Object.values(innerProxies).some(it => it[FIELD_CHANGED]));
12
+ const initChangedValue = (target) => {
13
+ !changedValue && (changedValue = Array.isArray(target) ? [...target] : __extends({}, target));
14
+ };
15
+ return new Proxy(target, {
16
+ get: (target, prop) => {
17
+ if (prop === FIELD_CHANGED)
18
+ return isChanged();
19
+ if (prop === FIELD_BAKE) {
20
+ return () => {
21
+ // console.log('bake', changedValue, innerProxies)
22
+ if (!isChanged())
23
+ return target;
24
+ if (changedValue && !innerProxies)
25
+ return changedValue;
26
+ let result = changedValue || (Array.isArray(target) ? [...target] : __extends({}, target));
27
+ for (let key in innerProxies) {
28
+ result[key] = innerProxies[key][FIELD_BAKE]();
29
+ }
30
+ return result;
31
+ };
32
+ }
33
+ // console.log('get', {target, prop})
34
+ const innerProxy = innerProxies && innerProxies[prop];
35
+ if (innerProxy)
36
+ return innerProxy;
37
+ const changed = changedValue && changedValue[prop];
38
+ if (changed !== UNDEFINED)
39
+ return changed;
40
+ if (deletedKeys && deletedKeys[prop])
41
+ return UNDEFINED;
42
+ const value = target[prop];
43
+ if (value && isObject(value)) {
44
+ !innerProxies && (innerProxies = {});
45
+ return innerProxies[prop] = createProxy(value);
46
+ }
47
+ return value;
48
+ },
49
+ set: (target, prop, newval) => {
50
+ // console.log('set', {target, prop, newval})
51
+ initChangedValue(target);
52
+ if (newval && isObject(newval)) {
53
+ !innerProxies && (innerProxies = {});
54
+ innerProxies[prop] = newval = createProxy(newval);
55
+ }
56
+ else {
57
+ innerProxies && deleteKey(innerProxies, prop);
58
+ }
59
+ changedValue[prop] = newval;
60
+ // console.log('changedValue', changedValue)
61
+ return true;
62
+ },
63
+ deleteProperty: (target, prop) => {
64
+ // console.log('delete', {target, prop})
65
+ initChangedValue(target);
66
+ if (prop in changedValue) {
67
+ deleteKey(changedValue, prop);
68
+ innerProxies && deleteKey(innerProxies, prop);
69
+ !deletedKeys && (deletedKeys = {});
70
+ deletedKeys[prop] = true;
71
+ }
72
+ return true;
28
73
  }
29
- throw new Error('state not implemented yet');
30
- };
31
- var innerProxy = innerProxies && innerProxies[prop];
32
- if (innerProxy) return innerProxy;
33
- var changed = changedValue && changedValue[prop];
34
- if (changed !== UNDEFINED) return changed;
35
- if (deletedKeys && deletedKeys[prop]) return null;
36
- var value = target[prop];
37
- if (value && _typeof(value) === 'object') {
38
- !innerProxies && (innerProxies = {});
39
- return innerProxies[prop] = createProxy(value);
40
- }
41
- return value;
42
- },
43
- set: function set(target, prop, newval) {
44
- if (!changedValue) changedValue = Array.isArray(target) ? _toConsumableArray(target) : _objectSpread2({}, target);
45
- if (newval && _typeof(newval) === 'object') {
46
- !innerProxies && (innerProxies = {});
47
- innerProxies[prop] = newval = createProxy(newval);
48
- } else {
49
- innerProxies && delete innerProxies[prop];
50
- }
51
- changedValue[prop] = newval;
52
- return true;
53
- },
54
- deleteProperty: function deleteProperty(target, prop) {
55
- !changedValue && (changedValue = Array.isArray(target) ? _toConsumableArray(target) : _objectSpread2({}, target));
56
- if (!prop in changedValue) return false;
57
- delete changedValue[prop];
58
- innerProxies && delete innerProxies[prop];
59
- !deletedKeys && (deletedKeys = {});
60
- deletedKeys[prop] = true;
61
- return true;
62
- }
63
- });
74
+ });
64
75
  };
65
76
 
66
77
  export { createProxy };
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyTools.js","sources":["../src/store/ProxyTools.js"],"sourcesContent":["import {UNDEFINED} from \"../Tools\";\n\nexport const createProxy = (target) => {\n if(!target)\n return target\n if (target.__isProxy)\n return target;\n\n let changedValue = UNDEFINED;\n let deletedKeys = UNDEFINED;\n let innerProxies = UNDEFINED\n const isChanged = () => changedValue || (innerProxies && Object.values(innerProxies).some(it => it.__changed));\n\n return new Proxy(target, {\n get: function (target, prop) {\n if (prop === '__isProxy')\n return true\n if (prop === '__changed')\n return isChanged();\n if (prop === 'bake')\n return () => {\n // console.log('bake', changedValue, innerProxies)\n if (!isChanged())\n return target\n\n if (changedValue && !innerProxies)\n return changedValue\n\n if (innerProxies) {\n const result = changedValue || (Array.isArray(target) ? [...target] : {...target});\n\n for (let key in innerProxies) {\n result[key] = innerProxies[key].bake()\n }\n return result\n }\n\n throw new Error('state not implemented yet')\n }\n\n // console.log('get', {target, prop})\n const innerProxy = innerProxies && innerProxies[prop];\n if (innerProxy)\n return innerProxy\n\n const changed = changedValue && changedValue[prop]\n if (changed !== UNDEFINED)\n return changed\n\n if (deletedKeys && deletedKeys[prop])\n return null\n\n const value = target[prop];\n if (value && typeof value === 'object') {\n !innerProxies && (innerProxies = {})\n return innerProxies[prop] = createProxy(value)\n }\n\n return value;\n },\n set: function (target, prop, newval) {\n // console.log('set', {target, prop, newval})\n if (!changedValue) changedValue = Array.isArray(target) ? [...target] : {...target}\n\n if (newval && typeof newval === 'object') {\n !innerProxies && (innerProxies = {})\n innerProxies[prop] = newval = createProxy(newval)\n } else {\n innerProxies && (delete innerProxies[prop])\n }\n changedValue[prop] = newval\n // console.log('changedValue', changedValue)\n return true;\n },\n deleteProperty: function (target, prop) {\n // console.log('delete', {target, prop})\n !changedValue && (changedValue = Array.isArray(target) ? [...target] : {...target})\n\n if (!prop in changedValue)\n return false;\n\n delete changedValue[prop]\n innerProxies && delete innerProxies[prop]\n !deletedKeys && (deletedKeys = {})\n deletedKeys[prop] = true;\n return true;\n }\n })\n}\n"],"names":["createProxy","target","__isProxy","changedValue","UNDEFINED","deletedKeys","innerProxies","isChanged","Object","values","some","it","__changed","Proxy","get","prop","result","Array","isArray","_toConsumableArray","_objectSpread","key","bake","Error","innerProxy","changed","value","_typeof","set","newval","deleteProperty"],"mappings":"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"}
1
+ {"version":3,"file":"ProxyTools.js","sources":["../src/store/ProxyTools.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/store/Store.d.ts CHANGED
@@ -1,12 +1,7 @@
1
1
  interface Stores {
2
2
  [index: number]: any;
3
3
  }
4
- export declare class Store<T> {
5
- private name;
6
- private listeners;
7
- private initialState;
8
- private index;
9
- constructor(initialState: T, name?: string);
4
+ declare abstract class AbstractStore<T> {
10
5
  get: () => T;
11
6
  set: (mutator: (oldState: T) => T | void) => void;
12
7
  reset: () => void;
@@ -14,6 +9,9 @@ export declare class Store<T> {
14
9
  unsubscribe: (fn: () => void) => void;
15
10
  toString: () => string;
16
11
  }
12
+ export declare class Store<T> extends AbstractStore<T> {
13
+ constructor(initialState: T, name?: string);
14
+ }
17
15
  export default Store;
18
16
  export declare function getGlobalState(): Stores;
19
17
  export declare function resetGlobalState(): void;
package/store/Store.js CHANGED
@@ -3,35 +3,39 @@ import { createProxy } from './ProxyTools.js';
3
3
 
4
4
  let STORES = {};
5
5
  let COUNTER = 0;
6
- class Store {
6
+ class AbstractStore {
7
+ }
8
+ class Store extends AbstractStore {
7
9
  constructor(initialState, name) {
8
- this.listeners = [];
9
- this.get = () => STORES[this.index];
10
- this.set = (mutator) => {
11
- const proxy = createProxy(STORES[this.index]);
10
+ super();
11
+ let that = this;
12
+ let listeners = [];
13
+ const index = COUNTER++;
14
+ STORES[index] = initialState;
15
+ that.unsubscribe = (fn) => {
16
+ listeners = listeners.filter(f => f !== fn);
17
+ };
18
+ that.get = () => STORES[index];
19
+ const runListeners = () => {
20
+ listeners.forEach(fn => fn());
21
+ };
22
+ that.set = (mutator) => {
23
+ const proxy = createProxy(STORES[index]);
12
24
  const result = mutator(proxy);
13
25
  if (!result || result === proxy)
14
- STORES[this.index] = proxy.bake();
26
+ STORES[index] = proxy.bake();
15
27
  else
16
- STORES[this.index] = result;
17
- this.listeners.forEach(fn => fn());
18
- };
19
- this.reset = () => {
20
- STORES[this.index] = this.initialState;
28
+ STORES[index] = result;
29
+ runListeners();
21
30
  };
22
- this.subscribe = (fn) => {
23
- this.listeners.push(fn);
31
+ that.reset = () => {
32
+ STORES[index] = initialState;
33
+ runListeners();
24
34
  };
25
- this.unsubscribe = (fn) => {
26
- this.listeners = this.listeners.filter(f => f !== fn);
35
+ that.subscribe = (fn) => {
36
+ listeners.push(fn);
27
37
  };
28
- this.toString = () => this.name;
29
- let that = this;
30
- that.name = name;
31
- that.initialState = initialState;
32
- const index = COUNTER++;
33
- that.index = index;
34
- STORES[index] = initialState;
38
+ that.toString = () => name;
35
39
  }
36
40
  }
37
41
  function getGlobalState() {
@@ -1 +1 @@
1
- {"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Store.js","sources":["../src/store/Store.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}