feat(gui): Ordner-Ebene eines Projekts umbenennbar

Der erste Reiter hieß fest "Ordner" und trägt jetzt einen frei wählbaren
Namen. Er steht in der neuen Spalte projects.root_tab_name (NULL = "Ordner")
statt als Zeile in project_tabs: die Ordner-Ebene ist kein echter Reiter --
es gibt sie immer, sie hat keine eigene id und ist nicht löschbar. Eine
eigene Zeile hätte eine id gebraucht, die in project_pins.tab_id landen
müsste, womit die "0 = Ordner-Ebene"-Regel und damit der UNIQUE-Index
gefallen wären.

PATCH /api/projects/:id/tabs/0 fängt die 0 ab und schreibt ins Projekt;
leerer Name setzt auf "Ordner" zurück. Ebenen-Auswahl im Pin-Dialog und die
Liste bestehender Anheftungen zeigen den Namen mit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
schakal00783
2026-08-02 23:11:12 +02:00
co-authored by Claude Opus 5
parent 772385713e
commit d0e02eb976
5 changed files with 57 additions and 11 deletions
+7
View File
@@ -479,8 +479,15 @@ app.post('/api/projects/:id/tabs', wrap(async (req, res) => {
if (!name) return res.status(400).json({ error: 'name fehlt' });
res.json(await db.createProjectTab(+req.params.id, name));
}));
// tid 0 = die Ordner-Ebene. Die ist keine Zeile in project_tabs (es gibt sie
// immer, sie lässt sich nicht löschen), ihre Beschriftung hängt am Projekt.
// Leerer Name setzt sie auf die Vorgabe „Ordner" zurück.
app.patch('/api/projects/:id/tabs/:tid', wrap(async (req, res) => {
const name = String((req.body && req.body.name) || '').trim();
if (+req.params.tid === 0) {
const n = await db.renameProjectRoot(+req.params.id, name);
return res.json({ ok: true, id: 0, name: n });
}
if (!name) return res.status(400).json({ error: 'name fehlt' });
await db.renameProjectTab(+req.params.tid, name);
res.json({ ok: true, id: +req.params.tid, name });