-
Notifications
You must be signed in to change notification settings - Fork 571
/
PropsStore.ts
44 lines (37 loc) · 1.17 KB
/
PropsStore.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class PropsStore {
static _instance: PropsStore
private propsByModuleName: Record<string, any> = {}
private pendingPropsByModuleName: Record<string, any> = {}
constructor() {
if (PropsStore._instance) {
return PropsStore._instance
}
PropsStore._instance = this
}
updateProps(
moduleName: string,
props: any,
callback?: (updatedProps: { [key: string]: any }) => void
) {
this.mergeNewPropsForModule(moduleName, props)
callback?.(this.propsByModuleName[moduleName])
}
setPendingProps(moduleName: string, newProps: any) {
this.pendingPropsByModuleName[moduleName] = newProps
}
getPropsForModule(moduleName: string) {
if (this.pendingPropsByModuleName[moduleName]) {
this.propsByModuleName[moduleName] = this.pendingPropsByModuleName[moduleName]
delete this.pendingPropsByModuleName[moduleName]
}
return this.propsByModuleName[moduleName] || {}
}
mergeNewPropsForModule(moduleName: string, newProps: any) {
const currentProps = this.getPropsForModule(moduleName)
this.propsByModuleName[moduleName] = {
...currentProps,
...newProps,
}
}
}
export const propsStore = new PropsStore()