'use client'; import { useTranslations } from 'next-intl'; import { useCallback, useEffect, useState } from 'react'; import { TabBar } from '@/components/accounting/tab-bar'; import { SettingsSection } from '@/components/control-center/settings-section'; import { PageHeader } from '@/components/layout/page-header'; import { getNextcloudFilesStatus, type NextcloudFilesStatus } from '@/lib/nextcloud-files-api'; import { useCanManageModule } from '@/lib/use-module-capability'; import { AccountBar } from './components/AccountBar'; import { ConnectPanel } from './components/ConnectPanel'; import { FileBrowser } from './components/FileBrowser'; import { SettingsTab } from './components/SettingsTab'; type TabId = 'files' | 'settings'; /** * Dateien (quick-261008-mzu): die Nextcloud-Dateien jedes Benutzers in Tessera. * Die Adresse der Nextcloud stellen Administratoren und Benutzer mit der * Freigabestufe Verwalten im Reiter "Einstellungen" ein; alle anderen sehen nur * den Reiter "Dateien" ohne Reiterleiste — bindend ist allein die API. Im * Abschnitt `nextcloud-files-main` verbindet jeder Benutzer sein eigenes Konto * (ConnectPanel); ist es verbunden, steht dort die Dateiansicht * (`nextcloud-files-browser`, FileBrowser). Laeuft die Verbindung ab, laedt die * Seite den Stand neu und zeigt wieder den Anmeldebildschirm mit Hinweis. */ export default function NextcloudFilesPage() { const t = useTranslations('nextcloudFiles'); const canManage = useCanManageModule('nextcloud-files') === true; const [status, setStatus] = useState(null); const [statusError, setStatusError] = useState(false); const [tab, setTab] = useState('files'); const reloadStatus = useCallback(async () => { try { setStatus(await getNextcloudFilesStatus()); setStatusError(false); } catch { setStatusError(true); } }, []); useEffect(() => { void reloadStatus(); }, [reloadStatus]); const account = status?.account ?? null; const connected = account?.connected === true; const tabs: { id: TabId; label: string }[] = [{ id: 'files', label: t('tabs.files') }]; if (canManage) tabs.push({ id: 'settings', label: t('tabs.settings') }); const activeTab: TabId = tabs.some((x) => x.id === tab) ? tab : 'files'; return (
) : undefined } /> {statusError && (

{t('errors.loadStatus')}

)} {canManage && } {activeTab === 'files' && status && !status.configured && (

{canManage ? t('notConfigured.managerHint') : t('notConfigured.userHint')}

{canManage && ( )}
)} {activeTab === 'files' && status?.configured && (
{connected ? (
void reloadStatus()} />
) : ( )}
)} {activeTab === 'settings' && canManage && ( void reloadStatus()} /> )}
); }