diff --git a/src/components/proxy-group.tsx b/src/components/proxy-group.tsx
index 090539a..e901c77 100644
--- a/src/components/proxy-group.tsx
+++ b/src/components/proxy-group.tsx
@@ -1,15 +1,12 @@
import { useState } from "react";
import { Virtuoso } from "react-virtuoso";
import {
- alpha,
Box,
Collapse,
Divider,
IconButton,
List,
ListItem,
- ListItemButton,
- ListItemIcon,
ListItemText,
} from "@mui/material";
import {
@@ -18,53 +15,11 @@ import {
ExpandMoreRounded,
MyLocationRounded,
NetworkCheckRounded,
- CheckCircleOutlineRounded,
} from "@mui/icons-material";
import { updateProxy } from "../services/api";
import { ApiType } from "../services/types";
import { getProfiles, patchProfile } from "../services/cmds";
-
-interface ItemProps {
- proxy: ApiType.ProxyItem;
- selected: boolean;
- onClick?: (name: string) => void;
-}
-
-const Item = ({ proxy, selected, onClick }: ItemProps) => {
- return (
-
- onClick?.(proxy.name)}
- sx={[
- {
- borderRadius: 1,
- },
- ({ palette: { mode, primary } }) => {
- const bgcolor =
- mode === "light"
- ? alpha(primary.main, 0.15)
- : alpha(primary.main, 0.35);
- const color = mode === "light" ? primary.main : primary.light;
-
- return {
- "&.Mui-selected": { bgcolor },
- "&.Mui-selected .MuiListItemText-secondary": { color },
- };
- },
- ]}
- >
-
-
- {selected && }
-
-
-
- );
-};
+import ProxyItem from "./proxy-item";
interface Props {
group: ApiType.ProxyGroupItem;
@@ -146,9 +101,10 @@ const ProxyGroup = ({ group }: Props) => {
style={{ height: "400px", marginBottom: "4px" }}
totalCount={proxies.length}
itemContent={(index) => (
-
)}
@@ -160,10 +116,11 @@ const ProxyGroup = ({ group }: Props) => {
sx={{ maxHeight: "400px", overflow: "auto", mb: "4px" }}
>
{proxies.map((proxy) => (
-
))}
diff --git a/src/components/proxy-item.tsx b/src/components/proxy-item.tsx
new file mode 100644
index 0000000..6e90a2c
--- /dev/null
+++ b/src/components/proxy-item.tsx
@@ -0,0 +1,58 @@
+import { CheckCircleOutlineRounded } from "@mui/icons-material";
+import {
+ alpha,
+ ListItem,
+ ListItemButton,
+ ListItemIcon,
+ ListItemText,
+ SxProps,
+ Theme,
+} from "@mui/material";
+import { ApiType } from "../services/types";
+
+interface Props {
+ proxy: ApiType.ProxyItem;
+ selected: boolean;
+ sx?: SxProps;
+ onClick?: (name: string) => void;
+}
+
+const ProxyItem = (props: Props) => {
+ const { proxy, selected, sx, onClick } = props;
+
+ return (
+
+ onClick?.(proxy.name)}
+ sx={[
+ {
+ borderRadius: 1,
+ },
+ ({ palette: { mode, primary } }) => {
+ const bgcolor =
+ mode === "light"
+ ? alpha(primary.main, 0.15)
+ : alpha(primary.main, 0.35);
+ const color = mode === "light" ? primary.main : primary.light;
+
+ return {
+ "&.Mui-selected": { bgcolor },
+ "&.Mui-selected .MuiListItemText-secondary": { color },
+ };
+ },
+ ]}
+ >
+
+
+ {selected && }
+
+
+
+ );
+};
+
+export default ProxyItem;
diff --git a/src/pages/proxy.tsx b/src/pages/proxy.tsx
index 6e2fc86..02e5b0f 100644
--- a/src/pages/proxy.tsx
+++ b/src/pages/proxy.tsx
@@ -3,11 +3,12 @@ import { useEffect } from "react";
import { Box, List, Paper, Typography } from "@mui/material";
import { getProxies } from "../services/api";
import ProxyGroup from "../components/proxy-group";
+import ProxyItem from "../components/proxy-item";
const ProxyPage = () => {
const { mutate } = useSWRConfig();
const { data: proxiesData } = useSWR("getProxies", getProxies);
- const { groups = [] } = proxiesData ?? {};
+ const { groups = [], proxies = [] } = proxiesData ?? {};
useEffect(() => {
// fix the empty proxies on the first sight
@@ -20,18 +21,31 @@ const ProxyPage = () => {
return (
- Proxy Groups
+ {groups.length ? "Proxy Groups" : "Proxies"}
- {groups.length > 0 && (
-
+
+ {groups.length > 0 && (
{groups.map((group) => (
))}
-
- )}
+ )}
+
+ {!groups.length && (
+
+ {Object.values(proxies).map((proxy) => (
+
+ ))}
+
+ )}
+
);
};