diff --git a/services/web/frontend/js/features/ide-redesign/components/rail.tsx b/services/web/frontend/js/features/ide-redesign/components/rail.tsx
index 1f9bb0b0aa..42374583ab 100644
--- a/services/web/frontend/js/features/ide-redesign/components/rail.tsx
+++ b/services/web/frontend/js/features/ide-redesign/components/rail.tsx
@@ -55,6 +55,7 @@ type RailElement = {
title: string
hide?: boolean
disabled?: boolean
+ mountOnFirstLoad?: boolean
}
type RailActionButton = {
@@ -123,6 +124,9 @@ export const RailLayout = () => {
icon: 'description',
title: t('file_tree'),
component: ,
+ // NOTE: We always need to mount the file tree on first load
+ // since it is responsible for opening the initial document.
+ mountOnFirstLoad: true,
},
{
key: 'full-project-search',
@@ -300,8 +304,12 @@ export const RailLayout = () => {
{railTabs
.filter(({ hide }) => !hide)
- .map(({ key, component }) => (
-
+ .map(({ key, component, mountOnFirstLoad }) => (
+
{component}
))}
diff --git a/services/web/frontend/js/features/ide-redesign/contexts/rail-context.tsx b/services/web/frontend/js/features/ide-redesign/contexts/rail-context.tsx
index 47d30f8cee..a98d3693c5 100644
--- a/services/web/frontend/js/features/ide-redesign/contexts/rail-context.tsx
+++ b/services/web/frontend/js/features/ide-redesign/contexts/rail-context.tsx
@@ -69,9 +69,10 @@ export const RailProvider: FC = ({ children }) => {
setIsOpen(false)
}, [setIsOpen])
- // NOTE: The file tree **MUST** be the first tab to be opened
- // since it is responsible for opening the initial document.
- const [selectedTab, setSelectedTab] = useState('file-tree')
+ const [selectedTab, setSelectedTab] = usePersistedState(
+ 'selected-rail-tab',
+ 'file-tree'
+ )
// Keep the panel collapse/expanded state in sync with isOpen and selectedTab
useLayoutEffect(() => {