'use client'; import { useEffect, useRef, useState } from 'react'; import { useTranslations } from 'next-intl'; import type { DashboardTab } from '@/lib/dashboard-api'; interface DashboardTabsProps { dashboards: DashboardTab[]; activeDashboardId: string | null; isEditMode: boolean; onSelect: (id: string) => void; onCreate: () => void; onRename: (id: string, name: string) => void; onDelete: (id: string) => void; } /** * Reiterleiste über dem Dashboard-Raster (quick-260923-ad9, Task 3). * * Klick wechselt IMMER den Reiter, unabhängig vom Bearbeitungsmodus. * Umbenennen (an Ort und Stelle, Eingabetaste übernimmt, Escape verwirft) * und Löschen (mit Rückfrage) sind nur im Bearbeitungsmodus sichtbar; der * Löschen-Knopf fehlt zusätzlich beim letzten verbleibenden Reiter (D-10 — * der Server weist das ohnehin ab, die Oberfläche bietet es gar nicht erst * an). Das Ziehen zum Umsortieren kommt in Task 4 hinzu (D-05, keine neue * Abhängigkeit — Pointer-Ereignisse wie in `xframe-config-form.tsx`). */ export function DashboardTabs({ dashboards, activeDashboardId, isEditMode, onSelect, onCreate, onRename, onDelete, }: DashboardTabsProps) { const t = useTranslations('widgets'); const tCommon = useTranslations('common'); const [renamingId, setRenamingId] = useState(null); const [draftName, setDraftName] = useState(''); const [pendingDeleteId, setPendingDeleteId] = useState(null); const renameInputRef = useRef(null); // Fokus auf das Eingabefeld beim Wechsel in den Umbenennen-Zustand — ueber // einen Ref statt des autoFocus-Attributs (lint/a11y/noAutofocus), Muster // `widget-catalog-modal.tsx` (dialogRef.current?.focus()). useEffect(() => { if (renamingId) { renameInputRef.current?.focus(); renameInputRef.current?.select(); } }, [renamingId]); function startRename(tab: DashboardTab) { setRenamingId(tab.id); setDraftName(tab.name); } function commitRename() { const id = renamingId; const name = draftName.trim(); setRenamingId(null); if (id && name) { onRename(id, name); } } function cancelRename() { setRenamingId(null); } const pendingDeleteTab = dashboards.find((d) => d.id === pendingDeleteId) ?? null; return ( ); }