import { CloseOutlined } from '@ant-design/icons'; import { Drawer, Tooltip } from 'antd'; import { useEffect } from 'react'; import { IS_CLOUD } from '../../constants'; import { type DiskUsage } from '../../entity/disk'; import { type UserProfile, UserRole } from '../../entity/users'; import { useIsMobile } from '../../shared/hooks'; import { useTheme } from '../../shared/theme'; import { StarButtonComponent } from '../../shared/ui/StarButtonComponent'; import { ThemeToggleComponent } from '../../shared/ui/ThemeToggleComponent'; interface TabItem { text: string; name: string; icon: string; selectedIcon: string; onClick: () => void; isAdminOnly: boolean; marginTop: string; isVisible: boolean; } interface Props { isOpen: boolean; onClose: () => void; selectedTab: string; tabs: TabItem[]; user?: UserProfile; diskUsage?: DiskUsage; contentHeight: number; } export const SidebarComponent = ({ isOpen, onClose, selectedTab, tabs, user, diskUsage, contentHeight, }: Props) => { const isMobile = useIsMobile(); const { resolvedTheme } = useTheme(); // Close sidebar on desktop when it becomes desktop size useEffect(() => { if (!isMobile && isOpen) { onClose(); } }, [isMobile, isOpen, onClose]); // Prevent background scrolling when mobile sidebar is open useEffect(() => { if (isMobile && isOpen) { document.body.style.overflowY = 'hidden'; return () => { document.body.style.overflowY = ''; }; } }, [isMobile, isOpen]); const isUsedMoreThan95Percent = diskUsage && diskUsage.usedSpaceBytes / diskUsage.totalSpaceBytes > 0.95; const filteredTabs = tabs .filter((tab) => !tab.isAdminOnly || user?.role === UserRole.ADMIN) .filter((tab) => tab.isVisible); const handleTabClick = (tab: TabItem) => { tab.onClick(); if (isMobile) { onClose(); } }; if (!isMobile) { return (