@localstack/appinspector-ui 1.0.18 → 1.0.20
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 +137 -123
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +111 -97
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -2535,11 +2535,9 @@ var AwsServiceIcon = ({ hideTooltip, service, size = "medium", title }) => {
|
|
|
2535
2535
|
// src/components/cells/pill-cell.tsx
|
|
2536
2536
|
var import_material3 = require("@mui/material");
|
|
2537
2537
|
var import_jsx_runtime123 = require("react/jsx-runtime");
|
|
2538
|
-
var defaultBackgroundColor = "background.paper";
|
|
2539
|
-
var defaultBorderColor = "palette.divider";
|
|
2540
2538
|
var PillCell = ({
|
|
2541
|
-
backgroundColor
|
|
2542
|
-
borderColor
|
|
2539
|
+
backgroundColor,
|
|
2540
|
+
borderColor,
|
|
2543
2541
|
borderWidth = "1px",
|
|
2544
2542
|
children,
|
|
2545
2543
|
height = "24px",
|
|
@@ -2551,8 +2549,8 @@ var PillCell = ({
|
|
|
2551
2549
|
{
|
|
2552
2550
|
sx: {
|
|
2553
2551
|
alignItems: "center",
|
|
2554
|
-
backgroundColor,
|
|
2555
|
-
borderColor,
|
|
2552
|
+
backgroundColor: backgroundColor ?? ((theme) => theme.palette.background.paper),
|
|
2553
|
+
borderColor: borderColor ?? ((theme) => theme.palette.divider),
|
|
2556
2554
|
borderRadius: "16px",
|
|
2557
2555
|
borderStyle: "solid",
|
|
2558
2556
|
borderWidth,
|
|
@@ -2572,7 +2570,7 @@ var PillCell = ({
|
|
|
2572
2570
|
var import_jsx_runtime124 = require("react/jsx-runtime");
|
|
2573
2571
|
var truncateName = (inputString, truncateLength = 15) => inputString.length > truncateLength ? `${inputString.slice(0, truncateLength - 3)}...` : inputString;
|
|
2574
2572
|
var ServiceCell = ({
|
|
2575
|
-
borderColor
|
|
2573
|
+
borderColor,
|
|
2576
2574
|
borderWidth,
|
|
2577
2575
|
height = "24px",
|
|
2578
2576
|
resource,
|
|
@@ -2582,31 +2580,28 @@ var ServiceCell = ({
|
|
|
2582
2580
|
width = "32px"
|
|
2583
2581
|
}) => {
|
|
2584
2582
|
return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Box, { sx: { width: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(PillCell, { borderColor, borderWidth, height, children: [
|
|
2585
|
-
showIcon ? /* @__PURE__ */ (0, import_jsx_runtime124.
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
}
|
|
2600
|
-
|
|
2601
|
-
}
|
|
2602
|
-
) : void 0,
|
|
2583
|
+
showIcon ? /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment, { children: [
|
|
2584
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
2585
|
+
import_material4.Box,
|
|
2586
|
+
{
|
|
2587
|
+
sx: {
|
|
2588
|
+
alignItems: "center",
|
|
2589
|
+
display: "flex",
|
|
2590
|
+
height,
|
|
2591
|
+
justifyContent: "center",
|
|
2592
|
+
overflow: "hidden",
|
|
2593
|
+
padding: 0,
|
|
2594
|
+
width
|
|
2595
|
+
},
|
|
2596
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(AwsServiceIcon, { hideTooltip: true, service, size: "large" })
|
|
2597
|
+
}
|
|
2598
|
+
),
|
|
2599
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Divider, { orientation: "vertical" })
|
|
2600
|
+
] }) : void 0,
|
|
2603
2601
|
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
2604
2602
|
import_material4.Typography,
|
|
2605
2603
|
{
|
|
2606
2604
|
sx: {
|
|
2607
|
-
borderRightColor: resource ? borderColor : "none",
|
|
2608
|
-
borderRightStyle: resource ? "solid" : "none",
|
|
2609
|
-
borderRightWidth: resource ? "1px" : "none",
|
|
2610
2605
|
fontWeight: "bold",
|
|
2611
2606
|
overflow: "hidden",
|
|
2612
2607
|
padding: "1px 8px",
|
|
@@ -2625,21 +2620,24 @@ var ServiceCell = ({
|
|
|
2625
2620
|
children: service
|
|
2626
2621
|
}
|
|
2627
2622
|
),
|
|
2628
|
-
resource ? /* @__PURE__ */ (0, import_jsx_runtime124.
|
|
2629
|
-
import_material4.
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2623
|
+
resource ? /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment, { children: [
|
|
2624
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Box, { sx: { height: "100%", paddingY: 0.5 }, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_material4.Divider, { orientation: "vertical" }) }),
|
|
2625
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
2626
|
+
import_material4.Typography,
|
|
2627
|
+
{
|
|
2628
|
+
sx: {
|
|
2629
|
+
borderBottomRightRadius: "15px",
|
|
2630
|
+
borderTopRightRadius: "15px",
|
|
2631
|
+
overflow: "hidden",
|
|
2632
|
+
padding: "1px 8px",
|
|
2633
|
+
textOverflow: "ellipsis",
|
|
2634
|
+
whiteSpace: "nowrap"
|
|
2635
|
+
},
|
|
2636
|
+
variant: "body2",
|
|
2637
|
+
children: truncateName(resource, truncateLength)
|
|
2638
|
+
}
|
|
2639
|
+
)
|
|
2640
|
+
] }) : void 0
|
|
2643
2641
|
] }) });
|
|
2644
2642
|
};
|
|
2645
2643
|
ServiceCell.displayName = "ServiceCell";
|
|
@@ -3628,12 +3626,13 @@ var SpansListPage = () => {
|
|
|
3628
3626
|
var import_icons_material11 = require("@mui/icons-material");
|
|
3629
3627
|
var import_material21 = require("@mui/material");
|
|
3630
3628
|
var import_styles = require("@mui/material/styles");
|
|
3631
|
-
var
|
|
3632
|
-
var
|
|
3629
|
+
var import_react21 = require("@xyflow/react");
|
|
3630
|
+
var import_react22 = require("react");
|
|
3633
3631
|
var import_react_router_dom2 = require("react-router-dom");
|
|
3634
3632
|
|
|
3635
3633
|
// src/components/event-details/event-details.tsx
|
|
3636
3634
|
var import_material16 = require("@mui/material");
|
|
3635
|
+
var import_react12 = require("react");
|
|
3637
3636
|
|
|
3638
3637
|
// src/utils/iam-utils.ts
|
|
3639
3638
|
function determinePermissionStatus(payload) {
|
|
@@ -3903,7 +3902,7 @@ var DetailRow = ({ content, label }) => /* @__PURE__ */ (0, import_jsx_runtime13
|
|
|
3903
3902
|
{
|
|
3904
3903
|
sx: {
|
|
3905
3904
|
color: "text.secondary",
|
|
3906
|
-
fontWeight:
|
|
3905
|
+
fontWeight: 600
|
|
3907
3906
|
},
|
|
3908
3907
|
variant: "body2",
|
|
3909
3908
|
children: label
|
|
@@ -3938,11 +3937,11 @@ var PermissionIcon = ({ status }) => {
|
|
|
3938
3937
|
var IAMEventDetail = ({ event }) => {
|
|
3939
3938
|
const payloadString = event.attributes?.payload;
|
|
3940
3939
|
if (!payloadString) {
|
|
3941
|
-
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Box, { sx: { p: 2 }, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, {
|
|
3940
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Box, { sx: { p: 2 }, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { sx: { fontWeight: 600 }, variant: "body2", children: "No IAM policy evaluation data available" }) });
|
|
3942
3941
|
}
|
|
3943
3942
|
const parsedIAM = parseIAMEvent(payloadString);
|
|
3944
3943
|
if (!parsedIAM) {
|
|
3945
|
-
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Box, { sx: { p: 2 }, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, {
|
|
3944
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Box, { sx: { p: 2 }, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { sx: { fontWeight: 600 }, variant: "body2", children: "Failed to parse IAM event data" }) });
|
|
3946
3945
|
}
|
|
3947
3946
|
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_material11.Box, { sx: { p: 2 }, children: [
|
|
3948
3947
|
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Box, { sx: { mb: 2 }, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
@@ -3967,9 +3966,7 @@ var IAMEventDetail = ({ event }) => {
|
|
|
3967
3966
|
import_material11.Typography,
|
|
3968
3967
|
{
|
|
3969
3968
|
sx: {
|
|
3970
|
-
color: "text.primary"
|
|
3971
|
-
fontFamily: "monospace",
|
|
3972
|
-
fontSize: "0.85rem"
|
|
3969
|
+
color: "text.primary"
|
|
3973
3970
|
},
|
|
3974
3971
|
variant: "body2",
|
|
3975
3972
|
children: action
|
|
@@ -3987,8 +3984,6 @@ var IAMEventDetail = ({ event }) => {
|
|
|
3987
3984
|
{
|
|
3988
3985
|
sx: {
|
|
3989
3986
|
color: "text.primary",
|
|
3990
|
-
fontFamily: "monospace",
|
|
3991
|
-
fontSize: "0.85rem",
|
|
3992
3987
|
wordBreak: "break-all"
|
|
3993
3988
|
},
|
|
3994
3989
|
variant: "body2",
|
|
@@ -4000,19 +3995,19 @@ var IAMEventDetail = ({ event }) => {
|
|
|
4000
3995
|
}
|
|
4001
3996
|
),
|
|
4002
3997
|
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_material11.Box, { sx: { mt: 2 }, children: [
|
|
4003
|
-
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, {
|
|
3998
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { sx: { fontWeight: 600, mb: 1 }, variant: "caption", children: "Policy Evaluation" }),
|
|
4004
3999
|
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_material11.Grid, { container: true, spacing: 2, children: [
|
|
4005
4000
|
parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Grid, { item: true, xs: 4, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_material11.Box, { sx: { textAlign: "center" }, children: [
|
|
4006
4001
|
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { color: "success.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitAllows }),
|
|
4007
|
-
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, {
|
|
4002
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Allows" })
|
|
4008
4003
|
] }) }),
|
|
4009
4004
|
parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Grid, { item: true, xs: 4, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_material11.Box, { sx: { textAlign: "center" }, children: [
|
|
4010
4005
|
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { color: "error.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitDenies }),
|
|
4011
|
-
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, {
|
|
4006
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Denies" })
|
|
4012
4007
|
] }) }),
|
|
4013
4008
|
parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Grid, { item: true, xs: 4, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_material11.Box, { sx: { textAlign: "center" }, children: [
|
|
4014
4009
|
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { color: "warning.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.implicitDenies }),
|
|
4015
|
-
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, {
|
|
4010
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_material11.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Implicit Denies" })
|
|
4016
4011
|
] }) })
|
|
4017
4012
|
] })
|
|
4018
4013
|
] })
|
|
@@ -4069,8 +4064,8 @@ var IAMPermissionItem = ({ event }) => {
|
|
|
4069
4064
|
)
|
|
4070
4065
|
] }),
|
|
4071
4066
|
isOpen && /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_material12.Box, { sx: { ml: 4, mt: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(import_material12.Box, { children: [
|
|
4072
|
-
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_material12.Typography, {
|
|
4073
|
-
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_material12.Typography, {
|
|
4067
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_material12.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Principal" }),
|
|
4068
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(import_material12.Typography, { variant: "body2", children: parsedIAM.principal })
|
|
4074
4069
|
] }) })
|
|
4075
4070
|
] });
|
|
4076
4071
|
};
|
|
@@ -4084,7 +4079,7 @@ var DetailRow2 = ({ content, label }) => /* @__PURE__ */ (0, import_jsx_runtime1
|
|
|
4084
4079
|
{
|
|
4085
4080
|
sx: {
|
|
4086
4081
|
color: "text.primary",
|
|
4087
|
-
fontWeight:
|
|
4082
|
+
fontWeight: 600
|
|
4088
4083
|
},
|
|
4089
4084
|
variant: "body1",
|
|
4090
4085
|
children: label
|
|
@@ -4151,7 +4146,7 @@ var EventMessage = ({ event }) => {
|
|
|
4151
4146
|
ref: textReference,
|
|
4152
4147
|
sx: {
|
|
4153
4148
|
color: "text.primary",
|
|
4154
|
-
fontWeight:
|
|
4149
|
+
fontWeight: 600,
|
|
4155
4150
|
maxWidth: "100%",
|
|
4156
4151
|
ml: shouldShowToggle ? 0 : 4,
|
|
4157
4152
|
overflow: "hidden",
|
|
@@ -4208,10 +4203,9 @@ var EventDetail = ({
|
|
|
4208
4203
|
{
|
|
4209
4204
|
sx: {
|
|
4210
4205
|
alignItems: "left",
|
|
4211
|
-
color: "text.secondary",
|
|
4212
4206
|
display: "flex",
|
|
4213
4207
|
flexGrow: 1,
|
|
4214
|
-
fontWeight:
|
|
4208
|
+
fontWeight: 600
|
|
4215
4209
|
},
|
|
4216
4210
|
variant: "subtitle1",
|
|
4217
4211
|
children: displayText
|
|
@@ -4243,7 +4237,7 @@ var EventDetail = ({
|
|
|
4243
4237
|
color: "text.secondary",
|
|
4244
4238
|
display: "flex",
|
|
4245
4239
|
flexGrow: 1,
|
|
4246
|
-
fontWeight:
|
|
4240
|
+
fontWeight: 600,
|
|
4247
4241
|
ml: 1,
|
|
4248
4242
|
mr: 2
|
|
4249
4243
|
},
|
|
@@ -4350,6 +4344,10 @@ var EventSection = ({
|
|
|
4350
4344
|
// src/components/event-details/event-details.tsx
|
|
4351
4345
|
var import_jsx_runtime137 = require("react/jsx-runtime");
|
|
4352
4346
|
var EventDetails = ({ onClose, selectedEvent }) => {
|
|
4347
|
+
const attributes = (0, import_react12.useMemo)(() => {
|
|
4348
|
+
const attributes2 = Object.entries(selectedEvent?.attributes ?? {});
|
|
4349
|
+
return attributes2.filter(([key]) => key !== "localstack.aws.account_id" && key !== "localstack.aws.service");
|
|
4350
|
+
}, [selectedEvent?.attributes]);
|
|
4353
4351
|
if (!selectedEvent) {
|
|
4354
4352
|
return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Box, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
|
|
4355
4353
|
}
|
|
@@ -4358,41 +4356,41 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
4358
4356
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Box, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Stack, { spacing: 2, children: [
|
|
4359
4357
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Stack, { spacing: 1, children: [
|
|
4360
4358
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4361
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4359
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
|
|
4362
4360
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: selectedEvent.span_id })
|
|
4363
4361
|
] }),
|
|
4364
4362
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4365
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4366
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4363
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
|
|
4364
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: selectedEvent.trace_id })
|
|
4367
4365
|
] }),
|
|
4368
4366
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4369
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4367
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
|
|
4370
4368
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: selectedEvent.operation_name })
|
|
4371
4369
|
] })
|
|
4372
4370
|
] }) }),
|
|
4373
4371
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Divider, {}),
|
|
4374
4372
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(ToggleSection, { headline: "Service Information", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Stack, { spacing: 1, children: [
|
|
4375
4373
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4376
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4374
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
|
|
4377
4375
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: selectedEvent.service_name })
|
|
4378
4376
|
] }),
|
|
4379
4377
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4380
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4378
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
|
|
4381
4379
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: selectedEvent.resource_name })
|
|
4382
4380
|
] }),
|
|
4383
4381
|
Boolean(selectedEvent.region) && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4384
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4382
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
|
|
4385
4383
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: selectedEvent.region })
|
|
4386
4384
|
] })
|
|
4387
4385
|
] }) }),
|
|
4388
4386
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Divider, {}),
|
|
4389
4387
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(ToggleSection, { headline: "Timing", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Stack, { spacing: 1, children: [
|
|
4390
4388
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4391
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4389
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
|
|
4392
4390
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
|
|
4393
4391
|
] }),
|
|
4394
4392
|
Boolean(selectedEvent.end_time_unix_nano) && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4395
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, {
|
|
4393
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
|
|
4396
4394
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Typography, { variant: "body2", children: [
|
|
4397
4395
|
((BigInt(selectedEvent.end_time_unix_nano) - BigInt(selectedEvent.start_time_unix_nano)) / BigInt("1000000")).toString(),
|
|
4398
4396
|
" ",
|
|
@@ -4422,33 +4420,45 @@ var EventDetails = ({ onClose, selectedEvent }) => {
|
|
|
4422
4420
|
}
|
|
4423
4421
|
)
|
|
4424
4422
|
] }),
|
|
4425
|
-
|
|
4423
|
+
attributes.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment, { children: [
|
|
4426
4424
|
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Divider, {}),
|
|
4427
|
-
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(ToggleSection, { headline: "Attributes", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.
|
|
4425
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(ToggleSection, { headline: "Attributes", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Stack, { spacing: 1, children: attributes.map(([key, value]) => /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_material16.Box, { children: [
|
|
4426
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { sx: { fontWeight: 600 }, variant: "caption", children: key }),
|
|
4427
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: renderKeyValue(key, value) })
|
|
4428
|
+
] }, key)) }) })
|
|
4428
4429
|
] })
|
|
4429
4430
|
] }) })
|
|
4430
4431
|
] });
|
|
4431
4432
|
};
|
|
4433
|
+
function renderKeyValue(key, value) {
|
|
4434
|
+
if (typeof value === "string" && (key === "localstack.aws.service.request" || key === "localstack.aws.service.response" || key === "localstack.aws.service.exception")) {
|
|
4435
|
+
return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Box, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("pre", { style: { margin: 0, overflow: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: JSON.stringify(JSON.parse(value), void 0, 2) }) }) });
|
|
4436
|
+
}
|
|
4437
|
+
if (typeof value === "boolean") {
|
|
4438
|
+
return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: value ? "yes" : "no" });
|
|
4439
|
+
}
|
|
4440
|
+
return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_material16.Typography, { variant: "body2", children: value });
|
|
4441
|
+
}
|
|
4432
4442
|
|
|
4433
4443
|
// src/components/trace-graph/trace-graph.tsx
|
|
4434
4444
|
var import_base = require("@xyflow/react/dist/base.css");
|
|
4435
4445
|
var import_material20 = require("@mui/material");
|
|
4436
|
-
var
|
|
4437
|
-
var
|
|
4446
|
+
var import_react19 = require("@xyflow/react");
|
|
4447
|
+
var import_react20 = require("react");
|
|
4438
4448
|
|
|
4439
4449
|
// src/components/trace-graph/service-node.tsx
|
|
4440
4450
|
var import_material18 = require("@mui/material");
|
|
4441
4451
|
var import_style = require("@xyflow/react/dist/style.css");
|
|
4442
|
-
var
|
|
4443
|
-
var
|
|
4452
|
+
var import_react14 = require("@xyflow/react");
|
|
4453
|
+
var import_react15 = require("react");
|
|
4444
4454
|
|
|
4445
4455
|
// src/components/trace-graph/problem-indicator.tsx
|
|
4446
4456
|
var import_icons_material9 = require("@mui/icons-material");
|
|
4447
4457
|
var import_material17 = require("@mui/material");
|
|
4448
|
-
var
|
|
4458
|
+
var import_react13 = require("react");
|
|
4449
4459
|
var import_jsx_runtime138 = require("react/jsx-runtime");
|
|
4450
4460
|
var ProblemIndicator = ({ error }) => {
|
|
4451
|
-
const icon = (0,
|
|
4461
|
+
const icon = (0, import_react13.useMemo)(() => {
|
|
4452
4462
|
switch (error.level) {
|
|
4453
4463
|
case "error": {
|
|
4454
4464
|
return /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(import_icons_material9.Error, { sx: { color: "#d32f2f", fontSize: "14px" } });
|
|
@@ -4461,7 +4471,7 @@ var ProblemIndicator = ({ error }) => {
|
|
|
4461
4471
|
}
|
|
4462
4472
|
}
|
|
4463
4473
|
}, [error.level]);
|
|
4464
|
-
const color = (0,
|
|
4474
|
+
const color = (0, import_react13.useMemo)(() => {
|
|
4465
4475
|
switch (error.level) {
|
|
4466
4476
|
case "error": {
|
|
4467
4477
|
return "#d32f2f";
|
|
@@ -4500,11 +4510,11 @@ var handleStyle = {
|
|
|
4500
4510
|
borderColor: "lightgray",
|
|
4501
4511
|
opacity: 0
|
|
4502
4512
|
};
|
|
4503
|
-
var ServiceNode = (0,
|
|
4504
|
-
const handleClick = (0,
|
|
4513
|
+
var ServiceNode = (0, import_react15.memo)(function ServiceNode2({ data, selected }) {
|
|
4514
|
+
const handleClick = (0, import_react15.useCallback)(() => {
|
|
4505
4515
|
data.onEventSelect(data.event);
|
|
4506
4516
|
}, [data]);
|
|
4507
|
-
const handleKeyPress = (0,
|
|
4517
|
+
const handleKeyPress = (0, import_react15.useCallback)(
|
|
4508
4518
|
(event) => {
|
|
4509
4519
|
if (event.key === "Enter" || event.key === " ") {
|
|
4510
4520
|
handleClick();
|
|
@@ -4537,8 +4547,8 @@ var ServiceNode = (0, import_react14.memo)(function ServiceNode2({ data, selecte
|
|
|
4537
4547
|
},
|
|
4538
4548
|
tabIndex: 0,
|
|
4539
4549
|
children: [
|
|
4540
|
-
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
4541
|
-
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
4550
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(import_react14.Handle, { position: import_react14.Position.Left, style: handleStyle, type: "target" }),
|
|
4551
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(import_react14.Handle, { position: import_react14.Position.Right, style: handleStyle, type: "source" }),
|
|
4542
4552
|
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
4543
4553
|
ServiceCell,
|
|
4544
4554
|
{
|
|
@@ -4599,7 +4609,7 @@ var ServiceNode = (0, import_react14.memo)(function ServiceNode2({ data, selecte
|
|
|
4599
4609
|
|
|
4600
4610
|
// src/components/trace-graph/utils.ts
|
|
4601
4611
|
var import_dagre = __toESM(require("@dagrejs/dagre"), 1);
|
|
4602
|
-
var
|
|
4612
|
+
var import_react16 = require("@xyflow/react");
|
|
4603
4613
|
var generateNodesAndEdges = (event, onEventSelect, parentId) => {
|
|
4604
4614
|
const nodes = [];
|
|
4605
4615
|
const edges = [];
|
|
@@ -4616,8 +4626,8 @@ var generateNodesAndEdges = (event, onEventSelect, parentId) => {
|
|
|
4616
4626
|
id: event.span_id,
|
|
4617
4627
|
position: { x: 0, y: 0 },
|
|
4618
4628
|
// Will be set by layout
|
|
4619
|
-
sourcePosition:
|
|
4620
|
-
targetPosition:
|
|
4629
|
+
sourcePosition: import_react16.Position.Right,
|
|
4630
|
+
targetPosition: import_react16.Position.Left,
|
|
4621
4631
|
type: "service"
|
|
4622
4632
|
});
|
|
4623
4633
|
if (parentId) {
|
|
@@ -4627,7 +4637,7 @@ var generateNodesAndEdges = (event, onEventSelect, parentId) => {
|
|
|
4627
4637
|
markerEnd: {
|
|
4628
4638
|
color: "lightgray",
|
|
4629
4639
|
height: 16,
|
|
4630
|
-
type:
|
|
4640
|
+
type: import_react16.MarkerType.Arrow,
|
|
4631
4641
|
width: 16
|
|
4632
4642
|
},
|
|
4633
4643
|
source: parentId,
|
|
@@ -4692,8 +4702,8 @@ var calculateCenterX = (focusNodeX, viewPortPixelWidth, minX, maxX) => {
|
|
|
4692
4702
|
// src/components/trace-graph/xyflow/controls.tsx
|
|
4693
4703
|
var import_icons_material10 = require("@mui/icons-material");
|
|
4694
4704
|
var import_material19 = require("@mui/material");
|
|
4695
|
-
var
|
|
4696
|
-
var
|
|
4705
|
+
var import_react17 = require("@xyflow/react");
|
|
4706
|
+
var import_react18 = require("react");
|
|
4697
4707
|
|
|
4698
4708
|
// node_modules/zustand/esm/shallow.mjs
|
|
4699
4709
|
function shallow$1(objA, objB) {
|
|
@@ -4740,9 +4750,9 @@ var selector = (s) => ({
|
|
|
4740
4750
|
maxZoomReached: s.transform[2] >= s.maxZoom,
|
|
4741
4751
|
minZoomReached: s.transform[2] <= s.minZoom
|
|
4742
4752
|
});
|
|
4743
|
-
var Controls = (0,
|
|
4744
|
-
const { maxZoomReached, minZoomReached } = (0,
|
|
4745
|
-
const { fitView, zoomIn, zoomOut } = (0,
|
|
4753
|
+
var Controls = (0, import_react18.memo)(() => {
|
|
4754
|
+
const { maxZoomReached, minZoomReached } = (0, import_react17.useStore)(selector, shallow$1);
|
|
4755
|
+
const { fitView, zoomIn, zoomOut } = (0, import_react17.useReactFlow)();
|
|
4746
4756
|
const onZoomInHandler = () => {
|
|
4747
4757
|
void zoomIn();
|
|
4748
4758
|
};
|
|
@@ -4812,12 +4822,12 @@ var TraceGraph = ({
|
|
|
4812
4822
|
spans,
|
|
4813
4823
|
viewPortPixelWidth
|
|
4814
4824
|
}) => {
|
|
4815
|
-
const [nodes, setNodes] = (0,
|
|
4816
|
-
const [edges, setEdges] = (0,
|
|
4817
|
-
const [initialViewSet, setInitialViewSet] = (0,
|
|
4818
|
-
const { fitView, setCenter } = (0,
|
|
4819
|
-
const store = (0,
|
|
4820
|
-
const updateSelectedNode = (0,
|
|
4825
|
+
const [nodes, setNodes] = (0, import_react20.useState)([]);
|
|
4826
|
+
const [edges, setEdges] = (0, import_react20.useState)([]);
|
|
4827
|
+
const [initialViewSet, setInitialViewSet] = (0, import_react20.useState)(false);
|
|
4828
|
+
const { fitView, setCenter } = (0, import_react19.useReactFlow)();
|
|
4829
|
+
const store = (0, import_react19.useStoreApi)();
|
|
4830
|
+
const updateSelectedNode = (0, import_react20.useCallback)(
|
|
4821
4831
|
(nodeId) => {
|
|
4822
4832
|
const { addSelectedNodes } = store.getState();
|
|
4823
4833
|
if (nodeId) {
|
|
@@ -4829,7 +4839,7 @@ var TraceGraph = ({
|
|
|
4829
4839
|
},
|
|
4830
4840
|
[nodes, store]
|
|
4831
4841
|
);
|
|
4832
|
-
(0,
|
|
4842
|
+
(0, import_react20.useEffect)(() => {
|
|
4833
4843
|
const spansMap = /* @__PURE__ */ new Map();
|
|
4834
4844
|
const rootSpans = [];
|
|
4835
4845
|
for (const span of spans.data ?? []) {
|
|
@@ -4861,7 +4871,7 @@ var TraceGraph = ({
|
|
|
4861
4871
|
setNodes(layoutedNodes);
|
|
4862
4872
|
setEdges(layoutedEdges);
|
|
4863
4873
|
}, [onEventSelect, spans.data]);
|
|
4864
|
-
(0,
|
|
4874
|
+
(0, import_react20.useEffect)(() => {
|
|
4865
4875
|
const shouldSetInitialView = !spans.loading && nodes.length > 0 && !initialViewSet;
|
|
4866
4876
|
if (shouldSetInitialView) {
|
|
4867
4877
|
if (initialFocusEventId) {
|
|
@@ -4881,12 +4891,12 @@ var TraceGraph = ({
|
|
|
4881
4891
|
setInitialViewSet(true);
|
|
4882
4892
|
}
|
|
4883
4893
|
}, [spans.loading, nodes, initialFocusEventId, viewPortPixelWidth, setCenter, fitView, onEventSelect, initialViewSet]);
|
|
4884
|
-
(0,
|
|
4894
|
+
(0, import_react20.useEffect)(() => {
|
|
4885
4895
|
if (initialFocusEventId) {
|
|
4886
4896
|
updateSelectedNode(initialFocusEventId);
|
|
4887
4897
|
}
|
|
4888
4898
|
}, [initialFocusEventId, updateSelectedNode]);
|
|
4889
|
-
const onNodeClick = (0,
|
|
4899
|
+
const onNodeClick = (0, import_react20.useCallback)((_event, node) => {
|
|
4890
4900
|
onEventSelect(node.data.event);
|
|
4891
4901
|
updateSelectedNode(node.id);
|
|
4892
4902
|
}, [onEventSelect, updateSelectedNode]);
|
|
@@ -4906,7 +4916,7 @@ var TraceGraph = ({
|
|
|
4906
4916
|
}
|
|
4907
4917
|
),
|
|
4908
4918
|
/* @__PURE__ */ (0, import_jsx_runtime141.jsxs)(
|
|
4909
|
-
|
|
4919
|
+
import_react19.ReactFlow,
|
|
4910
4920
|
{
|
|
4911
4921
|
"data-testid": "trace-graph",
|
|
4912
4922
|
defaultViewport: { x: 0, y: 0, zoom: 1 },
|
|
@@ -4920,7 +4930,7 @@ var TraceGraph = ({
|
|
|
4920
4930
|
selectNodesOnDrag: false,
|
|
4921
4931
|
children: [
|
|
4922
4932
|
/* @__PURE__ */ (0, import_jsx_runtime141.jsx)(Controls, {}),
|
|
4923
|
-
/* @__PURE__ */ (0, import_jsx_runtime141.jsx)(
|
|
4933
|
+
/* @__PURE__ */ (0, import_jsx_runtime141.jsx)(import_react19.Background, {})
|
|
4924
4934
|
]
|
|
4925
4935
|
}
|
|
4926
4936
|
)
|
|
@@ -4962,6 +4972,7 @@ var StyledDrawer = (0, import_styles.styled)(import_material21.Drawer)(() => ({
|
|
|
4962
4972
|
var TraceGraphView = ({
|
|
4963
4973
|
fetchError,
|
|
4964
4974
|
fetchSpans,
|
|
4975
|
+
handleClose,
|
|
4965
4976
|
handleEventSelect,
|
|
4966
4977
|
handleRetry,
|
|
4967
4978
|
loading,
|
|
@@ -5020,7 +5031,7 @@ var TraceGraphView = ({
|
|
|
5020
5031
|
height: "100%",
|
|
5021
5032
|
overflow: "auto"
|
|
5022
5033
|
},
|
|
5023
|
-
children: traceId !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
|
|
5034
|
+
children: traceId !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_react21.ReactFlowProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(
|
|
5024
5035
|
TraceGraph,
|
|
5025
5036
|
{
|
|
5026
5037
|
initialFocusEventId: spanId,
|
|
@@ -5038,7 +5049,7 @@ var TraceGraphView = ({
|
|
|
5038
5049
|
) })
|
|
5039
5050
|
}
|
|
5040
5051
|
) }),
|
|
5041
|
-
/* @__PURE__ */ (0, import_jsx_runtime142.jsx)(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(EventDetails, { selectedEvent }) })
|
|
5052
|
+
/* @__PURE__ */ (0, import_jsx_runtime142.jsx)(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(EventDetails, { onClose: handleClose, selectedEvent }) })
|
|
5042
5053
|
] })
|
|
5043
5054
|
}
|
|
5044
5055
|
)
|
|
@@ -5051,10 +5062,10 @@ var TraceGraphPage = () => {
|
|
|
5051
5062
|
const [searchParameters] = (0, import_react_router_dom2.useSearchParams)();
|
|
5052
5063
|
const spanId = searchParameters.get("spanId");
|
|
5053
5064
|
const api = useAppInspectorApi();
|
|
5054
|
-
const [spans, setSpans] = (0,
|
|
5055
|
-
const [loading, setLoading] = (0,
|
|
5056
|
-
const [fetchError, setFetchError] = (0,
|
|
5057
|
-
const fetchSpans = (0,
|
|
5065
|
+
const [spans, setSpans] = (0, import_react22.useState)();
|
|
5066
|
+
const [loading, setLoading] = (0, import_react22.useState)(false);
|
|
5067
|
+
const [fetchError, setFetchError] = (0, import_react22.useState)();
|
|
5068
|
+
const fetchSpans = (0, import_react22.useCallback)(async () => {
|
|
5058
5069
|
setLoading(true);
|
|
5059
5070
|
try {
|
|
5060
5071
|
const response = await api.getSpans({
|
|
@@ -5069,14 +5080,14 @@ var TraceGraphPage = () => {
|
|
|
5069
5080
|
setLoading(false);
|
|
5070
5081
|
}
|
|
5071
5082
|
}, [api, traceId]);
|
|
5072
|
-
(0,
|
|
5083
|
+
(0, import_react22.useEffect)(() => {
|
|
5073
5084
|
void fetchSpans();
|
|
5074
5085
|
}, [fetchSpans]);
|
|
5075
|
-
const [open, setOpen] = (0,
|
|
5076
|
-
const [selectedEvent, setSelectedEvent] = (0,
|
|
5077
|
-
const [viewPortPixelWidth, setViewPortPixelWidth] = (0,
|
|
5086
|
+
const [open, setOpen] = (0, import_react22.useState)(true);
|
|
5087
|
+
const [selectedEvent, setSelectedEvent] = (0, import_react22.useState)();
|
|
5088
|
+
const [viewPortPixelWidth, setViewPortPixelWidth] = (0, import_react22.useState)(0);
|
|
5078
5089
|
const { checkStatus, error: statusError, status } = useStatus();
|
|
5079
|
-
const calculateDrawerWidth = (0,
|
|
5090
|
+
const calculateDrawerWidth = (0, import_react22.useCallback)(() => {
|
|
5080
5091
|
const percentageMatch = /(\d+)%/.exec(DRAWER_WIDTH);
|
|
5081
5092
|
if (percentageMatch && open) {
|
|
5082
5093
|
const percentage = Number.parseInt(percentageMatch[1], 10);
|
|
@@ -5084,7 +5095,7 @@ var TraceGraphPage = () => {
|
|
|
5084
5095
|
}
|
|
5085
5096
|
return 0;
|
|
5086
5097
|
}, [open]);
|
|
5087
|
-
(0,
|
|
5098
|
+
(0, import_react22.useEffect)(() => {
|
|
5088
5099
|
const updateViewportWidth = () => {
|
|
5089
5100
|
const totalWidth = window.innerWidth;
|
|
5090
5101
|
const drawerPixelWidth = open ? calculateDrawerWidth() : 0;
|
|
@@ -5098,16 +5109,16 @@ var TraceGraphPage = () => {
|
|
|
5098
5109
|
clearTimeout(timeoutId);
|
|
5099
5110
|
};
|
|
5100
5111
|
}, [open, calculateDrawerWidth]);
|
|
5101
|
-
const handleEventSelect = (0,
|
|
5112
|
+
const handleEventSelect = (0, import_react22.useCallback)((event) => {
|
|
5102
5113
|
setSelectedEvent(event);
|
|
5103
5114
|
setOpen(true);
|
|
5104
5115
|
}, []);
|
|
5105
|
-
const handleRetry = (0,
|
|
5116
|
+
const handleRetry = (0, import_react22.useCallback)(() => {
|
|
5106
5117
|
void checkStatus();
|
|
5107
5118
|
}, [checkStatus]);
|
|
5108
5119
|
const navigate = (0, import_react_router_dom2.useNavigate)();
|
|
5109
5120
|
const { resolveLink } = useAppInspector();
|
|
5110
|
-
const navigateToSpansList = (0,
|
|
5121
|
+
const navigateToSpansList = (0, import_react22.useCallback)(() => {
|
|
5111
5122
|
const url = resolveLink({ to: "spans-list" });
|
|
5112
5123
|
navigate(url);
|
|
5113
5124
|
}, [navigate, resolveLink]);
|
|
@@ -5116,6 +5127,9 @@ var TraceGraphPage = () => {
|
|
|
5116
5127
|
{
|
|
5117
5128
|
fetchError,
|
|
5118
5129
|
fetchSpans: () => void fetchSpans(),
|
|
5130
|
+
handleClose: () => {
|
|
5131
|
+
setOpen(false);
|
|
5132
|
+
},
|
|
5119
5133
|
handleEventSelect,
|
|
5120
5134
|
handleRetry,
|
|
5121
5135
|
loading,
|