import { useState, useEffect } from 'react' import { aclApi, filesApi, type SharedResource } from '../api/client' import { formatBytes } from '../format' import PageHeader from '../components/PageHeader' import { FolderGlyph } from '../components/icons' interface Props { /** Öffnet einen freigegebenen Ordner in der Dateiansicht. */ onOpenFolder: (folderId: string, folderName: string) => void } /** „Geteilt mit mir": alles, worauf man Zugriff bekommen hat, ohne es zu * besitzen. Die Daten liegen weiterhin beim Eigentümer – hier wird nur * darauf verwiesen. */ export default function SharedWithMePage({ onOpenFolder }: Props) { const [items, setItems] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { aclApi.sharedWithMe() .then(d => setItems(d ?? [])) .catch(() => {}) .finally(() => setLoading(false)) }, []) return (
} title="Shared with me" meta="Files and folders other people gave you access to" />
{loading ? (

Loading…

) : items.length === 0 ? (

Nothing shared with you yet

When someone shares a file or folder, it shows up here.

) : (
{items.map(item => (
item.type === 'folder' && onOpenFolder(item.id, item.name)} style={{ display: 'flex', alignItems: 'center', gap: 14, padding: '13px 16px', borderRadius: 11, border: '1px solid var(--color-border)', background: 'var(--color-surface)', cursor: item.type === 'folder' ? 'pointer' : 'default', }} onMouseEnter={e => { if (item.type === 'folder') e.currentTarget.style.borderColor = 'var(--color-primary)' }} onMouseLeave={e => { e.currentTarget.style.borderColor = 'var(--color-border)' }} > {item.type === 'folder' ? ( ) : ( )}
{item.name}
Shared by {item.owner_name} {/* Ohne diesen Hinweis wundert man sich, woher eine Freigabe kommt, die man nie persönlich bekommen hat. */} {item.via_group && ` via ${item.via_group}`} {item.type === 'file' && ` · ${formatBytes(item.size)}`}
{item.permission === 'write' ? 'Can edit' : 'View only'} {item.type === 'file' && ( e.stopPropagation()} style={{ flexShrink: 0, padding: '5px 12px', borderRadius: 7, border: '1px solid var(--color-border)', color: 'var(--color-text)', fontSize: 12, textDecoration: 'none', }} > Download )}
))}
)}
) }