import { Download, FileUp } from 'lucide-preact'; import { useEffect, useState } from 'preact/hooks'; import type { RecommendedProvider } from '@/lib/backup-recommendations'; import { hasLinkedStorages } from '@/lib/backup-recommendations'; import { t } from '@/lib/i18n'; import { BackupIncludeAttachmentsField } from './BackupIncludeAttachmentsField'; const MOBILE_RECOMMENDATIONS_QUERY = '(max-width: 760px)'; interface BackupOperationsSidebarProps { disableWhileBusy: boolean; exporting: boolean; importing: boolean; exportIncludeAttachments: boolean; selectedProviderId: string | null; recommendedWebDavProviders: RecommendedProvider[]; recommendedS3Providers: RecommendedProvider[]; onExport: () => void; onImport: () => void; onExportIncludeAttachmentsChange: (checked: boolean) => void; onSelectProvider: (providerId: string) => void; } function getDefaultRecommendationsOpen() { if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') { return true; } return !window.matchMedia(MOBILE_RECOMMENDATIONS_QUERY).matches; } export function BackupOperationsSidebar(props: BackupOperationsSidebarProps) { const [recommendationsOpen, setRecommendationsOpen] = useState(getDefaultRecommendationsOpen); const [recommendationsTouched, setRecommendationsTouched] = useState(false); useEffect(() => { if (typeof window === 'undefined' || typeof window.matchMedia !== 'function' || recommendationsTouched) { return; } const media = window.matchMedia(MOBILE_RECOMMENDATIONS_QUERY); const syncOpenState = () => setRecommendationsOpen(!media.matches); syncOpenState(); media.addEventListener('change', syncOpenState); return () => media.removeEventListener('change', syncOpenState); }, [recommendationsTouched]); return ( ); }