/** * Dialog for saving a custom view with selectable components. */ import React, { useState } from 'react'; import { Bookmark, Check, Folder, Filter, Group as GroupIcon, ArrowDownAZ, LayoutGrid } from 'lucide-react'; import { useTranslation } from 'react-i18next'; export interface SaveViewSelection { folder: boolean; viewMode: boolean; filter: boolean; group: boolean; sort: boolean; } interface SaveViewDialogProps { open: boolean; onClose: () => void; onSave: (name: string, selection: SaveViewSelection) => void; hasFilter: boolean; hasGroup: boolean; hasSort: boolean; hasFolder: boolean; } const defaultSelection: SaveViewSelection = { folder: true, viewMode: true, filter: true, group: true, sort: true, }; export function SaveViewDialog({ open, onClose, onSave, hasFilter, hasGroup, hasSort, hasFolder }: SaveViewDialogProps) { const { t } = useTranslation(); const [name, setName] = useState(''); const [selection, setSelection] = useState(defaultSelection); if (!open) return null; const handleSave = () => { if (!name.trim()) return; onSave(name.trim(), selection); setName(''); setSelection(defaultSelection); onClose(); }; const toggle = (key: keyof SaveViewSelection) => { setSelection((prev) => ({ ...prev, [key]: !prev[key] })); }; const options: { key: keyof SaveViewSelection; label: string; icon: React.ReactNode; available: boolean; description: string }[] = [ { key: 'folder', label: 'Ordner-Auswahl', icon: , available: hasFolder, description: 'Aktuell ausgewählte Ordner' }, { key: 'viewMode', label: 'Ansichtsmodus', icon: , available: true, description: 'Liste, Tabelle oder Karten' }, { key: 'filter', label: 'Filter', icon: , available: hasFilter, description: 'Aktive Filterbedingungen' }, { key: 'group', label: 'Gruppierung', icon: , available: hasGroup, description: 'Aktive Gruppierungen' }, { key: 'sort', label: 'Sortierung', icon: , available: hasSort, description: 'Aktive Sortierungen' }, ]; return (
e.stopPropagation()} > {/* Header */}

{t('saveViewDialog.ansichtspeichern')}

{/* Body */}
{/* Name input */}
setName(e.target.value)} placeholder={t('saveViewDialog.zbmeinefirmenkontakte')} autoFocus onKeyDown={(e) => { if (e.key === 'Enter') handleSave(); }} className="w-full px-3 py-2 text-sm border border-secondary-200 rounded-md focus:outline-none focus:border-primary-400 focus:ring-1 focus:ring-primary-300" />
{/* Component selection */}
{options.map((opt) => ( ))}
{/* Footer */}
); }