diff --git a/src/pages/connections.tsx b/src/pages/connections.tsx index 759c376..ece2bfe 100644 --- a/src/pages/connections.tsx +++ b/src/pages/connections.tsx @@ -1,53 +1,42 @@ import { useEffect, useMemo, useState } from "react"; import { useLockFn } from "ahooks"; -import { Box, Button, ButtonGroup, Paper, TextField } from "@mui/material"; +import { Box, Button, MenuItem, Paper, Select, TextField } from "@mui/material"; import { Virtuoso } from "react-virtuoso"; import { useTranslation } from "react-i18next"; import { closeAllConnections, getInformation } from "@/services/api"; import BasePage from "@/components/base/base-page"; -import ConnectionItem from "@/components/connection/connection-item"; import BaseEmpty from "@/components/base/base-empty"; +import ConnectionItem from "@/components/connection/connection-item"; const initConn = { uploadTotal: 0, downloadTotal: 0, connections: [] }; -type IOderOpts = { - [key in string]: { - orderFunc( - connections: ApiType.ConnectionsItem[] - ): ApiType.ConnectionsItem[]; - }; -}; +type OrderFunc = (list: ApiType.ConnectionsItem[]) => ApiType.ConnectionsItem[]; const ConnectionsPage = () => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const [filterText, setFilterText] = useState(""); + const [curOrderOpt, setOrderOpt] = useState("Default"); const [connData, setConnData] = useState(initConn); + const orderOpts: Record = { + Default: (list) => list, + // "Download Traffic": (list) => list, + // "Upload Traffic": (list) => list, + "Upload Speed": (list) => list.sort((a, b) => b.curUpload! - a.curUpload!), + "Download Speed": (list) => + list.sort((a, b) => b.curDownload! - a.curDownload!), + }; + const filterConn = useMemo(() => { - return connData.connections.filter((conn) => + const orderFunc = orderOpts[curOrderOpt]; + const connetions = connData.connections.filter((conn) => (conn.metadata.host || conn.metadata.destinationIP)?.includes(filterText) ); - }, [connData, filterText]); - const orderOpts: IOderOpts = { - Default: { - orderFunc: (list) => list, - }, - // "Download Traffic": { - // orderFunc: (list) => list, - // }, - // "Upload Traffic": { - // orderFunc: (list) => list, - // }, - "Download Speed": { - orderFunc: (list) => list.sort((a, b) => b.curDownload! - a.curDownload!), - }, - "Upload Speed": { - orderFunc: (list) => list.sort((a, b) => b.curUpload! - a.curUpload!), - }, - }; - const [curOrderOpt, setOrderOpt] = useState("Default"); + if (orderFunc) return orderFunc(connetions); + return connetions; + }, [connData, filterText, curOrderOpt]); useEffect(() => { let ws: WebSocket | null = null; @@ -88,19 +77,13 @@ const ConnectionsPage = () => { } } - const orderedConnections = - orderOpts[curOrderOpt].orderFunc(connections); - - return { - ...data, - connections: orderedConnections, - }; + return { ...data, connections }; }); }); }); return () => ws?.close(); - }, [curOrderOpt]); + }, []); const onCloseAll = useLockFn(closeAllConnections); @@ -130,17 +113,23 @@ const ConnectionsPage = () => { alignItems: "center", }} > - {/* */} + {Object.keys(orderOpts).map((opt) => ( + + {t(opt)} + + ))} + { /> - - - {Object.keys(orderOpts).map((opt) => ( - - ))} - - - - + {filterConn.length > 0 ? (