feat: Edit, Unlink, Delete actions on all project detail tabs

Every tab (tasks, notes, links, files, lists, decisions, meetings,
focus, contacts) now has consistent row actions: Edit, Unlink from
project, and Delete.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-06 14:06:13 +00:00
parent b73bd4fc06
commit bd87cdd0db
2 changed files with 153 additions and 15 deletions

View File

@@ -68,6 +68,12 @@
<span class="status-badge status-{{ t.status }}">{{ t.status|replace('_', ' ') }}</span>
<div class="row-actions">
<a href="/tasks/{{ t.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/tasks/{{ t.id }}/unlink" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/tasks/{{ t.id }}/delete" method="post" data-confirm="Delete this task?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
{% else %}
@@ -80,6 +86,15 @@
<div class="list-row">
<span class="row-title"><a href="/notes/{{ n.id }}">{{ n.title }}</a></span>
<span class="row-meta">{{ n.updated_at.strftime('%Y-%m-%d') if n.updated_at else '' }}</span>
<div class="row-actions">
<a href="/notes/{{ n.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/notes/{{ n.id }}/unlink" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/notes/{{ n.id }}/delete" method="post" data-confirm="Delete this note?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
{% else %}
<div class="empty-state"><div class="empty-state-text">No notes yet</div></div>
@@ -111,6 +126,14 @@
<div class="list-row">
<span class="row-title"><a href="/files/{{ f.id }}">{{ f.original_filename }}</a></span>
<span class="row-meta">{{ f.created_at.strftime('%Y-%m-%d') if f.created_at else '' }}</span>
<div class="row-actions">
<form action="/projects/{{ item.id }}/files/{{ f.id }}/unlink" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/files/{{ f.id }}/delete" method="post" data-confirm="Delete this file?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
{% else %}
<div class="empty-state"><div class="empty-state-text">No files attached to this project</div></div>
@@ -122,6 +145,15 @@
<div class="list-row">
<span class="row-title"><a href="/lists/{{ l.id }}">{{ l.name }}</a></span>
<span class="row-meta">{{ l.item_count }} items</span>
<div class="row-actions">
<a href="/lists/{{ l.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/lists/{{ l.id }}/unlink" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/lists/{{ l.id }}/delete" method="post" data-confirm="Delete this list?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
{% else %}
<div class="empty-state"><div class="empty-state-text">No lists linked to this project</div></div>
@@ -133,6 +165,15 @@
<div class="list-row">
<span class="row-title"><a href="/decisions/{{ d.id }}">{{ d.title }}</a></span>
<span class="status-badge status-{{ d.status }}">{{ d.status }}</span>
<div class="row-actions">
<a href="/decisions/{{ d.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/decisions/{{ d.id }}/unlink" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/decisions/{{ d.id }}/delete" method="post" data-confirm="Delete this decision?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
{% else %}
<div class="empty-state"><div class="empty-state-text">No decisions linked to this project</div></div>
@@ -160,8 +201,12 @@
<span class="row-meta">{{ m.meeting_date }}</span>
<span class="status-badge status-{{ m.status }}">{{ m.status }}</span>
<div class="row-actions">
<a href="/meetings/{{ m.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/meetings/{{ m.id }}/remove" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs" title="Remove">Remove</button>
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/meetings/{{ m.id }}/delete" method="post" data-confirm="Delete this meeting?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
@@ -172,11 +217,17 @@
{% elif tab == 'focus' %}
{% for f in tab_data %}
<div class="list-row">
<span class="row-title"><a href="/focus/{{ f.id }}/edit">{{ f.title }}</a></span>
<span class="row-title"><a href="/focus/{{ f.id }}">{{ f.title }}</a></span>
{% if f.domain_name %}<span class="row-tag" style="{% if f.domain_color %}border-color:{{ f.domain_color }};color:{{ f.domain_color }}{% endif %}">{{ f.domain_name }}</span>{% endif %}
<span class="row-meta">{{ f.created_at.strftime('%Y-%m-%d') if f.created_at else '' }}</span>
<div class="row-actions">
<a href="/focus/{{ f.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/focus/{{ f.id }}/unlink" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/projects/{{ item.id }}/focus/{{ f.id }}/delete" method="post" data-confirm="Delete this focus item?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>
{% else %}
@@ -211,8 +262,12 @@
{% if c.role %}<span class="row-tag">{{ c.role }}</span>{% endif %}
<span class="row-meta">{{ c.linked_at.strftime('%Y-%m-%d') if c.linked_at else '' }}</span>
<div class="row-actions">
<a href="/contacts/{{ c.id }}/edit" class="btn btn-ghost btn-xs">Edit</a>
<form action="/projects/{{ item.id }}/contacts/{{ c.id }}/remove" method="post" style="display:inline">
<button class="btn btn-ghost btn-xs" title="Remove">Remove</button>
<button class="btn btn-ghost btn-xs">Unlink</button>
</form>
<form action="/contacts/{{ c.id }}/delete" method="post" data-confirm="Delete this contact?" style="display:inline">
<button class="btn btn-ghost btn-xs" style="color:var(--red)">Delete</button>
</form>
</div>
</div>