Skip to content

Commit 8cd5616

Browse files
committed
feat: when a catalog has one topology, show only topology card
Fixes #2174 fix: show loading animation, until card is shown or not
1 parent 569a115 commit 8cd5616

File tree

5 files changed

+57
-24
lines changed

5 files changed

+57
-24
lines changed

src/api/services/configs.ts

Lines changed: 2 additions & 1 deletion
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,7 +139,7 @@ export const getAllChanges = (
138139
};
139140

140141
export const getConfig = (id: string) =>
141-
resolvePostGrestRequestWithPagination<ConfigItem[]>(
142+
resolvePostGrestRequestWithPagination<ConfigItemDetails[]>(
142143
ConfigDB.get(`/config_detail?id=eq.${id}&select=*,config_scrapers(id,name)`)
143144
);
144145

src/api/types/configs.ts

Lines changed: 12 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,17 @@ 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+
components?: Topology[];
93+
}
94+
9095
export interface ConfigItemGraphData extends ConfigItem {
9196
expanded?: boolean;
9297
expandable?: boolean;

src/components/Configs/ConfigDetailsTabs.tsx

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { SearchLayout } from "@flanksource-ui/ui/Layout/SearchLayout";
2+
import IncidentDetailsPageSkeletonLoader from "@flanksource-ui/ui/SkeletonLoader/IncidentDetailsPageSkeletonLoader";
23
import clsx from "clsx";
34
import { useAtom } from "jotai";
45
import { ReactNode } from "react";
@@ -9,6 +10,7 @@ import { Head } from "../../ui/Head";
910
import { refreshButtonClickedTrigger } from "../../ui/SlidingSideBar/SlidingSideBar";
1011
import TabbedLinks from "../../ui/Tabs/TabbedLinks";
1112
import { ErrorBoundary } from "../ErrorBoundary";
13+
import { TopologyCard } from "../Topology/TopologyCard";
1214
import { useConfigDetailsTabs } from "./ConfigTabsLinks";
1315
import ConfigSidebar from "./Sidebar/ConfigSidebar";
1416

@@ -69,21 +71,31 @@ export function ConfigDetailsTabs({
6971
loading={isLoading}
7072
contentClass="p-0 h-full overflow-y-hidden"
7173
>
72-
<div className={`flex h-full flex-row`}>
73-
<div className="flex flex-1 flex-col">
74-
<TabbedLinks
75-
activeTabName={activeTabName}
76-
tabLinks={configTabList}
77-
contentClassName={clsx(
78-
"bg-white border border-t-0 border-gray-300 flex-1 overflow-y-auto",
79-
className
74+
{isLoadingConfig ? (
75+
<IncidentDetailsPageSkeletonLoader />
76+
) : (
77+
<div className={`flex h-full flex-row bg-gray-100`}>
78+
<div className="flex flex-1 flex-col">
79+
{configItem?.components && configItem.components.length === 1 && (
80+
<div className="flex w-full flex-row items-center justify-between p-4">
81+
<TopologyCard topology={configItem.components[0]} />
82+
</div>
8083
)}
81-
>
82-
<ErrorBoundary>{children}</ErrorBoundary>
83-
</TabbedLinks>
84+
85+
<TabbedLinks
86+
activeTabName={activeTabName}
87+
tabLinks={configTabList}
88+
contentClassName={clsx(
89+
"bg-white border border-t-0 border-gray-300 flex-1 overflow-y-auto",
90+
className
91+
)}
92+
>
93+
<ErrorBoundary>{children}</ErrorBoundary>
94+
</TabbedLinks>
95+
</div>
96+
<ConfigSidebar />
8497
</div>
85-
<ConfigSidebar />
86-
</div>
98+
)}
8799
</SearchLayout>
88100
</>
89101
);

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)