@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.
Files changed (43) hide show
  1. package/dist/components/devtools-selector.d.cts.map +1 -1
  2. package/dist/components/devtools-selector.d.ts.map +1 -1
  3. package/dist/components/selectable-elements.d.cts.map +1 -1
  4. package/dist/components/selectable-elements.d.ts.map +1 -1
  5. package/dist/index.cjs +21 -10
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.mjs +21 -10
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/panel.d.cts.map +1 -1
  10. package/dist/panel.d.ts.map +1 -1
  11. package/dist/provider.d.cts +11 -1
  12. package/dist/provider.d.cts.map +1 -1
  13. package/dist/provider.d.mts +11 -1
  14. package/dist/provider.d.mts.map +11 -1
  15. package/dist/provider.d.ts +11 -1
  16. package/dist/provider.d.ts.map +1 -1
  17. package/dist/utilities/get-devtools-url-from-env.d.cts +2 -0
  18. package/dist/utilities/get-devtools-url-from-env.d.cts.map +1 -0
  19. package/dist/utilities/get-devtools-url-from-env.d.mts +2 -0
  20. package/dist/utilities/get-devtools-url-from-env.d.mts.map +2 -0
  21. package/dist/utilities/get-devtools-url-from-env.d.ts +2 -0
  22. package/dist/utilities/get-devtools-url-from-env.d.ts.map +1 -0
  23. package/dist/utilities/selector-helpers.d.cts +8 -0
  24. package/dist/utilities/selector-helpers.d.cts.map +1 -0
  25. package/dist/utilities/selector-helpers.d.mts +8 -0
  26. package/dist/utilities/selector-helpers.d.mts.map +8 -0
  27. package/dist/utilities/selector-helpers.d.ts +8 -0
  28. package/dist/utilities/selector-helpers.d.ts.map +1 -0
  29. package/dist/utilities/use-selector.d.cts +1 -5
  30. package/dist/utilities/use-selector.d.cts.map +1 -1
  31. package/dist/utilities/use-selector.d.mts +1 -5
  32. package/dist/utilities/use-selector.d.mts.map +1 -5
  33. package/dist/utilities/use-selector.d.ts +1 -5
  34. package/dist/utilities/use-selector.d.ts.map +1 -1
  35. package/package.json +5 -4
  36. package/src/components/devtools-selector.tsx +1 -0
  37. package/src/components/selectable-elements.tsx +24 -17
  38. package/src/define.d.ts +8 -0
  39. package/src/panel.tsx +64 -15
  40. package/src/provider.tsx +18 -3
  41. package/src/utilities/get-devtools-url-from-env.ts +20 -0
  42. package/src/utilities/selector-helpers.ts +157 -0
  43. 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
- type Fiber = Exclude<ReturnType<typeof getFiberFromElement>, null>;
13
-
14
- type SelectableElement = {
15
- element: HTMLElement;
16
- name: string;
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 { devtoolsUrl } = React.useContext(DevToolsContext);
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(`${devtoolsUrl}/api/unique-trace-items`);
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
- }, [devtoolsUrl]);
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 = traverseBodyNodes(document.body, fetchedTraceItems);
124
- const uniqueNodes = getUniqueNodes(traversedNodes);
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, traverseBodyNodes, getUniqueNodes]);
31
+ }, [fetchTraceItems]);
128
32
 
129
33
  React.useEffect(() => {
130
34
  if (active) {