@refinedev/devtools 1.2.6 → 1.2.8
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.
- package/dist/components/devtools-selector.d.cts.map +1 -1
- package/dist/components/devtools-selector.d.ts.map +1 -1
- package/dist/components/selectable-elements.d.cts.map +1 -1
- package/dist/components/selectable-elements.d.ts.map +1 -1
- package/dist/index.cjs +21 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +21 -10
- package/dist/index.mjs.map +1 -1
- package/dist/panel.d.cts.map +1 -1
- package/dist/panel.d.ts.map +1 -1
- package/dist/provider.d.cts +11 -1
- package/dist/provider.d.cts.map +1 -1
- package/dist/provider.d.mts +11 -1
- package/dist/provider.d.mts.map +11 -1
- package/dist/provider.d.ts +11 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/utilities/get-devtools-url-from-env.d.cts +2 -0
- package/dist/utilities/get-devtools-url-from-env.d.cts.map +1 -0
- package/dist/utilities/get-devtools-url-from-env.d.mts +2 -0
- package/dist/utilities/get-devtools-url-from-env.d.mts.map +2 -0
- package/dist/utilities/get-devtools-url-from-env.d.ts +2 -0
- package/dist/utilities/get-devtools-url-from-env.d.ts.map +1 -0
- package/dist/utilities/selector-helpers.d.cts +8 -0
- package/dist/utilities/selector-helpers.d.cts.map +1 -0
- package/dist/utilities/selector-helpers.d.mts +8 -0
- package/dist/utilities/selector-helpers.d.mts.map +8 -0
- package/dist/utilities/selector-helpers.d.ts +8 -0
- package/dist/utilities/selector-helpers.d.ts.map +1 -0
- package/dist/utilities/use-selector.d.cts +1 -5
- package/dist/utilities/use-selector.d.cts.map +1 -1
- package/dist/utilities/use-selector.d.mts +1 -5
- package/dist/utilities/use-selector.d.mts.map +1 -5
- package/dist/utilities/use-selector.d.ts +1 -5
- package/dist/utilities/use-selector.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/components/devtools-selector.tsx +1 -0
- package/src/components/selectable-elements.tsx +24 -17
- package/src/define.d.ts +8 -0
- package/src/panel.tsx +64 -15
- package/src/provider.tsx +18 -3
- package/src/utilities/get-devtools-url-from-env.ts +20 -0
- package/src/utilities/selector-helpers.ts +157 -0
- package/src/utilities/use-selector.tsx +13 -109
|
@@ -1,130 +1,34 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
getElementFromFiber,
|
|
4
|
-
getFiberFromElement,
|
|
5
|
-
getFirstFiberHasName,
|
|
6
|
-
getFirstStateNodeFiber,
|
|
7
|
-
getNameFromFiber,
|
|
8
|
-
getParentOfFiber,
|
|
9
|
-
} from "@aliemir/dom-to-fiber-utils";
|
|
10
2
|
import { DevToolsContext } from "@refinedev/devtools-shared";
|
|
11
3
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
4
|
+
import {
|
|
5
|
+
filterInvisibleNodes,
|
|
6
|
+
getUniqueNodes,
|
|
7
|
+
traverseDom,
|
|
8
|
+
type SelectableElement,
|
|
9
|
+
} from "./selector-helpers";
|
|
18
10
|
|
|
19
11
|
export const useSelector = (active: boolean) => {
|
|
20
|
-
const {
|
|
12
|
+
const { httpUrl } = React.useContext(DevToolsContext);
|
|
21
13
|
const [selectableElements, setSelectableElements] = React.useState<
|
|
22
14
|
SelectableElement[]
|
|
23
15
|
>([]);
|
|
24
16
|
|
|
25
17
|
const fetchTraceItems = React.useCallback(async () => {
|
|
26
|
-
const response = await fetch(`${
|
|
18
|
+
const response = await fetch(`${httpUrl}/api/unique-trace-items`);
|
|
27
19
|
const data = await response.json();
|
|
28
20
|
|
|
29
21
|
return data.data as string[];
|
|
30
|
-
}, [
|
|
31
|
-
|
|
32
|
-
const selectAppropriateFiber = React.useCallback(
|
|
33
|
-
(start: Fiber | null, activeTraceItems: string[]) => {
|
|
34
|
-
let fiber = start;
|
|
35
|
-
let firstParentOfNodeWithName: Fiber | null;
|
|
36
|
-
let fiberWithStateNode: Fiber | null;
|
|
37
|
-
|
|
38
|
-
let acceptedName = false;
|
|
39
|
-
|
|
40
|
-
while (!acceptedName && fiber) {
|
|
41
|
-
// Get the first fiber node that has a name (look up the tree)
|
|
42
|
-
firstParentOfNodeWithName = getFirstFiberHasName(fiber);
|
|
43
|
-
// Get the first fiber node that has a state node (look up the tree)
|
|
44
|
-
fiberWithStateNode = getFirstStateNodeFiber(firstParentOfNodeWithName);
|
|
45
|
-
acceptedName = activeTraceItems.includes(
|
|
46
|
-
getNameFromFiber(firstParentOfNodeWithName) ?? "",
|
|
47
|
-
);
|
|
48
|
-
if (!acceptedName) {
|
|
49
|
-
fiber = getParentOfFiber(fiber);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (fiberWithStateNode && firstParentOfNodeWithName) {
|
|
54
|
-
return {
|
|
55
|
-
stateNode: fiberWithStateNode,
|
|
56
|
-
nameFiber: firstParentOfNodeWithName,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
stateNode: null,
|
|
61
|
-
nameFiber: null,
|
|
62
|
-
};
|
|
63
|
-
},
|
|
64
|
-
[],
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
const getUniqueNodes = React.useCallback((nodes: SelectableElement[]) => {
|
|
68
|
-
const uniques: SelectableElement[] = [];
|
|
69
|
-
|
|
70
|
-
nodes.forEach((node) => {
|
|
71
|
-
const isElementExist = uniques.find(
|
|
72
|
-
(item) => item.element === node.element,
|
|
73
|
-
);
|
|
74
|
-
if (!isElementExist) {
|
|
75
|
-
uniques.push(node);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
return uniques;
|
|
80
|
-
}, []);
|
|
81
|
-
|
|
82
|
-
const traverseBodyNodes = React.useCallback(
|
|
83
|
-
(
|
|
84
|
-
node: HTMLElement | null,
|
|
85
|
-
activeTraceItems: string[],
|
|
86
|
-
): SelectableElement[] => {
|
|
87
|
-
if (!node) {
|
|
88
|
-
return [];
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const items: SelectableElement[] = [];
|
|
92
|
-
|
|
93
|
-
const fiber = getFiberFromElement(node);
|
|
94
|
-
const targetFiber = selectAppropriateFiber(fiber, activeTraceItems);
|
|
95
|
-
|
|
96
|
-
if (targetFiber.nameFiber && targetFiber.stateNode) {
|
|
97
|
-
const element = getElementFromFiber(targetFiber.stateNode);
|
|
98
|
-
const name = getNameFromFiber(targetFiber.nameFiber);
|
|
99
|
-
if (element && name) {
|
|
100
|
-
items.push({
|
|
101
|
-
element,
|
|
102
|
-
name,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
for (let i = 0; i < node?.children?.length ?? 0; i++) {
|
|
108
|
-
items.push(
|
|
109
|
-
...traverseBodyNodes(
|
|
110
|
-
node.children[i] as HTMLElement,
|
|
111
|
-
activeTraceItems,
|
|
112
|
-
),
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return items;
|
|
117
|
-
},
|
|
118
|
-
[selectAppropriateFiber],
|
|
119
|
-
);
|
|
22
|
+
}, [httpUrl]);
|
|
120
23
|
|
|
121
24
|
const prepareSelector = React.useCallback(async () => {
|
|
122
25
|
const fetchedTraceItems = await fetchTraceItems();
|
|
123
|
-
const traversedNodes =
|
|
124
|
-
const
|
|
26
|
+
const traversedNodes = traverseDom(document.body, fetchedTraceItems);
|
|
27
|
+
const filterInvisible = filterInvisibleNodes(traversedNodes);
|
|
28
|
+
const uniqueNodes = getUniqueNodes(filterInvisible);
|
|
125
29
|
|
|
126
30
|
setSelectableElements(uniqueNodes);
|
|
127
|
-
}, [fetchTraceItems
|
|
31
|
+
}, [fetchTraceItems]);
|
|
128
32
|
|
|
129
33
|
React.useEffect(() => {
|
|
130
34
|
if (active) {
|