mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 17:19:37 +02:00
* feat: integrate main layout, toolbar, and rail from redesign into main ide-react folder * feat: remove additional files no longer used after ide redesign GitOrigin-RevId: 8fd77f63cb9c67be91995a9dde13b0fe2376d80f
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import { Panel } from 'react-resizable-panels'
|
|
import { useRailContext } from '@/features/ide-react/context/rail-context'
|
|
import classNames from 'classnames'
|
|
import { useCallback, useMemo } from 'react'
|
|
import usePreviousValue from '@/shared/hooks/use-previous-value'
|
|
import { HistorySidebar } from '@/features/ide-react/components/history-sidebar'
|
|
import { Tab } from 'react-bootstrap'
|
|
import { RailElement } from '@/features/ide-react/util/rail-types'
|
|
import { shouldIncludeElement } from '@/features/ide-react/util/rail-utils'
|
|
|
|
export default function RailPanel({
|
|
isReviewPanelOpen,
|
|
isHistoryView,
|
|
railTabs,
|
|
}: {
|
|
isReviewPanelOpen: boolean
|
|
isHistoryView: boolean
|
|
railTabs: RailElement[]
|
|
}) {
|
|
const { selectedTab, panelRef, handlePaneExpand, handlePaneCollapse } =
|
|
useRailContext()
|
|
|
|
const prevTab = usePreviousValue(selectedTab)
|
|
|
|
const tabHasChanged = useMemo(() => {
|
|
return prevTab !== selectedTab
|
|
}, [prevTab, selectedTab])
|
|
|
|
const onCollapse = useCallback(() => {
|
|
if (!tabHasChanged) {
|
|
handlePaneCollapse()
|
|
}
|
|
}, [tabHasChanged, handlePaneCollapse])
|
|
|
|
return (
|
|
<Panel
|
|
id={`ide-redesign-sidebar-panel-${isHistoryView ? 'file-tree' : selectedTab}`}
|
|
className={classNames({ hidden: isReviewPanelOpen })}
|
|
order={1}
|
|
defaultSize={selectedTab === 'workbench' ? 20 : 15}
|
|
minSize={5}
|
|
maxSize={80}
|
|
ref={panelRef}
|
|
collapsible
|
|
onCollapse={onCollapse}
|
|
onExpand={handlePaneExpand}
|
|
>
|
|
{isHistoryView && <HistorySidebar />}
|
|
<div
|
|
className={classNames('ide-rail-content', {
|
|
hidden: isHistoryView,
|
|
})}
|
|
>
|
|
<Tab.Content className="ide-rail-tab-content">
|
|
{railTabs
|
|
.filter(shouldIncludeElement)
|
|
.map(({ key, component, mountOnFirstLoad }) => (
|
|
<Tab.Pane
|
|
eventKey={key}
|
|
key={key}
|
|
mountOnEnter={!mountOnFirstLoad}
|
|
>
|
|
{component}
|
|
</Tab.Pane>
|
|
))}
|
|
</Tab.Content>
|
|
</div>
|
|
</Panel>
|
|
)
|
|
}
|