Skip to content

Commit 3cff02e

Browse files
committed
removed logic of localStorage
Signed-off-by: antedotee <[email protected]>
1 parent e85c888 commit 3cff02e

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

frontend/src/components/Layout.tsx

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,27 @@
1-
import { Suspense, lazy, useEffect, useState } from 'react';
1+
import { Suspense, lazy, useEffect, useState, useCallback, createContext, useContext } from 'react';
22
import { Outlet, ScrollRestoration, useLocation } from 'react-router-dom';
33
import { Tooltip } from '@mui/material';
44
import Header from './Header';
55
import useTheme from '../stores/themeStore';
66
import { motion, AnimatePresence } from 'framer-motion';
77
import getThemeStyles from '../lib/theme-utils';
88

9+
// Context for tree view sidebar state
10+
interface TreeViewSidebarContextType {
11+
isTreeViewSidebarCollapsed: boolean;
12+
toggleTreeViewSidebar: () => void;
13+
}
14+
15+
const TreeViewSidebarContext = createContext<TreeViewSidebarContextType | undefined>(undefined);
16+
17+
export const useTreeViewSidebar = () => {
18+
const context = useContext(TreeViewSidebarContext);
19+
if (!context) {
20+
throw new Error('useTreeViewSidebar must be used within a TreeViewSidebarProvider');
21+
}
22+
return context;
23+
};
24+
925
// Lazy load less critical components
1026
const Menu = lazy(() => import('./menu/Menu'));
1127
const Footer = lazy(() => import('./Footer'));
@@ -62,6 +78,7 @@ export function Layout() {
6278
const [isLoading, setIsLoading] = useState(true);
6379
const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false);
6480
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
81+
const [isTreeViewSidebarCollapsed, setIsTreeViewSidebarCollapsed] = useState(true);
6582
const location = useLocation();
6683
const { theme } = useTheme();
6784
const isDark = theme === 'dark';
@@ -90,6 +107,11 @@ export function Layout() {
90107
setIsSidebarCollapsed(!isSidebarCollapsed);
91108
};
92109

110+
// Toggle tree view sidebar collapsed state
111+
const toggleTreeViewSidebar = useCallback(() => {
112+
setIsTreeViewSidebarCollapsed(prev => !prev);
113+
}, []);
114+
93115
// Toggle mobile menu state
94116
const toggleMobileMenu = () => {
95117
setIsMobileMenuOpen(!isMobileMenuOpen);
@@ -266,9 +288,16 @@ export function Layout() {
266288
>
267289
<Suspense fallback={<LoadingPlaceholder />}>
268290
<PageTransition>
269-
<div className="mx-auto max-w-full">
270-
<Outlet />
271-
</div>
291+
<TreeViewSidebarContext.Provider
292+
value={{
293+
isTreeViewSidebarCollapsed,
294+
toggleTreeViewSidebar,
295+
}}
296+
>
297+
<div className="mx-auto max-w-full">
298+
<Outlet />
299+
</div>
300+
</TreeViewSidebarContext.Provider>
272301
</PageTransition>
273302
</Suspense>
274303
</motion.main>

frontend/src/components/TreeViewComponent.tsx

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useState, useCallback, useRef, useEffect, memo } from 'react';
22
import { Box, Alert, Snackbar } from '@mui/material';
33
import useTheme from '../stores/themeStore';
4+
import { useTreeViewSidebar } from './Layout';
45
import ContextDropdown from './ContextDropdown';
56
import CreateOptions from './CreateOptions';
67
import TreeViewHeader from './treeView/TreeViewHeader';
@@ -24,6 +25,7 @@ interface TreeViewComponentProps {
2425

2526
const TreeViewComponent = memo<TreeViewComponentProps>(props => {
2627
const theme = useTheme(state => state.theme);
28+
const { isTreeViewSidebarCollapsed, toggleTreeViewSidebar } = useTreeViewSidebar();
2729

2830
// State management
2931
const [showCreateOptions, setShowCreateOptions] = useState(false);
@@ -37,11 +39,6 @@ const TreeViewComponent = memo<TreeViewComponentProps>(props => {
3739
groupItems?: TreeResourceItem[];
3840
initialTab?: number;
3941
} | null>(null);
40-
// Initialize sidebar collapsed state with persistence
41-
const [isCollapsed, setIsCollapsed] = useState<boolean>(() => {
42-
const saved = localStorage.getItem('treeViewSidebarCollapsed');
43-
return saved !== null ? JSON.parse(saved) : true; // Default to collapsed
44-
});
4542
const [isExpanded, setIsExpanded] = useState<boolean>(true);
4643
const [isFullscreen, setIsFullscreen] = useState<boolean>(false);
4744
const [filteredContext, setFilteredContext] = useState<string>('all');
@@ -86,7 +83,7 @@ const TreeViewComponent = memo<TreeViewComponentProps>(props => {
8683
getDescendantEdges,
8784
} = useTreeViewData({
8885
filteredContext,
89-
isCollapsed,
86+
isCollapsed: isTreeViewSidebarCollapsed,
9087
isExpanded,
9188
onNodeSelect: handleNodeSelect,
9289
onMenuOpen: handleMenuOpen || (() => {}),
@@ -146,14 +143,6 @@ const TreeViewComponent = memo<TreeViewComponentProps>(props => {
146143
setActiveOption('option1');
147144
}, []);
148145

149-
// Collapse/Expand handlers
150-
const handleToggleCollapse = useCallback(() => {
151-
setIsCollapsed(prev => {
152-
const newState = !prev;
153-
localStorage.setItem('treeViewSidebarCollapsed', JSON.stringify(newState));
154-
return newState;
155-
});
156-
}, []);
157146

158147
const handleExpandAll = useCallback(() => {
159148
setIsExpanded(true);
@@ -253,10 +242,10 @@ const TreeViewComponent = memo<TreeViewComponentProps>(props => {
253242
filteredContext={filteredContext}
254243
onCreateWorkload={handleCreateWorkloadClick}
255244
onResourceDataChange={handleResourceDataChange}
256-
onToggleCollapse={handleToggleCollapse}
245+
onToggleCollapse={toggleTreeViewSidebar}
257246
onExpandAll={handleExpandAll}
258247
onCollapseAll={handleCollapseAll}
259-
isCollapsed={isCollapsed}
248+
isCollapsed={isTreeViewSidebarCollapsed}
260249
containerRef={containerRef}
261250
resourceFilters={resourceFilters}
262251
onResourceFiltersChange={handleResourceFiltersChange}

0 commit comments

Comments
 (0)