Skip to content

Commit 660264d

Browse files
committed
Remodified recoil function in Createtree by adding new conditions and implementing LinkedList with Recoil properties
1 parent dfd14b6 commit 660264d

File tree

1 file changed

+62
-41
lines changed

1 file changed

+62
-41
lines changed

src/backend/linkFiber.ts

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,17 @@ if (window[`$recoilDebugStates`]) {
4040

4141
function getRecoilState(): any {
4242
const RecoilSnapshotsLength = window[`$recoilDebugStates`].length;
43-
const lastRecoilSnapshot = window[`$recoilDebugStates`][RecoilSnapshotsLength - 1];
43+
const lastRecoilSnapshot =
44+
window[`$recoilDebugStates`][RecoilSnapshotsLength - 1];
4445
const nodeToNodeSubs = lastRecoilSnapshot.nodeToNodeSubscriptions;
4546
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'])
5052
);
51-
}
52-
);
53+
});
5354
}
5455

5556
/**
@@ -105,13 +106,16 @@ function updateSnapShotTree(snap: Snapshot, mode: Mode): void {
105106
* @param memoizedProps Property containing props on a stateful fctnl component's FiberNode object
106107
* @return An array of array of HookStateItem objects (state and component properties)
107108
*/
108-
function traverseRecoilHooks(memoizedState: any, memoizedProps: any): HookStates {
109+
function traverseRecoilHooks(
110+
memoizedState: any,
111+
memoizedProps: any
112+
): HookStates {
109113
const hooksStates: HookStates = [];
110114
while (memoizedState && memoizedState.queue) {
111115
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'
115119
) {
116120
if (Object.entries(memoizedProps).length !== 0) {
117121
hooksStates.push({
@@ -120,7 +124,8 @@ function traverseRecoilHooks(memoizedState: any, memoizedProps: any): HookStates
120124
});
121125
}
122126
}
123-
memoizedState = memoizedState.next !== memoizedState ? memoizedState.next : null;
127+
memoizedState =
128+
memoizedState.next !== memoizedState ? memoizedState.next : null;
124129
}
125130

126131
return hooksStates;
@@ -131,21 +136,20 @@ function traverseRecoilHooks(memoizedState: any, memoizedProps: any): HookStates
131136
* @param memoizedState memoizedState property on a stateful fctnl component's FiberNode object
132137
* @return An array of array of HookStateItem objects
133138
*
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
135140
* every time a hooks component changes state
136141
*/
137142
function traverseHooks(memoizedState: any): HookStates {
138143
const hooksStates: HookStates = [];
139144
while (memoizedState && memoizedState.queue) {
140-
if (
141-
memoizedState.memoizedState
142-
) {
145+
if (memoizedState.memoizedState) {
143146
hooksStates.push({
144147
component: memoizedState.queue,
145148
state: memoizedState.memoizedState,
146149
});
147150
}
148-
memoizedState = memoizedState.next !== memoizedState ? memoizedState.next : null;
151+
memoizedState =
152+
memoizedState.next !== memoizedState ? memoizedState.next : null;
149153
}
150154
return hooksStates;
151155
}
@@ -187,22 +191,38 @@ function createTree(
187191
treeBaseDuration,
188192
} = currentFiber;
189193

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
194207
}
208+
}
195209

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+
// }
200215

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+
// }
206226

207227
let newState: any | { hooksState?: any[] } = {};
208228
let componentData: {
@@ -230,24 +250,22 @@ function createTree(
230250

231251
let hooksIndex;
232252

233-
234-
235253
const atomArray = [];
236254
atomArray.push(memoizedProps);
237255

238256
// RECOIL HOOKS
239257
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
243261
) {
244262
if (memoizedState.queue) {
245263
// Hooks states are stored as a linked list using memoizedState.next,
246264
// so we must traverse through the list and get the states.
247265
// We then store them along with the corresponding memoizedState.queue,
248266
// which includes the dispatch() function we use to change their state.
249267
const hooksStates = traverseRecoilHooks(memoizedState, memoizedProps);
250-
hooksStates.forEach(state => {
268+
hooksStates.forEach((state) => {
251269
hooksIndex = componentActionsRecord.saveNew(
252270
state.state,
253271
state.component
@@ -270,9 +288,9 @@ function createTree(
270288
// Check if node is a hooks useState function
271289
// REGULAR REACT HOOKS
272290
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
276294
) {
277295
if (memoizedState.queue) {
278296
// Hooks states are stored as a linked list using memoizedState.next,
@@ -368,7 +386,10 @@ export default (snap: Snapshot, mode: Mode): (() => void) => {
368386
const reactInstance = devTools ? devTools.renderers.get(1) : null;
369387
fiberRoot = devTools.getFiberRoots(1).values().next().value;
370388

371-
const throttledUpdateSnapshot = throttle(() => updateSnapShotTree(snap, mode), 70);
389+
const throttledUpdateSnapshot = throttle(
390+
() => updateSnapShotTree(snap, mode),
391+
70
392+
);
372393
document.addEventListener('visibilitychange', onVisibilityChange);
373394
if (reactInstance && reactInstance.version) {
374395
devTools.onCommitFiberRoot = (function (original) {
@@ -380,7 +401,7 @@ export default (snap: Snapshot, mode: Mode): (() => void) => {
380401
}
381402
return original(...args);
382403
};
383-
}(devTools.onCommitFiberRoot));
404+
})(devTools.onCommitFiberRoot);
384405
}
385406
throttledUpdateSnapshot();
386407
};

0 commit comments

Comments
 (0)