@@ -40,16 +40,17 @@ if (window[`$recoilDebugStates`]) {
40
40
41
41
function getRecoilState ( ) : any {
42
42
const RecoilSnapshotsLength = window [ `$recoilDebugStates` ] . length ;
43
- const lastRecoilSnapshot = window [ `$recoilDebugStates` ] [ RecoilSnapshotsLength - 1 ] ;
43
+ const lastRecoilSnapshot =
44
+ window [ `$recoilDebugStates` ] [ RecoilSnapshotsLength - 1 ] ;
44
45
const nodeToNodeSubs = lastRecoilSnapshot . nodeToNodeSubscriptions ;
45
46
const nodeToNodeSubsKeys = lastRecoilSnapshot . nodeToNodeSubscriptions . keys ( ) ;
46
- nodeToNodeSubsKeys . forEach (
47
- node => {
48
- nodeToNodeSubs . get ( node ) . forEach (
49
- nodeSubs => allAtomsRelationship . push ( [ node , nodeSubs , 'atoms and selectors' ] )
47
+ nodeToNodeSubsKeys . forEach ( ( node ) => {
48
+ nodeToNodeSubs
49
+ . get ( node )
50
+ . forEach ( ( nodeSubs ) =>
51
+ allAtomsRelationship . push ( [ node , nodeSubs , 'atoms and selectors' ] )
50
52
) ;
51
- }
52
- ) ;
53
+ } ) ;
53
54
}
54
55
55
56
/**
@@ -105,13 +106,16 @@ function updateSnapShotTree(snap: Snapshot, mode: Mode): void {
105
106
* @param memoizedProps Property containing props on a stateful fctnl component's FiberNode object
106
107
* @return An array of array of HookStateItem objects (state and component properties)
107
108
*/
108
- function traverseRecoilHooks ( memoizedState : any , memoizedProps : any ) : HookStates {
109
+ function traverseRecoilHooks (
110
+ memoizedState : any ,
111
+ memoizedProps : any
112
+ ) : HookStates {
109
113
const hooksStates : HookStates = [ ] ;
110
114
while ( memoizedState && memoizedState . queue ) {
111
115
if (
112
- memoizedState . memoizedState
113
- && memoizedState . queue . lastRenderedReducer
114
- && memoizedState . queue . lastRenderedReducer . name === 'basicStateReducer'
116
+ memoizedState . memoizedState &&
117
+ memoizedState . queue . lastRenderedReducer &&
118
+ memoizedState . queue . lastRenderedReducer . name === 'basicStateReducer'
115
119
) {
116
120
if ( Object . entries ( memoizedProps ) . length !== 0 ) {
117
121
hooksStates . push ( {
@@ -120,7 +124,8 @@ function traverseRecoilHooks(memoizedState: any, memoizedProps: any): HookStates
120
124
} ) ;
121
125
}
122
126
}
123
- memoizedState = memoizedState . next !== memoizedState ? memoizedState . next : null ;
127
+ memoizedState =
128
+ memoizedState . next !== memoizedState ? memoizedState . next : null ;
124
129
}
125
130
126
131
return hooksStates ;
@@ -131,21 +136,20 @@ function traverseRecoilHooks(memoizedState: any, memoizedProps: any): HookStates
131
136
* @param memoizedState memoizedState property on a stateful fctnl component's FiberNode object
132
137
* @return An array of array of HookStateItem objects
133
138
*
134
- * Helper function to traverse through memoizedState and inject instrumentation to update our state tree
139
+ * Helper function to traverse through memoizedState and inject instrumentation to update our state tree
135
140
* every time a hooks component changes state
136
141
*/
137
142
function traverseHooks ( memoizedState : any ) : HookStates {
138
143
const hooksStates : HookStates = [ ] ;
139
144
while ( memoizedState && memoizedState . queue ) {
140
- if (
141
- memoizedState . memoizedState
142
- ) {
145
+ if ( memoizedState . memoizedState ) {
143
146
hooksStates . push ( {
144
147
component : memoizedState . queue ,
145
148
state : memoizedState . memoizedState ,
146
149
} ) ;
147
150
}
148
- memoizedState = memoizedState . next !== memoizedState ? memoizedState . next : null ;
151
+ memoizedState =
152
+ memoizedState . next !== memoizedState ? memoizedState . next : null ;
149
153
}
150
154
return hooksStates ;
151
155
}
@@ -187,22 +191,38 @@ function createTree(
187
191
treeBaseDuration,
188
192
} = currentFiber ;
189
193
190
- if ( elementType ?. name && isRecoil ) {
191
- let pointer = memoizedState ;
192
- while ( pointer !== null && pointer !== undefined && pointer . next !== null ) {
193
- pointer = pointer . next ;
194
+ if (
195
+ currentFiber . memoizedState &&
196
+ currentFiber . memoizedState . next &&
197
+ currentFiber . memoizedState . next . memoizedState &&
198
+ currentFiber . memoizedState . next . memoizedState . deps
199
+ ) {
200
+ let pointer = currentFiber . memoizedState . next ) ;
201
+
202
+ while ( pointer !== null ) {
203
+ if ( ! Array . isArray ( pointer . memoizedState ) ) {
204
+ console . log ( pointer )
205
+ }
206
+ pointer = pointer . next
194
207
}
208
+ }
195
209
196
- if ( pointer ?. memoizedState [ 1 ] ?. [ 0 ] . current ) {
197
- const atomName = pointer . memoizedState [ 1 ] ?. [ 0 ] . current . keys ( ) . next ( ) . value ;
198
- allAtomsRelationship . push ( [ atomName , elementType ?. name , 'atoms and components' ] ) ;
199
- }
210
+ // if (elementType?.name && isRecoil) {
211
+ // let pointer = memoizedState;
212
+ // while (pointer !== null && pointer !== undefined && pointer.next !== null) {
213
+ // pointer = pointer.next;
214
+ // }
200
215
201
- if ( pointer ?. memoizedState [ 1 ] ?. [ 0 ] . key ) {
202
- const atomName = pointer . memoizedState [ 1 ] ?. [ 0 ] . key ;
203
- allAtomsRelationship . push ( [ atomName , elementType ?. name , 'atoms and components' ] ) ;
204
- }
205
- }
216
+ // if (pointer?.memoizedState[1]?.[0].current) {
217
+ // const atomName = pointer.memoizedState[1]?.[0].current.keys().next().value;
218
+ // allAtomsRelationship.push([atomName, elementType?.name, 'atoms and components']);
219
+ // }
220
+
221
+ // if (pointer?.memoizedState[1]?.[0].key) {
222
+ // const atomName = pointer.memoizedState[1]?.[0].key;
223
+ // allAtomsRelationship.push([atomName, elementType?.name, 'atoms and components']);
224
+ // }
225
+ // }
206
226
207
227
let newState : any | { hooksState ?: any [ ] } = { } ;
208
228
let componentData : {
@@ -230,24 +250,22 @@ function createTree(
230
250
231
251
let hooksIndex ;
232
252
233
-
234
-
235
253
const atomArray = [ ] ;
236
254
atomArray . push ( memoizedProps ) ;
237
255
238
256
// RECOIL HOOKS
239
257
if (
240
- memoizedState
241
- && ( tag === 0 || tag === 1 || tag === 2 || tag === 10 )
242
- && isRecoil === true
258
+ memoizedState &&
259
+ ( tag === 0 || tag === 1 || tag === 2 || tag === 10 ) &&
260
+ isRecoil === true
243
261
) {
244
262
if ( memoizedState . queue ) {
245
263
// Hooks states are stored as a linked list using memoizedState.next,
246
264
// so we must traverse through the list and get the states.
247
265
// We then store them along with the corresponding memoizedState.queue,
248
266
// which includes the dispatch() function we use to change their state.
249
267
const hooksStates = traverseRecoilHooks ( memoizedState , memoizedProps ) ;
250
- hooksStates . forEach ( state => {
268
+ hooksStates . forEach ( ( state ) => {
251
269
hooksIndex = componentActionsRecord . saveNew (
252
270
state . state ,
253
271
state . component
@@ -270,9 +288,9 @@ function createTree(
270
288
// Check if node is a hooks useState function
271
289
// REGULAR REACT HOOKS
272
290
if (
273
- memoizedState
274
- && ( tag === 0 || tag === 1 || tag === 2 || tag === 10 )
275
- && isRecoil === false
291
+ memoizedState &&
292
+ ( tag === 0 || tag === 1 || tag === 2 || tag === 10 ) &&
293
+ isRecoil === false
276
294
) {
277
295
if ( memoizedState . queue ) {
278
296
// Hooks states are stored as a linked list using memoizedState.next,
@@ -368,7 +386,10 @@ export default (snap: Snapshot, mode: Mode): (() => void) => {
368
386
const reactInstance = devTools ? devTools . renderers . get ( 1 ) : null ;
369
387
fiberRoot = devTools . getFiberRoots ( 1 ) . values ( ) . next ( ) . value ;
370
388
371
- const throttledUpdateSnapshot = throttle ( ( ) => updateSnapShotTree ( snap , mode ) , 70 ) ;
389
+ const throttledUpdateSnapshot = throttle (
390
+ ( ) => updateSnapShotTree ( snap , mode ) ,
391
+ 70
392
+ ) ;
372
393
document . addEventListener ( 'visibilitychange' , onVisibilityChange ) ;
373
394
if ( reactInstance && reactInstance . version ) {
374
395
devTools . onCommitFiberRoot = ( function ( original ) {
@@ -380,7 +401,7 @@ export default (snap: Snapshot, mode: Mode): (() => void) => {
380
401
}
381
402
return original ( ...args ) ;
382
403
} ;
383
- } ( devTools . onCommitFiberRoot ) ) ;
404
+ } ) ( devTools . onCommitFiberRoot ) ;
384
405
}
385
406
throttledUpdateSnapshot ( ) ;
386
407
} ;
0 commit comments