Skip to content

Commit f8b63cf

Browse files
Merge pull request #44 from HichemTab-tech/fix-multiple-instances-in-modules-tree
fix: refactor SharedValuesManager to use a global manager for instance management
2 parents cbaa222 + 0231130 commit f8b63cf

2 files changed

Lines changed: 17 additions & 7 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-shared-states",
3-
"version": "2.1.1",
3+
"version": "2.1.2",
44
"type": "module",
55
"description": "Global state made as simple as useState, with zero config, built-in async caching, and automatic scoping.",
66
"keywords": [

src/SharedValuesManager.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,29 @@ import {ensureNonEmptyString, log, random} from "./lib/utils";
44

55
export const staticStores: SharedCreated[] = [];
66

7+
const MANAGER_KEY = Symbol.for("react-shared-states.manager");
8+
9+
function getManager<T>(instanceKey: string, defaultValue: () => T = () => null as T) {
10+
const g = globalThis as any;
11+
if (!g[MANAGER_KEY]) {
12+
g[MANAGER_KEY] = {};
13+
}
14+
if (!g[MANAGER_KEY][instanceKey]) {
15+
g[MANAGER_KEY][instanceKey] = new SharedValuesManager<T>(defaultValue);
16+
}
17+
return g[MANAGER_KEY][instanceKey] as SharedValuesManager<T>;
18+
}
19+
720
export class SharedValuesManager<T> {
821
data = new Map<string, SharedValue<T>>();
922

1023
static INSTANCES = new Map<string, SharedValuesManager<any>>();
1124

12-
private constructor(protected defaultValue: () => T = () => null as T) {
25+
constructor(protected defaultValue: () => T = () => null as T) {
1326
}
1427

15-
static getInstance<T>(instanceKey: string): SharedValuesManager<T> {
16-
if (!SharedValuesManager.INSTANCES.has(instanceKey)) {
17-
SharedValuesManager.INSTANCES.set(instanceKey, new SharedValuesManager());
18-
}
19-
return SharedValuesManager.INSTANCES.get(instanceKey) as SharedValuesManager<T>;
28+
static getInstance<T>(instanceKey: string, defaultValue: () => T = () => null as T): SharedValuesManager<T> {
29+
return getManager(instanceKey, defaultValue);
2030
}
2131

2232
addListener(key: string, prefix: Prefix, listener: AFunction) {

0 commit comments

Comments
 (0)