diff --git a/frontend/src/components/home/Tree/Server.tsx b/frontend/src/components/home/Tree/Server.tsx index 25844e435..a8c6fa045 100644 --- a/frontend/src/components/home/Tree/Server.tsx +++ b/frontend/src/components/home/Tree/Server.tsx @@ -13,8 +13,8 @@ import Loading from "../../shared/loading/Loading"; import { useNavigate } from "@solidjs/router"; import { PermissionLevel, ServerStatus } from "../../../types"; import { useAppDimensions } from "../../../state/DimensionProvider"; -import Tabs from "../../shared/tabs/Tabs"; import Build from "./Build"; +import SimpleTabs from "../../shared/tabs/SimpleTabs"; // import StatGraphs from "../../server/StatGraphs/StatGraphs"; const Server: Component<{ id: string }> = (p) => { @@ -131,7 +131,7 @@ const Server: Component<{ id: string }> = (p) => { - JSXElement; + element: () => JSXElement; +}; + +const SimpleTabs: Component<{ + tabs: Tab[]; + defaultSelected?: string; + localStorageKey?: string; + tabsGap?: string; + tabStyle?: JSX.CSSProperties; + containerClass?: string; + containerStyle?: JSX.CSSProperties; +}> = (p) => { + const def = p.defaultSelected ? p.defaultSelected : p.tabs[0].title; + const [selected, set] = p.localStorageKey + ? useLocalStorage(def, p.localStorageKey) + : createSignal(def); + createEffect(() => { + if (p.tabs.filter((tab) => tab.title === selected())[0] === undefined) { + set(p.tabs[0].title); + } + }); + return ; +}; + +export const ControlledTabs: Component<{ + tabs: Tab[]; + selected: Accessor; + set: LocalStorageSetter; + containerClass?: string; + containerStyle?: JSX.CSSProperties; + tabTitlesClass?: string; + tabTitlesStyle?: JSX.CSSProperties; + tabTitleGap?: string; + tabTitleClass?: string; + tabTitleStyle?: JSX.CSSProperties; + tabContentClass?: string; +}> = (p) => { + const current = () => p.tabs.findIndex((tab) => tab.title === p.selected()); + const getTitleClassName = (title: string) => + p.selected() === title + ? combineClasses(s.TabTitle, s.Active, p.tabTitleClass) + : combineClasses(s.TabTitle, p.tabTitleClass); + return ( +
+ + + {(tab) => ( + + )} + + +
+ {p.tabs[current()].element()} +
+
+ ); +}; + +export default SimpleTabs;