// Copyright (C) The Arvados Authors. All rights reserved. // // SPDX-License-Identifier: AGPL-3.0 import React, { ReactElement, useEffect, useState } from "react"; import { Tabs, Tab } from "@material-ui/core"; import { TabsProps } from "@material-ui/core/Tabs"; interface ComponentWithHidden { hidden: boolean; }; export type TabData = { show: boolean; label: string; content: ReactElement; }; type ConditionalTabsProps = { tabs: TabData[]; }; export const ConditionalTabs = (props: Omit & ConditionalTabsProps) => { const [tabState, setTabState] = useState(0); const visibleTabs = props.tabs.filter(tab => tab.show); const visibleTabNames = visibleTabs.map(tab => tab.label).join(); const handleTabChange = (event: React.MouseEvent, value: number) => { setTabState(value); }; // Reset tab to 0 when tab visibility changes // (or if tab set change causes visible set to change) useEffect(() => { setTabState(0); }, [visibleTabNames]); return <> {visibleTabs.map(tab => )} {visibleTabs.map((tab, i) => ( React.cloneElement(tab.content, {key: i, hidden: i !== tabState}) ))} ; };