-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
86 lines (75 loc) · 2.6 KB
/
index.js
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import React from 'react'
import { BehaviorSubject, Subscription } from 'rxjs'
///////////////////////////////////////////////////////
// Create Basic Subscription State Object
//////////////////////////////////////////////////////
export function createStateObject(initialState) {
const myState = new BehaviorSubject(initialState)
return {
stateObject: myState,
subscribe: (setState) => {
const subscription = myState.subscribe(setState)
return subscription
},
set: (nextState) => {
myState.next(nextState)
},
clear: () => {
myState.next(initialState)
}
}
}
///////////////////////////////////////////////////////
// Create React Subscription State Manager with
// additional methods
//////////////////////////////////////////////////////
export function createStateManager(stateService) {
const [myState, setMyState] = React.useState(stateService.stateObject.getValue())
React.useEffect(() => {
const subscription = stateService.subscribe(setMyState)
return () => {
subscription.unsubscribe()
}
}, [])
return [myState, stateService]
}
///////////////////////////////////////////////////////
// Create basic React Subscription State
//////////////////////////////////////////////////////
export function createSimpleState(stateService) {
const [myState, setMyState] = React.useState(stateService.stateObject.getValue())
React.useEffect(() => {
const subscription = stateService.subscribe(setMyState)
return () => {
subscription.unsubscribe()
}
}, [])
return [myState, stateService.set]
}
///////////////////////////////////////////////////////
// Create State Object Store
//////////////////////////////////////////////////////
export function createStateObjectStore(initialState) {
let storeProperty = []
let defaultState = initialState
const stateObjectStore = {
store: storeProperty,
get: (id) => {
const store = storeProperty.find(s => s.id === id)
if (store) {
return store.state
} else {
const newStore = createStateObject(defaultState);
storeProperty.push({ id: id, state: newStore })
return newStore
}
},
add: (stateObject, id) => {
storeProperty.push({ id: id, state: stateObject })
},
remove: (id) => {
storeProperty = storeProperty.filter(store => store.id !== id)
}
}
return stateObjectStore
}