Skip to content

Commit 0f40a97

Browse files
committed
fix: fix issue with topoogy properties being empty
1 parent bd84b45 commit 0f40a97

File tree

13 files changed

+146
-39
lines changed

13 files changed

+146
-39
lines changed

src/components/Configs/ConfigDetailsTabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Head } from "../../ui/Head";
99
import { refreshButtonClickedTrigger } from "../../ui/SlidingSideBar/SlidingSideBar";
1010
import TabbedLinks from "../../ui/Tabs/TabbedLinks";
1111
import { ErrorBoundary } from "../ErrorBoundary";
12-
import { TopologyCard } from "../Topology/TopologyCard";
12+
import { TopologyCard } from "../Topology/TopologyCard/TopologyCard";
1313
import { useConfigDetailsTabs } from "./ConfigTabsLinks";
1414
import ConfigSidebar from "./Sidebar/ConfigSidebar";
1515

src/components/Incidents/Hypothesis/EvidenceSection/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { ConfigDetailsChanges } from "@flanksource-ui/components/Configs/Changes
1717
import ConfigLink from "@flanksource-ui/components/Configs/ConfigLink/ConfigLink";
1818
import { ConfigAnalysisLink } from "@flanksource-ui/components/Configs/Insights/ConfigAnalysisLink/ConfigAnalysisLink";
1919
import { LogsTable } from "@flanksource-ui/components/Logs/Table/LogsTable";
20-
import { TopologyCard } from "@flanksource-ui/components/Topology/TopologyCard";
20+
import { TopologyCard } from "@flanksource-ui/components/Topology/TopologyCard/TopologyCard";
2121
import { Size, ViewType } from "@flanksource-ui/types";
2222
import { Age } from "@flanksource-ui/ui/Age";
2323
import { Button } from "@flanksource-ui/ui/Buttons/Button";

src/components/Incidents/IncidentDetails/DefinitionOfDone/EvidenceView/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ import {
55
} from "@flanksource-ui/api/query-hooks";
66
import { getCanaries } from "@flanksource-ui/api/services/topology";
77
import { Evidence, EvidenceType } from "@flanksource-ui/api/types/evidence";
8+
import { CardMetrics } from "@flanksource-ui/components/Topology/TopologyCard/CardMetrics";
9+
import { StatusStyles } from "@flanksource-ui/components/Topology/TopologyCard/TopologyCard";
810
import { Size, ViewType } from "@flanksource-ui/types";
911
import { Badge } from "@flanksource-ui/ui/Badge/Badge";
12+
import { ConfigIcon } from "@flanksource-ui/ui/Icons/ConfigIcon";
13+
import { Icon } from "@flanksource-ui/ui/Icons/Icon";
1014
import TextSkeletonLoader from "@flanksource-ui/ui/SkeletonLoader/TextSkeletonLoader";
1115
import { useQuery } from "@tanstack/react-query";
1216
import clsx from "clsx";
1317
import { useMemo } from "react";
1418
import { BsFillCircleFill, BsPersonFill } from "react-icons/bs";
1519
import { Link } from "react-router-dom";
16-
import { ConfigIcon } from "../../../../../ui/Icons/ConfigIcon";
17-
import { Icon } from "../../../../../ui/Icons/Icon";
18-
import { StatusStyles } from "../../../../Topology/TopologyCard";
19-
import { CardMetrics } from "../../../../Topology/TopologyCard/CardMetrics";
2020
import {
2121
ConfigAnalysisEvidence,
2222
ConfigChangeEvidence

src/components/Topology/TopologyCard/Property.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export function PropertyDisplay({
1414
className = "",
1515
...props
1616
}: PropertyDisplayProps) {
17+
console.log("property display", property);
1718
const { name, icon, color } = property;
1819
const label =
1920
NodePodPropToLabelMap[name as keyof typeof NodePodPropToLabelMap] || name;

src/components/Topology/TopologyCard/TopologyCard.stories.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ComponentMeta, ComponentStory } from "@storybook/react";
22
import { Topology } from "../../../api/types/topology";
33
import { Size } from "../../../types";
4-
import { TopologyCard } from "./index";
4+
import { TopologyCard } from "./TopologyCard";
55

66
export default {
77
title: "TopologyCard",

src/components/Topology/TopologyCard/index.tsx renamed to src/components/Topology/TopologyCard/TopologyCard.tsx

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { HealthChecksSummary } from "../../Canary/HealthChecksSummary";
1313
import { HealthSummary } from "../../Canary/HealthSummary";
1414
import IncidentCardSummary from "../../Incidents/IncidentCardSummary";
1515
import { CardMetrics } from "./CardMetrics";
16-
import { PropertyDisplay } from "./Property";
16+
import TopologyCardPropertiesColumn from "./TopologyCardPropertiesColumn";
1717
import { TopologyConfigAnalysisLine } from "./TopologyConfigAnalysisLine";
1818
import { TopologyDropdownMenu } from "./TopologyDropdownMenu";
1919

@@ -186,6 +186,8 @@ export function TopologyCard({
186186
</div>
187187
<div className="m-auto flex flex-1 flex-col overflow-hidden">
188188
<div
189+
role="heading"
190+
aria-level={2}
189191
className="overflow-hidden truncate text-ellipsis align-middle text-15pxinrem font-bold leading-1.21rel"
190192
title={topology.name}
191193
>
@@ -241,26 +243,7 @@ export function TopologyCard({
241243
</div>
242244
) : (
243245
<>
244-
{Boolean(properties.length) && (
245-
<CustomScroll
246-
className="flex-1 py-2 pl-2"
247-
showMoreClass="text-xs linear-1.21rel mr-1 cursor-pointer"
248-
maxHeight="200px"
249-
minChildCount={6}
250-
>
251-
{properties.map((property, index) => (
252-
<PropertyDisplay
253-
key={index}
254-
property={property}
255-
className={
256-
index === topology.properties!.length - 1
257-
? "mb-0"
258-
: "mb-1.5"
259-
}
260-
/>
261-
))}
262-
</CustomScroll>
263-
)}
246+
<TopologyCardPropertiesColumn properties={properties} />
264247
<CustomScroll
265248
className="flex-1 space-y-1.5 py-2 pl-2 pr-2"
266249
showMoreClass="text-xs linear-1.21rel mr-1 cursor-pointer"
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Property } from "@flanksource-ui/api/types/topology";
2+
import { CustomScroll } from "@flanksource-ui/ui/CustomScroll";
3+
import { PropertyDisplay } from "./Property";
4+
5+
type TopologyCardPropertiesColumnProps = {
6+
properties: Property[];
7+
};
8+
9+
export default function TopologyCardPropertiesColumn({
10+
properties
11+
}: TopologyCardPropertiesColumnProps) {
12+
// Filter out properties that are hidden, have no text or value, and are not a
13+
// headline property.
14+
const noneHeadlineProperties = properties.filter(
15+
(i) => !i.headline && i.type !== "hidden" && (i.text || i.value)
16+
);
17+
18+
if (noneHeadlineProperties.length === 0) {
19+
return null;
20+
}
21+
22+
return (
23+
<CustomScroll
24+
className="flex-1 py-2 pl-2"
25+
showMoreClass="text-xs linear-1.21rel mr-1 cursor-pointer"
26+
maxHeight="200px"
27+
minChildCount={6}
28+
>
29+
{noneHeadlineProperties.map((property, index) => (
30+
<PropertyDisplay
31+
key={index}
32+
property={property}
33+
className={index === properties!.length - 1 ? "mb-0" : "mb-1.5"}
34+
/>
35+
))}
36+
</CustomScroll>
37+
);
38+
}

src/components/Topology/TopologyCard/Utils/FormatProperties.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type FormatPropertyProps = {
1414
};
1515

1616
export function FormatPropertyURL({ property }: FormatPropertyProps) {
17+
console.log("property", property);
1718
if (property == null) {
1819
return null;
1920
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import { Topology } from "@flanksource-ui/api/types/topology";
2+
import { render, screen } from "@flanksource-ui/test-utils";
3+
import { rest } from "msw";
4+
import { setupServer } from "msw/node";
5+
import { TopologyCard } from "../TopologyCard";
6+
7+
const data: Topology = {
8+
id: "01903a93-1d3f-ce22-2203-d558bccbd2d2",
9+
topology_id: "0d0f9eca-e1f9-45fa-b803-29d3237d70cc",
10+
agent_id: "00000000-0000-0000-0000-000000000000",
11+
external_id: "flux (aws)",
12+
name: "flux (aws)",
13+
namespace: "mission-control",
14+
labels: {
15+
"app.kubernetes.io/managed-by": "Helm",
16+
"helm.toolkit.fluxcd.io/name": "mission-control-flux",
17+
"helm.toolkit.fluxcd.io/namespace": "mission-control"
18+
},
19+
hidden: true,
20+
status: "warning",
21+
health: "warning",
22+
description: "",
23+
status_reason: "",
24+
schedule: "@every 5m",
25+
icon: "flux",
26+
type: "Topology",
27+
summary: {
28+
healthy: 4,
29+
warning: 20,
30+
info: 8,
31+
insights: {
32+
// @ts-expect-error
33+
reliability: {
34+
low: 2
35+
}
36+
},
37+
// @ts-expect-error
38+
checks: {
39+
healthy: 34,
40+
unhealthy: 4
41+
}
42+
},
43+
is_leaf: false,
44+
created_at: "2024-06-21T11:33:58.207353Z",
45+
updated_at: "2024-08-23T17:00:21.522058Z",
46+
parents: ["01903a93-1d84-9dd8-7b27-dab78df75197"]
47+
};
48+
49+
const server = setupServer(
50+
rest.get("/api/canary/api/topology", (req, res, ctx) => {
51+
return res(
52+
ctx.status(204),
53+
ctx.json({
54+
components: [data]
55+
})
56+
);
57+
})
58+
);
59+
60+
beforeAll(() => server.listen());
61+
afterEach(() => server.resetHandlers());
62+
afterAll(() => server.close());
63+
64+
test("it should render card with data from props", () => {
65+
render(<TopologyCard topology={data} />);
66+
67+
expect(
68+
screen.getAllByRole("link", {
69+
name: /flux \(aws\)/i
70+
})[0]
71+
).toHaveAttribute("href", "/topology/01903a93-1d3f-ce22-2203-d558bccbd2d2");
72+
});
73+
74+
test("it should render card with data from api", async () => {
75+
render(<TopologyCard topologyId="01903a93-1d3f-ce22-2203-d558bccbd2d2" />);
76+
77+
await screen.findAllByRole("link", {
78+
name: /flux \(aws\)/i
79+
});
80+
81+
expect(
82+
screen.getAllByRole("link", {
83+
name: /flux \(aws\)/i
84+
})[0]
85+
).toHaveAttribute("href", "/topology/01903a93-1d3f-ce22-2203-d558bccbd2d2");
86+
});

src/components/Topology/TopologyPopover/topologyPreference.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1+
import { useOnMouseActivity } from "@flanksource-ui/hooks/useMouseActivity";
2+
import { Size } from "@flanksource-ui/types";
3+
import { ClickableSvg } from "@flanksource-ui/ui/ClickableSvg/ClickableSvg";
4+
import { Toggle } from "@flanksource-ui/ui/FormControls/Toggle";
15
import clsx from "clsx";
2-
import { FaCog } from "react-icons/fa";
3-
4-
import { CardWidth } from "../TopologyCard";
5-
66
import { LegacyRef } from "react";
7+
import { FaCog } from "react-icons/fa";
78
import { useSearchParams } from "react-router-dom";
8-
import { useOnMouseActivity } from "../../../hooks/useMouseActivity";
9-
import { Size } from "../../../types";
10-
import { ClickableSvg } from "../../../ui/ClickableSvg/ClickableSvg";
11-
import { Toggle } from "../../../ui/FormControls/Toggle";
9+
import { CardWidth } from "../TopologyCard/TopologyCard";
1210

1311
export function getCardWidth() {
1412
let value: any = localStorage.getItem("topology_card_width");

src/pages/TopologyCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useQuery } from "@tanstack/react-query";
22
import { useParams } from "react-router-dom";
33
import { getTopology } from "../api/services/topology";
44
import { InfoMessage } from "../components/InfoMessage";
5-
import { TopologyCard } from "../components/Topology/TopologyCard";
5+
import { TopologyCard } from "../components/Topology/TopologyCard/TopologyCard";
66
import { Head } from "../ui/Head";
77

88
export function TopologyCardPage() {

src/pages/TopologyPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { SearchLayout } from "@flanksource-ui/components/Layout/SearchLayout";
55
import { toastError } from "@flanksource-ui/components/Toast/toast";
66
import TopologySidebar from "@flanksource-ui/components/Topology/Sidebar/TopologySidebar";
77
import { TopologyBreadcrumbs } from "@flanksource-ui/components/Topology/TopologyBreadcrumbs";
8-
import { TopologyCard } from "@flanksource-ui/components/Topology/TopologyCard";
8+
import { TopologyCard } from "@flanksource-ui/components/Topology/TopologyCard/TopologyCard";
99
import TopologyFilterBar from "@flanksource-ui/components/Topology/TopologyPage/TopologyFilterBar";
1010
import { getCardWidth } from "@flanksource-ui/components/Topology/TopologyPopover/topologyPreference";
1111
import { Head } from "@flanksource-ui/ui/Head";

src/pages/incident/IncidentDetails.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { HypothesisBuilder } from "../../components/Incidents/Hypothesis/Hypothe
2020
import { HypothesisCommentsViewContainer } from "../../components/Incidents/Hypothesis/HypothesisCommentsViewContainer/HypothesisCommentsViewContainer";
2121
import EditableIncidentTitleBreadcrumb from "../../components/Incidents/IncidentDetails/EditableIncidentTitleBreadcrumb";
2222
import { IncidentSidebar } from "../../components/Incidents/IncidentDetails/IncidentSidebar";
23-
import { TopologyCard } from "../../components/Topology/TopologyCard";
23+
import { TopologyCard } from "../../components/Topology/TopologyCard/TopologyCard";
2424
import { useIncidentState } from "../../store/incident.state";
2525
import { Size } from "../../types";
2626
import {

0 commit comments

Comments
 (0)