@localstack/appinspector-ui 1.0.30 → 1.0.31

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/index.cjs CHANGED
@@ -37,8 +37,8 @@ module.exports = __toCommonJS(index_exports);
37
37
 
38
38
  // src/pages/spans-list-page.tsx
39
39
  var import_material8 = require("@mui/material");
40
- var import_react9 = require("react");
41
- var import_react_router_dom = require("react-router-dom");
40
+ var import_react10 = require("react");
41
+ var import_react_router_dom2 = require("react-router-dom");
42
42
 
43
43
  // src/api/use-api.tsx
44
44
  var import_react = require("react");
@@ -3513,29 +3513,71 @@ var useStatus = () => {
3513
3513
  return { checking, checkStatus, error, status };
3514
3514
  };
3515
3515
 
3516
+ // src/utils/use-search-param-codec.ts
3517
+ var import_react9 = require("react");
3518
+ var import_react_router_dom = require("react-router-dom");
3519
+ var useSearchParamCodec = (key, codec) => {
3520
+ const [searchParams, setSearchParams] = (0, import_react_router_dom.useSearchParams)();
3521
+ const raw = searchParams.get(key) ?? void 0;
3522
+ const value = (0, import_react9.useMemo)(() => {
3523
+ return codec.decode(raw);
3524
+ }, [raw, codec]);
3525
+ const setValue = (0, import_react9.useCallback)(
3526
+ (next) => {
3527
+ setSearchParams((previous) => {
3528
+ const nextParams = new URLSearchParams(previous);
3529
+ nextParams.set(key, codec.encode(next));
3530
+ return nextParams;
3531
+ });
3532
+ },
3533
+ [key, codec, setSearchParams]
3534
+ );
3535
+ return [value, setValue];
3536
+ };
3537
+
3516
3538
  // src/pages/spans-list-page.tsx
3517
3539
  var import_jsx_runtime130 = require("react/jsx-runtime");
3518
3540
  var spansPerPageOptions = [25, 50, 100];
3519
3541
  var SpansListPage = () => {
3520
3542
  const api = useAppInspectorApi();
3521
- const [spans, setSpans] = (0, import_react9.useState)();
3522
- const [loading, setLoading] = (0, import_react9.useState)(false);
3523
- const hasFetched = (0, import_react9.useRef)(false);
3543
+ const [spans, setSpans] = (0, import_react10.useState)();
3544
+ const [loading, setLoading] = (0, import_react10.useState)(false);
3545
+ const hasFetched = (0, import_react10.useRef)(false);
3524
3546
  const [filterWriteOperations, setFilterWriteOperations] = useLocalStorage("filterWriteOperations", true);
3525
- const mapPageToNextCursor = (0, import_react9.useRef)({});
3526
- const [page, setPage] = (0, import_react9.useState)(0);
3527
- const [pageSize, setPageSize] = (0, import_react9.useState)(100);
3528
- const [spanCount, setSpanCount] = (0, import_react9.useState)(0);
3529
- const queryOptions = (0, import_react9.useMemo)(() => {
3547
+ const mapPageToNextCursor = (0, import_react10.useRef)({});
3548
+ const [page, setPage] = useSearchParamCodec("page", {
3549
+ decode: (raw) => {
3550
+ const defaultPage = 0;
3551
+ if (!raw) {
3552
+ return defaultPage;
3553
+ }
3554
+ const parsed = Number.parseInt(raw, 10);
3555
+ return Number.isNaN(parsed) || parsed < 0 ? defaultPage : parsed;
3556
+ },
3557
+ encode: (value) => value.toString()
3558
+ });
3559
+ const [pageSize, setPageSize] = useSearchParamCodec("pageSize", {
3560
+ decode: (raw) => {
3561
+ const defaultPageSize = 100;
3562
+ if (!raw) {
3563
+ return defaultPageSize;
3564
+ }
3565
+ const parsed = Number.parseInt(raw, 10);
3566
+ return spansPerPageOptions.includes(parsed) ? parsed : defaultPageSize;
3567
+ },
3568
+ encode: (value) => value.toString()
3569
+ });
3570
+ const [spanCount, setSpanCount] = (0, import_react10.useState)(0);
3571
+ const queryOptions = (0, import_react10.useMemo)(() => {
3530
3572
  return {
3531
3573
  is_write_operation: filterWriteOperations ? true : void 0,
3532
3574
  limit: pageSize,
3533
3575
  pagination_token: mapPageToNextCursor.current[page - 1]
3534
3576
  };
3535
3577
  }, [filterWriteOperations, pageSize, page]);
3536
- const [fetchError, setFetchError] = (0, import_react9.useState)();
3578
+ const [fetchError, setFetchError] = (0, import_react10.useState)();
3537
3579
  const { checkStatus, error: statusError, status } = useStatus();
3538
- const fetchSpans = (0, import_react9.useCallback)(async () => {
3580
+ const fetchSpans = (0, import_react10.useCallback)(async () => {
3539
3581
  setLoading(true);
3540
3582
  try {
3541
3583
  const response = await api.getSpans(queryOptions);
@@ -3552,26 +3594,31 @@ var SpansListPage = () => {
3552
3594
  setLoading(false);
3553
3595
  }
3554
3596
  }, [api, page, queryOptions]);
3555
- const fetchSpansSync = (0, import_react9.useCallback)(() => {
3597
+ const fetchSpansSync = (0, import_react10.useCallback)(() => {
3556
3598
  void fetchSpans();
3557
3599
  }, [fetchSpans]);
3558
- (0, import_react9.useEffect)(() => {
3600
+ (0, import_react10.useEffect)(() => {
3559
3601
  if (hasFetched.current) return;
3560
3602
  if (status?.status !== "ENABLED") return;
3561
3603
  hasFetched.current = true;
3562
3604
  void fetchSpans();
3563
3605
  }, [fetchSpans, status]);
3564
- (0, import_react9.useEffect)(() => {
3606
+ (0, import_react10.useEffect)(() => {
3565
3607
  if (!hasFetched.current) return;
3566
3608
  void fetchSpans();
3567
3609
  }, [fetchSpans]);
3568
- const navigate = (0, import_react_router_dom.useNavigate)();
3610
+ const navigate = (0, import_react_router_dom2.useNavigate)();
3569
3611
  const { resolveLink } = useAppInspector();
3570
- const navigateToSpan = (0, import_react9.useCallback)((span) => {
3612
+ const navigateToSpan = (0, import_react10.useCallback)((span) => {
3571
3613
  const url = resolveLink({ to: "trace-graph", traceId: span.trace_id });
3572
- navigate(`${url}?spanId=${span.span_id}`);
3573
- }, [navigate, resolveLink]);
3574
- const clearSpans = (0, import_react9.useCallback)(async () => {
3614
+ const searchParams = new URLSearchParams({
3615
+ page: String(page),
3616
+ pageSize: String(pageSize),
3617
+ spanId: span.span_id
3618
+ });
3619
+ navigate(`${url}?${searchParams.toString()}`);
3620
+ }, [navigate, resolveLink, page, pageSize]);
3621
+ const clearSpans = (0, import_react10.useCallback)(async () => {
3575
3622
  setLoading(true);
3576
3623
  try {
3577
3624
  await api.deleteSpans();
@@ -3585,7 +3632,7 @@ var SpansListPage = () => {
3585
3632
  setLoading(false);
3586
3633
  }
3587
3634
  }, [api, fetchSpans]);
3588
- const handleRetry = (0, import_react9.useCallback)(() => {
3635
+ const handleRetry = (0, import_react10.useCallback)(() => {
3589
3636
  void checkStatus();
3590
3637
  }, [checkStatus]);
3591
3638
  const shouldShowStatusMessage = Boolean(statusError) || status?.status === "DISABLED";
@@ -3644,13 +3691,13 @@ var SpansListPage = () => {
3644
3691
  var import_icons_material11 = require("@mui/icons-material");
3645
3692
  var import_material21 = require("@mui/material");
3646
3693
  var import_styles = require("@mui/material/styles");
3647
- var import_react22 = require("@xyflow/react");
3648
- var import_react23 = require("react");
3649
- var import_react_router_dom2 = require("react-router-dom");
3694
+ var import_react23 = require("@xyflow/react");
3695
+ var import_react24 = require("react");
3696
+ var import_react_router_dom3 = require("react-router-dom");
3650
3697
 
3651
3698
  // src/components/event-details/event-details.tsx
3652
3699
  var import_material16 = require("@mui/material");
3653
- var import_react13 = require("react");
3700
+ var import_react14 = require("react");
3654
3701
 
3655
3702
  // src/utils/iam-utils.ts
3656
3703
  function determinePermissionStatus(payload) {
@@ -3884,7 +3931,7 @@ var import_material15 = require("@mui/material");
3884
3931
  // src/components/event-details/event-detail.tsx
3885
3932
  var import_icons_material7 = require("@mui/icons-material");
3886
3933
  var import_material13 = require("@mui/material");
3887
- var import_react11 = require("react");
3934
+ var import_react12 = require("react");
3888
3935
 
3889
3936
  // src/components/status-icon.tsx
3890
3937
  var import_icons_material4 = require("@mui/icons-material");
@@ -4035,7 +4082,7 @@ var IAMEventDetail = ({ event }) => {
4035
4082
  // src/components/event-details/iam-permission-detail.tsx
4036
4083
  var import_icons_material6 = require("@mui/icons-material");
4037
4084
  var import_material12 = require("@mui/material");
4038
- var import_react10 = require("react");
4085
+ var import_react11 = require("react");
4039
4086
  var import_jsx_runtime134 = require("react/jsx-runtime");
4040
4087
  var getChipColors = (status) => {
4041
4088
  const isAllowed = status === "explicitly_allowed" || status === "implicitly_allowed";
@@ -4045,8 +4092,8 @@ var getChipColors = (status) => {
4045
4092
  };
4046
4093
  };
4047
4094
  var IAMPermissionItem = ({ event }) => {
4048
- const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
4049
- const parsedData = (0, import_react10.useMemo)(() => {
4095
+ const [isOpen, setIsOpen] = (0, import_react11.useState)(false);
4096
+ const parsedData = (0, import_react11.useMemo)(() => {
4050
4097
  const payloadString = event.attributes?.payload;
4051
4098
  if (!payloadString) {
4052
4099
  return;
@@ -4116,15 +4163,15 @@ var DetailRow2 = ({ content, label }) => /* @__PURE__ */ (0, import_jsx_runtime1
4116
4163
  ) : content })
4117
4164
  ] });
4118
4165
  var EventMessage = ({ event }) => {
4119
- const [isOpen, setIsOpen] = (0, import_react11.useState)(false);
4120
- const [isOverflowing, setIsOverflowing] = (0, import_react11.useState)(false);
4121
- const textReference = (0, import_react11.useRef)(null);
4122
- const parsedMessage = (0, import_react11.useMemo)(() => parseEventMessage(event), [event]);
4123
- const isIAMPolicyEvent = (0, import_react11.useMemo)(
4166
+ const [isOpen, setIsOpen] = (0, import_react12.useState)(false);
4167
+ const [isOverflowing, setIsOverflowing] = (0, import_react12.useState)(false);
4168
+ const textReference = (0, import_react12.useRef)(null);
4169
+ const parsedMessage = (0, import_react12.useMemo)(() => parseEventMessage(event), [event]);
4170
+ const isIAMPolicyEvent = (0, import_react12.useMemo)(
4124
4171
  () => event.event_type === "iam.policy_evaluation" && event.attributes?.payload && typeof event.attributes.payload === "string",
4125
4172
  [event]
4126
4173
  );
4127
- (0, import_react11.useEffect)(() => {
4174
+ (0, import_react12.useEffect)(() => {
4128
4175
  const checkOverflow = () => {
4129
4176
  const element = textReference.current;
4130
4177
  if (element) {
@@ -4137,11 +4184,11 @@ var EventMessage = ({ event }) => {
4137
4184
  window.removeEventListener("resize", checkOverflow);
4138
4185
  };
4139
4186
  }, [parsedMessage.headline]);
4140
- const hasAdditionalContent = (0, import_react11.useMemo)(
4187
+ const hasAdditionalContent = (0, import_react12.useMemo)(
4141
4188
  () => parsedMessage.message || parsedMessage.details || isIAMPolicyEvent,
4142
4189
  [parsedMessage.message, parsedMessage.details, isIAMPolicyEvent]
4143
4190
  );
4144
- const shouldShowToggle = (0, import_react11.useMemo)(
4191
+ const shouldShowToggle = (0, import_react12.useMemo)(
4145
4192
  () => isOverflowing || hasAdditionalContent,
4146
4193
  [isOverflowing, hasAdditionalContent]
4147
4194
  );
@@ -4283,10 +4330,10 @@ var EventDetail = ({
4283
4330
  // src/components/event-details/toggle-section.tsx
4284
4331
  var import_icons_material8 = require("@mui/icons-material");
4285
4332
  var import_material14 = require("@mui/material");
4286
- var import_react12 = require("react");
4333
+ var import_react13 = require("react");
4287
4334
  var import_jsx_runtime136 = require("react/jsx-runtime");
4288
4335
  var ToggleSection = ({ children, headline, initialOpen = true }) => {
4289
- const [isOpen, setIsOpen] = (0, import_react12.useState)(initialOpen);
4336
+ const [isOpen, setIsOpen] = (0, import_react13.useState)(initialOpen);
4290
4337
  return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(import_material14.Box, { sx: { mt: 4 }, children: [
4291
4338
  /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
4292
4339
  import_material14.Box,
@@ -4362,7 +4409,7 @@ var EventSection = ({
4362
4409
  // src/components/event-details/event-details.tsx
4363
4410
  var import_jsx_runtime138 = require("react/jsx-runtime");
4364
4411
  var EventDetails = ({ onClose, selectedEvent }) => {
4365
- const attributes = (0, import_react13.useMemo)(() => {
4412
+ const attributes = (0, import_react14.useMemo)(() => {
4366
4413
  const attributes2 = Object.entries(selectedEvent?.attributes ?? {});
4367
4414
  return attributes2.filter(([key]) => key !== "localstack.aws.account_id" && key !== "localstack.aws.service");
4368
4415
  }, [selectedEvent?.attributes]);
@@ -4461,22 +4508,22 @@ function renderKeyValue(key, value) {
4461
4508
  // src/components/trace-graph/trace-graph.tsx
4462
4509
  var import_base = require("@xyflow/react/dist/base.css");
4463
4510
  var import_material20 = require("@mui/material");
4464
- var import_react20 = require("@xyflow/react");
4465
- var import_react21 = require("react");
4511
+ var import_react21 = require("@xyflow/react");
4512
+ var import_react22 = require("react");
4466
4513
 
4467
4514
  // src/components/trace-graph/service-node.tsx
4468
4515
  var import_material18 = require("@mui/material");
4469
4516
  var import_style = require("@xyflow/react/dist/style.css");
4470
- var import_react15 = require("@xyflow/react");
4471
- var import_react16 = require("react");
4517
+ var import_react16 = require("@xyflow/react");
4518
+ var import_react17 = require("react");
4472
4519
 
4473
4520
  // src/components/trace-graph/problem-indicator.tsx
4474
4521
  var import_icons_material9 = require("@mui/icons-material");
4475
4522
  var import_material17 = require("@mui/material");
4476
- var import_react14 = require("react");
4523
+ var import_react15 = require("react");
4477
4524
  var import_jsx_runtime139 = require("react/jsx-runtime");
4478
4525
  var ProblemIndicator = ({ error }) => {
4479
- const icon = (0, import_react14.useMemo)(() => {
4526
+ const icon = (0, import_react15.useMemo)(() => {
4480
4527
  switch (error.level) {
4481
4528
  case "error": {
4482
4529
  return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(import_icons_material9.Error, { sx: { color: "#d32f2f", fontSize: "14px" } });
@@ -4489,7 +4536,7 @@ var ProblemIndicator = ({ error }) => {
4489
4536
  }
4490
4537
  }
4491
4538
  }, [error.level]);
4492
- const color = (0, import_react14.useMemo)(() => {
4539
+ const color = (0, import_react15.useMemo)(() => {
4493
4540
  switch (error.level) {
4494
4541
  case "error": {
4495
4542
  return "#d32f2f";
@@ -4528,7 +4575,7 @@ var handleStyle = {
4528
4575
  borderColor: "lightgray",
4529
4576
  opacity: 0
4530
4577
  };
4531
- var ServiceNode = (0, import_react16.memo)(({ data, selected }) => {
4578
+ var ServiceNode = (0, import_react17.memo)(({ data, selected }) => {
4532
4579
  const hasErrors = (data.event.errors && data.event.errors.length > 0) ?? false;
4533
4580
  return /* @__PURE__ */ (0, import_jsx_runtime140.jsxs)(import_material18.Box, { sx: { maxWidth: 200 }, children: [
4534
4581
  /* @__PURE__ */ (0, import_jsx_runtime140.jsxs)(
@@ -4552,8 +4599,8 @@ var ServiceNode = (0, import_react16.memo)(({ data, selected }) => {
4552
4599
  },
4553
4600
  tabIndex: 0,
4554
4601
  children: [
4555
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(import_react15.Handle, { position: import_react15.Position.Left, style: handleStyle, type: "target" }),
4556
- /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(import_react15.Handle, { position: import_react15.Position.Right, style: handleStyle, type: "source" }),
4602
+ /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(import_react16.Handle, { position: import_react16.Position.Left, style: handleStyle, type: "target" }),
4603
+ /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(import_react16.Handle, { position: import_react16.Position.Right, style: handleStyle, type: "source" }),
4557
4604
  /* @__PURE__ */ (0, import_jsx_runtime140.jsx)(
4558
4605
  ServiceCell,
4559
4606
  {
@@ -4613,7 +4660,7 @@ var ServiceNode = (0, import_react16.memo)(({ data, selected }) => {
4613
4660
 
4614
4661
  // src/components/trace-graph/utils.ts
4615
4662
  var import_dagre = __toESM(require("@dagrejs/dagre"), 1);
4616
- var import_react17 = require("@xyflow/react");
4663
+ var import_react18 = require("@xyflow/react");
4617
4664
  var generateNodesAndEdges = (event, parentId) => {
4618
4665
  const nodes = [];
4619
4666
  const edges = [];
@@ -4629,8 +4676,8 @@ var generateNodesAndEdges = (event, parentId) => {
4629
4676
  id: event.span_id,
4630
4677
  position: { x: 0, y: 0 },
4631
4678
  // Will be set by layout
4632
- sourcePosition: import_react17.Position.Right,
4633
- targetPosition: import_react17.Position.Left,
4679
+ sourcePosition: import_react18.Position.Right,
4680
+ targetPosition: import_react18.Position.Left,
4634
4681
  type: "service"
4635
4682
  });
4636
4683
  if (parentId) {
@@ -4640,7 +4687,7 @@ var generateNodesAndEdges = (event, parentId) => {
4640
4687
  markerEnd: {
4641
4688
  color: "lightgray",
4642
4689
  height: 16,
4643
- type: import_react17.MarkerType.Arrow,
4690
+ type: import_react18.MarkerType.Arrow,
4644
4691
  width: 16
4645
4692
  },
4646
4693
  source: parentId,
@@ -4708,8 +4755,8 @@ var calculateCenterX = (focusNodeX, viewPortPixelWidth, minX, maxX) => {
4708
4755
  // src/components/trace-graph/xyflow/controls.tsx
4709
4756
  var import_icons_material10 = require("@mui/icons-material");
4710
4757
  var import_material19 = require("@mui/material");
4711
- var import_react18 = require("@xyflow/react");
4712
- var import_react19 = require("react");
4758
+ var import_react19 = require("@xyflow/react");
4759
+ var import_react20 = require("react");
4713
4760
 
4714
4761
  // node_modules/zustand/esm/shallow.mjs
4715
4762
  function shallow$1(objA, objB) {
@@ -4756,9 +4803,9 @@ var selector = (s) => ({
4756
4803
  maxZoomReached: s.transform[2] >= s.maxZoom,
4757
4804
  minZoomReached: s.transform[2] <= s.minZoom
4758
4805
  });
4759
- var Controls = (0, import_react19.memo)(() => {
4760
- const { maxZoomReached, minZoomReached } = (0, import_react18.useStore)(selector, shallow$1);
4761
- const { fitView, zoomIn, zoomOut } = (0, import_react18.useReactFlow)();
4806
+ var Controls = (0, import_react20.memo)(() => {
4807
+ const { maxZoomReached, minZoomReached } = (0, import_react19.useStore)(selector, shallow$1);
4808
+ const { fitView, zoomIn, zoomOut } = (0, import_react19.useReactFlow)();
4762
4809
  const onZoomInHandler = () => {
4763
4810
  void zoomIn();
4764
4811
  };
@@ -4828,17 +4875,17 @@ var TraceGraph = ({
4828
4875
  spans,
4829
4876
  viewPortPixelWidth
4830
4877
  }) => {
4831
- const [nodes, setNodes] = (0, import_react21.useState)([]);
4832
- const [edges, setEdges] = (0, import_react21.useState)([]);
4833
- const [initialViewSet, setInitialViewSet] = (0, import_react21.useState)(false);
4834
- const { fitView, setCenter } = (0, import_react20.useReactFlow)();
4835
- const updateSelectedNode = (0, import_react21.useCallback)((nodeId) => {
4878
+ const [nodes, setNodes] = (0, import_react22.useState)([]);
4879
+ const [edges, setEdges] = (0, import_react22.useState)([]);
4880
+ const [initialViewSet, setInitialViewSet] = (0, import_react22.useState)(false);
4881
+ const { fitView, setCenter } = (0, import_react21.useReactFlow)();
4882
+ const updateSelectedNode = (0, import_react22.useCallback)((nodeId) => {
4836
4883
  const toSelect = new Set(nodeId ? [nodeId] : []);
4837
4884
  setNodes((previousNodes) => {
4838
4885
  return previousNodes.map((node) => ({ ...node, selected: toSelect.has(node.id) }));
4839
4886
  });
4840
4887
  }, []);
4841
- (0, import_react21.useEffect)(() => {
4888
+ (0, import_react22.useEffect)(() => {
4842
4889
  const spansMap = /* @__PURE__ */ new Map();
4843
4890
  const rootSpans = [];
4844
4891
  for (const span of spans.data ?? []) {
@@ -4873,7 +4920,7 @@ var TraceGraph = ({
4873
4920
  setNodes(layoutedNodes);
4874
4921
  setEdges(layoutedEdges);
4875
4922
  }, [spans.data, initialFocusEventId]);
4876
- (0, import_react21.useEffect)(() => {
4923
+ (0, import_react22.useEffect)(() => {
4877
4924
  const shouldSetInitialView = !spans.loading && nodes.length > 0 && !initialViewSet;
4878
4925
  if (shouldSetInitialView) {
4879
4926
  if (initialFocusEventId) {
@@ -4893,12 +4940,12 @@ var TraceGraph = ({
4893
4940
  setInitialViewSet(true);
4894
4941
  }
4895
4942
  }, [spans.loading, nodes, initialFocusEventId, viewPortPixelWidth, setCenter, fitView, onEventSelect, initialViewSet]);
4896
- (0, import_react21.useEffect)(() => {
4943
+ (0, import_react22.useEffect)(() => {
4897
4944
  if (initialFocusEventId) {
4898
4945
  updateSelectedNode(initialFocusEventId);
4899
4946
  }
4900
4947
  }, [initialFocusEventId, updateSelectedNode]);
4901
- const onNodeClick = (0, import_react21.useCallback)((_event, node) => {
4948
+ const onNodeClick = (0, import_react22.useCallback)((_event, node) => {
4902
4949
  onEventSelect(node.data.event);
4903
4950
  updateSelectedNode(node.id);
4904
4951
  }, [onEventSelect, updateSelectedNode]);
@@ -4919,7 +4966,7 @@ var TraceGraph = ({
4919
4966
  }
4920
4967
  ),
4921
4968
  /* @__PURE__ */ (0, import_jsx_runtime142.jsxs)(
4922
- import_react20.ReactFlow,
4969
+ import_react21.ReactFlow,
4923
4970
  {
4924
4971
  "data-testid": "trace-graph",
4925
4972
  defaultViewport: { x: 0, y: 0, zoom: 1 },
@@ -4934,7 +4981,7 @@ var TraceGraph = ({
4934
4981
  children: [
4935
4982
  /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(Controls, {}),
4936
4983
  /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
4937
- import_react20.Background,
4984
+ import_react21.Background,
4938
4985
  {
4939
4986
  bgColor: theme.palette.background.paper,
4940
4987
  color: theme.palette.text.disabled
@@ -5040,7 +5087,7 @@ var TraceGraphView = ({
5040
5087
  height: "100%",
5041
5088
  overflow: "auto"
5042
5089
  },
5043
- children: traceId !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(import_react22.ReactFlowProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(
5090
+ children: traceId !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(import_react23.ReactFlowProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(
5044
5091
  TraceGraph,
5045
5092
  {
5046
5093
  initialFocusEventId: spanId,
@@ -5067,14 +5114,14 @@ var TraceGraphView = ({
5067
5114
  );
5068
5115
  };
5069
5116
  var TraceGraphPage = () => {
5070
- const { traceId } = (0, import_react_router_dom2.useParams)();
5071
- const [searchParameters] = (0, import_react_router_dom2.useSearchParams)();
5117
+ const { traceId } = (0, import_react_router_dom3.useParams)();
5118
+ const [searchParameters] = (0, import_react_router_dom3.useSearchParams)();
5072
5119
  const spanId = searchParameters.get("spanId");
5073
5120
  const api = useAppInspectorApi();
5074
- const [spans, setSpans] = (0, import_react23.useState)();
5075
- const [loading, setLoading] = (0, import_react23.useState)(false);
5076
- const [fetchError, setFetchError] = (0, import_react23.useState)();
5077
- const fetchSpans = (0, import_react23.useCallback)(async () => {
5121
+ const [spans, setSpans] = (0, import_react24.useState)();
5122
+ const [loading, setLoading] = (0, import_react24.useState)(false);
5123
+ const [fetchError, setFetchError] = (0, import_react24.useState)();
5124
+ const fetchSpans = (0, import_react24.useCallback)(async () => {
5078
5125
  setLoading(true);
5079
5126
  try {
5080
5127
  const response = await api.getSpans({
@@ -5089,14 +5136,14 @@ var TraceGraphPage = () => {
5089
5136
  setLoading(false);
5090
5137
  }
5091
5138
  }, [api, traceId]);
5092
- (0, import_react23.useEffect)(() => {
5139
+ (0, import_react24.useEffect)(() => {
5093
5140
  void fetchSpans();
5094
5141
  }, [fetchSpans]);
5095
- const [open, setOpen] = (0, import_react23.useState)(true);
5096
- const [selectedEvent, setSelectedEvent] = (0, import_react23.useState)();
5097
- const [viewPortPixelWidth, setViewPortPixelWidth] = (0, import_react23.useState)(0);
5142
+ const [open, setOpen] = (0, import_react24.useState)(true);
5143
+ const [selectedEvent, setSelectedEvent] = (0, import_react24.useState)();
5144
+ const [viewPortPixelWidth, setViewPortPixelWidth] = (0, import_react24.useState)(0);
5098
5145
  const { checkStatus, error: statusError, status } = useStatus();
5099
- const calculateDrawerWidth = (0, import_react23.useCallback)(() => {
5146
+ const calculateDrawerWidth = (0, import_react24.useCallback)(() => {
5100
5147
  const percentageMatch = /(\d+)%/.exec(DRAWER_WIDTH);
5101
5148
  if (percentageMatch && open) {
5102
5149
  const percentage = Number.parseInt(percentageMatch[1], 10);
@@ -5104,7 +5151,7 @@ var TraceGraphPage = () => {
5104
5151
  }
5105
5152
  return 0;
5106
5153
  }, [open]);
5107
- (0, import_react23.useEffect)(() => {
5154
+ (0, import_react24.useEffect)(() => {
5108
5155
  const updateViewportWidth = () => {
5109
5156
  const totalWidth = window.innerWidth;
5110
5157
  const drawerPixelWidth = open ? calculateDrawerWidth() : 0;
@@ -5118,19 +5165,23 @@ var TraceGraphPage = () => {
5118
5165
  clearTimeout(timeoutId);
5119
5166
  };
5120
5167
  }, [open, calculateDrawerWidth]);
5121
- const handleEventSelect = (0, import_react23.useCallback)((event) => {
5168
+ const handleEventSelect = (0, import_react24.useCallback)((event) => {
5122
5169
  setSelectedEvent(event);
5123
5170
  setOpen(true);
5124
5171
  }, []);
5125
- const handleRetry = (0, import_react23.useCallback)(() => {
5172
+ const handleRetry = (0, import_react24.useCallback)(() => {
5126
5173
  void checkStatus();
5127
5174
  }, [checkStatus]);
5128
- const navigate = (0, import_react_router_dom2.useNavigate)();
5175
+ const navigate = (0, import_react_router_dom3.useNavigate)();
5129
5176
  const { resolveLink } = useAppInspector();
5130
- const navigateToSpansList = (0, import_react23.useCallback)(() => {
5177
+ const navigateToSpansList = (0, import_react24.useCallback)(() => {
5131
5178
  const url = resolveLink({ to: "spans-list" });
5132
- navigate(url);
5133
- }, [navigate, resolveLink]);
5179
+ const searchParams = new URLSearchParams({
5180
+ page: searchParameters.get("page") ?? "",
5181
+ pageSize: searchParameters.get("pageSize") ?? ""
5182
+ });
5183
+ navigate(`${url}?${searchParams.toString()}`);
5184
+ }, [navigate, resolveLink, searchParameters]);
5134
5185
  return /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(
5135
5186
  TraceGraphView,
5136
5187
  {