@localstack/appinspector-ui 1.0.89 → 1.0.90

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
@@ -26841,19 +26841,44 @@ var ServiceNode = (0, import_react59.memo)(({ data, selected }) => {
26841
26841
 
26842
26842
  // src/components/trace-graph/utils.ts
26843
26843
  var import_dagre = __toESM(require("@dagrejs/dagre"), 1);
26844
- var getLayoutedNodesAndEdges = (inputNodes, inputEdges) => {
26844
+ var getLayoutedNodesAndEdges = (inputNodes, inputEdges, order2 = "oldest_first") => {
26845
26845
  const dagreGraph = new import_dagre.default.graphlib.Graph().setDefaultEdgeLabel(() => ({}));
26846
26846
  const direction = "LR";
26847
26847
  const nodeWidth = 200;
26848
26848
  const nodeHeight = 70;
26849
26849
  dagreGraph.setGraph({ rankdir: direction });
26850
+ const timestampMap = new Map(
26851
+ inputNodes.map((n2) => [n2.id, n2.data.event.start_time_unix_nano])
26852
+ );
26850
26853
  for (const node of inputNodes) {
26851
26854
  dagreGraph.setNode(node.id, { height: nodeHeight, width: nodeWidth });
26852
26855
  }
26853
26856
  for (const edge of inputEdges) {
26854
26857
  dagreGraph.setEdge(edge.source, edge.target);
26855
26858
  }
26856
- import_dagre.default.layout(dagreGraph);
26859
+ import_dagre.default.layout(dagreGraph, {
26860
+ customOrder: (g2) => {
26861
+ const rankMap = /* @__PURE__ */ new Map();
26862
+ for (const nodeId of g2.nodes()) {
26863
+ const rank = g2.node(nodeId).rank;
26864
+ if (rank === void 0) continue;
26865
+ const group4 = rankMap.get(rank) ?? [];
26866
+ group4.push(nodeId);
26867
+ rankMap.set(rank, group4);
26868
+ }
26869
+ for (const nodeIds of rankMap.values()) {
26870
+ nodeIds.sort((a3, b3) => {
26871
+ const tsA = timestampMap.get(a3) ?? "";
26872
+ const tsB = timestampMap.get(b3) ?? "";
26873
+ return order2 === "newest_first" ? tsB.localeCompare(tsA) : tsA.localeCompare(tsB);
26874
+ });
26875
+ for (const [index, nodeId] of nodeIds.entries()) {
26876
+ ;
26877
+ g2.node(nodeId).order = index;
26878
+ }
26879
+ }
26880
+ }
26881
+ });
26857
26882
  const layoutedNodes = inputNodes.map((node) => {
26858
26883
  const nodeWithPosition = dagreGraph.node(node.id);
26859
26884
  return {
@@ -26949,6 +26974,7 @@ var TraceGraph = ({
26949
26974
  initialFocusEventId,
26950
26975
  onEventSelect,
26951
26976
  onRefresh,
26977
+ order: order2 = "oldest_first",
26952
26978
  spans
26953
26979
  }) => {
26954
26980
  const [nodes, setNodes, onNodesChange] = (0, import_react62.useNodesState)([]);
@@ -26994,7 +27020,7 @@ var TraceGraph = ({
26994
27020
  });
26995
27021
  }
26996
27022
  }
26997
- const { edges: layoutedEdges, nodes: layoutedNodes } = getLayoutedNodesAndEdges(allNodes, allEdges);
27023
+ const { edges: layoutedEdges, nodes: layoutedNodes } = getLayoutedNodesAndEdges(allNodes, allEdges, order2);
26998
27024
  for (const node of layoutedNodes) {
26999
27025
  if (node.id === initialFocusEventId) {
27000
27026
  node.selected = true;
@@ -27002,7 +27028,7 @@ var TraceGraph = ({
27002
27028
  }
27003
27029
  setNodes(layoutedNodes);
27004
27030
  setEdges(layoutedEdges);
27005
- }, [spans.data, initialFocusEventId, setNodes, setEdges]);
27031
+ }, [spans.data, initialFocusEventId, order2, setNodes, setEdges]);
27006
27032
  const theme = (0, import_material19.useTheme)();
27007
27033
  return /* @__PURE__ */ (0, import_jsx_runtime141.jsxs)(import_jsx_runtime141.Fragment, { children: [
27008
27034
  spans.error && /* @__PURE__ */ (0, import_jsx_runtime141.jsxs)(
@@ -27093,6 +27119,7 @@ var TraceGraphView = ({
27093
27119
  loading,
27094
27120
  navigateToSpansList,
27095
27121
  open,
27122
+ order: order2,
27096
27123
  selectedEvent,
27097
27124
  spanId,
27098
27125
  spans,
@@ -27154,6 +27181,7 @@ var TraceGraphView = ({
27154
27181
  onRefresh: () => {
27155
27182
  fetchSpans();
27156
27183
  },
27184
+ order: order2,
27157
27185
  spans: {
27158
27186
  data: spans,
27159
27187
  error: fetchError,
@@ -27205,7 +27233,7 @@ async function fetchConnectedTraces(api, traceIds, allSpans = /* @__PURE__ */ ne
27205
27233
  }
27206
27234
  return [...allSpans.values()];
27207
27235
  }
27208
- var TraceGraphPage = ({ onClose, spanId, traceId }) => {
27236
+ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId }) => {
27209
27237
  const api = useAppInspectorApi();
27210
27238
  const [spans, setSpans] = (0, import_react65.useState)();
27211
27239
  const [loading, setLoading] = (0, import_react65.useState)(false);
@@ -27265,6 +27293,7 @@ var TraceGraphPage = ({ onClose, spanId, traceId }) => {
27265
27293
  loading,
27266
27294
  navigateToSpansList,
27267
27295
  open,
27296
+ order: order2,
27268
27297
  selectedEvent,
27269
27298
  spanId: spanId ?? void 0,
27270
27299
  spans,
@@ -27368,7 +27397,7 @@ var SpansListPage = () => {
27368
27397
  ),
27369
27398
  selectedTraceId !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(TraceGraphPage, { onClose: () => {
27370
27399
  setSelectedTraceId(void 0);
27371
- }, spanId: selectedSpanId, traceId: selectedTraceId })
27400
+ }, order: order2, spanId: selectedSpanId, traceId: selectedTraceId })
27372
27401
  ] });
27373
27402
  };
27374
27403