@refinedev/devtools 1.1.33 → 1.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  import {
2
- getElementFromFiber,
3
- getFiberFromElement,
4
- getFirstFiberHasName,
5
- getFirstStateNodeFiber,
6
- getNameFromFiber,
7
- getParentOfFiber,
2
+ getElementFromFiber,
3
+ getFiberFromElement,
4
+ getFirstFiberHasName,
5
+ getFirstStateNodeFiber,
6
+ getNameFromFiber,
7
+ getParentOfFiber,
8
8
  } from "@aliemir/dom-to-fiber-utils";
9
9
  import { DevToolsContext } from "@refinedev/devtools-shared";
10
10
  import debounce from "lodash/debounce";
@@ -13,247 +13,237 @@ import React from "react";
13
13
  type Fiber = Exclude<ReturnType<typeof getFiberFromElement>, null>;
14
14
 
15
15
  export const useSelector = (active: boolean) => {
16
- const { devtoolsUrl } = React.useContext(DevToolsContext);
17
- const [traceItems, setTraceItems] = React.useState<string[]>([]);
18
-
19
- React.useEffect(() => {
20
- if (active) {
21
- fetch(
22
- `${
23
- devtoolsUrl ?? "http://localhost:5001"
24
- }/api/unique-trace-items`,
25
- ).then((res) =>
26
- res
27
- .json()
28
- .then((data: { data: string[] }) =>
29
- setTraceItems(data.data),
30
- ),
31
- );
16
+ const { devtoolsUrl } = React.useContext(DevToolsContext);
17
+ const [traceItems, setTraceItems] = React.useState<string[]>([]);
18
+
19
+ React.useEffect(() => {
20
+ if (active) {
21
+ fetch(
22
+ `${devtoolsUrl ?? "http://localhost:5001"}/api/unique-trace-items`,
23
+ ).then((res) =>
24
+ res.json().then((data: { data: string[] }) => setTraceItems(data.data)),
25
+ );
26
+ }
27
+ }, [active, devtoolsUrl]);
28
+
29
+ const [selectedFiber, setSelectedFiber] = React.useState<{
30
+ stateNode: Fiber | null;
31
+ nameFiber: Fiber | null;
32
+ }>({
33
+ stateNode: null,
34
+ nameFiber: null,
35
+ });
36
+ const [activeFiber, setActiveFiber] = React.useState<{
37
+ stateNode: Fiber | null;
38
+ nameFiber: Fiber | null;
39
+ derived?: boolean;
40
+ }>({
41
+ stateNode: null,
42
+ nameFiber: null,
43
+ derived: false,
44
+ });
45
+
46
+ React.useEffect(() => {
47
+ if (active) {
48
+ return () => {
49
+ setSelectedFiber({
50
+ stateNode: null,
51
+ nameFiber: null,
52
+ });
53
+ setActiveFiber({
54
+ stateNode: null,
55
+ nameFiber: null,
56
+ derived: false,
57
+ });
58
+ };
59
+ }
60
+
61
+ return () => 0;
62
+ }, [active]);
63
+
64
+ const selectAppropriateFiber = React.useCallback(
65
+ (start: Fiber | null) => {
66
+ let fiber = start;
67
+ let firstParentOfNodeWithName: Fiber | null;
68
+ let fiberWithStateNode: Fiber | null;
69
+
70
+ let acceptedName = false;
71
+
72
+ while (!acceptedName && fiber) {
73
+ // Get the first fiber node that has a name (look up the tree)
74
+ firstParentOfNodeWithName = getFirstFiberHasName(fiber);
75
+ // Get the first fiber node that has a state node (look up the tree)
76
+ fiberWithStateNode = getFirstStateNodeFiber(firstParentOfNodeWithName);
77
+ acceptedName = traceItems.includes(
78
+ getNameFromFiber(firstParentOfNodeWithName) ?? "",
79
+ );
80
+ if (!acceptedName) {
81
+ fiber = getParentOfFiber(fiber);
32
82
  }
33
- }, [active, devtoolsUrl]);
83
+ }
34
84
 
35
- const [selectedFiber, setSelectedFiber] = React.useState<{
36
- stateNode: Fiber | null;
37
- nameFiber: Fiber | null;
38
- }>({
39
- stateNode: null,
40
- nameFiber: null,
41
- });
42
- const [activeFiber, setActiveFiber] = React.useState<{
43
- stateNode: Fiber | null;
44
- nameFiber: Fiber | null;
45
- derived?: boolean;
46
- }>({
85
+ if (fiberWithStateNode && firstParentOfNodeWithName) {
86
+ return {
87
+ stateNode: fiberWithStateNode,
88
+ nameFiber: firstParentOfNodeWithName,
89
+ };
90
+ }
91
+ return {
47
92
  stateNode: null,
48
93
  nameFiber: null,
94
+ };
95
+ },
96
+ [traceItems],
97
+ );
98
+
99
+ const pickFiber = React.useCallback(
100
+ (target: HTMLElement) => {
101
+ const fiber = getFiberFromElement(target);
102
+
103
+ setSelectedFiber(selectAppropriateFiber(fiber));
104
+ return;
105
+ },
106
+ [traceItems],
107
+ );
108
+
109
+ React.useEffect(() => {
110
+ if (
111
+ activeFiber.stateNode !== selectedFiber.stateNode ||
112
+ activeFiber.nameFiber !== selectedFiber.nameFiber
113
+ ) {
114
+ setActiveFiber({
115
+ stateNode: selectedFiber.stateNode,
116
+ nameFiber: selectedFiber.nameFiber,
49
117
  derived: false,
50
- });
51
-
52
- React.useEffect(() => {
53
- if (active) {
54
- return () => {
55
- setSelectedFiber({
56
- stateNode: null,
57
- nameFiber: null,
58
- });
59
- setActiveFiber({
60
- stateNode: null,
61
- nameFiber: null,
62
- derived: false,
63
- });
64
- };
65
- }
66
-
67
- return () => 0;
68
- }, [active]);
69
-
70
- const selectAppropriateFiber = React.useCallback(
71
- (start: Fiber | null) => {
72
- let fiber = start;
73
- let firstParentOfNodeWithName: Fiber | null;
74
- let fiberWithStateNode: Fiber | null;
75
-
76
- let acceptedName = false;
77
-
78
- while (!acceptedName && fiber) {
79
- // Get the first fiber node that has a name (look up the tree)
80
- firstParentOfNodeWithName = getFirstFiberHasName(fiber);
81
- // Get the first fiber node that has a state node (look up the tree)
82
- fiberWithStateNode = getFirstStateNodeFiber(
83
- firstParentOfNodeWithName,
84
- );
85
- acceptedName = traceItems.includes(
86
- getNameFromFiber(firstParentOfNodeWithName) ?? "",
87
- );
88
- if (!acceptedName) {
89
- fiber = getParentOfFiber(fiber);
90
- }
91
- }
92
-
93
- if (fiberWithStateNode && firstParentOfNodeWithName) {
94
- return {
95
- stateNode: fiberWithStateNode,
96
- nameFiber: firstParentOfNodeWithName,
97
- };
98
- } else {
99
- return {
100
- stateNode: null,
101
- nameFiber: null,
102
- };
103
- }
104
- },
105
- [traceItems],
106
- );
107
-
108
- const pickFiber = React.useCallback(
109
- (target: HTMLElement) => {
110
- const fiber = getFiberFromElement(target);
111
-
112
- setSelectedFiber(selectAppropriateFiber(fiber));
113
- return;
114
- },
115
- [traceItems],
116
- );
117
-
118
- React.useEffect(() => {
119
- if (
120
- activeFiber.stateNode !== selectedFiber.stateNode ||
121
- activeFiber.nameFiber !== selectedFiber.nameFiber
122
- ) {
123
- setActiveFiber({
124
- stateNode: selectedFiber.stateNode,
125
- nameFiber: selectedFiber.nameFiber,
126
- derived: false,
127
- });
128
- }
129
- }, [selectedFiber]);
130
-
131
- const previousValues = React.useRef<{
132
- rect: {
133
- width: number;
134
- height: number;
135
- x: number;
136
- y: number;
137
- };
138
- name: string;
139
- }>({
118
+ });
119
+ }
120
+ }, [selectedFiber]);
121
+
122
+ const previousValues = React.useRef<{
123
+ rect: {
124
+ width: number;
125
+ height: number;
126
+ x: number;
127
+ y: number;
128
+ };
129
+ name: string;
130
+ }>({
131
+ rect: {
132
+ width: 0,
133
+ height: 0,
134
+ x: 0,
135
+ y: 0,
136
+ },
137
+ name: "",
138
+ });
139
+
140
+ const { rect, name } = React.useMemo(() => {
141
+ if (!active) {
142
+ return {
140
143
  rect: {
141
- width: 0,
142
- height: 0,
143
- x: 0,
144
- y: 0,
144
+ width: 0,
145
+ height: 0,
146
+ x: 0,
147
+ y: 0,
145
148
  },
146
149
  name: "",
147
- });
148
-
149
- const { rect, name } = React.useMemo(() => {
150
- if (!active) {
151
- return {
152
- rect: {
153
- width: 0,
154
- height: 0,
155
- x: 0,
156
- y: 0,
157
- },
158
- name: "",
159
- };
160
- }
161
- if (activeFiber.stateNode || activeFiber.nameFiber) {
162
- // Get the element from the fiber with a state node
163
- const element = activeFiber.stateNode
164
- ? getElementFromFiber(activeFiber.stateNode)
165
- : null;
166
- // Get the name of the fiber node with a name
167
- const fiberName = activeFiber.nameFiber
168
- ? getNameFromFiber(activeFiber.nameFiber)
169
- : null;
170
-
171
- if (!element) {
172
- return {
173
- rect: previousValues.current.rect,
174
- name: fiberName ?? previousValues.current.name,
175
- };
176
- }
177
-
178
- const bounding = element.getBoundingClientRect?.();
150
+ };
151
+ }
152
+ if (activeFiber.stateNode || activeFiber.nameFiber) {
153
+ // Get the element from the fiber with a state node
154
+ const element = activeFiber.stateNode
155
+ ? getElementFromFiber(activeFiber.stateNode)
156
+ : null;
157
+ // Get the name of the fiber node with a name
158
+ const fiberName = activeFiber.nameFiber
159
+ ? getNameFromFiber(activeFiber.nameFiber)
160
+ : null;
161
+
162
+ if (!element) {
163
+ return {
164
+ rect: previousValues.current.rect,
165
+ name: fiberName ?? previousValues.current.name,
166
+ };
167
+ }
179
168
 
180
- if (!bounding) {
181
- return {
182
- rect: previousValues.current.rect,
183
- name: fiberName ?? previousValues.current.name,
184
- };
185
- }
169
+ const bounding = element.getBoundingClientRect?.();
186
170
 
187
- return {
188
- rect: {
189
- width: bounding.width,
190
- height: bounding.height,
191
- x: bounding.left,
192
- y: bounding.top,
193
- },
194
- name: fiberName ?? previousValues.current.name,
195
- };
196
- }
171
+ if (!bounding) {
172
+ return {
173
+ rect: previousValues.current.rect,
174
+ name: fiberName ?? previousValues.current.name,
175
+ };
176
+ }
197
177
 
198
- return previousValues.current;
199
- }, [activeFiber, active]);
178
+ return {
179
+ rect: {
180
+ width: bounding.width,
181
+ height: bounding.height,
182
+ x: bounding.left,
183
+ y: bounding.top,
184
+ },
185
+ name: fiberName ?? previousValues.current.name,
186
+ };
187
+ }
200
188
 
201
- previousValues.current = {
202
- rect,
203
- name,
204
- };
189
+ return previousValues.current;
190
+ }, [activeFiber, active]);
205
191
 
206
- React.useEffect(() => {
207
- if (active) {
208
- const listener = (e: KeyboardEvent) => {
209
- // if user presses shift, toggle the derived state and set the active fiber to the parent
210
- if (e.key === "Shift" && activeFiber.stateNode) {
211
- e.stopPropagation();
212
- e.preventDefault();
192
+ previousValues.current = {
193
+ rect,
194
+ name,
195
+ };
213
196
 
214
- const parent = getParentOfFiber(activeFiber.nameFiber);
197
+ React.useEffect(() => {
198
+ if (active) {
199
+ const listener = (e: KeyboardEvent) => {
200
+ // if user presses shift, toggle the derived state and set the active fiber to the parent
201
+ if (e.key === "Shift" && activeFiber.stateNode) {
202
+ e.stopPropagation();
203
+ e.preventDefault();
215
204
 
216
- const fibers = selectAppropriateFiber(parent);
205
+ const parent = getParentOfFiber(activeFiber.nameFiber);
217
206
 
218
- if (fibers.nameFiber && fibers.stateNode) {
219
- setActiveFiber({
220
- ...fibers,
221
- derived: true,
222
- });
223
- return;
224
- }
225
- }
226
- };
207
+ const fibers = selectAppropriateFiber(parent);
227
208
 
228
- document.addEventListener("keydown", listener);
229
- return () => document.removeEventListener("keydown", listener);
209
+ if (fibers.nameFiber && fibers.stateNode) {
210
+ setActiveFiber({
211
+ ...fibers,
212
+ derived: true,
213
+ });
214
+ return;
215
+ }
230
216
  }
231
- return () => 0;
232
- }, [activeFiber, active]);
217
+ };
218
+
219
+ document.addEventListener("keydown", listener);
220
+ return () => document.removeEventListener("keydown", listener);
221
+ }
222
+ return () => 0;
223
+ }, [activeFiber, active]);
224
+
225
+ React.useEffect(() => {
226
+ if (active) {
227
+ let previousTarget: HTMLElement | null = null;
228
+ const listener = debounce((e: MouseEvent) => {
229
+ if (e?.target) {
230
+ if (previousTarget === e.target) {
231
+ return;
232
+ }
233
+ pickFiber(e.target as HTMLElement);
234
+ previousTarget = e.target as HTMLElement;
235
+ }
236
+ }, 50);
233
237
 
234
- React.useEffect(() => {
235
- if (active) {
236
- let previousTarget: HTMLElement | null = null;
237
- const listener = debounce((e: MouseEvent) => {
238
- if (e?.target) {
239
- if (previousTarget === e.target) {
240
- return;
241
- }
242
- pickFiber(e.target as HTMLElement);
243
- previousTarget = e.target as HTMLElement;
244
- }
245
- }, 50);
238
+ document.addEventListener("mousemove", listener);
246
239
 
247
- document.addEventListener("mousemove", listener);
240
+ return () => document.removeEventListener("mousemove", listener);
241
+ }
242
+ return () => 0;
243
+ }, [active, pickFiber]);
248
244
 
249
- return () => document.removeEventListener("mousemove", listener);
250
- } else {
251
- return () => 0;
252
- }
253
- }, [active, pickFiber]);
254
-
255
- return {
256
- rect,
257
- name,
258
- };
245
+ return {
246
+ rect,
247
+ name,
248
+ };
259
249
  };