Skip to content

Commit 9d67972

Browse files
committed
feat: when a catalog has one topology, show only topology card
Fixes #2174
1 parent 55276c7 commit 9d67972

File tree

5 files changed

+57
-13
lines changed

5 files changed

+57
-13
lines changed

src/api/services/configs.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
ConfigChange,
1212
ConfigHealthCheckView,
1313
ConfigItem,
14+
ConfigItemDetails,
1415
ConfigSummary,
1516
ConfigTypeRelationships
1617
} from "../types/configs";
@@ -138,8 +139,10 @@ export const getAllChanges = (
138139
};
139140

140141
export const getConfig = (id: string) =>
141-
resolvePostGrestRequestWithPagination<ConfigItem[]>(
142-
ConfigDB.get(`/config_detail?id=eq.${id}&select=*,config_scrapers(id,name)`)
142+
resolvePostGrestRequestWithPagination<ConfigItemDetails[]>(
143+
ConfigDB.get(
144+
`/config_detail?id=eq.${id}&select=*,config_scrapers(id,name),config_component_relationships(component_id,component:components(*))`
145+
)
143146
);
144147

145148
export type ConfigsTagList = {

src/api/types/configs.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Agent, Avatar, CreatedAt, Timestamped } from "../traits";
22
import { HealthCheckSummary } from "./health";
3+
import { Topology } from "./topology";
34

45
export interface ConfigChange extends CreatedAt {
56
id: string;
@@ -69,13 +70,6 @@ export interface ConfigItem extends Timestamped, Avatar, Agent, Costs {
6970
id: string;
7071
name: string;
7172
};
72-
summary?: {
73-
relationships?: number;
74-
analysis?: number;
75-
changes?: number;
76-
playbook_runs?: number;
77-
checks?: number;
78-
};
7973
properties?: {
8074
icon: string;
8175
name: string;
@@ -87,6 +81,20 @@ export interface ConfigItem extends Timestamped, Avatar, Agent, Costs {
8781
last_scraped_time?: string;
8882
}
8983

84+
export interface ConfigItemDetails extends ConfigItem {
85+
summary?: {
86+
relationships?: number;
87+
analysis?: number;
88+
changes?: number;
89+
playbook_runs?: number;
90+
checks?: number;
91+
};
92+
config_component_relationships: {
93+
component_id: string;
94+
component: Topology;
95+
}[];
96+
}
97+
9098
export interface ConfigItemGraphData extends ConfigItem {
9199
expanded?: boolean;
92100
expandable?: boolean;

src/components/Configs/ConfigDetailsTabs.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +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";
1213
import { useConfigDetailsTabs } from "./ConfigTabsLinks";
1314
import ConfigSidebar from "./Sidebar/ConfigSidebar";
1415

@@ -46,6 +47,10 @@ export function ConfigDetailsTabs({
4647

4748
const configTabList = useConfigDetailsTabs(configItem?.summary);
4849

50+
// Show topology section if there is only one relationship
51+
const showTopologySection =
52+
configItem?.config_component_relationships.length === 1;
53+
4954
return (
5055
<>
5156
<Head
@@ -69,8 +74,21 @@ export function ConfigDetailsTabs({
6974
loading={isLoading}
7075
contentClass="p-0 h-full overflow-y-hidden"
7176
>
72-
<div className={`flex h-full flex-row`}>
77+
<div className={`flex h-full flex-row bg-gray-100`}>
7378
<div className="flex flex-1 flex-col">
79+
{showTopologySection && (
80+
<div className="flex w-full flex-row items-center justify-between p-4">
81+
<TopologyCard
82+
topologyId={
83+
configItem?.config_component_relationships[0].component_id
84+
}
85+
// topology={
86+
// configItem?.config_component_relationships[0].component
87+
// }
88+
/>
89+
</div>
90+
)}
91+
7492
<TabbedLinks
7593
activeTabName={activeTabName}
7694
tabLinks={configTabList}

src/components/Configs/ConfigTabsLinks.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { Badge } from "@flanksource-ui/ui/Badge/Badge";
22
import { useParams } from "react-router-dom";
3-
import { ConfigItem } from "../../api/types/configs";
3+
import { ConfigItemDetails } from "../../api/types/configs";
44

5-
export function useConfigDetailsTabs(countSummary?: ConfigItem["summary"]) {
5+
export function useConfigDetailsTabs(
6+
countSummary?: ConfigItemDetails["summary"]
7+
) {
68
const { id } = useParams<{ id: string }>();
79

810
return [

src/components/Topology/TopologyCard/index.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,20 @@ export const StatusStyles: Record<keyof typeof ComponentStatus, string> = {
3737
interface IProps {
3838
size?: Size | string;
3939
topologyId?: string;
40-
topology?: Topology;
40+
topology?: Pick<
41+
Topology,
42+
| "summary"
43+
| "is_leaf"
44+
| "id"
45+
| "properties"
46+
| "components"
47+
| "agent_id"
48+
| "status"
49+
| "status_reason"
50+
| "text"
51+
| "name"
52+
| "icon"
53+
>;
4154
selectionMode?: boolean;
4255
hideMenu?: boolean;
4356
// where to open new links

0 commit comments

Comments
 (0)