diff --git a/src/context/sort-context.ts b/src/context/sort-context.ts new file mode 100644 index 0000000..9196235 --- /dev/null +++ b/src/context/sort-context.ts @@ -0,0 +1,27 @@ +import { createContext } from "react" + +export type SortType = "default" | "cpu" | "mem" | "up" | "down" | "up total" | "down total" + +export const SORT_TYPES: SortType[] = [ + "default", + "cpu", + "mem", + "up", + "down", + "up total", + "down total", +] + +export type SortOrder = "asc" | "desc" + +export const SORT_ORDERS: SortOrder[] = [ "desc","asc"] + + +export interface SortContextType { + sortType: SortType + sortOrder: SortOrder + setSortType: (sortType: SortType) => void + setSortOrder: (sortOrder: SortOrder) => void +} + +export const SortContext = createContext(undefined) diff --git a/src/context/sort-provider.tsx b/src/context/sort-provider.tsx new file mode 100644 index 0000000..a250fec --- /dev/null +++ b/src/context/sort-provider.tsx @@ -0,0 +1,14 @@ +import { ReactNode, useState } from "react" + +import { SortContext, SortOrder, SortType } from "./sort-context" + +export function SortProvider({ children }: { children: ReactNode }) { + const [sortType, setSortType] = useState("default") + const [sortOrder, setSortOrder] = useState("desc") + + return ( + + {children} + + ) +} diff --git a/src/hooks/use-sort.tsx b/src/hooks/use-sort.tsx new file mode 100644 index 0000000..4ceaa92 --- /dev/null +++ b/src/hooks/use-sort.tsx @@ -0,0 +1,10 @@ +import { SortContext } from "@/context/sort-context" +import { useContext } from "react" + +export function useSort() { + const context = useContext(SortContext) + if (context === undefined) { + throw new Error("useStatus must be used within a SortProvider") + } + return context +} diff --git a/src/main.tsx b/src/main.tsx index ab8b1b1..ba8f264 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -7,6 +7,7 @@ import { Toaster } from "sonner" import App from "./App" import { ThemeProvider } from "./components/ThemeProvider" import { MotionProvider } from "./components/motion/motion-provider" +import { SortProvider } from "./context/sort-provider" import { StatusProvider } from "./context/status-provider" import { TooltipProvider } from "./context/tooltip-provider" import { WebSocketProvider } from "./context/websocket-provider" @@ -22,21 +23,23 @@ ReactDOM.createRoot(document.getElementById("root")!).render( - - - - - + + + + + + + diff --git a/src/pages/Server.tsx b/src/pages/Server.tsx index 3fe41ff..efe1920 100644 --- a/src/pages/Server.tsx +++ b/src/pages/Server.tsx @@ -7,6 +7,8 @@ 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 { useSort } from "@/hooks/use-sort" import { useStatus } from "@/hooks/use-status" import { useWebSocketContext } from "@/hooks/use-websocket-context" import { fetchServerGroup } from "@/lib/nezha-api" @@ -21,6 +23,7 @@ import { toast } from "sonner" export default function Servers() { const { t } = useTranslation() + const { sortType,sortOrder,setSortOrder,setSortType } = useSort() const { data: groupData } = useQuery({ queryKey: ["server-group"], queryFn: () => fetchServerGroup(), @@ -211,41 +214,39 @@ export default function Servers() {
- - - - - - - - + {SORT_TYPES.map((type) => ( + + ))}
- - + {SORT_ORDERS.map((order) => ( + + ))}