@truedat/dd 8.5.8 → 8.5.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@truedat/dd",
3
- "version": "8.5.8",
3
+ "version": "8.5.9",
4
4
  "description": "Truedat Web Data Dictionary",
5
5
  "sideEffects": false,
6
6
  "module": "src/index.js",
@@ -51,7 +51,7 @@
51
51
  "@testing-library/jest-dom": "^6.6.3",
52
52
  "@testing-library/react": "^16.3.0",
53
53
  "@testing-library/user-event": "^14.6.1",
54
- "@truedat/test": "8.5.8",
54
+ "@truedat/test": "8.5.9",
55
55
  "identity-obj-proxy": "^3.0.0",
56
56
  "jest": "^29.7.0",
57
57
  "redux-saga-test-plan": "^4.0.6"
@@ -86,5 +86,5 @@
86
86
  "svg-pan-zoom": "^3.6.2",
87
87
  "swr": "^2.3.3"
88
88
  },
89
- "gitHead": "61ad9443b3d822d30dcfa977f5fad3494b3ed5b4"
89
+ "gitHead": "45e6137b5aa9452db78901e8b0eaa16cc7953b7c"
90
90
  }
@@ -36,6 +36,11 @@ const enablePanZoom = (svg) => {
36
36
  svg && svg.enablePan();
37
37
  svg && svg.enableZoom();
38
38
  };
39
+ const isInteractiveGraphElement = (target) =>
40
+ target &&
41
+ target.closest &&
42
+ target.closest("g.resource, g.group, path.link, a");
43
+
39
44
  const togglePanZoom = (svg) => (selectedNode) => {
40
45
  _.isEmpty(selectedNode) ? enablePanZoom(svg) : disablePanZoom(svg);
41
46
  };
@@ -93,6 +98,7 @@ export const LineageGraph = ({
93
98
  instance.resize();
94
99
  instance.fit();
95
100
  instance.zoomBy(initialScale);
101
+ instance.center();
96
102
  const currentPan = instance.getPan();
97
103
  instance.pan({ x: currentPan.x, y: topMargin });
98
104
  } catch (_error) {
@@ -168,15 +174,21 @@ export const LineageGraph = ({
168
174
  const onHover = (g) =>
169
175
  selectedNode ? undefined : () => dispatch(hoverNode.trigger(g));
170
176
  const onPointerDown = (event) => {
171
- if (event.currentTarget.setPointerCapture && event.pointerId !== undefined) {
177
+ if (
178
+ !isInteractiveGraphElement(event.target) &&
179
+ event.currentTarget.setPointerCapture &&
180
+ event.pointerId !== undefined
181
+ ) {
172
182
  event.currentTarget.setPointerCapture(event.pointerId);
173
183
  }
174
184
  };
175
185
 
176
186
  const onPointerUp = (event) => {
177
187
  if (
188
+ event.pointerId !== undefined &&
178
189
  event.currentTarget.releasePointerCapture &&
179
- event.pointerId !== undefined
190
+ event.currentTarget.hasPointerCapture &&
191
+ event.currentTarget.hasPointerCapture(event.pointerId)
180
192
  ) {
181
193
  event.currentTarget.releasePointerCapture(event.pointerId);
182
194
  }
@@ -36,10 +36,8 @@ export const LineageGroup = ({
36
36
  </text>
37
37
  );
38
38
  const trigger =
39
- z == 0 ? null : handleClick ? (
40
- <a onContextMenu={handleClick} onClick={handleClick}>
41
- {text}
42
- </a>
39
+ z === 0 ? null : handleClick ? (
40
+ <a>{text}</a>
43
41
  ) : (
44
42
  text
45
43
  );
@@ -69,7 +67,12 @@ export const LineageGroup = ({
69
67
  active ? ["active"] : [],
70
68
  ]);
71
69
  return (
72
- <g className={classNames} onMouseOver={onHover} onContextMenu={handleClick}>
70
+ <g
71
+ className={classNames}
72
+ onMouseOver={onHover}
73
+ onClick={z === 0 ? undefined : handleClick}
74
+ onContextMenu={handleClick}
75
+ >
73
76
  <title>{name}</title>
74
77
  <rect x={x} y={y} rx="6" ry="6" width={w} height={h} />
75
78
  {content}
@@ -54,6 +54,7 @@ export const LineageResource = ({
54
54
  <g
55
55
  className={`resource ${active ? "active" : ""}`}
56
56
  onMouseOver={onHover}
57
+ onClick={handleClick}
57
58
  onContextMenu={handleClick}
58
59
  >
59
60
  <title>{name}</title>
@@ -1,4 +1,5 @@
1
1
  import { render, waitForLoad } from "@truedat/test/render";
2
+ import { fireEvent } from "@testing-library/react";
2
3
  import { LineageGroup } from "../LineageGroup";
3
4
 
4
5
  // Mock LineageContextMenu component
@@ -36,6 +37,10 @@ describe("<LineageGroup />", () => {
36
37
  onHover,
37
38
  };
38
39
 
40
+ beforeEach(() => {
41
+ jest.clearAllMocks();
42
+ });
43
+
39
44
  it("matches the latest snapshot", async () => {
40
45
  const rendered = render(
41
46
  <svg>
@@ -76,4 +81,30 @@ describe("<LineageGroup />", () => {
76
81
  await waitForLoad(rendered);
77
82
  expect(rendered.container.querySelector(".popup")).not.toBeInTheDocument();
78
83
  });
84
+
85
+ it("selects the group when clicking the node body", async () => {
86
+ const rendered = render(
87
+ <svg>
88
+ <LineageGroup {...props} />
89
+ </svg>
90
+ );
91
+ await waitForLoad(rendered);
92
+
93
+ fireEvent.click(rendered.container.querySelector("rect"));
94
+
95
+ expect(onClick).toHaveBeenCalledTimes(1);
96
+ });
97
+
98
+ it("does not select the group when z is 0", async () => {
99
+ const rendered = render(
100
+ <svg>
101
+ <LineageGroup {...props} z={0} />
102
+ </svg>
103
+ );
104
+ await waitForLoad(rendered);
105
+
106
+ fireEvent.click(rendered.container.querySelector("rect"));
107
+
108
+ expect(onClick).not.toHaveBeenCalled();
109
+ });
79
110
  });
@@ -1,4 +1,5 @@
1
1
  import { render, waitForLoad } from "@truedat/test/render";
2
+ import { fireEvent } from "@testing-library/react";
2
3
  import { LineageResource } from "../LineageResource";
3
4
 
4
5
  // Mock LineageContextMenu component
@@ -32,6 +33,10 @@ describe("<LineageResource />", () => {
32
33
  onHover,
33
34
  };
34
35
 
36
+ beforeEach(() => {
37
+ jest.clearAllMocks();
38
+ });
39
+
35
40
  it("matches the latest snapshot", async () => {
36
41
  const rendered = render(
37
42
  <svg>
@@ -72,4 +77,17 @@ describe("<LineageResource />", () => {
72
77
  await waitForLoad(rendered);
73
78
  expect(rendered.container.querySelector(".popup")).not.toBeInTheDocument();
74
79
  });
80
+
81
+ it("selects the resource when clicking the node body", async () => {
82
+ const rendered = render(
83
+ <svg>
84
+ <LineageResource {...props} />
85
+ </svg>
86
+ );
87
+ await waitForLoad(rendered);
88
+
89
+ fireEvent.click(rendered.container.querySelector("rect"));
90
+
91
+ expect(onClick).toHaveBeenCalledTimes(1);
92
+ });
75
93
  });
@@ -52,17 +52,19 @@
52
52
  }
53
53
 
54
54
  .structure-lineage .dl {
55
+ height: 100%;
55
56
  padding: 0;
56
57
  margin: 0;
57
58
  }
58
59
 
59
60
  .structure-lineage .dl svg {
60
- height: clamp(340px, 52vw, 640px) !important;
61
- max-height: 640px;
61
+ width: 100%;
62
+ height: 100% !important;
63
+ min-height: 340px;
62
64
  background-color: #f7f8fa;
63
65
  padding: 0;
64
66
  margin: 0;
65
67
  display: block;
66
68
  margin-left: 0;
67
69
  margin-right: 0;
68
- }
70
+ }