react-ui-basics 0.0.215 → 0.0.217

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.215",
3
+ "version": "0.0.217",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
@@ -2,73 +2,70 @@ import {useEffect, useState} from "react";
2
2
  import {createProxy} from "./ProxyTools";
3
3
  import {isFunction, isObject} from "../Tools";
4
4
 
5
- interface Stores {
6
- [index: number]: any
7
- }
8
-
9
- let STORES: Stores = {}
10
- let COUNTER = 0
5
+ const STORES = new Map<Symbol, Store<any>>()
11
6
 
12
7
  type Setter<T> = (oldState: T) => T | void;
8
+ type ListenerFn = () => void;
9
+ type UnsubscribeFn = () => void;
13
10
 
14
11
  abstract class AbstractStore<T> {
15
12
  get: () => T;
16
13
  set: (setter: T | Partial<T> | (Setter<T>)) => void;
17
14
  reset: () => void;
18
- subscribe: (fn: () => void) => void;
19
- unsubscribe: (fn: () => void) => void;
15
+ /**
16
+ * Return unsubscribe function
17
+ *
18
+ * @returns unsubscribe function.
19
+ */
20
+ subscribe: (fn: ListenerFn) => UnsubscribeFn;
20
21
  toString: () => string;
21
22
  }
22
23
 
24
+
23
25
  export class Store<T> extends AbstractStore<T> {
24
26
 
25
27
  constructor(initialState: T, name?: string) {
26
28
  super()
27
29
  let that = this;
28
- let listeners: Array<() => void> = []
29
- let index = '' + COUNTER++;
30
+ let listeners: Map<Symbol, ListenerFn> = new Map<Symbol, () => void>()
31
+ let value = initialState;
30
32
  let runListeners = () => {
31
- listeners.forEach(fn => fn())
32
- };
33
-
34
- STORES[index] = initialState
35
-
36
- that.unsubscribe = (fn: () => void) => {
37
- let i = listeners.indexOf(fn)
38
- let length = listeners.length;
39
- if (i > -1) {
40
- listeners[i] = listeners[length - 1]
41
- listeners.splice(length - 1, 1)
33
+ for (let listener of listeners.values()) {
34
+ listener()
42
35
  }
43
- }
44
- that.get = (): T => STORES[index]
36
+ };
37
+ that.get = (): T => value;
45
38
  that.set = (setter) => {
46
39
  let result;
47
40
  if (isFunction(setter)) {
48
- const proxy = createProxy(STORES[index]);
41
+ const proxy = createProxy(value as object);
49
42
  result = (setter as Setter<T>)(proxy);
50
43
  if (!result || result === proxy)
51
44
  result = proxy.bake()
52
45
  } else if (isObject(setter)) {
53
- result = {...STORES[index], ...setter}
46
+ result = {...value, ...setter}
54
47
  } else {
55
48
  result = setter
56
49
  }
57
50
 
58
- STORES[index] = result
51
+ value = result
59
52
  runListeners();
60
53
  }
61
-
62
54
  that.reset = () => {
63
- STORES[index] = initialState
55
+ value = initialState
64
56
  runListeners();
65
57
  }
66
58
 
67
- that.subscribe = (fn: () => void) => {
68
- listeners.push(fn)
59
+ that.subscribe = (fn: ListenerFn) => {
60
+ const key = Symbol();
61
+ listeners.set(key, fn)
62
+ return () => {
63
+ listeners.delete(key)
64
+ }
69
65
  }
70
66
 
71
67
  that.toString = (): string => name;
68
+ STORES.set(Symbol(), that)
72
69
  }
73
70
  }
74
71
 
@@ -78,20 +75,12 @@ export function getGlobalState() {
78
75
  return STORES
79
76
  }
80
77
 
81
- export function resetGlobalState() {
82
- STORES = {}
83
- }
84
-
85
- export function replaceGlobalState(state) {
86
- STORES = state
87
- }
88
-
89
-
90
78
  export type Selector<T, R> = (t: T) => R;
91
79
 
92
80
  export const defaultSelector = <T>(store: T): T => store;
93
81
 
94
82
  export function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies: ReadonlyArray<any>): R
83
+ export function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies?: undefined): R
95
84
  export function useStore<T>(store: Store<T>, selector?: undefined, selectorDependencies?: undefined): T
96
85
  export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>, selectorDependencies: ReadonlyArray<any> = []): R {
97
86
  if (!selector)
@@ -104,10 +93,7 @@ export function useStore<T, R>(store: Store<T>, selector?: Selector<T, R>, selec
104
93
  setState(selector(store.get()))
105
94
  };
106
95
  updateState()
107
- store.subscribe(updateState)
108
- return () => {
109
- store.unsubscribe(updateState);
110
- }
96
+ return store.subscribe(updateState)
111
97
  }, selectorDependencies)
112
98
 
113
99
  return state
package/store/Store.d.ts CHANGED
@@ -1,23 +1,25 @@
1
- interface Stores {
2
- [index: number]: any;
3
- }
4
1
  declare type Setter<T> = (oldState: T) => T | void;
2
+ declare type ListenerFn = () => void;
3
+ declare type UnsubscribeFn = () => void;
5
4
  declare abstract class AbstractStore<T> {
6
5
  get: () => T;
7
6
  set: (setter: T | Partial<T> | (Setter<T>)) => void;
8
7
  reset: () => void;
9
- subscribe: (fn: () => void) => void;
10
- unsubscribe: (fn: () => void) => void;
8
+ /**
9
+ * Return unsubscribe function
10
+ *
11
+ * @returns unsubscribe function.
12
+ */
13
+ subscribe: (fn: ListenerFn) => UnsubscribeFn;
11
14
  toString: () => string;
12
15
  }
13
16
  export declare class Store<T> extends AbstractStore<T> {
14
17
  constructor(initialState: T, name?: string);
15
18
  }
16
19
  export default Store;
17
- export declare function getGlobalState(): Stores;
18
- export declare function resetGlobalState(): void;
19
- export declare function replaceGlobalState(state: any): void;
20
+ export declare function getGlobalState(): Map<Symbol, Store<any>>;
20
21
  export declare type Selector<T, R> = (t: T) => R;
21
22
  export declare const defaultSelector: <T>(store: T) => T;
22
23
  export declare function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies: ReadonlyArray<any>): R;
24
+ export declare function useStore<T, R>(store: Store<T>, selector: Selector<T, R>, selectorDependencies?: undefined): R;
23
25
  export declare function useStore<T>(store: Store<T>, selector?: undefined, selectorDependencies?: undefined): T;
package/store/Store.js CHANGED
@@ -2,65 +2,56 @@ import ReactConstants from "./../ReactConstants"; import {clientHeight as __clie
2
2
  import { createProxy } from './ProxyTools.js';
3
3
  import { isFunction, isObject } from '../Tools.js';
4
4
 
5
- let STORES = {};
6
- let COUNTER = 0;
5
+ const STORES = new Map();
7
6
  class AbstractStore {
8
7
  }
9
8
  class Store extends AbstractStore {
10
9
  constructor(initialState, name) {
11
10
  super();
12
11
  let that = this;
13
- let listeners = [];
14
- let index = '' + COUNTER++;
12
+ let listeners = new Map();
13
+ let value = initialState;
15
14
  let runListeners = () => {
16
- listeners.forEach(fn => fn());
17
- };
18
- STORES[index] = initialState;
19
- that.unsubscribe = (fn) => {
20
- let i = listeners.indexOf(fn);
21
- let length = __length(listeners);
22
- if (i > -1) {
23
- listeners[i] = listeners[length - 1];
24
- listeners.splice(length - 1, 1);
15
+ for (let listener of listeners.values()) {
16
+ listener();
25
17
  }
26
18
  };
27
- that.get = () => STORES[index];
19
+ that.get = () => value;
28
20
  that.set = (setter) => {
29
21
  let result;
30
22
  if (isFunction(setter)) {
31
- const proxy = createProxy(STORES[index]);
23
+ const proxy = createProxy(value);
32
24
  result = setter(proxy);
33
25
  if (!result || result === proxy)
34
26
  result = proxy.bake();
35
27
  }
36
28
  else if (isObject(setter)) {
37
- result = __extends(__extends({}, STORES[index]), setter);
29
+ result = __extends(__extends({}, value), setter);
38
30
  }
39
31
  else {
40
32
  result = setter;
41
33
  }
42
- STORES[index] = result;
34
+ value = result;
43
35
  runListeners();
44
36
  };
45
37
  that.reset = () => {
46
- STORES[index] = initialState;
38
+ value = initialState;
47
39
  runListeners();
48
40
  };
49
41
  that.subscribe = (fn) => {
50
- listeners.push(fn);
42
+ const key = Symbol();
43
+ listeners.set(key, fn);
44
+ return () => {
45
+ listeners.delete(key);
46
+ };
51
47
  };
52
48
  that.toString = () => name;
49
+ STORES.set(Symbol(), that);
53
50
  }
54
51
  }
55
52
  function getGlobalState() {
56
53
  return STORES;
57
54
  }
58
- function resetGlobalState() {
59
- STORES = {};
60
- }
61
- function replaceGlobalState(state) {
62
- STORES = state;
63
- }
64
55
  const defaultSelector = (store) => store;
65
56
  function useStore(store, selector, selectorDependencies = []) {
66
57
  if (!selector)
@@ -71,13 +62,10 @@ function useStore(store, selector, selectorDependencies = []) {
71
62
  setState(selector(store.get()));
72
63
  };
73
64
  updateState();
74
- store.subscribe(updateState);
75
- return () => {
76
- store.unsubscribe(updateState);
77
- };
65
+ return store.subscribe(updateState);
78
66
  }, selectorDependencies);
79
67
  return state;
80
68
  }
81
69
 
82
- export { Store, Store as default, defaultSelector, getGlobalState, replaceGlobalState, resetGlobalState, useStore };
70
+ export { Store, Store as default, defaultSelector, getGlobalState, useStore };
83
71
  //# sourceMappingURL=Store.js.map
@@ -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":";;;;AAIA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAA;AAM5C,MAAe,aAAa,CAAA;AAW3B,CAAA;AAGK,MAAO,KAAS,SAAQ,aAAgB,CAAA;IAE1C,WAAY,CAAA,YAAe,EAAE,IAAa,EAAA;AACtC,QAAA,KAAK,EAAE,CAAA;QACP,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,QAAA,IAAI,SAAS,GAA4B,IAAI,GAAG,EAAsB,CAAA;QACtE,IAAI,KAAK,GAAG,YAAY,CAAC;QACzB,IAAI,YAAY,GAAG,MAAK;AACpB,YAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE;AACrC,gBAAA,QAAQ,EAAE,CAAA;AACb,aAAA;AACL,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,GAAG,MAAS,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,KAAI;AAClB,YAAA,IAAI,MAAM,CAAC;AACX,YAAA,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE;AACpB,gBAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAe,CAAC,CAAC;AAC3C,gBAAA,MAAM,GAAI,MAAoB,CAAC,KAAK,CAAC,CAAC;AACtC,gBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK;AAC3B,oBAAA,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;AAC5B,aAAA;AAAM,iBAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzB,gBAAA,MAAM,GAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAK,EAAA,MAAM,CAAC,CAAA;AACjC,aAAA;AAAM,iBAAA;gBACH,MAAM,GAAG,MAAM,CAAA;AAClB,aAAA;YAED,KAAK,GAAG,MAAM,CAAA;AACd,YAAA,YAAY,EAAE,CAAC;AACnB,SAAC,CAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,MAAK;YACd,KAAK,GAAG,YAAY,CAAA;AACpB,YAAA,YAAY,EAAE,CAAC;AACnB,SAAC,CAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,EAAc,KAAI;AAChC,YAAA,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AACrB,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACtB,YAAA,OAAO,MAAK;AACR,gBAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACzB,aAAC,CAAA;AACL,SAAC,CAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAc,IAAI,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;KAC7B;AACJ,CAAA;SAIe,cAAc,GAAA;AAC1B,IAAA,OAAO,MAAM,CAAA;AACjB,CAAC;AAIY,MAAA,eAAe,GAAG,CAAI,KAAQ,KAAQ,MAAM;AAKnD,SAAU,QAAQ,CAAO,KAAe,EAAE,QAAyB,EAAE,uBAA2C,EAAE,EAAA;AACpH,IAAA,IAAI,CAAC,QAAQ;QACT,QAAQ,GAAI,eAAkC,CAAA;AAElD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAE/D,SAAS,CAAC,MAAK;QACX,MAAM,WAAW,GAAG,MAAK;YACrB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AACnC,SAAC,CAAC;AACF,QAAA,WAAW,EAAE,CAAA;AACb,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;KACtC,EAAE,oBAAoB,CAAC,CAAA;AAExB,IAAA,OAAO,KAAK,CAAA;AAChB;;;;"}