Skip to content

Commit b7e456b

Browse files
committed
refactor: make the code more readable
1 parent 0d9e119 commit b7e456b

File tree

3 files changed

+97
-70
lines changed

3 files changed

+97
-70
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { useQuery } from "@tanstack/react-query";
2+
import { useRef } from "react";
3+
import { useParams, useSearchParams } from "react-router-dom";
4+
import { LoadingBarRef } from "react-top-loading-bar";
5+
import { getTopology } from "../services/topology";
6+
7+
export default function useTopologyPageQuery() {
8+
const { id } = useParams();
9+
10+
const [searchParams] = useSearchParams({
11+
sortBy: "status",
12+
sortOrder: "desc"
13+
});
14+
15+
const selectedLabel = searchParams.get("labels") ?? "All";
16+
const team = searchParams.get("team") ?? "All";
17+
const topologyType = searchParams.get("type") ?? "All";
18+
const healthStatus = searchParams.get("status") ?? "All";
19+
const sortBy = searchParams.get("sortBy") ?? "status";
20+
const sortOrder = searchParams.get("sortOrder") ?? "desc";
21+
const agentId = searchParams.get("agent_id") ?? undefined;
22+
const showHiddenComponents =
23+
searchParams.get("showHiddenComponents") ?? undefined;
24+
25+
const loadingBarRef = useRef<LoadingBarRef>(null);
26+
27+
return useQuery(
28+
[
29+
"topologies",
30+
id,
31+
healthStatus,
32+
team,
33+
selectedLabel,
34+
topologyType,
35+
showHiddenComponents,
36+
sortBy,
37+
sortOrder,
38+
agentId
39+
],
40+
() => {
41+
loadingBarRef.current?.continuousStart();
42+
const apiParams = {
43+
id,
44+
status: healthStatus,
45+
type: topologyType,
46+
team: team,
47+
labels: selectedLabel,
48+
sortBy,
49+
sortOrder,
50+
// only flatten, if topology type is set
51+
...(topologyType &&
52+
topologyType.toString().toLowerCase() !== "all" && {
53+
flatten: true
54+
}),
55+
hidden: showHiddenComponents === "no" ? false : undefined,
56+
agent_id: agentId
57+
};
58+
return getTopology(apiParams);
59+
},
60+
{
61+
onSettled: () => {
62+
loadingBarRef.current?.complete();
63+
}
64+
}
65+
);
66+
}

src/components/Topology/TopologyPopover/topologyPreference.tsx

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,39 @@
11
import clsx from "clsx";
2+
import { useAtom } from "jotai";
3+
import { atomWithStorage } from "jotai/utils";
4+
import { LegacyRef, useMemo } from "react";
25
import { FaCog } from "react-icons/fa";
3-
4-
import { CardWidth } from "../TopologyCard";
5-
6-
import { LegacyRef } from "react";
76
import { useSearchParams } from "react-router-dom";
87
import { useOnMouseActivity } from "../../../hooks/useMouseActivity";
98
import { Size } from "../../../types";
109
import { ClickableSvg } from "../../../ui/ClickableSvg/ClickableSvg";
1110
import { Toggle } from "../../../ui/FormControls/Toggle";
11+
import { CardWidth } from "../TopologyCard";
1212

13-
export function getCardWidth() {
14-
let value: any = localStorage.getItem("topology_card_width");
15-
16-
if (!value?.trim()) {
17-
return CardWidth[Size.extra_large];
13+
const topologyCardWidthAtom = atomWithStorage(
14+
"topology_card_width",
15+
CardWidth[Size.extra_large],
16+
undefined,
17+
{
18+
getOnInit: true
1819
}
20+
);
1921

20-
value = parseInt(value, 10);
21-
if (isNaN(value)) {
22-
return CardWidth[Size.extra_large];
23-
} else {
24-
return `${value}px`;
25-
}
22+
export function useTopologyCardWidth(): [string, (width: string) => void] {
23+
const [topologyCardSize, setTopologyCardSize] = useAtom(
24+
topologyCardWidthAtom
25+
);
26+
27+
const value = useMemo(() => {
28+
const v = parseInt(topologyCardSize, 10);
29+
if (isNaN(v)) {
30+
return CardWidth[Size.extra_large];
31+
} else {
32+
return `${v}px`;
33+
}
34+
}, [topologyCardSize]);
35+
36+
return [value, setTopologyCardSize];
2637
}
2738

2839
export const TopologyPreference = ({

src/pages/TopologyPage.tsx

Lines changed: 5 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
import { getTopology } from "@flanksource-ui/api/services/topology";
1+
import useTopologyPageQuery from "@flanksource-ui/api/query-hooks/useTopologyPageQuery";
22
import { Topology } from "@flanksource-ui/api/types/topology";
33
import { InfoMessage } from "@flanksource-ui/components/InfoMessage";
44
import { toastError } from "@flanksource-ui/components/Toast/toast";
55
import TopologySidebar from "@flanksource-ui/components/Topology/Sidebar/TopologySidebar";
66
import { TopologyBreadcrumbs } from "@flanksource-ui/components/Topology/TopologyBreadcrumbs";
77
import { TopologyCard } from "@flanksource-ui/components/Topology/TopologyCard";
88
import TopologyFilterBar from "@flanksource-ui/components/Topology/TopologyPage/TopologyFilterBar";
9-
import { getCardWidth } from "@flanksource-ui/components/Topology/TopologyPopover/topologyPreference";
9+
import { useTopologyCardWidth } from "@flanksource-ui/components/Topology/TopologyPopover/topologyPreference";
1010
import { Head } from "@flanksource-ui/ui/Head";
1111
import { SearchLayout } from "@flanksource-ui/ui/Layout/SearchLayout";
1212
import CardsSkeletonLoader from "@flanksource-ui/ui/SkeletonLoader/CardsSkeletonLoader";
1313
import { refreshButtonClickedTrigger } from "@flanksource-ui/ui/SlidingSideBar/SlidingSideBar";
14-
import { useQuery } from "@tanstack/react-query";
1514
import { useAtom } from "jotai";
16-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
15+
import { useCallback, useEffect, useMemo, useRef } from "react";
1716
import { useParams, useSearchParams } from "react-router-dom";
1817
import LoadingBar, { LoadingBarRef } from "react-top-loading-bar";
1918
import {
@@ -72,62 +71,13 @@ export function TopologyPage() {
7271
sortOrder: "desc"
7372
});
7473

75-
const [topologyCardSize, setTopologyCardSize] = useState(() =>
76-
getCardWidth()
77-
);
74+
const [topologyCardSize, setTopologyCardSize] = useTopologyCardWidth();
7875

79-
const selectedLabel = searchParams.get("labels") ?? "All";
80-
const team = searchParams.get("team") ?? "All";
81-
const topologyType = searchParams.get("type") ?? "All";
82-
const healthStatus = searchParams.get("status") ?? "All";
8376
const refererId = searchParams.get("refererId") ?? undefined;
84-
const sortBy = searchParams.get("sortBy") ?? "status";
85-
const sortOrder = searchParams.get("sortOrder") ?? "desc";
86-
const agentId = searchParams.get("agent_id") ?? undefined;
87-
const showHiddenComponents =
88-
searchParams.get("showHiddenComponents") ?? undefined;
8977

9078
const loadingBarRef = useRef<LoadingBarRef>(null);
9179

92-
const { data, isLoading, refetch } = useQuery(
93-
[
94-
"topologies",
95-
id,
96-
healthStatus,
97-
team,
98-
selectedLabel,
99-
topologyType,
100-
showHiddenComponents,
101-
sortBy,
102-
sortOrder,
103-
agentId
104-
],
105-
() => {
106-
loadingBarRef.current?.continuousStart();
107-
const apiParams = {
108-
id,
109-
status: healthStatus,
110-
type: topologyType,
111-
team: team,
112-
labels: selectedLabel,
113-
sortBy,
114-
sortOrder,
115-
// only flatten, if topology type is set
116-
...(topologyType &&
117-
topologyType.toString().toLowerCase() !== "all" && {
118-
flatten: true
119-
}),
120-
hidden: showHiddenComponents === "no" ? false : undefined,
121-
agent_id: agentId
122-
};
123-
return getTopology(apiParams);
124-
},
125-
{
126-
onSettled: () => {
127-
loadingBarRef.current?.complete();
128-
}
129-
}
130-
);
80+
const { data, isLoading, refetch } = useTopologyPageQuery();
13181

13282
const currentTopology = useMemo(() => data?.components?.[0], [data]);
13383

0 commit comments

Comments
 (0)