From 219fc184ee1fc6ed45cc536863f6ca6532a520ee Mon Sep 17 00:00:00 2001 From: Pierre Hubert Date: Wed, 3 Jan 2024 00:08:57 +0100 Subject: [PATCH] Fix hidden tabs issue --- virtweb_frontend/src/widgets/TabsWidget.tsx | 35 ++++++++++++ .../src/widgets/net/NetworkDetails.tsx | 57 ++++++++++--------- 2 files changed, 65 insertions(+), 27 deletions(-) create mode 100644 virtweb_frontend/src/widgets/TabsWidget.tsx diff --git a/virtweb_frontend/src/widgets/TabsWidget.tsx b/virtweb_frontend/src/widgets/TabsWidget.tsx new file mode 100644 index 0000000..6ef0563 --- /dev/null +++ b/virtweb_frontend/src/widgets/TabsWidget.tsx @@ -0,0 +1,35 @@ +import { Box, Tab, Tabs } from "@mui/material"; + +export interface TabWidgetOption { + label: string; + value: E; + visible: boolean; + color?: string; +} + +export function TabsWidget(p: { + currTab: E; + options: TabWidgetOption[]; + onValueChange: (v: E) => void; +}): React.ReactElement { + const activeOptions = p.options.filter((v) => v.visible); + + const currTabIndex = activeOptions.findIndex((v) => v.value === p.currTab); + + const updateActiveTab = (index: number) => { + p.onValueChange(activeOptions[index].value); + }; + + return ( + + updateActiveTab(newVal)} + > + {activeOptions.map((o, index) => ( + + ))} + + + ); +} diff --git a/virtweb_frontend/src/widgets/net/NetworkDetails.tsx b/virtweb_frontend/src/widgets/net/NetworkDetails.tsx index 4d002ae..b7ede54 100644 --- a/virtweb_frontend/src/widgets/net/NetworkDetails.tsx +++ b/virtweb_frontend/src/widgets/net/NetworkDetails.tsx @@ -14,6 +14,7 @@ import { SelectInput } from "../forms/SelectInput"; import { TextInput } from "../forms/TextInput"; import { DHCPHostReservations } from "./DHCPHostReservations"; import { useNavigate } from "react-router-dom"; +import { TabsWidget } from "../TabsWidget"; interface DetailsProps { net: NetworkInfo; @@ -38,7 +39,7 @@ export function NetworkDetails(p: DetailsProps): React.ReactElement { ); } -enum VMTab { +enum NetTab { General = 0, IPv4, IPv6, @@ -48,36 +49,38 @@ enum VMTab { type DetailsInnerProps = DetailsProps & { cardsList: string[] }; function NetworkDetailsInner(p: DetailsInnerProps): React.ReactElement { - const [currTab, setCurrTab] = React.useState(VMTab.General); + const [currTab, setCurrTab] = React.useState(NetTab.General); return ( <> - - setCurrTab(newVal)}> - + - {(p.editable || p.net.ip_v4) && ( - - )} - - {(p.editable || p.net.ip_v6) && ( - - )} - - {!p.editable && ( - - )} - - - - {currTab === VMTab.General && } - {currTab === VMTab.IPv4 && } - {currTab === VMTab.IPv6 && } - {currTab === VMTab.Danger && } + {currTab === NetTab.General && } + {currTab === NetTab.IPv4 && } + {currTab === NetTab.IPv6 && } + {currTab === NetTab.Danger && } ); }