From cbbd69bbc74f438ead30522724f41cc3f39ee5fa Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Sun, 15 Dec 2024 23:31:28 +0800 Subject: [PATCH] feat: server list sort --- src/context/sort-context.ts | 6 ++--- src/pages/Server.tsx | 46 ++++++++++++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/context/sort-context.ts b/src/context/sort-context.ts index 9196235..bb7046e 100644 --- a/src/context/sort-context.ts +++ b/src/context/sort-context.ts @@ -1,11 +1,12 @@ import { createContext } from "react" -export type SortType = "default" | "cpu" | "mem" | "up" | "down" | "up total" | "down total" +export type SortType = "default" | "cpu" | "mem" | "stg" | "up" | "down" | "up total" | "down total" export const SORT_TYPES: SortType[] = [ "default", "cpu", "mem", + "stg", "up", "down", "up total", @@ -14,8 +15,7 @@ export const SORT_TYPES: SortType[] = [ export type SortOrder = "asc" | "desc" -export const SORT_ORDERS: SortOrder[] = [ "desc","asc"] - +export const SORT_ORDERS: SortOrder[] = ["desc", "asc"] export interface SortContextType { sortType: SortType diff --git a/src/pages/Server.tsx b/src/pages/Server.tsx index efe1920..c9245b6 100644 --- a/src/pages/Server.tsx +++ b/src/pages/Server.tsx @@ -7,7 +7,7 @@ import { ServiceTracker } from "@/components/ServiceTracker" import { Loader } from "@/components/loading/Loader" import { Label } from "@/components/ui/label" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" -import { forEachSortType, SORT_ORDERS, SORT_TYPES } from "@/context/sort-context" +import { SORT_ORDERS, SORT_TYPES } from "@/context/sort-context" import { useSort } from "@/hooks/use-sort" import { useStatus } from "@/hooks/use-status" import { useWebSocketContext } from "@/hooks/use-websocket-context" @@ -23,7 +23,7 @@ import { toast } from "sonner" export default function Servers() { const { t } = useTranslation() - const { sortType,sortOrder,setSortOrder,setSortType } = useSort() + const { sortType, sortOrder, setSortOrder, setSortType } = useSort() const { data: groupData } = useQuery({ queryKey: ["server-group"], queryFn: () => fetchServerGroup(), @@ -140,6 +140,45 @@ export default function Servers() { [status].includes(formatNezhaInfo(nezhaWsData.now, server).online ? "online" : "offline"), ) + filteredServers = filteredServers.sort((a, b) => { + const serverAInfo = formatNezhaInfo(nezhaWsData.now, a) + const serverBInfo = formatNezhaInfo(nezhaWsData.now, b) + + if (!serverAInfo.online && serverBInfo.online) return 1 + if (serverAInfo.online && !serverBInfo.online) return -1 + if (!serverAInfo.online && !serverBInfo.online) return 0 + + let comparison = 0 + + switch (sortType) { + case "cpu": + comparison = (a.state?.cpu ?? 0) - (b.state?.cpu ?? 0) + break + case "mem": + comparison = (a.state?.mem_used ?? 0) - (b.state?.mem_used ?? 0) + break + case "stg": + comparison = (a.state?.disk_used ?? 0) - (b.state?.disk_used ?? 0) + break + case "up": + comparison = (a.state?.net_out_speed ?? 0) - (b.state?.net_out_speed ?? 0) + break + case "down": + comparison = (a.state?.net_in_speed ?? 0) - (b.state?.net_in_speed ?? 0) + break + case "up total": + comparison = (a.state?.net_out_transfer ?? 0) - (b.state?.net_out_transfer ?? 0) + break + case "down total": + comparison = (a.state?.net_in_transfer ?? 0) - (b.state?.net_in_transfer ?? 0) + break + default: + comparison = 0 + } + + return sortOrder === "asc" ? comparison : -comparison + }) + return (