diff --git a/package.json b/package.json
index 43a94f4c..254d7460 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
"lodash": "^4.17.21",
"moment": "^2.29.1",
"notistack": "^2.0.2",
+ "pb-util": "^1.0.1",
"query-string": "^6.8.3",
"react": "^17.0.2",
"react-beautiful-dnd": "^13.0.0",
diff --git a/src/components/Table/TableHeader/CloudLogs/LogItem.tsx b/src/components/Table/TableHeader/CloudLogs/CloudLogItem.tsx
similarity index 70%
rename from src/components/Table/TableHeader/CloudLogs/LogItem.tsx
rename to src/components/Table/TableHeader/CloudLogs/CloudLogItem.tsx
index 0b944ec9..7a5fbe5b 100644
--- a/src/components/Table/TableHeader/CloudLogs/LogItem.tsx
+++ b/src/components/Table/TableHeader/CloudLogs/CloudLogItem.tsx
@@ -1,6 +1,8 @@
import { format } from "date-fns";
import _get from "lodash/get";
import ReactJson from "react-json-view";
+import { struct } from "pb-util";
+import jsonFormat from "json-format";
import {
styled,
@@ -12,13 +14,15 @@ import {
Chip as MuiChip,
ChipProps,
Typography,
+ Divider,
} from "@mui/material";
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
-import LogSeverityIcon from "./LogSeverityIcon";
+import CloudLogSeverityIcon from "./CloudLogSeverityIcon";
import { DATE_FORMAT, TIME_FORMAT } from "@src/constants/dates";
const Accordion = styled(MuiAccordion)(({ theme }) => ({
+ background: "none",
marginTop: 0,
"&::before": { display: "none" },
@@ -30,6 +34,11 @@ const AccordionSummary = styled(MuiAccordionSummary)(({ theme }) => ({
minHeight: 32,
alignItems: "flex-start",
+ "&.Mui-expanded": {
+ backgroundColor: theme.palette.action.hover,
+ "&:hover": { backgroundColor: theme.palette.action.selected },
+ },
+
"& svg": {
fontSize: 18,
height: 20,
@@ -58,13 +67,12 @@ const AccordionSummary = styled(MuiAccordionSummary)(({ theme }) => ({
"& .log-preview": {
flexShrink: 1,
- ".Mui-expanded&": {
- overflow: "visible",
- whiteSpace: "pre-wrap",
- },
+ // ".Mui-expanded&": {
+ // overflow: "visible",
+ // whiteSpace: "pre-wrap",
+ // },
},
- margin: theme.spacing(0, -1.5),
padding: theme.spacing(0, 1.375, 0, 1.5),
borderRadius: theme.shape.borderRadius,
"&:hover": { backgroundColor: theme.palette.action.hover },
@@ -80,19 +88,26 @@ const Chip = styled((props: ChipProps) => )({
});
const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({
- paddingLeft: theme.spacing(18 / 8 + 2),
- paddingRight: 0,
+ paddingLeft: theme.spacing(18 / 8 + 2 + 1.5),
+ paddingRight: theme.spacing(18 / 8 + 2 + 1.5),
}));
-export interface ILogItemProps {
+export interface ICloudLogItemProps {
// https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#FIELDS.insert_id
data: Record;
chips?: string[];
}
-export default function LogItem({ data, chips }: ILogItemProps) {
+export default function CloudLogItem({
+ data: dataProp,
+ chips,
+}: ICloudLogItemProps) {
const theme = useTheme();
+ const data = { ...dataProp };
+ if (dataProp.payload === "jsonPayload" && dataProp.jsonPayload)
+ data.jsonPayload = struct.decode(dataProp.jsonPayload ?? {});
+
const timestamp = new Date(
data.timestamp.seconds * 1000 + data.timestamp.nanos / 1_000_000
);
@@ -130,7 +145,7 @@ export default function LogItem({ data, chips }: ILogItemProps) {
aria-controls={`${data.insertId}-content`}
id={`${data.insertId}-header`}
>
-
+