Skip to content

Commit

Permalink
Support clicking on an active tab button to close the tab.
Browse files Browse the repository at this point in the history
  • Loading branch information
junhaoliao committed Sep 18, 2024
1 parent 4e046fe commit 74328ca
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import {

interface TooltipTabProps {
tabName: TAB_NAME,
Icon: SvgIconComponent
Icon: SvgIconComponent,
onTabButtonClick: (tabName: TAB_NAME) => void
}

/**
Expand All @@ -22,9 +23,14 @@ interface TooltipTabProps {
* @param props
* @param props.tabName
* @param props.Icon
* @param props.onTabButtonClick
* @return
*/
const TooltipTab = ({tabName, Icon}: TooltipTabProps) => {
const TooltipTab = ({tabName, Icon, onTabButtonClick}: TooltipTabProps) => {
const handleClick = () => {
onTabButtonClick(tabName);
};

return (
<Tooltip
arrow={true}
Expand All @@ -36,6 +42,7 @@ const TooltipTab = ({tabName, Icon}: TooltipTabProps) => {
className={"sidebar-tab-button"}
color={"neutral"}
indicatorPlacement={"left"}
slotProps={{root: {onClick: handleClick}}}
value={tabName}
>
<Icon className={"sidebar-tab-button-icon"}/>
Expand Down
18 changes: 8 additions & 10 deletions new-log-viewer/src/components/SidebarContainer/PanelTabs/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, {
import {
forwardRef,
useState,
} from "react";
Expand All @@ -20,7 +20,6 @@ import TooltipTab from "./TooltipTab";
interface PanelTabsProps {
activeTabName: TAB_NAME,
onActiveTabNameChange: (newValue: TAB_NAME) => void,
onPanelTabOpen: () => void,
}

/**
Expand All @@ -33,7 +32,6 @@ const PanelTabs = forwardRef<HTMLDivElement, PanelTabsProps>((
{
activeTabName,
onActiveTabNameChange,
onPanelTabOpen,
},
tabListRef
) => {
Expand All @@ -43,14 +41,13 @@ const PanelTabs = forwardRef<HTMLDivElement, PanelTabsProps>((
setIsSettingsModalOpen(false);
};

const handleTabChange = (__: React.SyntheticEvent | null, value: number | string | null) => {
switch (value) {
const handleTabButtonClick = (tabName: TAB_NAME) => {
switch (tabName) {
case TAB_NAME.SETTINGS:
setIsSettingsModalOpen(true);
break;
default:
onActiveTabNameChange(value as TAB_NAME);
onPanelTabOpen();
onActiveTabNameChange(tabName as TAB_NAME);
}
};

Expand All @@ -61,7 +58,6 @@ const PanelTabs = forwardRef<HTMLDivElement, PanelTabsProps>((
orientation={"vertical"}
value={activeTabName}
variant={"plain"}
onChange={handleTabChange}
>
<TabList
ref={tabListRef}
Expand All @@ -73,12 +69,14 @@ const PanelTabs = forwardRef<HTMLDivElement, PanelTabsProps>((
<TooltipTab
Icon={Icon}
key={tabName}
tabName={tabName}/>
tabName={tabName}
onTabButtonClick={handleTabButtonClick}/>
))}
<div className={"sidebar-tab-list-spacing"}/>
<TooltipTab
Icon={SettingsOutlinedIcon}
tabName={TAB_NAME.SETTINGS}/>
tabName={TAB_NAME.SETTINGS}
onTabButtonClick={handleTabButtonClick}/>
</TabList>
<FileInfoTab/>
</Tabs>
Expand Down
28 changes: 22 additions & 6 deletions new-log-viewer/src/components/SidebarContainer/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,32 @@ const SidebarContainer = ({children}: SidebarContainerProps) => {

const tabListRef = useRef<HTMLDivElement>(null);

const handlePanelTabOpen = useCallback(() => {
const hidePanelAndResizeHandle = () => {
setActiveTabName(TAB_NAME.NONE);
document.body.style.setProperty("--ylv-panel-resize-handle-width", "0px");
};

const handleActiveTabNameChange = useCallback((tabName: TAB_NAME) => {
if (null === tabListRef.current) {
console.error("Unexpected null tabListRef.current");

return;
}

if (activeTabName === tabName) {
hidePanelAndResizeHandle();
setPanelWidth(tabListRef.current.clientWidth);

return;
}
setActiveTabName(tabName);
setPanelWidth(PANEL_DEFAULT_WIDTH_IN_PIXEL);
document.body.style.setProperty("--ylv-panel-resize-handle-width", "3px");
}, []);
}, [activeTabName]);

const handleResizeHandleRelease = useCallback(() => {
if (panelWidth === tabListRef.current?.clientWidth) {
setActiveTabName(TAB_NAME.NONE);
document.body.style.setProperty("--ylv-panel-resize-handle-width", "0px");
hidePanelAndResizeHandle();
}
}, [panelWidth]);

Expand Down Expand Up @@ -69,8 +86,7 @@ const SidebarContainer = ({children}: SidebarContainerProps) => {
<PanelTabs
activeTabName={activeTabName}
ref={tabListRef}
onActiveTabNameChange={setActiveTabName}
onPanelTabOpen={handlePanelTabOpen}/>
onActiveTabNameChange={handleActiveTabNameChange}/>
<ResizeHandle
onHandleRelease={handleResizeHandleRelease}
onResize={handleResize}/>
Expand Down

0 comments on commit 74328ca

Please sign in to comment.