import { forwardRef, useEffect, useImperativeHandle, useState } from "react"; import { useTranslation } from "react-i18next"; import { BaseDialog, DialogRef, Notice } from "@/components/base"; import { getNetworkInterfacesInfo } from "@/services/cmds"; import { alpha, Box, Button, Chip, IconButton } from "@mui/material"; import { ContentCopyRounded } from "@mui/icons-material"; import { writeText } from "@tauri-apps/api/clipboard"; export const NetworkInterfaceViewer = forwardRef((props, ref) => { const { t } = useTranslation(); const [open, setOpen] = useState(false); const [networkInterfaces, setNetworkInterfaces] = useState< INetworkInterface[] >([]); const [isV4, setIsV4] = useState(true); useImperativeHandle(ref, () => ({ open: () => { setOpen(true); }, close: () => setOpen(false), })); useEffect(() => { if (!open) return; getNetworkInterfacesInfo().then((res) => { console.log(res); setNetworkInterfaces(res); }); }, [open]); return ( {t("Network Interface")} } contentSx={{ width: 450, maxHeight: 330 }} okBtn={t("Save")} cancelBtn={t("Cancel")} onClose={() => setOpen(false)} onCancel={() => setOpen(false)} > {networkInterfaces.map((item) => (

{item.name}

{isV4 && ( <> {item.addr.map( (address) => address.V4 && ( ) )} )} {!isV4 && ( <> {item.addr.map( (address) => address.V6 && ( ) )} )}
))}
); }); const AddressDisplay = (props: { label: string; content: string }) => { const { t } = useTranslation(); return ( {props.label} ({ borderRadius: "8px", padding: "2px", background: palette.mode === "dark" ? alpha(palette.background.paper, 0.3) : alpha(palette.grey[400], 0.3), })} > {props.content} { await writeText(props.content); Notice.success(t("Copy Success")); }} > ); };