import React, { ReactNode, useEffect } from 'react' import { Panel, PanelGroup } from 'react-resizable-panels' import { HorizontalResizeHandle } from '@/features/ide-react/components/resize/horizontal-resize-handle' import { useTranslation } from 'react-i18next' import { HorizontalToggler } from '@/features/ide-react/components/resize/horizontal-toggler' import useFixedSizeColumn from '@/features/ide-react/hooks/use-fixed-size-column' import useCollapsiblePanel from '@/features/ide-react/hooks/use-collapsible-panel' type TwoColumnMainContentProps = { leftColumnId: string leftColumnContent: ReactNode leftColumnDefaultSize: number setLeftColumnDefaultSize: React.Dispatch> rightColumnContent: ReactNode leftColumnIsOpen: boolean setLeftColumnIsOpen: ( leftColumnIsOpen: TwoColumnMainContentProps['leftColumnIsOpen'] ) => void shouldPersistLayout?: boolean } export default function TwoColumnMainContent({ leftColumnId, leftColumnContent, leftColumnDefaultSize, setLeftColumnDefaultSize, rightColumnContent, leftColumnIsOpen, setLeftColumnIsOpen, shouldPersistLayout = false, }: TwoColumnMainContentProps) { const { t } = useTranslation() const { fixedPanelRef: leftColumnPanelRef, fixedPanelWidthRef: leftColumnWidthRef, handleLayout, } = useFixedSizeColumn(leftColumnDefaultSize, leftColumnIsOpen) useCollapsiblePanel(leftColumnIsOpen, leftColumnPanelRef) // Update the left column default size on unmount rather than doing it on // every resize, which causes ResizeObserver errors useEffect(() => { if (leftColumnWidthRef.current) { setLeftColumnDefaultSize(leftColumnWidthRef.current.size) } }, [leftColumnWidthRef, setLeftColumnDefaultSize]) return ( setLeftColumnIsOpen(!collapsed)} > {leftColumnIsOpen ? leftColumnContent : null} setLeftColumnIsOpen(isOpen)} tooltipWhenOpen={t('tooltip_hide_filetree')} tooltipWhenClosed={t('tooltip_show_filetree')} /> {rightColumnContent} ) }