@lomray/react-mobx-manager 1.0.0-beta.8 → 1.1.0-beta.1

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/README.md CHANGED
@@ -1,11 +1,9 @@
1
-
2
1
  <p align="center">
3
2
  <img src="https://user-images.githubusercontent.com/95251720/180519123-eb8a36e7-e7af-41f2-9a01-ae6d6b6a94f3.svg" alt="Bootstrap logo" width="200" height="165">
4
3
  </p>
5
4
 
6
5
  <h3 align='center'>Mobx stores manager for React</h3>
7
6
 
8
- [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Lomray-Software_react-mobx-manager&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Lomray-Software_react-mobx-manager)
9
7
  [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Lomray-Software_react-mobx-manager&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Lomray-Software_react-mobx-manager)
10
8
  [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Lomray-Software_react-mobx-manager&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Lomray-Software_react-mobx-manager)
11
9
  [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Lomray-Software_react-mobx-manager&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Lomray-Software_react-mobx-manager)
@@ -28,6 +26,24 @@ The React-mobx-manager package is distributed using [npm](https://www.npmjs.com/
28
26
  npm i --save @lomray/react-mobx-manager
29
27
  ```
30
28
 
29
+ _Optional:_ Configure your bundler for keep classnames and function names in production OR use `id` for each store:
30
+
31
+ **React:** (craco or webpack config, terser options)
32
+ ```bash
33
+ terserOptions.keep_classnames = true;
34
+ terserOptions.keep_fnames = true;
35
+ ```
36
+
37
+ **React Native:** (metro bundler config)
38
+ ```
39
+ transformer: {
40
+ minifierConfig: {
41
+ keep_classnames: true,
42
+ keep_fnames: true,
43
+ },
44
+ }
45
+ ```
46
+
31
47
  Import `Manager, StoreManagerProvider` from `@lomray/react-mobx-manager` into your index file after wrap `<App/>` with `<StoreManagerProvider/>`
32
48
 
33
49
  ```jsx
@@ -50,9 +66,9 @@ root.render(
50
66
  );
51
67
  ```
52
68
 
53
- Connect mobx store to manager and you're good to go!
69
+ Connect mobx store to manager, and you're good to go!
54
70
 
55
- ```jsx
71
+ ```typescript
56
72
  import { withStores } from '@lomray/react-mobx-manager';
57
73
  import { makeAutoObservable } from 'mobx';
58
74
 
@@ -60,6 +76,11 @@ import { makeAutoObservable } from 'mobx';
60
76
  * Mobx user store
61
77
  */
62
78
  class UserStore {
79
+ /**
80
+ * Required only if we don't configure our bundler for keep classnames and function names
81
+ */
82
+ static id = 'user';
83
+
63
84
  name = 'Matthew'
64
85
 
65
86
  constructor() {
@@ -74,14 +95,13 @@ const stores = {
74
95
  userStore: UserStore
75
96
  };
76
97
 
98
+ // support typescript
77
99
  type TProps = StoresType <typeof stores>;
78
100
 
79
101
  /**
80
102
  * User component
81
- * @returns {JSX.Element}
82
- * @constructor
83
103
  */
84
- const User: FC<TProps> = ({userStore: {name}}) => {
104
+ const User: FC<TProps> = ({ userStore: { name } }) => {
85
105
  return (
86
106
  <div>{name}</div>
87
107
  )
@@ -93,6 +113,8 @@ const User: FC<TProps> = ({userStore: {name}}) => {
93
113
  export default withStores(User, stores);
94
114
  ```
95
115
 
116
+ [See example app](example) for more understanding.
117
+
96
118
  ## Bugs and feature requests
97
119
 
98
120
  Bug or a feature request, [please open a new issue](https://github.com/Lomray-Software/react-mobx-manager/issues/new).
package/lib/context.d.ts CHANGED
@@ -8,14 +8,28 @@ interface IStoreManagerProvider {
8
8
  fallback?: ReactElement;
9
9
  children?: React.ReactNode;
10
10
  }
11
+ interface IStoreManagerParentProvider {
12
+ children?: React.ReactNode;
13
+ parentId: string;
14
+ }
11
15
  /**
12
16
  * Mobx store manager context
13
17
  */
14
18
  declare const StoreManagerContext: React.Context<Manager>;
19
+ /**
20
+ * To spread relationships
21
+ */
22
+ declare const StoreManagerParentContext: React.Context<IStoreManagerParentProvider>;
23
+ /**
24
+ * Mobx store manager parent provider
25
+ * @constructor
26
+ */
27
+ declare const StoreManagerParentProvider: FC<Omit<IStoreManagerParentProvider, 'contextId'>>;
15
28
  /**
16
29
  * Mobx store manager provider
17
30
  * @constructor
18
31
  */
19
32
  declare const StoreManagerProvider: FC<IStoreManagerProvider>;
20
33
  declare const useStoreManagerContext: () => Manager;
21
- export { StoreManagerProvider, StoreManagerContext, useStoreManagerContext };
34
+ declare const useStoreManagerParentContext: () => Omit<IStoreManagerParentProvider, 'children'>;
35
+ export { StoreManagerProvider, StoreManagerContext, StoreManagerParentContext, useStoreManagerContext, StoreManagerParentProvider, useStoreManagerParentContext };
package/lib/context.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);const a=r.default.createContext({});exports.StoreManagerContext=a,exports.StoreManagerProvider=({children:t,storeManager:o,fallback:n,shouldInit:i=!1})=>{const[s,u]=e.useState(!i);return e.useEffect((()=>{i&&o.init().then((()=>u(!0))).catch((e=>{console.error("Failed initialized store manager: ",e)}))}),[i,o]),r.default.createElement(a.Provider,{value:o,children:s?t:n||t})},exports.useStoreManagerContext=()=>e.useContext(a);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);const a=r.default.createContext({}),n=r.default.createContext({parentId:"root"}),o=({children:t,parentId:a})=>{const o=e.useMemo((()=>({parentId:a})),[a]);return r.default.createElement(n.Provider,{value:o,children:t})};exports.StoreManagerContext=a,exports.StoreManagerParentContext=n,exports.StoreManagerParentProvider=o,exports.StoreManagerProvider=({children:t,storeManager:n,fallback:u,shouldInit:s=!1})=>{const[d,l]=e.useState(!s);return e.useEffect((()=>{s&&n.init().then((()=>l(!0))).catch((e=>{console.error("Failed initialized store manager: ",e)}))}),[s,n]),r.default.createElement(a.Provider,{value:n},r.default.createElement(o,{parentId:"root"},d?t:u||t))},exports.useStoreManagerContext=()=>e.useContext(a),exports.useStoreManagerParentContext=()=>e.useContext(n);
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./types-4732bbd2";
1
+ export * from "./types-5b099751";
2
2
  export * from "./context";
3
3
  export { default as Manager } from "./manager";
4
4
  export { default as onChangeListener } from "./on-change-listener";
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./context.js"),r=require("./manager.js"),t=require("./on-change-listener.js"),o=require("./wakeup.js"),s=require("./with-stores.js"),a=require("./storages/local-storage.js"),n=require("./storages/async-storage.js");exports.StoreManagerContext=e.StoreManagerContext,exports.StoreManagerProvider=e.StoreManagerProvider,exports.useStoreManagerContext=e.useStoreManagerContext,exports.Manager=r,exports.onChangeListener=t,exports.wakeup=o,exports.withStores=s,exports.MobxLocalStorage=a,exports.MobxAsyncStorage=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./context.js"),r=require("./manager.js"),t=require("./on-change-listener.js"),o=require("./wakeup.js"),a=require("./with-stores.js"),s=require("./storages/local-storage.js"),n=require("./storages/async-storage.js");exports.StoreManagerContext=e.StoreManagerContext,exports.StoreManagerParentContext=e.StoreManagerParentContext,exports.StoreManagerParentProvider=e.StoreManagerParentProvider,exports.StoreManagerProvider=e.StoreManagerProvider,exports.useStoreManagerContext=e.useStoreManagerContext,exports.useStoreManagerParentContext=e.useStoreManagerParentContext,exports.Manager=r,exports.onChangeListener=t,exports.wakeup=o,exports.withStores=a,exports.MobxLocalStorage=s,exports.MobxAsyncStorage=n;
package/lib/manager.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IConstructableStore, IManagerParams, IStorage, IStore, TStoreDefinition, IManagerOptions, TStores, TInitStore } from "./types-4732bbd2";
1
+ import { IConstructableStore, IManagerParams, IStorage, IStore, TStoreDefinition, IManagerOptions, TStores, IStoreLifecycle, TInitStore, IStoreParams } from "./types-5b099751";
2
2
  /**
3
3
  * Mobx stores manager
4
4
  */
@@ -10,12 +10,15 @@ declare class Manager {
10
10
  /**
11
11
  * Created stores
12
12
  */
13
- private readonly stores;
13
+ protected readonly stores: Map<string, TInitStore<IStore>>;
14
14
  /**
15
- * Counters for multiple stores
16
- * @private
15
+ * Relations between stores
16
+ * @protected
17
17
  */
18
- private readonly counterStores;
18
+ protected readonly storesRelations: Map<string, {
19
+ ids: Set<string>;
20
+ parentId: string | null;
21
+ }>;
19
22
  /**
20
23
  * Save persisted stores identities
21
24
  * @private
@@ -28,7 +31,6 @@ declare class Manager {
28
31
  protected readonly initState: Record<string, any>;
29
32
  /**
30
33
  * Storage for persisted stores
31
- * @private
32
34
  */
33
35
  readonly storage: IStorage | undefined;
34
36
  /**
@@ -43,7 +45,6 @@ declare class Manager {
43
45
  protected readonly storesParams: IManagerParams['storesParams'];
44
46
  /**
45
47
  * Manager options
46
- * @private
47
48
  */
48
49
  readonly options: IManagerOptions;
49
50
  /**
@@ -75,14 +76,30 @@ declare class Manager {
75
76
  * Get store identity
76
77
  * @protected
77
78
  */
78
- protected static getStoreKey<T>(store: IConstructableStore<T> | TInitStore, id?: string, index?: number): string;
79
+ protected getStoreId<T>(store: IConstructableStore<T> | TInitStore, params?: IStoreParams): string;
80
+ /**
81
+ * Generate new context id
82
+ */
83
+ /**
84
+ * Generate new context id
85
+ */
86
+ createContextId(id?: string): string;
79
87
  /**
80
88
  * Get exist store
81
89
  */
82
90
  /**
83
91
  * Get exist store
84
92
  */
85
- getStore<T>(store: IConstructableStore<T>, id?: string, index?: number): T | undefined;
93
+ getStore<T>(store: IConstructableStore<T>, params?: IStoreParams): T | undefined;
94
+ /**
95
+ * Lookup store
96
+ * @protected
97
+ */
98
+ /**
99
+ * Lookup store
100
+ * @protected
101
+ */
102
+ protected lookupStore<T>(id: string, params: IStoreParams): TInitStore<T> | undefined;
86
103
  /**
87
104
  * Create new store instance
88
105
  * @protected
@@ -91,14 +108,23 @@ declare class Manager {
91
108
  * Create new store instance
92
109
  * @protected
93
110
  */
94
- protected createStore<T>(store: IConstructableStore<T>, id?: string): T;
111
+ protected createStore<T>(store: IConstructableStore<T>, params: Omit<Required<IStoreParams>, 'key'>): T;
95
112
  /**
96
113
  * Create stores for component
97
114
  */
98
115
  /**
99
116
  * Create stores for component
100
117
  */
101
- createStores(map: [string, TStoreDefinition][]): TStores;
118
+ createStores(map: [string, TStoreDefinition][], parentId: string, contextId: string): TStores;
119
+ /**
120
+ * Prepare store before usage
121
+ * @protected
122
+ */
123
+ /**
124
+ * Prepare store before usage
125
+ * @protected
126
+ */
127
+ protected prepareStore(store: TStores[string]): Required<IStoreLifecycle>['onDestroy'][];
102
128
  /**
103
129
  * Mount stores to component
104
130
  */
package/lib/manager.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("mobx"),t=require("./on-change-listener.js"),s=require("./wakeup.js");class r{constructor({initState:e,storesParams:t,storage:s,options:i}={}){Object.defineProperty(this,"stores",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"counterStores",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"initState",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"storage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"persistData",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"storesParams",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:{shouldDisablePersist:!1,shouldRemoveInitState:!0,isSSR:!1}}),this.initState=e||{},this.storesParams=t||{},this.storage=s,Object.assign(this.options,i||{}),r.instance=this}async init(){return this.storage&&(this.persistData=await this.storage.get()||{}),this}static get(){if(!r.instance)throw new Error("Store manager is not initialized.");return r.instance}static getStoreKey(e,t,s){const r=t||e.id||e.name||e.constructor.name;return s?`${r}--index${s}`:r}getStore(e,t,s){const i=r.getStoreKey(e,t,s);return this.stores.has(i)?this.stores.get(i):e.isSingleton?this.createStore(e,t):void 0}createStore(e,t){var s,i,o;const n=r.getStoreKey(e,t);if((e.isSingleton||this.options.isSSR)&&this.stores.has(n))return this.stores.get(n);const a=this.counterStores.get(n)||0,l=r.getStoreKey(e,t,a>0?a+1:void 0),u=new e({storeManager:this,...this.storesParams});u.id=l,u.isSingleton=e.isSingleton;const c=this.initState[l],h=this.persistData[l];return c&&(Object.assign(u,c),this.options.shouldRemoveInitState&&delete this.initState[l]),"wakeup"in u&&r.persistedStores.has(l)&&(null===(s=u.wakeup)||void 0===s||s.call(u,u,{initState:c,persistedState:h}),null===(i=u.addOnChangeListener)||void 0===i||i.call(u,u,this)),this.stores.set(l,u),this.counterStores.set(n,a+1),null===(o=u.init)||void 0===o||o.call(u),u}createStores(e){return e.reduce(((e,[t,s])=>{const[r,i]="store"in s?[s.store,s.id]:[s];return{...e,[t]:this.createStore(r,i)}}),{})}mountStores(e){const t=[];return Object.values(e).forEach((e=>{var s;const i=r.getStoreKey(e);if(this.stores.has(i)||this.stores.set(i,e),"onMount"in e){const r=null===(s=e.onMount)||void 0===s?void 0:s.call(e);"function"==typeof r&&t.push(r)}"onDestroy"in e&&t.push((()=>{var t;return null===(t=e.onDestroy)||void 0===t?void 0:t.call(e)}))})),()=>{t.forEach((e=>e())),Object.values(e).forEach((e=>{var t;const s=r.getStoreKey(e);e.isSingleton||(this.stores.delete(s),this.counterStores.set(s.replace(/--index.+$/,""),(null!==(t=this.counterStores.get(s))&&void 0!==t?t:0)-1))}))}}toJSON(){var e,t;const s={};for(const[i,o]of this.stores.entries())s[i]=null!==(t=null===(e=o.toJSON)||void 0===e?void 0:e.call(o))&&void 0!==t?t:r.getObservableProps(o);return s}toPersistedJSON(){var e,t;const s={};for(const i of r.persistedStores){const o=this.stores.get(i);o&&(s[i]=null!==(t=null===(e=o.toJSON)||void 0===e?void 0:e.call(o))&&void 0!==t?t:r.getObservableProps(o))}return s}static getObservableProps(t){const s=e.toJS(t);return Object.entries(s).reduce(((s,[r,i])=>({...s,...e.isObservableProp(t,r)?{[r]:i}:{}})),{})}static persistStore(e,i){if(r.persistedStores.has(i))throw new Error(`Duplicate serializable store key: ${i}`);return r.persistedStores.add(i),e.id=i,"wakeup"in e.prototype||(e.prototype.wakeup=s),"addOnChangeListener"in e.prototype||(e.prototype.addOnChangeListener=t),e}}Object.defineProperty(r,"persistedStores",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),module.exports=r;
1
+ "use strict";var e=require("mobx"),t=require("./on-change-listener.js"),s=require("./wakeup.js");class r{constructor({initState:e,storesParams:t,storage:s,options:i}={}){Object.defineProperty(this,"stores",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"storesRelations",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"initState",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"storage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"persistData",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"storesParams",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:{shouldDisablePersist:!1,shouldRemoveInitState:!0,isSSR:!1}}),this.initState=e||{},this.storesParams=t||{},this.storage=s,Object.assign(this.options,i||{}),r.instance=this}async init(){return this.storage&&(this.persistData=await this.storage.get()||{}),this}static get(){if(!r.instance)throw new Error("Store manager is not initialized.");return r.instance}getStoreId(e,t={}){const{id:s,contextId:r,key:i}=t;if(s)return s;if(e.id)return e.id;let o=e.name||e.constructor.name;return e.isSingleton?o:(o=`${o}--${r}`,i?`${o}--${i}`:o)}createContextId(e){return`ctx${e||this.storesRelations.size+1}`}getStore(e,t={}){const s=this.getStoreId(e,t);return this.stores.has(s)?this.stores.get(s):e.isSingleton?this.createStore(e,{id:s,contextId:"singleton",parentId:"root"}):this.lookupStore(s,t)}lookupStore(e,t){var s,r;const{contextId:i,parentId:o}=t,n=null===(s=e.split("--"))||void 0===s?void 0:s[0],{ids:a,parentId:l}=null!==(r=this.storesRelations.get(i))&&void 0!==r?r:{ids:new Set,parentId:o},d=[...a].filter((e=>e.startsWith(`${n}--`)));if(1===d.length)return this.stores.get(d[0]);if(d.length>1)console.error("Parent context has multiple stores with the same id, please pass key to getStore function.");else if(l&&"root"!==l)return this.lookupStore(e,{contextId:l})}createStore(e,t){var s,i;const{isSSR:o}=this.options,{id:n,contextId:a,parentId:l}=t;if((e.isSingleton||o)&&this.stores.has(n))return this.stores.get(n);const d=new e({storeManager:this,getStore:(e,t={contextId:a,parentId:l})=>this.getStore(e,t),...this.storesParams});d.id=n,d.isSingleton=e.isSingleton,d.contextId=e.isSingleton?"singleton":a,d.parentId=e.isSingleton||!l||l===a?"root":l;const c=this.initState[n],u=this.persistData[n];return c&&Object.assign(d,c),"wakeup"in d&&r.persistedStores.has(n)&&(null===(s=d.wakeup)||void 0===s||s.call(d,d,{initState:c,persistedState:u})),null===(i=d.init)||void 0===i||i.call(d),(d.isSingleton||o)&&this.prepareStore(d),d}createStores(e,t,s){return e.reduce(((e,[r,i])=>{const[o,n]="store"in i?[i.store,i.id]:[i,this.getStoreId(i,{key:r,contextId:s})];return{...e,[r]:this.createStore(o,{id:n,contextId:s,parentId:t})}}),{})}prepareStore(e){const{shouldRemoveInitState:t}=this.options,s=e.id,i=e.contextId,o=[];this.storesRelations.has(i)||this.storesRelations.set(i,{ids:new Set,parentId:e.parentId&&e.parentId!==i?e.parentId:"root"});const{ids:n}=this.storesRelations.get(i);return r.persistedStores.has(s)&&"addOnChangeListener"in e&&o.push(e.addOnChangeListener(e,this)),t&&this.initState[s]&&delete this.initState[s],this.stores.has(s)||(this.stores.set(s,e),n.add(s)),o}mountStores(e){const t=[];return Object.values(e).forEach((e=>{var s;if(t.push(...this.prepareStore(e)),"onMount"in e){const r=null===(s=e.onMount)||void 0===s?void 0:s.call(e);"function"==typeof r&&t.push(r)}"onDestroy"in e&&t.push((()=>{var t;return null===(t=e.onDestroy)||void 0===t?void 0:t.call(e)}))})),()=>{t.forEach((e=>e())),Object.values(e).forEach((e=>{var t;const s=e.id;if(!e.isSingleton){const{ids:r}=null!==(t=this.storesRelations.get(e.contextId))&&void 0!==t?t:{ids:new Set};this.stores.delete(s),r.delete(s),r.size||this.storesRelations.delete(e.contextId)}}))}}toJSON(){var e,t;const s={};for(const[i,o]of this.stores.entries())s[i]=null!==(t=null===(e=o.toJSON)||void 0===e?void 0:e.call(o))&&void 0!==t?t:r.getObservableProps(o);return s}toPersistedJSON(){var e,t;const s={};for(const i of r.persistedStores){const o=this.stores.get(i);o&&(s[i]=null!==(t=null===(e=o.toJSON)||void 0===e?void 0:e.call(o))&&void 0!==t?t:r.getObservableProps(o))}return s}static getObservableProps(t){const s=e.toJS(t);return Object.entries(s).reduce(((s,[r,i])=>({...s,...e.isObservableProp(t,r)?{[r]:i}:{}})),{})}static persistStore(e,i){return r.persistedStores.has(i)?(console.error(`Duplicate serializable store key: ${i}`),e):(r.persistedStores.add(i),e.id=i,"wakeup"in e.prototype||(e.prototype.wakeup=s),"addOnChangeListener"in e.prototype||(e.prototype.addOnChangeListener=t),e)}}Object.defineProperty(r,"persistedStores",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),module.exports=r;
@@ -1,4 +1,4 @@
1
- import { IStorePersisted } from "./types-4732bbd2";
1
+ import { IStorePersisted } from "./types-5b099751";
2
2
  /**
3
3
  * Listen persist store changes
4
4
  */
@@ -1,4 +1,4 @@
1
- import { IStorage } from "../types-4732bbd2";
1
+ import { IStorage } from "../types-5b099751";
2
2
  interface IAsyncStorage {
3
3
  getItem: (key: string) => Promise<string | null>;
4
4
  setItem: (key: string, value: string) => Promise<void>;
@@ -1,4 +1,4 @@
1
- import { IStorage } from "../types-4732bbd2";
1
+ import { IStorage } from "../types-5b099751";
2
2
  declare class LocalStorage implements IStorage {
3
3
  globalKey: string;
4
4
  /**
@@ -1,6 +1,7 @@
1
1
  import Manager from "./manager";
2
2
  interface IConstructorParams {
3
3
  storeManager: Manager;
4
+ getStore: <T>(store: IConstructableStore<T>, params?: Partial<IStoreParams>) => T | undefined;
4
5
  }
5
6
  interface IStoreLifecycle {
6
7
  onDestroy?: () => void;
@@ -8,6 +9,8 @@ interface IStoreLifecycle {
8
9
  }
9
10
  interface IStore extends IStoreLifecycle {
10
11
  id?: string;
12
+ contextId?: string;
13
+ parentId?: string;
11
14
  isSingleton?: boolean;
12
15
  init?: () => void;
13
16
  toJSON?: () => Record<string, any>;
@@ -29,7 +32,7 @@ type TStoreDefinition<TSto extends IStore | IStorePersisted = any> = IConstructa
29
32
  } & IStoreConfig);
30
33
  type TMapStores = Record<string, TStoreDefinition>;
31
34
  interface IManagerParams {
32
- storesParams?: Omit<IConstructorParams, 'storeManager'>;
35
+ storesParams?: Omit<IConstructorParams, 'storeManager' | 'getStore'>;
33
36
  storage?: IStorage;
34
37
  options?: IManagerOptions;
35
38
  initState?: Record<string, any>;
@@ -63,4 +66,10 @@ type ClassReturnType<T> = T extends new (...args: any) => infer R ? R : T extend
63
66
  type StoresType<TSt> = {
64
67
  [keys in keyof TSt]: ClassReturnType<TSt[keys]>;
65
68
  };
66
- export { IConstructorParams, IStoreLifecycle, IStore, IStorePersisted, TInitStore, IConstructableStore, IStoreConfig, TStoreDefinition, TMapStores, IManagerParams, TWakeup, IStorage, IManagerOptions, TStores, ClassReturnType, StoresType };
69
+ interface IStoreParams {
70
+ id?: string;
71
+ key?: string;
72
+ contextId?: string;
73
+ parentId?: string;
74
+ }
75
+ export { IConstructorParams, IStoreLifecycle, IStore, IStorePersisted, TInitStore, IConstructableStore, IStoreConfig, TStoreDefinition, TMapStores, IManagerParams, TWakeup, IStorage, IManagerOptions, TStores, ClassReturnType, StoresType, IStoreParams };
package/lib/wakeup.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IStorePersisted } from "./types-4732bbd2";
1
+ import { IStorePersisted } from "./types-5b099751";
2
2
  /**
3
3
  * Restore store state from initial state
4
4
  */
@@ -1,7 +1,7 @@
1
1
  import { FC } from 'react';
2
- import { TMapStores } from "./types-4732bbd2";
2
+ import { TMapStores } from "./types-5b099751";
3
3
  /**
4
4
  * Make component observable and pass stores as props
5
5
  */
6
- declare const withStores: <T extends Record<string, any>, TS extends TMapStores>(Component: FC<T>, stores: TS) => FC<Omit<T, keyof TS>>;
6
+ declare const withStores: <T extends Record<string, any>, TS extends TMapStores>(Component: FC<T>, stores: TS, customContextId?: string) => FC<Omit<T, keyof TS>>;
7
7
  export { withStores as default };
@@ -1 +1 @@
1
- "use strict";var e=require("hoist-non-react-statics"),t=require("mobx-react-lite"),r=require("react"),a=require("./context.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),u=o(r);module.exports=(e,o)=>{const n=Object.entries(o),c=t.observer(e),i=e.displayName||e.name,l=({...e})=>{const t=a.useStoreManagerContext(),[o]=r.useState((()=>t.createStores(n)));return r.useEffect((()=>t.mountStores(o)),[o,t]),u.default.createElement(c,{...o,...e})};return s.default(l,e),l.displayName=`Mobx(${i})`,l};
1
+ "use strict";var e=require("hoist-non-react-statics"),t=require("mobx-react-lite"),r=require("react"),a=require("./context.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=n(e),u=n(r);module.exports=(e,n,s)=>{const c=t.observer(e),d=s||e.contextId,i=({...e})=>{var t;const o=a.useStoreManagerContext(),{parentId:s}=a.useStoreManagerParentContext(),i=null===(t=u.default.useId)||void 0===t?void 0:t.call(u.default),[{contextId:l,initStores:f}]=r.useState((()=>{const e=o.createContextId(d||i);return{contextId:e,initStores:o.createStores(Object.entries(n),s,e)}}));return r.useEffect((()=>o.mountStores(f)),[f,o]),u.default.createElement(a.StoreManagerParentProvider,{parentId:l},u.default.createElement(c,{...f,...e}))};return o.default(i,e),i.displayName=`Mobx(${e.displayName||e.name})`,i};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lomray/react-mobx-manager",
3
- "version": "1.0.0-beta.8",
3
+ "version": "1.1.0-beta.1",
4
4
  "description": "This package provides Mobx stores manager for react.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -33,11 +33,9 @@
33
33
  "build": "rollup -c",
34
34
  "build:dev": "rollup -c --environment BUILD:development",
35
35
  "build:watch": "rollup -c -w --environment BUILD:development",
36
- "prettier:format": "prettier --write 'src/**/*.{ts,tsx,*.ts,*tsx}'",
37
- "prettier:check": "prettier --check --debug-check 'src/**/*.{ts,tsx,*.ts,*tsx}'",
38
- "lint:check": "eslint --ext '.ts,.tsx' 'src/**/*.{ts,tsx,*.ts,*tsx}'",
39
- "lint:format": "eslint --fix --ext '.ts,.tsx' 'src/**/*.{ts,tsx,*.ts,*tsx}'",
40
- "ts:check": "tsc --project ./tsconfig.json --skipLibCheck --noemit",
36
+ "lint:check": "eslint --ext \".ts,.tsx\" \"src/**/*.{ts,tsx,*.ts,*tsx}\"",
37
+ "lint:format": "eslint --fix --ext \".ts,.tsx\" \"src/**/*.{ts,tsx,*.ts,*tsx}\"",
38
+ "ts:check": "tsc --project ./tsconfig.checks.json --skipLibCheck --noemit",
41
39
  "prepare": "husky install"
42
40
  },
43
41
  "devDependencies": {
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": [
4
+ "src/**/*"
5
+ ]
6
+ }