@@ -23,116 +23,51 @@ export type AttributeMap = { [attr: string]: any };
23
23
export type OpsMap = { [ attr : string ] : Op } ;
24
24
export type ObjectCache = { [ attr : string ] : string } ;
25
25
26
- type State = {
26
+ export type State = {
27
27
serverData : AttributeMap ;
28
28
pendingOps: Array < OpsMap > ;
29
29
objectCache: ObjectCache ;
30
30
tasks: TaskQueue ;
31
31
existed: boolean
32
32
} ;
33
33
34
- var objectState : {
35
- [ className : string ] : {
36
- [ id : string ] : State
37
- }
38
- } = { } ;
39
-
40
- export function getState ( className : string , id : string ) : ?State {
41
- var classData = objectState [ className ] ;
42
- if ( classData ) {
43
- return classData [ id ] || null ;
44
- }
45
- return null ;
46
- }
47
-
48
- export function initializeState ( className : string , id : string , initial ?: State ) : State {
49
- var state = getState ( className , id ) ;
50
- if ( state ) {
51
- return state ;
52
- }
53
- if ( ! objectState [ className ] ) {
54
- objectState [ className ] = { } ;
55
- }
56
- if ( ! initial ) {
57
- initial = {
58
- serverData : { } ,
59
- pendingOps : [ { } ] ,
60
- objectCache : { } ,
61
- tasks : new TaskQueue ( ) ,
62
- existed : false
63
- } ;
64
- }
65
- state = objectState [ className ] [ id ] = initial ;
66
- return state ;
67
- }
68
-
69
- export function removeState ( className : string , id : string ) : ?State {
70
- var state = getState ( className , id ) ;
71
- if ( state === null ) {
72
- return null ;
73
- }
74
- delete objectState [ className ] [ id ] ;
75
- return state ;
76
- }
77
-
78
- export function getServerData ( className : string , id : string ) : AttributeMap {
79
- var state = getState ( className , id ) ;
80
- if ( state ) {
81
- return state . serverData ;
82
- }
83
- return { } ;
84
- }
85
-
86
- export function setServerData ( className : string , id : string , attributes : AttributeMap ) {
87
- var data = initializeState ( className , id ) . serverData ;
88
- for ( var attr in attributes ) {
34
+ export function setServerData ( serverData : AttributeMap , attributes : AttributeMap ) {
35
+ for ( let attr in attributes ) {
89
36
if ( typeof attributes [ attr ] !== 'undefined' ) {
90
- data [ attr ] = attributes [ attr ] ;
37
+ serverData [ attr ] = attributes [ attr ] ;
91
38
} else {
92
- delete data [ attr ] ;
39
+ delete serverData [ attr ] ;
93
40
}
94
41
}
95
42
}
96
43
97
- export function getPendingOps ( className : string , id : string ) : Array < OpsMap > {
98
- var state = getState ( className , id ) ;
99
- if ( state ) {
100
- return state . pendingOps;
101
- }
102
- return [ { } ] ;
103
- }
104
-
105
- export function setPendingOp ( className : string , id : string , attr : string , op : ?Op ) {
106
- var pending = initializeState ( className , id ) . pendingOps ;
107
- var last = pending . length - 1 ;
44
+ export function setPendingOp ( pendingOps : Array < OpsMap > , attr : string , op : ?Op ) {
45
+ let last = pendingOps . length - 1 ;
108
46
if ( op ) {
109
- pending [ last ] [ attr ] = op ;
47
+ pendingOps [ last ] [ attr ] = op ;
110
48
} else {
111
- delete pending [ last ] [ attr ] ;
49
+ delete pendingOps [ last ] [ attr ] ;
112
50
}
113
51
}
114
52
115
- export function pushPendingState ( className : string , id : string ) {
116
- var pending = initializeState ( className , id ) . pendingOps ;
117
- pending . push ( { } ) ;
53
+ export function pushPendingState ( pendingOps : Array < OpsMap > ) {
54
+ pendingOps . push ( { } ) ;
118
55
}
119
56
120
- export function popPendingState ( className : string , id : string ) : OpsMap {
121
- var pending = initializeState ( className , id ) . pendingOps ;
122
- var first = pending . shift ( ) ;
123
- if ( ! pending . length ) {
124
- pending [ 0 ] = { } ;
57
+ export function popPendingState ( pendingOps : Array < OpsMap > ) : OpsMap {
58
+ let first = pendingOps . shift ( ) ;
59
+ if ( ! pendingOps . length ) {
60
+ pendingOps [ 0 ] = { } ;
125
61
}
126
62
return first ;
127
63
}
128
64
129
- export function mergeFirstPendingState ( className : string , id : string ) {
130
- var first = popPendingState ( className , id ) ;
131
- var pending = getPendingOps ( className , id ) ;
132
- var next = pending [ 0 ] ;
133
- for ( var attr in first ) {
65
+ export function mergeFirstPendingState ( pendingOps : Array < OpsMap > ) {
66
+ let first = popPendingState ( pendingOps ) ;
67
+ let next = pendingOps [ 0 ] ;
68
+ for ( let attr in first ) {
134
69
if ( next [ attr ] && first [ attr ] ) {
135
- var merged = next [ attr ] . mergeWith ( first [ attr ] ) ;
70
+ let merged = next [ attr ] . mergeWith ( first [ attr ] ) ;
136
71
if ( merged ) {
137
72
next [ attr ] = merged ;
138
73
}
@@ -142,80 +77,58 @@ export function mergeFirstPendingState(className: string, id: string) {
142
77
}
143
78
}
144
79
145
- export function getObjectCache ( className : string , id : string ) : ObjectCache {
146
- var state = getState ( className , id ) ;
147
- if ( state ) {
148
- return state . objectCache ;
149
- }
150
- return { } ;
151
- }
152
-
153
- export function estimateAttribute ( className : string , id : string , attr : string ) : mixed {
154
- var serverData = getServerData ( className , id ) ;
155
- var value = serverData [ attr ] ;
156
- var pending = getPendingOps ( className , id ) ;
157
- for ( var i = 0 ; i < pending . length ; i ++ ) {
158
- if ( pending [ i ] [ attr ] ) {
159
- if ( pending [ i ] [ attr ] instanceof RelationOp ) {
160
- value = pending [ i ] [ attr ] . applyTo (
80
+ export function estimateAttribute ( serverData : AttributeMap , pendingOps : Array < OpsMap > , className : string , id : string , attr : string ) : mixed {
81
+ let value = serverData [ attr ] ;
82
+ for ( let i = 0 ; i < pendingOps . length ; i ++ ) {
83
+ if ( pendingOps [ i ] [ attr ] ) {
84
+ if ( pendingOps [ i ] [ attr ] instanceof RelationOp ) {
85
+ value = pendingOps [ i ] [ attr ] . applyTo (
161
86
value ,
162
87
{ className : className , id : id } ,
163
88
attr
164
89
) ;
165
90
} else {
166
- value = pending [ i ] [ attr ] . applyTo ( value ) ;
91
+ value = pendingOps [ i ] [ attr ] . applyTo ( value ) ;
167
92
}
168
93
}
169
94
}
170
95
return value ;
171
96
}
172
97
173
- export function estimateAttributes ( className : string , id : string ) : AttributeMap {
174
- var data = { } ;
175
- var attr ;
176
- var serverData = getServerData ( className , id ) ;
98
+ export function estimateAttributes ( serverData : AttributeMap , pendingOps : Array < OpsMap > , className : string , id : string ) : AttributeMap {
99
+ let data = { } ;
100
+ let attr ;
177
101
for ( attr in serverData ) {
178
102
data [ attr ] = serverData [ attr ] ;
179
103
}
180
- var pending = getPendingOps ( className , id ) ;
181
- for ( var i = 0 ; i < pending . length ; i ++ ) {
182
- for ( attr in pending [ i ] ) {
183
- if ( pending [ i ] [ attr ] instanceof RelationOp ) {
184
- data [ attr ] = pending [ i ] [ attr ] . applyTo (
104
+ for ( let i = 0 ; i < pendingOps . length ; i ++ ) {
105
+ for ( attr in pendingOps [ i ] ) {
106
+ if ( pendingOps [ i ] [ attr ] instanceof RelationOp ) {
107
+ data [ attr ] = pendingOps [ i ] [ attr ] . applyTo (
185
108
data [ attr ] ,
186
109
{ className : className , id : id } ,
187
110
attr
188
111
) ;
189
112
} else {
190
- data [ attr ] = pending [ i ] [ attr ] . applyTo ( data [ attr ] ) ;
113
+ data [ attr ] = pendingOps [ i ] [ attr ] . applyTo ( data [ attr ] ) ;
191
114
}
192
115
}
193
116
}
194
117
return data ;
195
118
}
196
119
197
- export function commitServerChanges ( className : string , id : string , changes : AttributeMap ) {
198
- var state = initializeState ( className , id ) ;
199
- for ( var attr in changes ) {
200
- var val = changes [ attr ] ;
201
- state . serverData [ attr ] = val ;
120
+ export function commitServerChanges ( serverData : AttributeMap , objectCache : ObjectCache , changes : AttributeMap ) {
121
+ for ( let attr in changes ) {
122
+ let val = changes [ attr ] ;
123
+ serverData [ attr ] = val ;
202
124
if ( val &&
203
125
typeof val === 'object' &&
204
126
! ( val instanceof ParseObject ) &&
205
127
! ( val instanceof ParseFile ) &&
206
128
! ( val instanceof ParseRelation )
207
129
) {
208
- var json = encode ( val , false , true ) ;
209
- state . objectCache [ attr ] = JSON . stringify ( json ) ;
130
+ let json = encode ( val , false , true ) ;
131
+ objectCache [ attr ] = JSON . stringify ( json ) ;
210
132
}
211
133
}
212
134
}
213
-
214
- export function enqueueTask ( className : string , id : string , task : ( ) = > ParsePromise ) {
215
- var state = initializeState ( className , id ) ;
216
- return state . tasks . enqueue ( task ) ;
217
- }
218
-
219
- export function _clearAllState ( ) {
220
- objectState = { } ;
221
- }
0 commit comments